LangChain1.0智能体开发:流输出组件

阅读本文您将获得:

  • 如何流式输出智能体进度
  • 如何流式输出大模型Tokens
  • 如何流式输出自定义更新
  • 如何设置多模式流输出

LangChain实现了一个流输出系统,用于呈现实时更新。 流输出对于提升基于大型语言模型(LLMs)构建的应用程序的响应性至关重要。通过逐步显示输出内容 ------ 甚至在完整响应生成之前就开始显示 ------ 流输出极大地改善了用户体验,尤其是在应对大型语言模型的延迟问题时。LangChain的流输出系统能让你将智能体运行过程中的实时反馈同步至应用程序中。

借助LangChain流输出可实现的功能包括:

  • 流式输出智能体进度 ------ 在智能体每一步运行后获取状态更新。
  • 流式输出大型语言模型(LLM)令牌(token)------ 在语言模型生成令牌的同时进行流式输出。
  • 流式输出自定义更新 ------ 发送用户定义的信号(例如,"已获取 10/100 条记录")。
  • 流式输出多种模式 ------ 可从以下模式中选择:更新(智能体进度)、消息(LLM 令牌 + 元数据)或自定义(任意用户数据)。

1、智能体进度

若要流式输出智能体进度,需使用 stream 或 astream 方法,并将 stream_mode 参数设为 "updates"。该设置会在智能体每一步运行后触发一个事件。 例如,若你有一个仅调用一次工具的智能体,应能看到以下更新内容:

  • LLM 节点:包含工具调用请求的 AI 消息(AIMessage)
  • 工具节点:包含执行结果的工具消息(ToolMessage)
  • LLM 节点:最终的 AI 响应
python 复制代码
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from config import api_key, api_base


def init_model():
    model = init_chat_model(
        api_key = api_key,
        base_url = api_base,
        model = "Qwen/Qwen3-8B",
        model_provider = "openai",
        temperature = 0.7,
    )
    return model

def get_weather(city: str) -> str:
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"

agent = create_agent(
    model=init_model(),
    tools=[get_weather],
)
input = {"messages": [{"role": "user", "content": "What is the weather in SF?"}]}
for chunk in agent.stream(input,stream_mode="updates"):
    for step, data in chunk.items():
        print(f"step: {step}")
        print(f"content: {data['messages'][-1].content_blocks}")
text 复制代码
> step: model
> content: [{'type': 'tool_call', 'name': 'get_weather', 'args': {'city': 'SF'}, 'id': '019a58458e2c55db3edd52e3ab1f9252'}]
> step: tools
> content: [{'type': 'text', 'text': "It's always sunny in SF!"}]
> step: model
> content: [{'type': 'text', 'text': 'The weather in San Francisco (SF) is always sunny! ☀️'}]

2、LLM tokens

若要在大模型生成令牌(token)的同时对其进行流式输出,需将stream_mode参数设为"messages"。下方可查看智能体流式输出工具调用过程及最终响应的输出结果。

python 复制代码
for token, metadata in agent.stream(input,stream_mode="messages"):
    print(f"node: {metadata['langgraph_node']}")
    print(f"content: {token.content_blocks}")
    print("\n")

3、自定义更新

若要在工具执行过程中流式输出其生成的更新内容,可使用get_stream_writer(流写入器工具)。

python 复制代码
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool
from langgraph.config import get_stream_writer
from config import api_key, api_base


def init_model():
    model = init_chat_model(
        api_key = api_key,
        base_url = api_base,
        model = "Qwen/Qwen3-8B",
        model_provider = "openai",
        temperature = 0.7,
    )
    return model

@tool
def get_weather(city: str) -> str:
    """Get weather for a given city."""
    writer = get_stream_writer()  
    # stream any arbitrary data
    writer(f"Looking up data for city: {city}")
    writer(f"Acquired data for city: {city}")
    return f"It's always sunny in {city}!"

agent = create_agent(
    model=init_model(),
    tools=[get_weather],
)
input = {"messages": [{"role": "user", "content": "What is the weather in SF?"}]}

for chunk in agent.stream(input,stream_mode="custom"):
    print(chunk)

4、多模式流输出

你可以通过将流模式stream_mode以列表形式传入来指定多种流传输模式,例如:stream_mode=["updates", "custom"]

python 复制代码
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool
from langgraph.config import get_stream_writer
from config import api_key, api_base


def init_model():
    model = init_chat_model(
        api_key = api_key,
        base_url = api_base,
        model = "Qwen/Qwen3-8B",
        model_provider = "openai",
        temperature = 0.7,
    )
    return model

@tool
def get_weather(city: str) -> str:
    """Get weather for a given city."""
    writer = get_stream_writer()  
    # stream any arbitrary data
    writer(f"Looking up data for city: {city}")
    writer(f"Acquired data for city: {city}")
    return f"It's always sunny in {city}!"

agent = create_agent(
    model=init_model(),
    tools=[get_weather],
)
input = {"messages": [{"role": "user", "content": "What is the weather in SF?"}]}

for stream_mode, chunk in agent.stream(input,stream_mode=["updates", "custom"]):
    print(f"stream_mode: {stream_mode}")
    print(f"content: {chunk}")
    print("\n")
相关推荐
墨染天姬2 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志2 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114242 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠2 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
FserSuN2 小时前
LangChain DeepAgent 多 Agent 架构原理学习
架构·langchain
黎阳之光3 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好3 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力3 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo3 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
xiaozhazha_3 小时前
效率提升80%:2026年AI CRM与ERP深度集成的架构设计与实现
人工智能