Agent 与工具调用1693 字
LangGraph流式处理
·全库 327 / 611
《LangGraph流式处理》共 0.2 万字,通篇围绕 场景、ReAct、LangChain、Agent 展开,归在「Agent 与工具调用」这一层。
覆盖场景ReActLangChainAgent上下文延迟
适合要让 AI 真的去干活、不只是陪人聊天的人
目录骨架(2 节)
- 流式完整状态
- 流式状态更新
示例代码
注:将ppt后缀名改为zip后解压
python版本:3.12.4
流式处理 对于增强基于 LLM 的应用响应性至关重要。通过逐步显示输出,即使在完整响应尚未准备好之前,流式处理显著改善用户体验(UX),尤其是在处理 LLM 的延迟时。
官方文档地址:https://langchain-ai.github.io/langgraph/how-tos/#streaming
中文文档地址:https://www.aidoczh.com/langgraph/how-tos/#_3
流式完整状态
LangGraph 支持多种流式模式。主要的有
- values: 此流式模式流回图的值。这是每个节点调用后图的完整状态。
- updates: 此流式模式流回图的更新。这是每个节点调用后图状态的更新。
stream_mode="values"
- 行为: 在 values 模式下,数据流会返回每个步骤的完整输出。这意味着每一次迭代都会得到一个完整的结果对象。
- 适用场景: 适用于需要每一步的完整结果进行进一步处理的场景。
- 示例: 如果你有一个复杂的计算过程,每一步都需要完整的上下文来进行下一步的计算,那么 values 模式是合适的选择。
stream_mode="updates"
- 行为: 在 updates 模式下,数据流会返回每个步骤的增量更新。这意味着每一次迭代只会得到自上一次迭代以来的变化部分。
- 适用场景: 适用于需要实时更新或增量更新的场景,比如实时显示处理进度或逐步输出的场景。
- 示例: 如果你在构建一个实时聊天应用程序,需要逐步显示对话内容,那么 updates 模式是合适的选择。
设置
在本指南中,我们将使用一个简单的 ReAct 代理。
%pip install -U langgraph langchain-openai
#示例:streaming_complete_state.py
# 导入异步IO模块
import asyncio
# 从类型提示模块中导入Literal
from typing import Literal
# 导入工具装饰器
from langchain_core.tools import tool
# 导入OpenAI聊天模型
from langchain_openai import ChatOpenAI
# 导入创建react代理的函数
from langgraph.prebuilt import create_react_agent
# 定义一个工具函数
@tool
# 定义一个获取天气的函数,参数city只能是"nyc"或"sf"
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"
# 如果城市不是nyc或sf
else:
# 抛出一个断言错误
raise AssertionError("Unknown city")
# 将get_weather函数放入工具列表
tools = [get_weather]
# 创建一个OpenAI聊天模型实例,使用gpt-4o模型,温度设为0
model = ChatOpenAI(model_name="gpt-4o", temperature=0)
# 使用模型和工具创建一个react代理
graph = create_react_agent(model, tools)
流值
# 定义输入消息,询问旧金山的天气
inputs = {"messages": [("human", "what's the weather in sf")]}
# 异步迭代代理的输出流,模式为"values"
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