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())
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.
Mobile version