Agent 与工具调用1693 字

LangGraph流式处理

·全库 327 / 611

《LangGraph流式处理》共 0.2 万字,通篇围绕 场景、ReAct、LangChain、Agent 展开,归在「Agent 与工具调用」这一层。

覆盖场景ReActLangChainAgent上下文延迟

适合要让 AI 真的去干活、不只是陪人聊天的人

目录骨架(2 节)
  1. 流式完整状态
  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

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求