如何流式传输图的完整状态¶
LangGraph 支持多种流式传输模式。主要模式包括
values
:此流式传输模式会流式传输回图的值。这是每个节点被调用后**图的完整状态**。updates
:此流式传输模式会流式传输回图的更新。这是每个节点被调用后**图的状态更新**。
本指南涵盖stream_mode="values"
。
设置¶
首先,让我们安装所需的软件包并设置 API 密钥
在 [1]
已复制!
%%capture --no-stderr
%pip install -U langgraph langchain-openai langchain-community
%%capture --no-stderr %pip install -U langgraph langchain-openai langchain-community
在 [ ]
已复制!
import getpass
import os
def _set_env(var: str):
if not os.environ.get(var):
os.environ[var] = getpass.getpass(f"{var}: ")
_set_env("OPENAI_API_KEY")
import getpass import os def _set_env(var: str): if not os.environ.get(var): os.environ[var] = getpass.getpass(f"{var}: ") _set_env("OPENAI_API_KEY")
定义图¶
在本指南中,我们将使用一个简单的 ReAct 代理。
在 [3]
已复制!
from typing import Literal
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.runnables import ConfigurableField
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
@tool
def get_weather(city: Literal["nyc", "sf"]):
"""Use this to get weather information."""
if city == "nyc":
return "It might be cloudy in nyc"
elif city == "sf":
return "It's always sunny in sf"
else:
raise AssertionError("Unknown city")
tools = [get_weather]
model = ChatOpenAI(model_name="gpt-4o", temperature=0)
graph = create_react_agent(model, tools)
from typing import Literal from langchain_community.tools.tavily_search import TavilySearchResults from langchain_core.runnables import ConfigurableField from langchain_core.tools import tool from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent @tool def get_weather(city: Literal["nyc", "sf"]): """使用此工具获取天气信息。""" if city == "nyc": return "纽约的天气可能多云" elif city == "sf": return "旧金山总是阳光明媚" else: raise AssertionError("未知城市") tools = [get_weather] model = ChatOpenAI(model_name="gpt-4o", temperature=0) graph = create_react_agent(model, tools)
流式传输值¶
在 [4]
已复制!
inputs = {"messages": [("human", "what's the weather in sf")]}
async for chunk in graph.astream(inputs, stream_mode="values"):
chunk["messages"][-1].pretty_print()
inputs = {"messages": [("human", "旧金山的的天气怎么样")]} async for chunk in graph.astream(inputs, stream_mode="values"): chunk["messages"][-1].pretty_print()
================================ Human Message ================================= what's the weather in sf ================================== Ai Message ================================== Tool Calls: get_weather (call_61VvIzqVGtyxcXi0z6knZkjZ) Call ID: call_61VvIzqVGtyxcXi0z6knZkjZ Args: city: sf ================================= Tool Message ================================= Name: get_weather It's always sunny in sf ================================== Ai Message ================================== The weather in San Francisco is currently sunny.
如果我们只想获取最终结果,我们可以使用相同的方法,只需跟踪我们收到的最后一个值即可
在 [5]
已复制!
inputs = {"messages": [("human", "what's the weather in sf")]}
async for chunk in graph.astream(inputs, stream_mode="values"):
final_result = chunk
inputs = {"messages": [("human", "旧金山的的天气怎么样")]} async for chunk in graph.astream(inputs, stream_mode="values"): final_result = chunk
在 [6]
已复制!
final_result
final_result
输出[6]
{'messages': [HumanMessage(content="what's the weather in sf", id='54b39b6f-054b-4306-980b-86905e48a6bc'), AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_avoKnK8reERzTUSxrN9cgFxY', 'function': {'arguments': '{"city":"sf"}', 'name': 'get_weather'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 14, 'prompt_tokens': 57, 'total_tokens': 71}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_5e6c71d4a8', 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-f2f43c89-2c96-45f4-975c-2d0f22d0d2d1-0', tool_calls=[{'name': 'get_weather', 'args': {'city': 'sf'}, 'id': 'call_avoKnK8reERzTUSxrN9cgFxY'}], usage_metadata={'input_tokens': 57, 'output_tokens': 14, 'total_tokens': 71}), ToolMessage(content="It's always sunny in sf", name='get_weather', id='fc18a798-c7b2-4f73-84fa-8ffdffb6ddcb', tool_call_id='call_avoKnK8reERzTUSxrN9cgFxY'), AIMessage(content='The weather in San Francisco is currently sunny. Enjoy the sunshine!', response_metadata={'token_usage': {'completion_tokens': 14, 'prompt_tokens': 84, 'total_tokens': 98}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_5e6c71d4a8', 'finish_reason': 'stop', 'logprobs': None}, id='run-21418147-da8e-4738-a076-239377397c40-0', usage_metadata={'input_tokens': 84, 'output_tokens': 14, 'total_tokens': 98})]}
在 [7]
已复制!
final_result["messages"][-1].pretty_print()
final_result["messages"][-1].pretty_print()
================================== Ai Message ==================================
The weather in San Francisco is currently sunny. Enjoy the sunshine!