Die Nachfrage nach intelligenten Recherchesystemen ist in den letzten Jahren stark gestiegen. Befördert wurde sie durch das Aufkommen großer Sprachmodelle (LLMs – Large Language Models), die eine Verarbeitung und Beantwortung natürlichsprachlicher Fragen ermöglichen. Die Technik RAG (Retrieval-Augmented Generation) hat sich dabei als ein sehr beliebter und wirkungsvoller Ansatz etabliert, um die klassische Informationssuche mit Hilfe generativer KI-Modelle zu verbessern. Oft wird aber nicht die richtige Antwort gefunden, obwohl sie in den indizierten Daten vorlag. Hier liefert der Einsatz eines Rerankers noch präzisere und zuverlässigere Antworten und stellt damit einen entscheidenden Hebel dar, um RAG-Systeme auf ein neues Qualitätsniveau zu heben.
In diesem Artikel zeige ich dir, wie RAG-Systeme durch das Einschalten eines Rerankers weiter verbessert werden können und wie dies die Qualität der generierten Anfragen signifikant verbessert. Und wenn du willst, entwickeln wir ein Python-Programm, das die drei Technologien LLM, RAG und Reranker integriert und die Unterschiede in den Antworten bei Deaktivierung sowie Aktivierung des Rerankers demonstriert. Dafür musst du nur am Ende des Artikels eine kleine Entscheidung treffen …
Was ist RAG?
RAG verbessert die Genauigkeit und Zuverlässigkeit großer Sprachmodelle. Der Fokus eines RAG-Systems ist immer das Zurverfügungstellen von externen Informationen, die nicht im LLM vorliegen. Die Quellen hierfür können Wissensdatenbanken oder Dokumentensammlungen sein.
Das mit diesem externen Wissen kombinierte und angereicherte Sprachmodell wird nun als neuer Kontext zur Generierung der Antworten genutzt. Somit ermöglicht die Integration eines RAG-Systems einen nahtlosen Informationsfluss zwischen parametrisiertem Wissen aus Sprachmodellen und nichtparametrisierten Daten aus externen Quellen.
Auf die Anfrage eines Benutzers hin durchläuft der RAG-Prozess die folgenden drei Schritte:
1. Retrieval
Die für die Anfrage relevanten Dokumente werden mithilfe einer Vektordatenbank oder Dokumentensammlung aus einer Wissensbasis abgerufen. Typischerweise basiert dies auf einer semantischen Ähnlichkeit.
2. Augmentation
Die abgerufenen Informationen werden mit dem bisherigen Gesprächsverlauf ergänzt. Dieser Ansatz eignet sich hervorragend für Use Cases wie Frage-Antwort-Systeme, Chatbots, technische Support-Systeme oder interne Wissensabfragen.
Kurze Unterbechung
Das ist dein Alltag?
Keine Sorge – Hilfe ist nah! Melde Dich unverbindlich bei uns und wir schauen uns gemeinsam an, ob und wie wir Dich unterstützen können.
3. Generation
Ein LLM nutzt die abgerufenen Dokumente als Kontext, um eine Antwort auf die Nutzerfrage zu generieren. Dabei verarbeitet es die erweiterte Eingabe und nutzt die externen Informationen, um die Genauigkeit und Vollständigkeit der generierten Antwort zu erhöhen.
Trotz der Beliebtheit und hohen Leistungsfähigkeit moderner RAG-Systeme funktionieren sie leider nicht in allen Kontexten besonders gut. So werden die relevantesten Dokumente nicht immer auf den vordersten Plätzen gelistet und auch Treffer generiert, die nicht wirklich zutreffend oder hilfreich sind.
Dies hat den einfachen Grund, dass eine semantische Nähe der Informationen nicht automatisch eine faktische Relevanz bedeuten. Zudem ist ein weiterer trivialer Grund dafür oftmals, dass einfach wirklich viele Dokumente zu einem Thema existieren, man hier aber leider ein schlechtes Embedding gewählt und die Daten schlecht extrahiert hat oder sie falsch gruppiert vorliegen. Anfragen des Benutzers können somit zwar zu nahen, aber zu dennoch falschen Ergebnissen führen.
Einen bedeutenden Fortschritt stellt GraphRAG dar, das RAG mit Wissensgraphen vereint.
Daniel hat sich mit dem Thema beschäftigt – welche Vorteile GraphRAG gegenüber normalen RAGs bietet, erfährst du in seinem Beitrag.
Reranker als Lösung
Zur Lösung des genannten Problems kommen Reranker ins Spiel. Bei ihnen handelt es sich um spezialisierte Modelle, die eine feinere Bewertung der abgerufenen Dokumente ermöglichen. Das Zusammenspiel von Frage und Dokument wird mit ihnen deutlich genauer analysiert als durch einen einfachen Ähnlichkeitsvergleich. Auf diese Weise können die Antworten auch auf bestimmte Domänen und Kontexte zugeschnitten werden und ohne Feinabstimmung und Nachschulung aktualisiert werden.
Re-Ranking und Two-Stage Retrieval
Der Einsatz eines Rerankers erweitert den ursprünglichen RAG-Abruf um einen weiteren Prozessschritt und führt eine Neubewertung (Re-Ranking) der abgerufenen Dokumente durch. So wird ein zweistufiger Abruf (Two-Stage Retrieval) realisiert:
Retrieval (Abruf)
Eine relativ große Menge potenziell relevanter Dokumente wird mithilfe einer schnellen und effizienten Abrufmethode angefordert. Dabei kann es sich um ein Vektorraummodell oder um eine schlüsselwortbasierte Suche handeln.
Re-Ranking (Neubewertung)
Im zweiten Schritt wird ein ausgefeilteres Re-Ranking-Modell verwendet, um die ursprünglich abgerufenen Dokumente basierend auf ihrer Relevanz für die Abfrage neu zu bewerten und zu ordnen. Somit werden die für den Benutzer am interessantesten Ergebnisse zurückgegeben, was letztendlich zu qualitativ hochwertigeren generierten Antworten aus dem Sprachmodell führt.
Das Re-Ranking-Modell ist speziell darauf trainiert, die Relevanz eines Dokuments für eine bestimmte Abfrage zu bewerten und basiert häufig auf einem neuronalen Netzwerk oder auf einer transformatorbasierten Architektur. Sie lernen dabei durch Training auf Datensätzen mit Fragen und passenden sowie unpassenden Antworten, welche Kombinationen eine hohe Relevanz aufweisen.
Diese fortschrittlichen Fähigkeiten zum Verständnis natürlicher Sprache nutzt der Reranker, um die semantischen Nuancen und kontextuellen Beziehungen zwischen der Abfrage und den Dokumenten zu erfassen, was zu einer erheblich genaueren und relevanteren Bewertung und Rangfolge der abgerufenen Dokumente führt.
Prozess des Re-Rankings
Beim Re-Ranking werden vom Reranker die folgenden vier Prozessschritte durchlaufen:
Eingabe (Input)
Die Nutzerfrage und die einzelnen Retrieval-Treffer werden als Datenpaare an das Reranker-Modell übergeben. Dabei handelt es sich beispielsweise um einen Satz der Top-20-Dokumente aus dem Retriever.
Bewertung (Scoring)
Der Reranker analysiert jedes Dokument hinsichtlich der Relevanz zur konkreten ursprünglichen Frage und berechnet einen Relevanzwert für jedes einzelne Datenpaar.
Sortierung (Ranking)
Die Dokumente werden anhand des Scores neu geordnet, sodass die relevantesten Dokumente ganz oben gelistet werden.
Output (Selection)
Lediglich die relevantesten Ergebnisse werden zurück an den Generator übergeben, der daraus eine präzise und fundierte Antwort erstellt. Hier kann die Menge beispielsweise auf die Top-5-Dokumente eingeschränkt werden.
Vorteile von Rerankern
Der größte Vorteil der Implementierung eines zweistufigen Abrufs im Kontext von RAG-Systemen mittels Rerankern ist eine höhere Relevanz der erhaltenen Ergebnisse. Da die generierten Antworten auf einem besseren Kontext basieren, werden irrelevante Dokumente weniger stark gewichtet oder ganz aussortiert. Diese stärkere Berücksichtigung der Kontextualität führt zu einer robusteren Qualität und Zuverlässigkeit der generierten Antworten, auch bei schwierigen oder komplexeren Anfragen.
Re-Ranking-Modelle sind außerdem modular einsetzbar und können somit leicht in bestehende RAG-Frameworks integriert werden. Daher können sie auch unabhängig von der ursprünglichen Abrufmethode ausgetauscht und aktualisiert werden. Entwickler*innen ermöglicht dies eine große Flexibilität und Anpassungsfähigkeit an die sich kontinuierlich ändernden Anforderungen des Systems.
Präzisere Antworten mit Substanz – mit intelligentem Re-Ranking und Two-Stage Retrieval
Die Integration eines RAG-Systems mit LLMs und Rerankern führt zu qualitativ hochwertigen Antworten, die durch eine signifikante Verbesserung der Genauigkeit, Vertrauenswürdigkeit und Anwendbarkeit der generierten Antworten geprägt sind. Dies erweist sich insbesondere bei komplexen oder kontextintensiven Anfragen als besonders wertvoll.
LLMs finden zunehmend Anwendung bei wissensbasierten Aufgaben und RAG hat sich dabei als eine äußerst leistungsfähige Technik etabliert, um deren Fähigkeiten weiter zu optimieren. Mit der zunehmenden Integration von RAG-Architekturen in Suchmaschinen, Assistenzsystemen und Unternehmensanwendungen werden Reranker in Zukunft eine noch zentralere Rolle spielen.
Möglicherweise stellen Reranker sogar eine Schlüsseltechnologie dar für die Entwicklung der nächsten Generation einer wirklich intelligenten und wissensbasierten KI? 🔑
HinweisPraxis!
An dieser Stelle könnte ich mich jetzt verabschieden … oder dir noch ein ein praktisches Beispiel mitgeben – mit Code und allen Informationen, die du benötigst. Dafür musst du nur den Schalter auf „Praxis“ umlegen :)
Ein kleiner Python-Workshop: LLM + RAG + Reranker Tech Stack
Wir wollen ein kleines Programm in Python erstellen, indem ein RAG-System mit einem LLM kommuniziert und dabei Anfragen mit und ohne Reranker verarbeitet und beantwortet.
Wir wollen das am häufigsten eingesetzte Retrieval-Framework LangChain als RAG-System einsetzen. Auch bei der Auswahl unseres Großen Sprachmodells entscheiden wir uns für das gebräuchlichste LLM und setzen auf OpenAI. Den Reranker im RAG-System realisieren wir mit der Technologie Cohere Rerank.
Somit kommen für die drei genannten Komponenten unseres AI-Tech Stacks die folgende Technologien zum Einsatz:
LLM
RAG-System
RAG-Reranker
OpenAI
LangChain
Cohere Rerank
Python installieren
Die aktuelle Python Runtime Version 3.13.0 kann von der offiziellen Python-Seite heruntergeladen und installiert werden. Um sicherzustellen, dass Python erfolgreich installiert wurde, kann ein Check nach der installierten Version durchgeführt werden:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
% python3 --version
3.13.0
% python3 --version
3.13.0
% python3 --version
3.13.0
Mit der Installation von Python wurde auch der Python Package Installer PIP installiert. Auch dessen Vorhandensein kann mir einem Check nach der Versionsnummer überprüft werden:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
% pip --version
pip 25.1.1 from /Users/..
% pip --version
pip 25.1.1 from /Users/..
% pip --version
pip 25.1.1 from /Users/..
OpenAI Key erstellen und testen
Als LLM nutzen wir OpenAI. Hierfür benötigen wir einen OpenAI API Key, den wir auf der Webseite von OpenAI OpenAI Platform kostenfrei erstellen können.
Den OpenAI Key halten wir in einem neuen Python Skript reranker.py als Variable fest und setzen ihn als Umgebungsvariable:
Wir können auch direkt testen, ob mit diesem OpenAI Key eine Authentifizierung beim OpenAI-Server erfolgreich durchgeführt werden kann, indem wir unser Skript folgendermaßen erweitern:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# check OpenAI key validity
import openai
client = openai.OpenAI(api_key=OPEN_AI_KEY)
try:
models = client.models.list()
print("OpenAI Key is valid")
except Exception as e:
print("OpenAI Key is NOT valid")
print(e)
# check OpenAI key validity
import openai
client = openai.OpenAI(api_key=OPEN_AI_KEY)
try:
models = client.models.list()
print("OpenAI Key is valid")
except Exception as e:
print("OpenAI Key is NOT valid")
print(e)
# check OpenAI key validity
import openai
client = openai.OpenAI(api_key=OPEN_AI_KEY)
try:
models = client.models.list()
print("OpenAI Key is valid")
except Exception as e:
print("OpenAI Key is NOT valid")
print(e)
Mit einem Aufruf des Skripts sollten™️ wir eine positive Rückmeldung erhalten:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
% python3 reranker.py
OpenAI Key is valid
% python3 reranker.py
OpenAI Key is valid
% python3 reranker.py
OpenAI Key is valid
Jetzt steht uns OpenAI als LLM in unserem Skript zur Verfügung.
Beispieldokument anlegen
Wir legen nun relativ zu unserem Skript die Textdatei data/paul_graham_essay.txt an. Die Datei beinhaltet einen aus der Sicht des Autors geschriebenen Aufsatz über seine berufliche Lebensgeschichte. Dieses einzelne Dokument repräsentiert die externe Wissenssammlung, die für unsere KI-Suche verwendet werden soll.
Die folgende Frage soll mit Hilfe unseres Python-Skripts maschinell und mittels KI beantwortet werden:
What did Sam Altman do in this essay?
Python Libs für LangChain installieren und importieren
Die für unser RAG-System LangChain erforderlichen Python Libs installieren wir durch Aufrufe des Python Package Installers. Diese erfolgen auf der Konsole:
In unserem Skript können wir nun die benötigten LangChain-Klassen mit dem folgenden Code importieren:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from langchain_community.document_loaders import TextLoader, DirectoryLoader
from langchain_community.document_loaders import TextLoader, DirectoryLoader
from langchain_community.document_loaders import TextLoader, DirectoryLoader
Jetzt können wir LangChain als Basis für unser RAG-System in unserem Skript einsetzen. OpenAI bleibt dabei als verwendetes LLM bestehen.
Beispieldokument einlesen und Suchindex erstellen
Wir können die LangChain Lib Klassen jetzt nutzen um damit alle Textdateien im Verzeichnis data einzulesen und daraus die LangChain OpenAI Embeddings und die VektorStore-Datenbank zu erstellen, die analog zum OpenAI-Suchindex funktioniert und anschließend für schnelle Abfragen verwendet werden kann:
from langchain_community.vectorstores import Chroma
from langchain_openai.embeddings import OpenAIEmbeddings
embedding = OpenAIEmbeddings()
print("create embeddings OK")
# create vector store
vectordb = Chroma.from_documents(
documents=splits,
embedding=embedding,
persist_directory='.vstore/chroma/'
)
print("create [" + str(vectordb._collection.count()) + "] vector store DB entries OK")
# load documents
documents = DirectoryLoader("./data/", glob="**/*.txt", loader_cls=TextLoader).load()
print("load [" + str(len(documents)) + "] documents OK")
# split documents using recursive character text splitter
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 1500, chunk_overlap = 150)
splits = text_splitter.split_documents(documents)
print("split documents OK")
# create embeddings
from langchain_community.vectorstores import Chroma
from langchain_openai.embeddings import OpenAIEmbeddings
embedding = OpenAIEmbeddings()
print("create embeddings OK")
# create vector store
vectordb = Chroma.from_documents(
documents=splits,
embedding=embedding,
persist_directory='.vstore/chroma/'
)
print("create [" + str(vectordb._collection.count()) + "] vector store DB entries OK")
# load documents
documents = DirectoryLoader("./data/", glob="**/*.txt", loader_cls=TextLoader).load()
print("load [" + str(len(documents)) + "] documents OK")
# split documents using recursive character text splitter
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 1500, chunk_overlap = 150)
splits = text_splitter.split_documents(documents)
print("split documents OK")
# create embeddings
from langchain_community.vectorstores import Chroma
from langchain_openai.embeddings import OpenAIEmbeddings
embedding = OpenAIEmbeddings()
print("create embeddings OK")
# create vector store
vectordb = Chroma.from_documents(
documents=splits,
embedding=embedding,
persist_directory='.vstore/chroma/'
)
print("create [" + str(vectordb._collection.count()) + "] vector store DB entries OK")
Nun können wir das Zusammenspiel unseres RAG-Systems mit dem LLM testen und vorerst die Top-Antwort ohne den Einsatz eines Rerankers ausgeben:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# launch query
docs = vectordb.similarity_search("What did Sam Altman do in this essay?", k=10)
print("best response (no reranker):")
print(docs[0].page_content)
# launch query
docs = vectordb.similarity_search("What did Sam Altman do in this essay?", k=10)
print("best response (no reranker):")
print(docs[0].page_content)
# launch query
docs = vectordb.similarity_search("What did Sam Altman do in this essay?", k=10)
print("best response (no reranker):")
print(docs[0].page_content)
Wir erhalten hier eine korrekte Antwort, deren Treffer allerdings lediglich auf semantischen Prinzipien basiert und die als komplette Textpassage in exakt dieser Form dem ursprünglichen Aufsatz entnommen wurde:
I asked Jessica if she wanted to be president, but she didn’t, so we decided we’d try to recruit Sam Altman. We talked to Robert and Trevor and we agreed to make it a complete changing of the guard. Up till that point YC had been controlled by the original LLC we four had started. But we wanted YC to last for a long time, and to do that it couldn’t be controlled by the founders. So if Sam said yes, we’d let him reorganize YC. Robert and I would retire, and Jessica and Trevor would become ordinary partners.
Bitte beachte, dass die Antworten vom als Web Service genutzten LLM OpenAI nicht idempotent sind.
Abfrage mit Cohere Rerank
Wir wollen nun die gleiche Anfrage unter Einsatz des Rerankers Cohere Rerank durchführen. Hierfür müssen die folgenden beiden Python Libs unter Verwendung des Python Package Installers auf der Konsole installiert werden:
Zudem benötigen wir einen Cohere API Key den wir kostenfrei auf der Cohere-Webseite (Cohere API Keys) erstellen können.
Mit den Klassen aus der Cohere Lib können wir nun den RAG-Index aus unserem eingelesenen Textdokument erstellen und unsere Anfrage an das RAG-System senden. Wir erstellen eine Instanz des Cohere Rerankers und binden den Reranker somit in den Prozess des Suchrankings mit ein.
Den Inhalt der besten Antwort unter Einsatz des Reranker lassen wir uns ausgeben:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from langchain.retrievers import ContextualCompressionRetriever
from langchain_cohere import CohereEmbeddings, ChatCohere, CohereRerank, CohereRagRetriever
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
docs = rag.get_relevant_documents("What did Sam Altman do in this essay?", documents=compressed_docs)
print("create Cohere RAG instance OK")
# print final generation
answer = docs[-1].page_content
print("best response (with Cohere reranker):")
print(answer)
from langchain.retrievers import ContextualCompressionRetriever
from langchain_cohere import CohereEmbeddings, ChatCohere, CohereRerank, CohereRagRetriever
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
# create Cohere LLM
from pydantic import SecretStr
llm = ChatCohere(cohere_api_key=COHERE_API_KEY, model="command-a-03-2025")
print("create Cohere LLM OK")
COHERE_API_KEY = SecretStr("your-Cohere-API-key")
# create embedding model
embeddings = CohereEmbeddings(
cohere_api_key=COHERE_API_KEY,
model="embed-english-light-v3.0"
)
print("create embedding model OK")
# load documents
documents = DirectoryLoader("./data/", glob="**/*.txt", loader_cls=TextLoader).load()
print("load [" + str(len(documents)) + "] documents OK")
# split documents
text_splitter = CharacterTextSplitter(chunk_size = 750, chunk_overlap = 150, separator="\n")
splits = text_splitter.split_documents(documents)
print("split text files OK")
# create vector store from documents
db = Chroma.from_documents(splits, embeddings)
print("create vecor store DB OK")
# create Cohere Reranker
reranker = CohereRerank(
cohere_api_key=COHERE_API_KEY, model="rerank-english-v3.0"
)
compression_retriever = ContextualCompressionRetriever(base_compressor=reranker, base_retriever=db.as_retriever())
compressed_docs = compression_retriever.get_relevant_documents(QUESTION)
print("create Cohere Reranker OK' ", end='')
# create Cohere RAG
rag = CohereRagRetriever(llm=llm, connectors=[])
docs = rag.get_relevant_documents("What did Sam Altman do in this essay?", documents=compressed_docs)
print("create Cohere RAG instance OK")
# print final generation
answer = docs[-1].page_content
print("best response (with Cohere reranker):")
print(answer)
from langchain.retrievers import ContextualCompressionRetriever
from langchain_cohere import CohereEmbeddings, ChatCohere, CohereRerank, CohereRagRetriever
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
# create Cohere LLM
from pydantic import SecretStr
llm = ChatCohere(cohere_api_key=COHERE_API_KEY, model="command-a-03-2025")
print("create Cohere LLM OK")
COHERE_API_KEY = SecretStr("your-Cohere-API-key")
# create embedding model
embeddings = CohereEmbeddings(
cohere_api_key=COHERE_API_KEY,
model="embed-english-light-v3.0"
)
print("create embedding model OK")
# load documents
documents = DirectoryLoader("./data/", glob="**/*.txt", loader_cls=TextLoader).load()
print("load [" + str(len(documents)) + "] documents OK")
# split documents
text_splitter = CharacterTextSplitter(chunk_size = 750, chunk_overlap = 150, separator="\n")
splits = text_splitter.split_documents(documents)
print("split text files OK")
# create vector store from documents
db = Chroma.from_documents(splits, embeddings)
print("create vecor store DB OK")
# create Cohere Reranker
reranker = CohereRerank(
cohere_api_key=COHERE_API_KEY, model="rerank-english-v3.0"
)
compression_retriever = ContextualCompressionRetriever(base_compressor=reranker, base_retriever=db.as_retriever())
compressed_docs = compression_retriever.get_relevant_documents(QUESTION)
print("create Cohere Reranker OK' ", end='')
# create Cohere RAG
rag = CohereRagRetriever(llm=llm, connectors=[])
docs = rag.get_relevant_documents("What did Sam Altman do in this essay?", documents=compressed_docs)
print("create Cohere RAG instance OK")
# print final generation
answer = docs[-1].page_content
print("best response (with Cohere reranker):")
print(answer)
Jetzt ist unsere Antwort deutlich qualifizierter und mehr kontextbezogen. Zudem hat die KI erkennbar selbstständig paraphrasiert:
Sam Altman became the second president of YC. He initially said no to the offer, as he wanted to start a green energy startup. However, he agreed in October 2013 and took over starting with the winter 2014 batch.
Nun haben wir Cohere Rerank als Reranker in unser RAG-System eingeführt und damit die Qualität der Suchergebnisse auf natürlichsprachliche Fragen deutlich verbessert. Das Codebeispiel ist übrigens vollständig auf GitHub verfügbar.
Und damit sind wir jetzt aber auch wirklich am Ende angekommen. Danke für deine Aufmerksamkeit – und wenn du Fragen haben solltest, dann hinterlasse sie gerne in den Kommentaren.
Das ist dein Alltag?
Keine Sorge – Hilfe ist nah! Melde Dich unverbindlich bei uns und wir schauen uns gemeinsam an, ob und wie wir Dich unterstützen können.
15 Minuten knallharter Fokus!
Der #1-Killer für Deine AI-Projekte!
Nimm Dir 15 Minuten Zeit und wir erklären dir:
Warum fehlende Daten der eigentliche Killer für Deine AI-Projekte sind.
Was Dein Ausweg auf der Silo-Falle ist.
Konkret: Lösungsansätze aus der bei uns gelebten Praxis!
Christopher ist als Senior Developer bei der Mayflower GmbH tätig und entwickelt dort seit über 10 Jahren hochwertige Web-, Desktop- und Mobile-Applikationen, unter anderem mit Java, Swift, TypeScript, C# und PHP.
Verpasse keinen Artikel mehr und lass Dich von uns benachrichtigen, sobald es etwas Neues im Blog gibt.
Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.
Schreibe einen Kommentar