Statusmeldungsliste vor der Unterbrechung aktualisierenPython

Python-Programme
Anonymous
 Statusmeldungsliste vor der Unterbrechung aktualisieren

Post by Anonymous »

Ich verwende Langgraph Version 1.2.7, um einen Workflow zu erstellen, der aus mehreren Knoten besteht. Viele dieser Knoten unterbrechen möglicherweise den Fluss, indem sie den Benutzer um Erläuterungen oder zusätzliche Informationen bitten. Der Benutzer sollte in der Lage sein, die Frage sofort zu beantworten oder später zurückzukehren und mit der Konversation weiter zu interagieren.
Beim Abrufen einer vergangenen Konversation muss der vollständige Interaktionsverlauf geladen werden, damit der Benutzer dem Konversationskontext folgen kann. Mit anderen Worten: Die Unterbrechungsmeldungen, die um Klärung oder zusätzliche Informationen bitten, sollten ebenfalls in den Verlauf aufgenommen werden.
Das Problem besteht darin, dass Langgraph dies nicht automatisch tut und es sehr schwierig war, den Verlauf zu aktualisieren, bevor diese Unterbrechungen ausgelöst wurden. Ich bitte um Hilfe oder Anleitung, wie man Unterbrechungsmeldungen richtig in den Gesprächsverlauf einfügt.
Unten finden Sie einen Code, der mein Problem verdeutlicht. Offensichtlich hat mein tatsächlicher Workflow mehr Knoten, aber der Einfachheit und Klarheit halber sollte dieses Beispiel ausreichen:

Code: Select all

import asyncio
from typing import Annotated, TypedDict

from langchain.messages import AnyMessage, HumanMessage
from langchain_core.messages import AIMessage
from langchain_core.runnables import RunnableConfig
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import END, START, StateGraph
from langgraph.graph.message import add_messages
from langgraph.types import interrupt

class State(TypedDict):
messages: Annotated[list[AnyMessage], add_messages]

def ask_user(state: State):
"""Update messages list before interrupt."""
message = "Need more info"
state["messages"].append(AIMessage(content=message))
interrupt(message)

workflow = StateGraph(State)
workflow.add_node("ask_user", ask_user)
workflow.add_edge(START, "ask_user")
workflow.add_edge("ask_user", END)
graph = workflow.compile(checkpointer=MemorySaver())

async def main():
config = RunnableConfig(configurable={"thread_id": "1"})
response = graph.astream(input={"messages": [HumanMessage(content="Hello")]}, config=config)

async for event in response:
print(event)

hist = await graph.aget_state(config=config)
print(hist.values)

asyncio.run(main())
Beim Ausführen des Codes enthält die Variable hist nur die „Hallo“-Nachricht in der Werteliste, statt zwei Nachrichten.
Ein merkwürdiger Punkt ist, dass die Nachrichtenliste aktualisiert wird, wenn ich die Startmethode von astream auf „Just stream“ ändere und die for-Schleife synchronisiere! Aber ich brauche das Diagramm wirklich asynchron, daher ist es keine Lösung.
Ich habe bereits versucht, den Status mit Command zu aktualisieren und die Funktion „graph update_state“ zu verwenden, ohne Ergebnisse.
Vielen Dank im Voraus für jede Hilfe.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post