LangGraph-Agent verwenden

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:

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.

Nächste Schritte