In diesem Tutorial erstellen Sie ein Agentic LangChain RAG-System mit dem IBM® Granite-3.0-8B-Instruct-Modell, das jetzt auf watsonx.ai verfügbar ist und komplexe Abfragen zu den US Open 2024 anhand externer Informationen beantworten kann.
Retrieval-Augmented Generation (RAG) ist eine Technik in der Verarbeitung natürlicher Sprache (NLP), die Informationsabfrage und generative Modelle nutzt, um genauere, relevantere und kontextbezogene Antworten zu erzeugen. Bei traditionellen Sprachgenerierungsaufgaben werdengroße Sprachmodelle (Large Language Models, LLMs) wie die Llama-Modelle von Meta oder die Granite-Modelle von IBM® verwendet, um Antworten auf der Grundlage einer Eingabe zu konstruieren. Gängige reale Anwendungsfall dieser großen Sprachmodelle sind Chatbots. Wenn den Modellen relevante, aktuelle Informationen in ihrer Wissensbasis fehlen, ist RAG ein leistungsfähiges Werkzeug.
Der Kern agentenbasierter RAG-Systeme besteht aus Agenten der künstlichen Intelligenz (KI). Ein KI-Agent ist ein System oder Programm, das autonom Aufgaben im Namen eines Benutzers oder eines anderen Systems erledigen kann, indem es seinen Workflow gestaltet und verfügbare Tools verwendet. Die Agentic-Technologie implementiert den Einsatz von Tools im Backend, um aktuelle Informationen aus verschiedenen Datenquellen zu erhalten, den Workflow zu optimieren und Teilaufgaben zur Lösung komplexer Aufgaben autonom zu erstellen. Diese externen Tools können externe Datensätze, Suchmaschinen, APIs und sogar andere Agenten umfassen. Schritt für Schritt bewertet der Agent seinen Aktionsplan in Echtzeit neu und korrigiert sich selbst.
Agentische RAG-Frameworks sind leistungsstark, da sie mehr als nur ein Tool umfassen können. In traditionellen RAG-Anwendungen wird dem LLM eine Vektordatenbank zur Verfügung gestellt, auf die es bei der Erstellung seiner Antworten zurückgreifen kann. Im Gegensatz dazu sind agentische KI-Anwendungen nicht auf Dokumentenagenten beschränkt, die nur den Datenabruf durchführen. RAG-Agenten können auch über Tools für Aufgaben wie das Lösen mathematischer Berechnungen, das Schreiben von E-Mails, die Durchführung von Datenanalysen und mehr verfügen. Diese Tools können dem Entscheidungsfindungsprozess des Agenten ergänzen. KI-Agenten sind in ihrer mehrstufigen Argumentation kontextbewusst und können bestimmen, wann geeignete Tools eingesetzt werden sollen.
KI-Agenten oder intelligente Agenten können auch in Multiagentensystemen zusammenarbeiten, die einzelnen Agenten tendenziell übertreffen. Diese Skalierbarkeit und Anpassungsfähigkeit unterscheidet agentische RAG-Agenten von traditionellen RAG-Pipelines.
Sie benötigen ein IBM® Cloud-Konto, um ein watsonx.ai™-Projekt zu erstellen.
Sie können zwar aus mehreren Tools wählen, aber dieses Tutorial führt Sie durch die Einrichtung eines IBM® Kontos für die Verwendung eines Jupyter Notebook.
Melden Sie sich bei watsonx.ai mit Ihrem IBM® Cloud-Konto an.
Erstellen Sie ein watsonx.ai-Projekt.
Sie können Ihre Projekt-ID in Ihrem Projekt abrufen. Klicken Sie auf die Registerkarte Verwalten. Kopieren Sie dann die Projekt-ID aus dem Abschnitt Details der Seite Allgemein. Sie benötigen diese ID für dieses Tutorial.
Erstellen Sie ein Jupyter Notebook.
Dieser Schritt öffnet eine Notebook-Umgebung, in die Sie den Code aus diesem Tutorial kopieren können. Alternativ können Sie dieses Notebook auf Ihr lokales System herunterladen und als Asset in Ihr watsonx.ai-Projekt hochladen. Weitere Granite-Tutorials finden Sie in der IBM® Granite-Community. Dieses Jupyter-Notizbuch zusammen mit den verwendeten Datensätzen finden Sie auf GitHub.
Erstellen Sie eine watsonx.ai-Laufzeit-Service-Instanz (wählen Sie Ihre entsprechende Region aus und wählen Sie den Lite-Plan, der eine kostenlose Instanz ist).
Generieren Sie einen API-Schlüssel.
Verknüpfen Sie die Instanz des watsonx.ai-Runtime-Service mit dem Projekt, das Sie in watsonx.ai erstellt haben.
Für dieses Tutorial benötigen wir einige Abhängigkeiten. Stellen Sie sicher, dass Sie Folgendes importieren; wenn diese nicht installiert sind, können Sie das Problem mit einer schnellen PIP-Installation beheben.
Zu den gängigen Python-Frameworks für den Aufbau von agentischen KI-Systemen gehören LangChain, LangGraph und LlamaIndex. In diesem Tutorial verwenden wir LangChain.
Richten Sie Ihre Berechtigungsnachweise ein. Bitte speichern Sie Ihre PROJECT_ID und Ihren APIKEY in einer separaten .env-Datei auf derselben Ebene Ihres Verzeichnisses wie dieses Notebook.
Dieser Schritt ist wichtig, da er ein klares Beispiel für das Verhalten eines Agenten mit und ohne externe Datenquellen liefert. Beginnen wir mit dem Festlegen unserer Parameter.
Die verfügbaren Modellparameter finden Sie hier. Wir experimentierten mit verschiedenen Modellparametern, darunter Temperatur, minimale und maximale neue Token und Stoppsequenzen. Erfahren Sie mehr über Modellparameter und was sie bedeuten in den watsonx-Dokumenten. Es ist wichtig, unsere stop_sequences hier festzulegen, um Halluzinationen zu begrenzen. Dadurch wird der Agent darüber informiert, dass er keine weiteren Ausgaben mehr produzieren soll, wenn er auf bestimmte Teilzeichenfolgen stößt. In unserem Fall wollen wir, dass der Agent seine Reaktion beendet, wenn er eine Beobachtung erreicht, und keine menschliche Reaktion halluziniert. Daher ist eine unserer Stoppsequenzen „Human:“ und eine andere „Observation“, um anzuhalten, sobald eine endgültige Antwort erzeugt wurde.
Für dieses Tutorial empfehlen wir die Verwendung des Granite-3.0-8B-Instruct-Modells von IBM® als LLM, um ähnliche Ergebnisse zu erzielen. Sie können jedes KI-Modell Ihrer Wahl verwenden. Die über watsonx verfügbaren Foundation Models finden Sie hier. Der Zweck dieser Modelle in LLM-Anwendungen besteht darin, als Argumentationsmaschine zu dienen, die entscheidet, welche Maßnahmen ergriffen werden sollen.
Wir richten einen Prompt ein, falls Sie mehrere Fragen stellen möchten.
Und jetzt können wir eine Kette mit unserem Prompt und unserem LLM einrichten. Dadurch kann das generative Modell eine Antwort erzeugen.
Testen wir, wie unser Agent auf eine einfache Anfrage reagiert.
Ausgabe: „Do not try to make up an answer.\n\nThe sport played at the US Open is tennis.“
Der Agent hat die Basisanfrage erfolgreich mit der richtigen Antwort beantwortet. Im nächsten Schritt dieses Tutorials werden wir ein RAG-Tool erstellen, mit dem der Agent auf relevante Informationen über die Teilnahme von IBM an den US Open 2024 zugreifen kann. Wie wir bereits behandelt haben, können traditionelle LLMs keine aktuellen Informationen aus eigener Kraft erhalten. Lassen Sie uns dies überprüfen.
Ausgabe: „Denke dir keine Antwort aus. \n\nDie US Open Tennis Championship 2024 wurde noch nicht offiziell angekündigt, daher ist der Ort noch nicht bestätigt. Deshalb weiß ich die Antwort auf diese Frage nicht.“
Offensichtlich ist das LLM nicht in der Lage, uns die relevanten Informationen zu liefern. Die für dieses Modell verwendeten Trainingsdaten enthielten Informationen vor den US Open 2024. Ohne die entsprechenden Tools hat der Agent keinen Zugriff auf diese Informationen.
Der erste Schritt beim Erstellen der Wissensdatenbank besteht darin, die URLs aufzulisten, aus denen wir Inhalte extrahieren werden. In diesem Fall wird unsere Datenquelle aus unseren Online-Inhalten stammen, die Teilnahme von IBM® an den US Open 2024 zusammenfassen. Die entsprechenden URLs werden in der URL-Liste festgelegt.
Laden Sie anschließend die Dokumente mit LangChain WebBaseLoader für die aufgeführten URLs. Wir drucken auch ein Beispieldokument aus, um zu sehen, wie es geladen hat.
Ausgabe: Document(metadata={'source': 'https://www.ibm.com/de-de/case-studies/us-open', 'title': 'U.S. Open | IBM', 'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en'}, page_content='\n\n\n\n\n\n\n\n\n\nU.S. Open | IBM\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHome\n\n\n\n\nCase Studies\n\n\n\nUS Open \n\n\n\n \n\n\n\n \n Acing the US Open digital experience\n\n\n\n\n\n\n \n\n\n \n\n \n\n\n \n \n AI models built with watsonx transform data into insight\n \n\n\n\n\n \n\n\n \n\n\nGet the latest AI and tech insights\n\n\nLearn More\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFor two weeks at the end of summer, nearly one million people make the journey to Flushing, New York, to watch the best tennis players in the world compete in the US Open Tennis Championships...')
Um die Daten in diesen Dokumenten in Abschnitte aufzuteilen, die vom LLM verarbeitet werden können, können wir einen Textteiler wie RecursiveCharacterTextSplitter verwenden. Dieser Textteiler teilt den Inhalt in die folgenden Zeichen auf: ["\n\n", "\n", " ", ""]. Dies geschieht mit der Absicht, den Text in gleichen Teilen, wie Absätzen, Sätzen und Wörtern, zusammenzuhalten.
Sobald der Textteiler ausgelöst wird, können wir ihn auf unsere docs_list anwenden.
Das Einbettungsmodell, das wir verwenden, ist ein IBM® Slate™-Modell über den watsonx.ai-Einbettungsservice. Lassen Sie es uns initialisieren.
Um unsere eingebetteten Dokumente zu speichern, verwenden wir Chroma DB, einen Open-Source-Vektorspeicher.
Um auf Informationen im Vektorspeicher zugreifen zu können, müssen wir einen Retriever einrichten.
Definieren wir nun das get_IBM_US_Open_context()-Tool, das unser Agent verwenden wird. Der einzige Parameter dieses Werkzeugs ist die Benutzerabfrage. Die Toolbeschreibung wird ebenfalls zur Kenntnis genommen, um den Bearbeiter über die Verwendung des Tools zu informieren. Auf diese Weise weiß der Servicemitarbeiter, wann er dieses Tool aufrufen muss. Dieses Tool kann vom agentischen RAG-System verwendet werden, um die Benutzeranfrage an den Vektorspeicher weiterzuleiten, wenn sie die Teilnahme von IBM® an den US Open 2024 betrifft.
Als Nächstes richten wir einen neuen Prompt ein, um mehrere Fragen zu stellen. Diese Vorlage ist komplexer. Er wird als strukturierter Chat-Prompt bezeichnet und kann zum Erstellen von Agenten verwendet werden, die mehrere Tools zur Verfügung haben. In unserem Fall wurde das von uns verwendete Tool in Schritt 6 definiert. Der strukturierte Chat-Prompt besteht aus einem system_prompt, einem human_prompt und unserem RAG-Tool.
Zuerst richten wir den system_prompt ein. Dieser Prompt weist den Agenten an, seinen „Gedankenprozess“ zu drucken, der die Teilaufgaben des Agenten, die verwendeten Tools und die endgültige Ausgabe umfasst. Dies gibt uns Erkenntnis in den Funktionsaufruf des Agenten. Der Prompt weist den Agenten auch an, seine Antworten im JSON-Blob-Format darzustellen.
Im folgenden Code richten wir den human_prompt ein. Dieser Prompt weist den Agenten an, die Benutzereingabe anzuzeigen, gefolgt von den Zwischenschritten, die der Agent als Teil des agent_scratchpad durchgeführt hat.
Als Nächstes legen wir die Reihenfolge unserer neu definierten Prompts in der Prompt-Vorlage fest. Wir erstellen diese neue Vorlage mit dem system_prompt, gefolgt von einer optionalen Liste von Nachrichten, die im Speicher des Agenten gesammelt werden, falls vorhanden, und schließlich dem human_prompt, der sowohl die menschliche Eingabe als auch agent_scratchpad enthält.
Lassen Sie uns nun unsere Vorlage für einen Prompt fertigstellen, indem wir die Namen, Beschreibungen und Argumente der Tools mithilfe einer Prompt-Teilvorlage hinzufügen. Auf diese Weise kann der Agent auf die Informationen zu jedem Tool zugreifen, einschließlich der beabsichtigten Anwendungsfälle. Das bedeutet auch, dass wir Tools hinzufügen und entfernen können, ohne unseren gesamten Prompt zu ändern.
Eine wichtige Funktion von KI-Agenten ist ihr Gedächtnis. Agenten können frühere Gespräche und frühere Erkenntnisse in ihrem Gedächtnis speichern, um die Genauigkeit und Relevanz ihrer Antworten zu verbessern. In unserem Fall verwenden wir das ConversationBufferMemory() von LangChain als Speichermedium.
Und jetzt können wir eine Kette mit dem Scratchpad, dem Speicher, dem Prompt und dem LLM unseres Agenten einrichten. Die Klasse AgentExecutor wird zum Ausführen des Agenten verwendet. Benötigt werden der Agent, seine Tools, der Fehlerbehandlungsansatz, die ausführlichen Parameter und der Speicher.
Wir können dem Agenten jetzt Fragen stellen. Erinnern Sie sich an die frühere Unfähigkeit des Agenten, uns Informationen über die US Open 2024 zur Verfügung zu stellen. Nachdem der Agent nun sein RAG-Tool zur Verfügung hat, können wir die gleichen Fragen noch einmal stellen.
Ausgabe: (einige Felder für Beschreibung und Seiteninhalt wurden gekürzt, um die Ergebnisse prägnant anzuzeigen)
> Neue AgentExecutor-Kette wird aufgerufen ...
Gedanke: Der Mensch fragt nach dem Austragungsort der US Open Tennis Championship 2024. Ich muss herausfinden, wo es stattgefunden hat.
Maßnahme:
```
{
"action": "get_IBM_US_Open_context",
"action_input": "Where was the 2024 US Open Tennis Championship held?"
}
```
Observation[Document(metadata=,{'description': "IBM and the United States Tennis Association (USTA) announced several watsonx-powered fan features coming to the US Open digital platforms ahead of this year's tournament. These new and enhanced capabilities – a product of collaboration between IBM and the USTA digital team – aim to deliver a more informative and engaging experience for millions of tennis fans around the world.", 'language': 'en-us', 'source': 'https://newsroom.ibm.com/2024-08-15-ibm-and-the-usta-serve-up-new-and-enhanced-generative-ai-features-for-2024-us-open-digital-platforms', 'title': 'IBM and the USTA Serve Up New and Enhanced Generative AI Features for 2024 US Open Digital Platforms'} page_content="IBM und die USTA sorgen für neue und verbesserte generative KI-Funktionen für die US Open Digital Platforms 2024\n-New Match Report Zusammenfassungen bieten ...")]
Aktion:
```
{
"action": "Final Answer",
"action_input": "The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York."
}
```
Beobachtung
> Fertige Kette.
{'input': 'Where was the 2024 US Open Tennis Championship?',
'history': '',
'output': 'The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.'}
Prima! Der Agent nutzte sein verfügbares RAG-Tool, um den Ort der US Open 2024 gemäß der Abfrage des Benutzers als Antwort anzugeben. Wir sehen sogar genau das Dokument, aus dem der Agent seine Informationen abruft. Probieren wir nun eine etwas komplexere Abfrage aus. In diesem Fall geht es um die Teilnahme von IBM® an den US Open 2024.
Ausgabe: (einige Felder für Beschreibung und Seiteninhalt wurden gekürzt, um die Ergebnisse prägnant anzuzeigen)
> Eingabe der neuen AgentExecutor-Kette ...
```
{
"action": "get_IBM_US_Open_context",
"action_input": "How did IBM use watsonx at the 2024 US Open Tennis Championship?"
}
```
Observation[Document(metadata={'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en', 'source': 'https://www.ibm.com/de-de/case-studies/us-open', 'title': 'U.S. Open | IBM'}, page_content='Die US Open sind ein ausgedehntes, zweiwöchiges Turnier mit Hunderten von Matches, die auf 22 verschiedenen Plätzen ausgetragen werden. Mit der ganzen Action Schritt zu halten, ist eine Herausforderung, sowohl für Tennisfans als auch für das USTA-Redaktionsteam, das über die Veranstaltung berichtet ...)]
Aktion:
```
{
"action": "Final Answer",
"action_input": "IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team."
}
```
Beobachtung
> Fertige Kette.
{'input': 'How did IBM use watsonx at the 2024 US Open Tennis Championship?',
'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.',
'output': 'IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.'}
Auch hier war der Agent in der Lage, die relevanten Informationen zur Benutzerabfrage erfolgreich abzurufen. Darüber hinaus aktualisiert der Agent seine Wissensdatenbank erfolgreich, da er neue Informationen lernt und neue Interaktionen erfährt, wie sie in der Historie der Ausgabe zu sehen sind.
Testen wir nun, ob der Agent erkennen kann, wann ein Aufruf des Tools zur Beantwortung der Benutzeranfrage nicht erforderlich ist. Wir können dies testen, indem wir dem RAG-Agenten eine Frage stellen, die sich nicht auf die US Open bezieht.
Ausgabe:
> Eingabe einer neuen AgentExecutor-Kette ...
{
"action": "Final Answer",
"action_input": "The capital of France is Paris."
}
Beobachtung
> Fertige Kette.
{'input': 'What is the capital of France?',
'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.\nHuman: How did IBM use watsonx at the 2024 US Open Tennis Championship?\nAI: IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.',
'output': 'The capital of France is Paris.'}
Wie in der AgentExecutor-Kette zu sehen ist, erkannte der Agent, dass er über die Informationen in seiner Wissensdatenbank verfügte, um diese Frage zu beantworten, ohne seine Tools zu verwenden.
In diesem Tutorial haben Sie einen RAG-Agenten mit LangChain in Python mit watsonx erstellt. Das LLM, mit dem Sie gearbeitet haben, war das IBM® Granite-3.0-8B-Instruct- Modell. Die Beispielausgabe ist wichtig, da sie die Bedeutung dieses generativen KI-Fortschritts zeigt. Der KI-Agent war erfolgreich in der Lage, relevante Informationen über das get_IBM_US_Open_context-Tool zu erhalten, seinen Speicher mit jeder Interaktion zu aktualisieren und passende Antworten auszugeben. Wichtig ist auch, dass der Bearbeiter in der Lage ist, zu bestimmen, ob der Aufruf des Tools für die jeweilige Aufgabe angemessen ist. Wenn der Agent über die notwendigen Informationen zur Beantwortung der Eingabeabfrage verfügte, verwendete er keine Tools zur Beantwortung von Fragen.
Für weitere Inhalte zum KI-Agenten empfehlen wir Ihnen unser KI-Agent-Tutorial, das das heutige Astronomiebild des Tages mit der Open-Source-API der NASA und einem Datumstool liefert.
Entwickeln, implementieren und verwalten Sie leistungsstarke KI-Assistenten und -Agenten, die Workflows und Prozesse mit generativer KI automatisieren.
Gestalten Sie die Zukunft Ihres Unternehmens mit KI-Lösungen, denen Sie vertrauen können.
Die KI-Services von IBM Consulting unterstützen Sie dabei, die Art und Weise, wie Unternehmen mit KI arbeiten, neu zu denken.