LangGraph-Agent verwenden

Zusätzlich zu den allgemeinen Anleitungen zur Verwendung eines Kundenservicemitarbeiters werden auf dieser Seite Funktionen beschrieben, die speziell für LanggraphAgent gelten.

Hinweise

In dieser Anleitung wird davon ausgegangen, dass Sie die folgenden Anleitungen gelesen und befolgt haben:

Unterstützte Vorgänge

Die folgenden Vorgänge werden für LanggraphAgent unterstützt:

  • query: Damit wird eine Antwort auf eine Abfrage synchron abgerufen.
  • stream_query: zum Streamen einer Antwort auf eine Abfrage.
  • get_state: zum Abrufen eines bestimmten Checkpoints.
  • get_state_history: zum Auflisten der Checkpoints eines Threads.
  • update_state: zum Erstellen von Verzweigungen für verschiedene Szenarien.

Antwort auf eine Abfrage streamen

LangGraph unterstützt mehrere Streamingmodi. Die wichtigsten sind:

  • values: In diesem Modus wird der vollständige Status des Graphen gestreamt, nachdem jeder Knoten aufgerufen wurde.
  • updates: In diesem Modus werden Aktualisierungen des Graphenstatus 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 streamst du updates zurück (entspricht 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 gängiger Aspekt des Human-in-the-Loop-Konzepts das Hinzufügen von Haltepunkten, um die Abfolge der Aktionen des Kundenservicemitarbeiters zu unterbrechen und den Ablauf zu einem späteren Zeitpunkt von einem Menschen fortzusetzen.

Überprüfen

Sie können beim Aufrufen von .query oder .stream_query mit den Argumenten interrupt_before= oder interrupt_after= Haltestellen setzen:

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 Toolaufruf genehmigen und mit der restlichen Ausführung fortfahren möchten, geben Sie None in die Eingabe ein und geben Sie den Thread oder Checkpoint 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 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.
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 Checkpoint abrufen möchten, geben Sie checkpoint_id (und checkpoint_ns) an. Gehen Sie zuerst zu Schritt 1 zurück, als der Toolaufruf 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

Zum Abrufen eines Checkpoints kann die Methode .get_state verwendet werden:

# 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 aktuelle 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.

Prüfpunkt einer Konfiguration abrufen

Für eine bestimmte Konfiguration (z.B. snapshot_config aus der Konfiguration eines Schritts) können Sie den entsprechenden Checkpoint 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 einen bestimmten Status wiedergeben möchten, übergeben Sie die Statuskonfiguration (d.h. state["config"]) an den Agenten. Die Zustandskonfiguration ist ein Dictionary, das in etwa so aussieht:

{'configurable': {'thread_id': 'human-in-the-loop-deepdive',
  'checkpoint_ns': '',
  'checkpoint_id': '1efa2e95-cc7f-6d68-8001-1f6b5e57c456'}}

Wenn Sie von state["config"] (wo ein Toolaufruf generiert wurde) wiedergeben möchten, geben Sie None in die Eingabe ein:

for state_values in agent.stream_query(
    input=None, # resume
    stream_mode="values",
    config=state["config"],
):
    langchain_load(state_values["messages"][-1]).pretty_print()

Die Ausgabe 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

Mit der Methode .update_state können Sie von vorherigen Prüfpunkten abzweigen, um alternative Szenarien zu testen:

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 die Ausführung 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()

Die Ausgabe 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