In diesem Tutorial werden wir vorgefertigte LangChain-Tools für einen agentischen ReAct-Agenten verwenden, um seine Fähigkeit zu zeigen, geeignete Anwendungsfälle für jedes Tool zu unterscheiden. Wir werden hauptsächlich das Open-Source-Paket LangChain Python verwenden.
Der Toolaufruf, auch als Funktionsaufruf bekannt, ist die Schnittstelle, die es KI-Agenten ermöglicht, an bestimmten Aufgaben zu arbeiten, die aktuelle Informationen erfordern, die sonst für die trainierten großen Sprachmodelle (LLMs) nicht verfügbar wären. LLMs wie IBM® Granite™-Modelle oder die GPT-Modelle (Generative Pre-Trained Transformer) von OpenAI haben nur Zugriff auf die Informationen, die beim Training verwendet werden. Es gibt viele Standardtools, die über LangChain zugänglich sind, darunter ein Tool für die Arbeit mit SQL-Datenbankabfragen, den Zugriff auf Informationen auf Wikipedia und vieles mehr. Wir empfehlen Ihnen, die LangChain-Dokumentation zu lesen, um eine umfassende Liste der vorgefertigten Tools zu erhalten.
Benutzerdefinierte Tools können mit verschiedenen Methoden definiert werden, z. B. mit dem @tool Decorator oder LangChain Runnables, die in diesem Tutorial behandelt werden. Async Tools können mithilfe der StructuredTool- oder BaseTool-Klassen erstellt werden. Informationen zu den Unterschieden zwischen den einzelnen Ansätzen finden Sie in der offiziellen LangChain-Dokumentation. Beispiele für benutzerdefinierte Tools finden Sie im IBM Function Calling Tutorial.
Wir empfehlen Ihnen, sich unsere KI-Agenten-Erläuterung anzusehen, um einen detaillierten Überblick über die verschiedenen KI-Agententypen zu erhalten und herauszufinden, wie sie sich von herkömmlichen LLM- Chatbots unterscheiden.
Sie benötigen ein IBM Cloud-Konto.
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.
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.
Erstelle ein Jupyter Notebook.
Dieser Schritt öffnet eine Jupyter 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 Tutorial ist auch auf Github verfügbar.
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 Bibliotheken und Module. Stellen Sie sicher, dass Sie die folgenden importieren, und wenn sie nicht installiert sind, können Sie das Problem mit einer schnellen Pip-Installation beheben. LangChain und LangGraph werden das verwendete Framework und Toolkit sein.
Hinweis: Dieses Tutorial wurde mit Python 3.11.9 erstellt und ist auch mit Google Colab kompatibel, das Python 3.10.12 verwendet. Um Ihre Python-Version zu überprüfen, können Sie das ausführen !python --version in einer Codezelle.
Um unsere Zugangsdaten festzulegen, benötigen wir den WATSONX_APIKEY und die WATSONX_PROJECT_ID, die Sie in Schritt 1 generiert haben. Sie können sie entweder in einer .env-Datei in Ihrem Verzeichnis speichern oder den Platzhaltertext ersetzen. Wir legen auch die URL fest, die als API-Endpunkt dient.
Das in diesem Tutorial verwendete Wetter-Tool erfordert einen OpenWeather API-Schlüssel. Um eines zu generieren, erstellen Sie ein OpenWeather-Konto. Wählen Sie nach der Erstellung eines Kontos die Registerkarte „API-Schlüssel“, um Ihren kostenlosen Schlüssel anzuzeigen.
In diesem Tutorial verwenden wir den ChatWatsonx-Wrapper, um unser Chat-Modell festzulegen. Dieser Wrapper vereinfacht die Integration des Toolaufrufs und der Verkettung. Wir werden das granite-3-8b-instruct-Modell verwenden. Wir empfehlen Ihnen, die API-Referenzen in der ChatWatsonx-Dokumentation für weitere Informationen zu verwenden.
Um das LLM zu initialisieren, müssen wir die Modellparameter festlegen. Es ist wichtig, hier die Temperatur des Modells zu konfigurieren, um die Halluzinationen des Agenten zu begrenzen.
Wir können die Tool-Klasse verwenden, um unsere Tools aufrufbar zu machen. Eine klare und einfache Beschreibung des Tools ist ebenfalls wichtig. Außerdem bestimmt das boolesche Attribut Return_direct, ob die Antwort des Tools direkt an den Benutzer zurückgegeben werden soll. Schließlich wird das optionale args_schema-Attribut des Typs pydantic.BaseModel verwendet, um dem Modell zusätzliche Informationen oder eine Validierung bereitzustellen.
Stellen Sie sich vor, Sie planen Ihren nächsten Urlaub in Griechenland und möchten mehr darüber erfahren und sich auf die Reise vorbereiten. Lassen Sie uns zunächst das integrierte LangChain-Wetter-Tool einrichten. Das Tool verwendet den OpenWeatherMapAPIWraper, der den zuvor generierten OPENWEAthermap_API_KEY verwendet.
Als Nächstes richten wir das vorgefertigte YouTube-Tool mithilfe des YouTube-Suchpakets ein, das über LangChain verfügbar ist. Dieser Schritt ist hilfreich, um Videos über Ihr Reiseziel zu finden.
Zum Schluss richten wir ein Online-Shopping-Tool mit Ionic ein. Dieses Tool gibt für die Benutzeranfrage relevante Artikel zurück, die über den Marktplatz zum Verkauf stehen.
Erstellen wir unsere Liste der verschiedenen Tools, die wir dem LLM zur Verfügung stellen. Wir können die Liste auch ausdrucken, um zu sehen, wie sie geladen wurde. Eine erweiterte Liste der verfügbaren LangChain-Tools finden Sie in der LangChain-Dokumentation.
Output:
[Tool(name='weather_search', description='Get weather for a city and country code, e.g. Athens, GR', func=<bound method OpenWeatherMapAPIWrapper.run of OpenWeatherMapAPIWrapper(owm=<pyowm.owm.OWM - API key=************************611450cc, subscription type=free, PyOWM version=(3, 3, 0)>, openweathermap_api_key='******************')>),
Tool(name='youtube_search', description='Search YouTube for video links.', func=<bound method BaseTool.run of YouTubeSearchTool()>),
Tool(name='ionic_commerce_shopping_tool', description='\nIonic is an e-commerce shopping tool...[abbreviated]', verbose=True, func=<bound method Ionic.query of <ionic_langchain.tool.Ionic object at 0x17f6e5510>>)]
Tool Calling bezieht sich in der Regel auf ein LLM, das den Namen des aufzurufenden Tools und seine Argumente zurückgibt. Wir können die extrahierten Informationen entweder für andere Zwecke verwenden oder das Tool mit diesen Argumenten aufrufen. Weitere Beispiele hierfür finden Sie in unserem Tutorial zum Aufrufen von Funktionen.
Tatsächlich ist es nicht immer selbstverständlich, das Tool auszuführen und dessen Ausgabe abzurufen. In diesem Tutorial werden wir beide Ansätze untersuchen.
Um den traditionellen Tool-Aufruf durchzuführen, können wir einfach eine Benutzerabfrage bieten und die vorgefertigte bind_tools-Methode verwenden, um die Liste der Tools bei jeder Iteration an das LLM zu übergeben.
Output:
aiMessage(content=“, additional_kwargs={'tool_calls': [{'id': 'chatcmpl-tool-7a15abba7d3c4419970d807ac0c8d353', 'type': 'function', 'function': {'name': 'youtube_search', 'arguments': '{"query": "greece"}'}}}, response_metadata={'token_usage': {'completion_tokens': 21, 'prompt_tokens': 578, 'total_tokens': 599},' Modellname ':' ibm/granite-3-8b-instruct ',' system_fingerprint ': „,' finish_reason ':' tool_calls '}, id='chat-5fe7a26b8f954c179c4c4995e873bff91e', tool_calls= [{'name': 'youtube_search', 'args': {'query': 'greece'},' id ':' chatcmpl-tool-7a15abba7d3c4419970d807ac0c8d353 ',' type ':' tool_call '}], usage_metadata={'input_tokens': 578, 'output_tokens': 21, 'total_tokens': 599})
Output:
{'tool_calls': [{'id': 'chatcmpl-tool-7a15abba7d3c4419970d807ac0c8d353',
'type': 'function',
'function': {'name': 'youtube_search',
'arguments': '{"query": "greece"}'}}]}
Wie in der tool_calls-Ausgabe zu sehen ist, identifiziert das LLM den entsprechenden Toolaufruf und die Argumente korrekt. Das LLM führt das Tool selbst nicht aus. Dazu kommen wir im nächsten Schritt.
Um die Tool-Aufrufe auszuführen, müssen wir zunächst einen ReAct-Agenten erstellen, indem wir die vorgefertigte LangGraph-Hilfsmethode create_react_agent verwenden. Diese Funktion erstellt ein Diagramm, das als Brücke zwischen dem Chat-Modell und den verfügbaren Tools dient und somit den Aufruf von Agententools ermöglicht. Dieser Graph wird im folgenden Diagramm dargestellt.
Wir können dem Agenten jetzt Fragen stellen, die einen Tool-Anruf erfordern. Zuerst können wir das Modell bitten, URLs zu YouTube-Videos über Griechenland zurückzugeben. Wir können die HumanMessage -Klasse verwenden, um die Benutzerabfrage an das LLM zu übergeben.
Output:
[HumanMessage(content='What are some YouTube videos about Greece', additional_kwargs={}, response_metadata={}, id='1adba6c0-32e6-4bbd-92a6-7d21b0177439'),
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'chatcmpl-tool-b4b5bf452404424ba4d6d9c26e53c6ce', 'type': 'function', 'function': {'name': 'youtube_search', 'arguments': '{"query": "Greece"}'}}]}, response_metadata={'token_usage': {'completion_tokens': 22, 'prompt_tokens': 578, 'total_tokens': 600}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'tool_calls'}, id='chat-5f41aee6736842749285aa7fbff50f65', tool_calls=[{'name': 'youtube_search', 'args': {'query': 'Greece'}, 'id': 'chatcmpl-tool-b4b5bf452404424ba4d6d9c26e53c6ce', 'type': 'tool_call'}], usage_metadata={'input_tokens': 578, 'output_tokens': 22, 'total_tokens': 600}),
ToolMessage(content="['https://www.youtube.com/watch?v=waQY2Ucpbd0&pp=ygUGR3JlZWNl', 'https://www.youtube.com/watch?v=NMlBB2pK5qo&pp=ygUGR3JlZWNl']", name='youtube_search', id='1ccf3137-2c10-495e-86ad-a548a3434243', tool_call_id='chatcmpl-tool-b4b5bf452404424ba4d6d9c26e53c6ce'),
AIMessage(content='Here are some YouTube videos about Greece:\n\n1. [Greece Travel Guide | Top 10 Tourist Attractions](https://www.youtube.com/watch?v=waQY2Ucpbd0&pp=ygUGR3JlZWNl)\n2. [Greece Travel Guide | Top 10 Tourist Attractions](https://www.youtube.com/watch?v=NMlBB2pK5qo&pp=ygUGR3JlZWNl)', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 117, 'prompt_tokens': 677, 'total_tokens': 794}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='chat-801e3b596a174ac88246b507c93e5869', usage_metadata={'input_tokens': 677, 'output_tokens': 117, 'total_tokens': 794})]
Großartig! Wie in AIMessage zu sehen ist, hat das Modell den entsprechenden Werkzeugaufruf korrekt identifiziert. In der ToolMessage sehen wir, dass das Modell mit dem integrierten LangChain YouTube-Tool erfolgreich die erwartete Ausgabe zurückgegeben hat. Schließlich zeigt die AIMessage, dass das LLM die Antwort des Tools synthetisiert hat.
Als Nächstes fragen wir das Modell nach dem Wetter in Griechenland, um festzustellen, ob es wie erwartet das Tool weather_search aufruft.
Output:
[HumanMessage(content='What is the weather in Athens, GR', additional_kwargs={}, response_metadata={}, id='a0c4b69c-988a-4f7d-9b8a-4780305f8e2a'),
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'chatcmpl-tool-9a0c07a3b35f4c69a351c5540ab663f8', 'type': 'function', 'function': {'name': 'weather_search', 'arguments': '{"__arg1": "Athens, GR"}'}}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 579, 'total_tokens': 605}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'tool_calls'}, id='chat-eeed087050e049f0ad715f3615c7fdda', tool_calls=[{'name': 'weather_search', 'args': {'__arg1': 'Athens, GR'}, 'id': 'chatcmpl-tool-9a0c07a3b35f4c69a351c5540ab663f8', 'type': 'tool_call'}], usage_metadata={'input_tokens': 579, 'output_tokens': 26, 'total_tokens': 605}),
ToolMessage(content='In Athens, GR, the current weather is as follows:\nDetailed status: few clouds\nWind speed: 4.47 m/s, direction: 23°\nHumidity: 58%\nTemperature: \n - Current: 15.15°C\n - High: 15.74°C\n - Low: 14.1°C\n - Feels like: 14.24°C\nRain: {}\nHeat index: None\nCloud cover: 20%', name='weather_search', id='587b0230-b667-41de-97b9-3779554d2559', tool_call_id='chatcmpl-tool-9a0c07a3b35f4c69a351c5540ab663f8'),
AIMessage(content='The current weather in Athens, GR is:\n- Detailed status: few clouds\n- Wind speed: 4.47 m/s, direction: 23°\n- Humidity: 58%\n- Temperature:\n - Current: 15.15°C\n - High: 15.74°C\n - Low: 14.1°C\n - Feels like: 14.24°C\n- Rain: None\n- Heat index: None\n- Cloud cover: 20%', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 125, 'prompt_tokens': 733, 'total_tokens': 858}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='chat-6719a5ca266a439bb10ed410db25c5ef', usage_metadata={'input_tokens': 733, 'output_tokens': 125, 'total_tokens': 858})]
Das Modell war in der Lage, das geeignete Tool zu erkennen, das Tool mit den extrahierten Argumenten auszuführen und die Ausgabe des Tools zu synthetisieren. Fragen wir nun das LLM nach Koffern unter 100 USD für Ihre bevorstehende Reise. Beachten Sie, dass das Tool für die Suche nach Preisen in Cents konzipiert ist. Daher verlangen wir in diesem Szenario Koffer unter 10.000 Cents, was 100 US-Dollar entspricht.
Output:
[HumanMessage(content='Find some suitcases for less than 10000', additional_kwargs={}, response_metadata={}, id='8b207035-150a-4390-aff3-8b09ef85a592'),
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'chatcmpl-tool-b011e718b18e41dcbcae2f7786af263d', 'type': 'function', 'function': {'name': 'ionic_commerce_shopping_tool', 'arguments': '{"__arg1": "suitcases, 10, 0, 10000"}'}}]}, response_metadata={'token_usage': {'completion_tokens': 41, 'prompt_tokens': 582, 'total_tokens': 623}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'tool_calls'}, id='chat-e38c8568d1754636a6a92082561180bd', tool_calls=[{'name': 'ionic_commerce_shopping_tool', 'args': {'__arg1': 'suitcases, 10, 0, 10000'}, 'id': 'chatcmpl-tool-b011e718b18e41dcbcae2f7786af263d', 'type': 'tool_call'}], usage_metadata={'input_tokens': 582, 'output_tokens': 41, 'total_tokens': 623}),
ToolMessage(content='[{"products": [{"links": [{"text": "Details", "type": "pdp", "url": "https://go.ionic.click/Ch4CKd"}], "merchant_name": "Walmart", "merchant_product_id": "811277349", "name": "Zimtown Hardside Lightweight Spinner Orange 3 Piece Luggage Set with TSA Lock", "price": "$69.99", "status": "available", "thumbnail": "https://i5.walmartimages.com/asr/b809a274-ccc7-4ca4-b4f1-e848b4412fe6.314144bcd13e5467a33cb99e8dd5237c.jpeg?odnHeight=100&odnWidth=100&odnBg=ffffff", "brand_name": "Zimtown", "upc": "273109526768"}, {"links": [{"text": "Details", "type": "pdp", "url": "https://www.amazon.com/dp/B071HHX6VF?tag=ioniccommer00-20&linkCode=osi&th=1&psc=1"}], "merchant_name": "Amazon", "merchant_product_id": "B071HHX6VF", "name": "Amazon Basics Expandable Hardside Luggage, Suitcase with Wheels, 30-Inch Spinner with Four Spinner Wheels and Scratch-Resistant Surface, Black", "price": "$74.49", "status": "available", "thumbnail": "https://m.media-amazon.com/images/I/41jJcuMYSdL._SL160_.jpg", "brand_name": "Amazon Basics", "upc": "841710177190"}, .....[abbreviated],
AIMessage(content='Here are some suitcases that are less than 10000:\n\n1. [Zimtown Hardside Lightweight Spinner Orange 3 Piece Luggage Set with TSA Lock](https://go.ionic.click/Ch4CKd) - $69.99\n2. [Amazon Basics Expandable Hardside Luggage, Suitcase with Wheels, 30-Inch Spinner](https://www.amazon.com/dp/B071HHX6VF) - $74.49\n3. [SwissGear Sion Softside Expandable Luggage, Blue, Carry-On 21-Inch](https://www.amazon.com/dp/B01MFBVKDF) - $80.73\n4. [Travelers Club Midtown Hardside Luggage Travel, Rose Gold, 4-Piece Set](https://www.amazon.com/dp/B07RS4PK3J) - $95.19\n5. [American Tourister Stratum 2.0 Expandable Hardside Luggage with Spinner Wheels, 28" SPINNER, Slate Blue](https://www.amazon.com/dp/B0B2X1BDFH) - $89.97\n6. [Wrangler Smart Luggage Set with Cup Holder and USB Port, Navy Blue, 20-Inch Carry-On](https://www.amazon.com/dp/B07SLG6WZ2) - $39.99\n7. [Wrangler Hardside Carry-On Spinner Luggage, Lilac, 20-Inch](https://www.amazon.com/dp/B0C7YWMBGP) - $40.00\n8. [Protege 20 inch Hard Side Carry-On Spinner Luggage, Black Matte Finish (Walmart.com Exclusive)](https://go.ionic.click/qJqBRA) - $29.87\n9. [Wrangler Wesley Rolling Duffel Bag, Tannin, Large 30-Inch](https://www.amazon.com/dp/B07XKWMLJ5) - $44.00\n10. [U.S. Traveler Boren Polycarbonate Hardside Rugged Travel Suitcase Luggage with 8 Spinner Wheels, Aluminum Handle, Lavender, Checked-Large 30-Inch](https://www.amazon.com/dp/B085B4D852) - $79.99', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 612, 'prompt_tokens': 2794, 'total_tokens': 3406}, 'model_name': 'ibm/granite-3-8b-instruct', 'system_fingerprint': '', 'finish_reason': 'stop'}, id='chat-d08201ff6ef84c428e7ae44372396926', usage_metadata={'input_tokens': 2794, 'output_tokens': 612, 'total_tokens': 3406})]
Wie aus der LLM-Antwort hervorgeht, nutzte das Model das Shopping-Tool korrekt, um mehrere Koffer für den Online-Kauf unter 100 USD zurückzugeben.
In diesem Tutorial haben Sie vorgefertigte LangChain-Tools verwendet, um einen ReAct-Agenten in Python mit watsonx zu erstellen, indem Sie das granite-3-8b-instruct Modell einsetzen. Dafür haben Sie youtube_search , weather_search und ion_search Tools. Das Tutorial zeigte, wie man traditionelle Tool-Aufrufe implementiert und wie man einen agentenbasierten Ansatz zur Ausführung der Tools umsetzt. Die Beispielausgabe ist wichtig, da sie die Schritte zeigt, die der Agent bei der Erstellung seines eigenen Agenten-Workflows unter Verwendung der verfügbaren Funktionen durchgeführt hat. Die dem Agenten zur Verfügung gestellten Tools waren für die Beantwortung von Nutzeranfragen von entscheidender Bedeutung.
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.