values:这会在graph的每个步骤之后传输状态的完整值。 updates:这会在graph的每个步骤之后将更新传输到状态。如果在同一步骤中进行多项更新(例如运行多个节点),则这些更新将分别传输。
custom:这将从图形节点内部流式传输自定义数据。
messages:这将为调用 LLM 的图形节点传输 LLM 令牌和元数据。
debug:这会在图表的整个执行过程中传输尽可能多的信息。
graph.stream(..., stream_mode=["updates", "messages"])
...
('messages', (AIMessageChunk(content='Hi'), {'langgraph_step': 3, 'langgraph_node': 'agent', ...}))
...
('updates', {'agent': {'messages': [AIMessage(content="Hi, how can I help you?")]}})
event:这是正在发出的事件类型。可以在此处(https://python.langchain.com/docs/concepts/#callback-events)找到所有回调事件和触发器的详细表格。 name: event的name data:与event相关的数据
每个节点(runnable)在开始执行时发出 on_chain_start,在节点执行期间发出 on_chain_stream,在节点完成时发出 on_chain_end。节点事件将在事件的名称字段中包含节点名称 将在graph执行开始时发出 on_chain_start,在每个节点执行后发出 on_chain_stream,并在graph完成时发出 on_chain_end。图表事件将在事件的名称字段中包含 LangGraph 对状态通道的任何写入(即任何时候更新某个状态key的value)都将发出 on_chain_start 和 on_chain_end 事件
from langchain_ollama import ChatOllama
import base_conf
from langgraph.graph import StateGraph, MessagesState, START, END
import asyncio
from langchain_core.messages import HumanMessage
model = ChatOllama(base_url=base_conf.base_url,
model=base_conf.model_name,
temperature=base_conf.temperature)
def call_model(state: MessagesState):
response = model.invoke(state['messages'])
return {"messages": response}
workflow = StateGraph(MessagesState)
workflow.add_node(call_model)
workflow.add_edge(START, "call_model")
workflow.add_edge("call_model", END)
app = workflow.compile()
async def run(app):
async for event in app.astream_events({"messages": [HumanMessage("你好")]}, version="v2"):
kind = event["event"]
print(f"{kind}: {event['name']}")
asyncio.run(run(app))
on_chain_start: LangGraph
on_chain_start: __start__
on_chain_start: _write
on_chain_end: _write
on_chain_start: _write
on_chain_end: _write
on_chain_stream: __start__
on_chain_end: __start__
on_chain_start: call_model
on_chat_model_start: ChatOllama
on_chat_model_stream: ChatOllama
on_chat_model_stream: ChatOllama
on_chat_model_stream: ChatOllama
on_chat_model_stream: ChatOllama
on_chat_model_end: ChatOllama
on_chain_start: _write
on_chain_end: _write
on_chain_stream: call_model
on_chain_end: call_model
on_chain_stream: LangGraph
on_chain_end: LangGraph
这些事件如下:
{'event': 'on_chat_model_stream',
'name': 'ChatOpenAI',
'run_id': '3fdbf494-acce-402e-9b50-4eab46403859',
'tags': ['seq:step:1'],
'metadata': {'langgraph_step': 1,
'langgraph_node': 'call_model',
'langgraph_triggers': ['start:call_model'],
'langgraph_task_idx': 0,
'checkpoint_id': '1ef657a0-0f9d-61b8-bffe-0c39e4f9ad6c',
'checkpoint_ns': 'call_model',
'ls_provider': 'openai',
'ls_model_name': 'gpt-4o-mini',
'ls_model_type': 'chat',
'ls_temperature': 0.7},
'data': {'chunk': AIMessageChunk(content='Hello', id='run-3fdbf494-acce-402e-9b50-4eab46403859')},
'parent_ids': []}