Zusätzlich zu den allgemeinen Anleitungen zur Verwendung eines Agents werden auf dieser Seite Funktionen beschrieben, die speziell für LanggraphAgent
gelten.
Hinweise
In dieser Anleitung wird davon ausgegangen, dass Sie die Anleitung unter folgenden Links gelesen und befolgt haben:
- LangGraph-Agent entwickeln:
agent
als Instanz vonLanggraphAgent
entwickeln. - Nutzerauthentifizierung, um sich als Nutzer zu authentifizieren und den Agent abzufragen.
- Importieren und initialisieren Sie das SDK, um den Client zum Abrufen einer bereitgestellten Instanz zu initialisieren (falls erforderlich).
Unterstützte Vorgänge
Die folgenden Vorgänge werden für LanggraphAgent
unterstützt:
query
: um synchron eine Antwort auf eine Anfrage zu erhalten.stream_query
: zum Streamen einer Antwort auf eine Anfrage.get_state
: zum Abrufen eines bestimmten Checkpoints.get_state_history
: zum Auflisten der Checkpoints eines Threads.update_state
: zum Erstellen von Zweigen für verschiedene Szenarien.
Antwort auf eine Anfrage streamen
LangGraph unterstützt mehrere Streamingmodi. Die wichtigsten sind:
values
: In diesem Modus wird der vollständige Status des Diagramms nach jedem Knotenaufruf gestreamt.updates
: In diesem Modus werden Aktualisierungen des Status des Diagramms nach jedem Knotenaufruf gestreamt.
So streamen Sie values
zurück (entspricht dem vollständigen Status des Diagramms):
for state_values in agent.stream_query(
input=inputs,
stream_mode="values",
config={"configurable": {"thread_id": "streaming-thread-values"}},
):
print(state_values)
So streamen Sie updates
zurück (entsprechend Aktualisierungen des Diagrammstatus):
for state_updates in agent.stream_query(
input=inputs,
stream_mode="updates",
config={"configurable": {"thread_id": "streaming-thread-updates"}},
):
print(state_updates)
Human in the Loop
In LangGraph ist ein häufiger Aspekt von Human-in-the-Loop das Hinzufügen von Haltepunkten, um die Abfolge von Aktionen des Agents zu unterbrechen und den Ablauf zu einem späteren Zeitpunkt von einem Menschen fortsetzen zu lassen.
Überprüfen
Sie können Breakpoints mit den Argumenten interrupt_before=
oder interrupt_after=
festlegen, wenn Sie .query
oder .stream_query
aufrufen:
response = agent.query(
input=inputs,
interrupt_before=["tools"], # after generating the function call, before invoking the function
interrupt_after=["tools"], # after getting a function response, before moving on
config={"configurable": {"thread_id": "human-in-the-loop-deepdive"}},
)
langchain_load(response['messages'][-1]).pretty_print()
Die Ausgabe sollte in etwa so aussehen:
================================== Ai Message ==================================
Tool Calls:
get_exchange_rate (12610c50-4465-4296-b1f3-d751ec959fd5)
Call ID: 12610c50-4465-4296-b1f3-d751ec959fd5
Args:
currency_from: USD
currency_to: SEK
Genehmigung
Wenn Sie den generierten Tool-Aufruf genehmigen und mit dem Rest der Ausführung fortfahren möchten, übergeben Sie None
an die Eingabe und geben Sie den Thread oder Prüfpunkt in config
an:
response = agent.query(
input=None, # Continue with the function call
interrupt_before=["tools"], # after generating the function call, before invoking the function
interrupt_after=["tools"], # after getting a function response, before moving on
config={"configurable": {"thread_id": "human-in-the-loop-deepdive"}},
)
langchain_load(response['messages'][-1]).pretty_print()
Die Ausgabe sollte in etwa so aussehen:
================================= Tool Message =================================
Name: get_exchange_rate
{"amount": 1.0, "base": "USD", "date": "2024-11-14", "rates": {"SEK": 11.0159}}
Verlauf
Verwenden Sie die Methode .get_state_history
, um alle Checkpoints eines bestimmten Threads aufzulisten:
for state_snapshot in agent.get_state_history(
config={"configurable": {"thread_id": "human-in-the-loop-deepdive"}},
):
if state_snapshot["metadata"]["step"] >= 0:
print(f'step {state_snapshot["metadata"]["step"]}: {state_snapshot["config"]}')
state_snapshot["values"]["messages"][-1].pretty_print()
print("\n")
Die Antwort ähnelt der folgenden Abfolge von Ausgaben:
step 3: {'configurable': {'thread_id': 'human-in-the-loop-deepdive', 'checkpoint_ns': '', 'checkpoint_id': '1efa2e95-ded5-67e0-8003-2d34e04507f5'}}
================================== Ai Message ==================================
The exchange rate from US dollars to Swedish krona is 1 USD to 11.0159 SEK.
step 2: {'configurable': {'thread_id': 'human-in-the-loop-deepdive', 'checkpoint_ns': '', 'checkpoint_id': '1efa2e95-d189-6a77-8002-5dbe79e2ce58'}}
================================= Tool Message =================================
Name: get_exchange_rate
{"amount": 1.0, "base": "USD", "date": "2024-11-14", "rates": {"SEK": 11.0159}}
step 1: {'configurable': {'thread_id': 'human-in-the-loop-deepdive', 'checkpoint_ns': '', 'checkpoint_id': '1efa2e95-cc7f-6d68-8001-1f6b5e57c456'}}
================================== Ai Message ==================================
Tool Calls:
get_exchange_rate (12610c50-4465-4296-b1f3-d751ec959fd5)
Call ID: 12610c50-4465-4296-b1f3-d751ec959fd5
Args:
currency_from: USD
currency_to: SEK
step 0: {'configurable': {'thread_id': 'human-in-the-loop-deepdive', 'checkpoint_ns': '', 'checkpoint_id': '1efa2e95-c2e4-6f3c-8000-477fd654cb53'}}
================================ Human Message =================================
What is the exchange rate from US dollars to Swedish currency?
Konfiguration eines Schritts abrufen
Wenn Sie einen früheren Prüfpunkt abrufen möchten, geben Sie checkpoint_id
(und checkpoint_ns
) an. Spulen Sie zuerst zu Schritt 1 zurück, als der Tool-Aufruf generiert wurde:
snapshot_config = {}
for state_snapshot in agent.get_state_history(
config={"configurable": {"thread_id": "human-in-the-loop-deepdive"}},
):
if state_snapshot["metadata"]["step"] == 1:
snapshot_config = state_snapshot["config"]
break
print(snapshot_config)
Die Ausgabe sollte in etwa so aussehen:
{'configurable': {'thread_id': 'human-in-the-loop-deepdive',
'checkpoint_ns': '',
'checkpoint_id': '1efa2e95-cc7f-6d68-8001-1f6b5e57c456'}}
Zeitreise
Mit der Methode .get_state
können Sie einen Prüfpunkt abrufen:
# By default, it gets the latest state [unless (checkpoint_ns, checkpoint_id) is specified]
state = agent.get_state(config={"configurable": {
"thread_id": "human-in-the-loop-deepdive",
}})
print(f'step {state["metadata"]["step"]}: {state["config"]}')
state["values"]["messages"][-1].pretty_print()
Standardmäßig wird der letzte Prüfpunkt (nach Zeitstempel) abgerufen. Die Ausgabe sollte in etwa so aussehen:
step 3: {'configurable': {'thread_id': 'human-in-the-loop-deepdive', 'checkpoint_ns': '', 'checkpoint_id': '1efa2e95-ded5-67e0-8003-2d34e04507f5'}}
================================== Ai Message ==================================
The exchange rate from US dollars to Swedish krona is 1 USD to 11.0159 SEK.
Checkpoint einer Konfiguration abrufen
Für eine bestimmte Konfiguration (z.B. snapshot_config
aus der Konfiguration eines Schritts) können Sie den entsprechenden Prüfpunkt abrufen:
state = agent.get_state(config=snapshot_config)
print(f'step {state["metadata"]["step"]}: {state["config"]}')
state["values"]["messages"][-1].pretty_print()
Die Ausgabe sollte in etwa so aussehen:
step 1: {'configurable': {'thread_id': 'human-in-the-loop-deepdive', 'checkpoint_ns': '', 'checkpoint_id': '1efa2e95-cc7f-6d68-8001-1f6b5e57c456'}}
================================== Ai Message ==================================
Tool Calls:
get_exchange_rate (12610c50-4465-4296-b1f3-d751ec959fd5)
Call ID: 12610c50-4465-4296-b1f3-d751ec959fd5
Args:
currency_from: USD
currency_to: SEK
Wiederholen
Wenn Sie die Wiedergabe ab einem bestimmten Status starten möchten, übergeben Sie die Statuskonfiguration (z.B. state["config"]
) an den Agent. Die Statuskonfiguration ist ein Dictionary, das so aussieht:
{'configurable': {'thread_id': 'human-in-the-loop-deepdive',
'checkpoint_ns': '',
'checkpoint_id': '1efa2e95-cc7f-6d68-8001-1f6b5e57c456'}}
Wenn Sie die Wiedergabe ab state["config"]
(wo ein Toolaufruf generiert wurde) starten möchten, geben Sie None
in der Eingabe an:
for state_values in agent.stream_query(
input=None, # resume
stream_mode="values",
config=state["config"],
):
langchain_load(state_values["messages"][-1]).pretty_print()
Das Ergebnis sieht in etwa so aus:
================================== Ai Message ==================================
Tool Calls:
get_exchange_rate (12610c50-4465-4296-b1f3-d751ec959fd5)
Call ID: 12610c50-4465-4296-b1f3-d751ec959fd5
Args:
currency_from: USD
currency_to: SEK
================================= Tool Message =================================
Name: get_exchange_rate
{"amount": 1.0, "base": "USD", "date": "2024-11-14", "rates": {"SEK": 11.0159}}
================================== Ai Message ==================================
The exchange rate from US dollars to Swedish krona is 1 USD to 11.0159 SEK.
Verzweigung
Sie können von früheren Prüfpunkten abzweigen, um alternative Szenarien auszuprobieren. Verwenden Sie dazu die Methode .update_state
:
branch_config = agent.update_state(
config=state["config"],
values={"messages": [last_message]}, # the update we want to make
)
print(branch_config)
Die Ausgabe sollte in etwa so aussehen:
{'configurable': {'thread_id': 'human-in-the-loop-deepdive',
'checkpoint_ns': '',
'checkpoint_id': '1efa2e96-0560-62ce-8002-d1bb48a337bc'}}
Wir können den Agenten mit branch_config
abfragen, um das Training ab dem Checkpoint mit dem aktualisierten Status fortzusetzen:
for state_values in agent.stream_query(
input=None, # resume
stream_mode="values",
config=branch_config,
):
langchain_load(state_values["messages"][-1]).pretty_print()
Das Ergebnis sieht in etwa so aus:
================================== Ai Message ==================================
Tool Calls:
get_exchange_rate (12610c50-4465-4296-b1f3-d751ec959fd5)
Call ID: 12610c50-4465-4296-b1f3-d751ec959fd5
Args:
currency_date: 2024-09-01
currency_from: USD
currency_to: SEK
================================= Tool Message =================================
Name: get_exchange_rate
{"amount": 1.0, "base": "USD", "date": "2024-08-30", "rates": {"SEK": 10.2241}}
================================== Ai Message ==================================
The exchange rate from US dollars to Swedish krona on 2024-08-30 was 1 USD to 10.2241 SEK.