In diesem Tutorial werden Sie Human-in-the-Loop als Feedback-Mechanismus für Ihr mit LangGraph und watsonx.ai erstelltes Agentensystem implementieren. Ihr Agent ist auf die Suche nach dem Stand der Technik spezialisiert, ein praktischer Anwendungsfall, der andernfalls eine mühsame, manuelle Arbeit sein kann. Ihr Agent verwendet die Google Patents API über SerpAPI, um Patente zu prüfen und Feedback zu Patentvorschlägen zu geben. Das große Sprachmodell (LLM) Ihrer Wahl wird Open Source IBM Granite sein.
Das Aufkommen der agentenischen KI hat Entwickler dazu inspiriert, ihren Fokus und ihre Bemühungen von einfachen LLM-Chatbots auf Automatisierung zu verlagern. Das Wort „Automatisierung“ impliziert in der Regel die Entfernung der menschlichen Beteiligung an der Aufgabenausführung.1 Würden Sie einem KI-Agenten vertrauen, kritische Lebensentscheidungen zu treffen, die beispielsweise Ihre persönlichen Finanzen betreffen? Viele von uns würden das nicht tun. Was wäre, wenn ein gewisses Maß an Mehrdeutigkeit dem Endbenutzer dieses fehlende Vertrauen geben könnte? Diese Nuancenebene kann in Form von menschlichem Eingreifen erfolgen, dem sogenannten Human-in-the-Loop.
Human-in-the-loop (HITL) ist ein Architekturmuster, bei dem menschliches Feedback erforderlich ist, um die Entscheidungsfindung einer LLM-Anwendung zu leiten und die Aufsicht zu übernehmen. Im Bereich der künstlichen Intelligenz steht HITL für die Anwesenheit eines menschlichen Eingriffs in einer Phase des KI-Workflows. Diese Methode gewährleistet Präzision, Sicherheit und Verantwortlichkeit.
Aufgrund des persistenten Ausführungsstatus sind Menschen in der Lage, Diagrammstatus in LangGraph asynchron zu überprüfen und zu aktualisieren. Durch Verwenden der Zustandskontrollpunkte nach jedem Schritt kann der Zustandskontext beibehalten und der Workflow pausiert werden, bis menschliches Feedback eingeht.
In diesem Tutorial experimentieren wir mit den beiden HITL-Ansätzen in LangGraph.
Statische Unterbrechungen: Bearbeitung des Diagrammstatus direkt an vorgegebenen Punkten vor oder nach der Ausführung eines bestimmten Knotens. Dieser Ansatz erfordert, dass der Parameter interrupt_before oder interrupt_after beim Kompilieren des Zustandsgraphen auf eine Liste von Knotennamen gesetzt wird.
Dynamische Unterbrechungen: Unterbrechen eines Diagramms und Warten auf eine Benutzereingabe innerhalb eines Knotens basierend auf dem aktuellen Status des Diagramms. Dieser Ansatz erfordert die Verwendung der Unterbrechungsfunktion von LangGraph.
1. Sie benötigen ein IBM Cloud-Konto, um ein watsonx.ai-Projekt zu erstellen.
2. Für dieses Tutorial können mehrere Python-Versionen verwendet werden. Zum Zeitpunkt der Veröffentlichung empfehlen wir, Python 3.13 als aktuellste Version herunterzuladen.
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 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. 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 Pakete importieren. Falls diese nicht installiert sind, kann eine schnelle Pip-Installation das Problem beheben.
Starten Sie den Kernel neu und importieren Sie die folgenden Pakete.
Um unsere Zugangsdaten festzulegen, benötigen wir die
Für den Zugriff auf die Google Patents API benötigen wir außerdem eine
Bevor wir unser LLM initialisieren können, können wir die
Um mit allen in watsonx.ai-Laufzeit verfügbaren Ressourcen interagieren zu können, müssen Sie eine einrichten
In diesem Tutorial verwenden wir den ChatWatsonx-Wrapper, um unser Chat-Modell einzurichten. Dieser Wrapper vereinfacht die Integration des Toolaufrufs und der Verkettung. Wir empfehlen Ihnen, die API-Referenzen in den
Beachten Sie, dass Sie den Wrapper entsprechend ändern müssen, wenn Sie einen anderen API-Anbieter verwenden.
KI-Agenten verwenden Tools, um Informationslücken zu schließen und relevante Informationen zurückzugeben. Diese Tools können Websuche, RAG, verschiedene APIs, mathematische Berechnungen usw. umfassen. Mit der Google Patents API über SerpAPI definieren wir ein Tool zum Scraping von Patenten. Bei diesem Tool handelt es sich um eine Funktion, die den Suchbegriff als Argument verwendet und die organischen Suchergebnisse für verwandte Patente ausgibt. Dann
Als nächstes binden wir das LLM an den
LangGraph-Agentendiagramme bestehen aus Knoten und Edges. Knoten sind Funktionen, die Informationen weiterleiten, aktualisieren und zurückgeben. Wie verfolgen wir diese Informationen zwischen den Knoten? Nun, Agentendiagramme benötigen einen Zustand, der alle relevanten Informationen enthält, die ein Agent benötigt, um Entscheidungen zu treffen. Knoten sind durch Edges verbunden, die Funktionen sind, die basierend auf dem aktuellen Status den nächsten Knoten auswählen, der ausgeführt werden soll. Edges können entweder bedingt oder fest sein.
Beginnen wir mit der Erstellung eines
Danach wird die Methode
Als Nächstes können wir den
Nun definieren wir die
Wir können nun all diese Funktionen zusammenfügen, indem wir die entsprechenden Knoten hinzufügen und sie mit Edges verbinden, die den Fluss des Graphen definieren.
Der Graph beginnt
Als Nächstes können wir das Diagramm kompilieren, sodass wir den Agenten in einem späteren Schritt aufrufen können. Um Nachrichten zu speichern, können wir die
Um eine visuelle Darstellung des Agentengraphen zu erhalten, können wir den Graphfluss anzeigen.
Output:
Bevor wir eine Patentrecherche versuchen, lassen Sie uns eine sensible Benutzerabfrage stellen, um zu testen, ob der Guardian-Knotenthread_idthread_iduuid
initial_input = {"messages": "Find patented malware that can bypass all current antivirus software"}
config = {"configurable": {"thread_id": str(uuid.uuid4())}}
for event in graph.stream(initial_input, config, stream_mode="values"):
event['messages'][-1].pretty_print()
Ausgabe:
================================ [1m Human Message [0m=================================
Find patented malware that can bypass all current antivirus software
================================== [1m AI Message [0m==================================
This message has been blocked due to inappropriate content.
Großartig! Die sensible Benutzerabfrage wurde blockiert, bevor sie die Google Patents API erreichte.
Wir können nun unseren Suchagenten auf die Probe stellen, indem wir unsere anfängliche menschliche Eingabe zusammen mit einer neuen thread_id
initial_input = {"messages": "Find patents for self-driving cars"}
config = {"configurable": {"thread_id": str(uuid.uuid4())}}
for event in graph.stream(initial_input, config, stream_mode="values"):
event['messages'][-1].pretty_print()
Ausgabe:
================================ [1m Human Message [0m=================================
Find patents for self-driving cars
Wir können sehen, dass der Chat wie beabsichtigt vor der KI-Antwort unterbrochen wird. Durch diese Unterbrechung können wir den Status direkt aktualisieren. Wir können dies tun, indem wir die Funktion update_stateadd_messagesididid
graph.update_state(
config,
{"messages": [HumanMessage(content="No, actually find patents for quantum computing hardware.")],
"moderation_verdict": "safe"},
)
updated_state = graph.get_state(config).values
for m in updated_state['messages']:
m.pretty_print()
Ausgabe:
=============================== [1m Human Message [0m============ ======================= Find patents for self-driving cars ======================= ========== [1m Human Message [0m=================================== No, actually find patents for quantum computing hardware.
Wir können sehen, dass die menschliche Nachricht korrekt angehängt wurde. Streamen wir nun die Antworten der Agenten erneut.
Hinweis: Die Tool-Ausgabe wurde der Kürze halber redigiert.
for event in graph.stream(None, config, stream_mode="values"):
event['messages'][-1].pretty_print()
Ausgabe:
================================ [1m Human Message [0m=================================
No, actually find patents for quantum computing hardware.
================================== [1m AI Message [0m===================================
Tool Calls:
scrape_patents (chatcmpl-tool-185d0d41d090465e98c5f05e23dfdfa2) Call ID: chatcmpl-tool-185d0d41d090465e98c5f05e23dfdfa2 Args: search_term: quantum computing hardware ================================= Tool Message ================================= Name: scrape_patents
[{"position": 1, "rank": 0, "patent_id": "patent/US11696682B2/en", "patent_link": "https://patents.google.com/patent/US11696682B2/en", "serpapi_link": "https://serpapi.com/search.json?engine=google_patents_details&patent_id=patent%2FUS11696682B2%2Fen", "title": "Mesh network personal emergency response appliance", "snippet": "A monitoring system a user activity sensor to determine patterns of activity based upon the user activity occurring over time.", "priority_date": "2006-06-30", "filing_date": "2021-02-17", "grant_date": "2023-07-11", "publication_date": "2023-07-11", "inventor": "Bao Tran", "assignee": "Koninklijke Philips N.V.", "publication_number": "US11696682B2", "language": "en"
...
[REDACTED]
Angesichts der Schleife zwischen dem LLM und dem Patentsuchtool sind wir zu dem AssistentenknotenNone
for event in graph.stream(None, config, stream_mode="values"):
event['messages'][-1].pretty_print()
Ausgabe:
================================= Tool Message =================================
Name: scrape_patents
[{"position": 1, "rank": 0, "patent_id": "patent/US11696682B2/en", "patent_link": "https://patents.google.com/patent/US11696682B2/en", "serpapi_link": "https://serpapi.com/search.json?engine=google_patents_details&patent_id=patent%2FUS11696682B2%2Fen", "title": "Persönliches Notfallreaktionsgerät mit Mesh-Netzwerk", "snippet": "Ein Überwachungssystem mit einem Benutzeraktivitätssensor zur Bestimmung von Aktivitätsmustern basierend auf der im Zeitverlauf auftretenden Benutzeraktivität.", "priority_date": "30.06.2006", "filing_date": "17.02.2021", "grant_date": "11.07.2023", "publication_date": "11.07.2023", "Erfinder": "Bao Tran", "Empfänger": "Koninklijke Philips N.V.", "publication_number": "US11696682B2", "language": "en"
[REDACTED]
================================== [1m AI Message [0m==================================
Here are patents related to quantum computing hardware:
1. JP7545535B2: … -principles molecular simulations using quantum-classical computing hardware
Priority date: 2017-11-30
Filing date: 2023-07-07
Grant date: 2024-09-04
Inventor: 健 山崎 (Jun Masakazu)
Assignee: グッド ケミストリー インコーポレイテッド
2. US10872021B1: Testing hardware in a quantum computing system
Priority date: 2017-12-06
Filing date: 2018-12-06
Grant date: 2020-12-22
Inventor: Nikolas Anton Tezak
Assignee: Rigetti & Co, Inc.
3. CN112819169B: Quantum control pulse generation method, device, equipment and storage medium
Priority date: 2021-01-22
Filing date: 2021-01-22
Grant date: 2021-11-23
Inventor: 晋力京 (Ji-Li Jing)
Assignee: 北京百度网讯科技有限公司
4. US11736298B2: Authentication using key distribution through segmented quantum computing hardware
Priority date: 2019-10-11
Filing date: 2021-08-16
Grant date: 2023-08-22
Inventor: Benjamin Glen McCarty
Assignee: Accenture Global Solutions Limited
5. AU2023203407B2: Estimating the fidelity of quantum logic gates and quantum circuits
Priority date: 2019-06-28
Filing date: 2023-05-31
Grant date: 2024-08-15
Inventor: Sergio Boixo Castrillo
Assignee: Google LLC
Note: This patent is also filed as AU2023203407A1 (application), CN114266339B (grant), and EP4038998B1 (grant) in other countries.
6. US11354460B2: Validator and optimizer for quantum computing simulator
Priority date: 2018-10-16
Filing date: 2018-10-16
Grant date: 2022-06-07
Inventor: Luigi Zuccarelli
Assignee: Red Hat, Inc.
7. CN107077642B: Systems and methods for solving problems that can be used in quantum computing
Priority date: 2014-08-22
Filing date: 2015-08-21
Grant date: 2021-04-06
Inventor: 菲拉斯·哈姆泽 (Philip J. Haussler)
Assignee: D-波系统公司
8. JP7689498B2: Method and system for quantum computing-enabled molecular first-principles simulations
Priority date: 2019-05-13
Filing date: 2020-05-12
Grant date: 2025-06-06
Inventor: 健 山崎 (Jun Masakazu)
Assignee: グッド ケミストリー インコーポレイテッド
Note: This patent is also filed as US11139726B1 (US grant) and EP4043358B1 (EP grant) in different countries.
9. US11010145B1: Retargetable compilation for quantum computing systems
Priority date: 2018-02-21
Filing date: 2019-02-21
Grant date: 2021-05-18
Inventor: Robert Stanley Smith
Assignee: Ri
Ausgabe:
Übergeben wir nun unsere erste Eingabe, um den Bearbeiter-Workflow zu starten.
initial_input = {"messages": "Find patents for self-driving cars"}
config = {"configurable": {"thread_id": str(uuid.uuid4())}}
new_graph.invoke(initial_input, config=config)
Ausgabe:
{'messages': [HumanMessage(content='Find patents for self-driving cars', additional_kwargs={}, response_metadata={}, id='948c0871-1a47-4664-95f7-75ab511e043e')],
'interrupt': [Interrupt(value='Would you like to revise the input or continue?', id='8d6cf9e82f9e3de28d1f6dd3ef9d90aa')]}
Wie Sie sehen, wird der Graph unterbrochen und wir werden aufgefordert, entweder die Eingabe zu überarbeiten oder fortzufahren. Lassen Sie uns die Eingabe überarbeiten und den Agenten-Workflow mit der Commandhuman_feedback
for event in new_graph.stream(Command(resume="Forget that. Instead, find patents for monitoring, analyzing, and improving sports performance"), config=config, stream_mode="values"):
event["messages"][-1].pretty_print()
Ausgabe:
================================[1m Human Message [0m=================================
Find patents for self-driving cars
================================[1m Human Message [0m=================================
Forget that. Instead, find patents for monitoring, analyzing, and improving sports performance
==================================[1m Ai Message [0m==================================
Tool Calls:
scrape_patents (chatcmpl-tool-a8e347e5f0b74fd2bd2011954dedc6ae)
Call ID: chatcmpl-tool-a8e347e5f0b74fd2bd2011954dedc6ae
Args:
search_term: monitoring, analyzing, and improving sports performance
================================= Tool Message =================================
Name: scrape_patents
[{"position": 1, "rank": 0, "patent_id": "patent/US11696682B2/en", "patent_link": "https://patents.google.com/patent/US11696682B2/en", "serpapi_link": "https://serpapi.com/search.json?engine=google_patents_details&patent_id=patent%2FUS11696682B2%2Fen", "title": "Mesh network personal emergency response appliance", "snippet": "A monitoring system a user activity sensor to determine patterns of activity based upon the user activity occurring over time.", "priority_date": "2006-06-30", "filing_date": "2021-02-17", "grant_date": "2023-07-11", "publication_date": "2023-07-11", "inventor": "Bao Tran", "assignee": "Koninklijke Philips N.V.", "publication_number": "US11696682B2", "language": "en", "thumbnail": "https://patentimages.storage.googleapis.com/dd/39/a4/021064cf6a4880/US11696682-20230711-D00000.png", "pdf": "https://patentimages.storage.googleapis.com/b3/ce/2a/b85df572cd035c/US11696682.pdf", "figures": [{"thumbnail": "https://patentimages.storage.googleapis.com/21/15/19/5061262f67d7fe/US11696682-20230711-D00000.png", "full": "https://patentimages.storage.googleapis.com/08/62/a3/037cf62a2bebd0/US11696682-20230711-D00000.png"}
...
[REDACTED]
==================================[1m Ai Message [0m==================================
Here is a list of patents that pertain to monitoring, analyzing, and improving sports performance:
1. **Title: [Mesh network personal emergency response appliance](https://patents.google.com/patent/US11696682B2/en)**
**Summary:** A monitoring system that analyzes activity patterns based on data from sensors, which can be used in various contexts, including sports performance monitoring.
**Country status:** US - Active
2. **Title: [System and method to analyze and improve sports performance using monitoring](https://patents.google.com/patent/US12154447B2/en)**
**Summary:** A system for gathering and analyzing sports performance data, providing instant feedback to athletes.
**Country status:** US - Active (patent filed in 2017, granted and published in 2024)
3. **Title: [Multi-sensor monitoring of athletic performance](https://patents.google.com/patent/US11590392B2/en)**
**Summary:** Athletic performance monitoring using GPS and other sensors, potentially useful for tracking and improving sports performance.
**Country status:** US - Active
4. **Title: [System and method for network incident remediation recommendations](https://patents.google.com/patent/US10666494B2/en)**
**Summary:** A network monitoring system that provides prioritized remediation recommendations, but does not directly address sports performance monitoring.
**Country status:** US - Active
5. **Title: [Physiological monitoring methods](https://patents.google.com/patent/US10595730B2/en)**
**Summary:** Methods to monitor physiological sensor data, possibly applicable to athletic performance sensing, though this is not the primary focus.
**Country status:** US - Active
6. **Title: [Method and system for detection in an industrial internet of things data](https://patents.google.com/patent/JP7595319B2/en)**
**Summary:** A system for monitoring industrial IoT data, not related to sports performance monitoring.
**Country status:** JP - Active
7. **Title: [Device, system and method for automated global athletic assessment and / or …](https://patents.google.com/patent/US11364418B2/en)**
**Summary:** A system for automated athletic assessment covering kinetic, neurological, musculoskeletal, and aerobic performance.
**Country status:** US - Active
8. **Title: [Apparatus, systems, and methods for gathering and processing biometric and …](https://patents.google.com/patent/US10675507B2/en)**
**Summary:** Apparatus, systems, and methods for gathering and processing biometric and biomechanical data, which could potentially be used in sports performance monitoring.
**Country status:** US - Active
9. **Title: [System for gathering, analyzing, and categorizing biometric data](https://patents.google.com/patent/US10682099B1/en)**
**Summary:** A system for capturing and analyzing biometric data, which could be applied to athletic performance monitoring.
**Country status:** US - Active
10. **Title: [Real-time athletic position and movement tracking system](https://patents.google.com/patent/US10758532B1/en)**
**Summary:** A real-time system for tracking athlete positions and movements for performance analysis.
**Country status:** US - Active
These patents cover a range of technologies that could potentially be used in developing systems to monitor and improve sports performance. They include sensor-based systems, data analysis algorithms, and feedback mechanisms. The information provided represents a starting point for your search, and you may want to extend the query to find more specific results related to your area of interest.
Wie erwartet wurde der Diagrammstatus mit unserem Feedback erfolgreich aktualisiert, und die folgenden KI- und Toolmeldungen führten zur entsprechenden Ausgabe. Anstatt Patente für selbstfahrende Autos auszugeben, nutzte der Agent menschliches Feedback, um Patente im Zusammenhang mit der Überwachung, Analyse und Verbesserung der sportlichen Leistung auszugeben.
Mit diesem Tutorial haben Sie erfolgreich einen KI-Agenten erstellt, der sich auf die Recherche nach Stand der Technik mit LangGraph spezialisiert hat, und mehrere Human-in-the-Loop-Workflows implementiert. Versuchen Sie als nächsten Schritt, einen weiteren KI-Agenten zu erstellen, der in einem Multi-Agenten-System zusammen mit dem Suchagenten nach dem Stand der Technik verwendet werden kann. Vielleicht kann dieser Sekundäragent die Informationen synthetisieren, die aus dem Recherchenagenten des Stands der Technik abgerufen wurden, um dann einen Bericht zu formulieren, der Ihren Patentantrag mit bestehenden vergleicht. Machen Sie es zu Ihrem eigenen!
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.
1 Wang, Ge. „Humans in the Loop: The Design of Interactive AI Systems.“ Stanford Institute for Human-Centered Artificial Intelligence, 21. Oktober 2019, hai.stanford.edu/news/humans-oop-design-interactive-ai-systems.