LangChain Agent - 火山引擎大模型推理与回答的完整流式输出

目录

[一、火山引擎大模型与 LangChain 的集成](#一、火山引擎大模型与 LangChain 的集成)

[1. 官方SDK缺失](#1. 官方SDK缺失)

[2. ChatOpenAI 方式的流式局限](#2. ChatOpenAI 方式的流式局限)

二、官方社区的解决方案

[三、利用 ChatDeepSeek 实现推理与回答的完整流式输出](#三、利用 ChatDeepSeek 实现推理与回答的完整流式输出)

[1. 核心 ChatDeepSeek 初始化](#1. 核心 ChatDeepSeek 初始化)

[2. 编写流式解析逻辑](#2. 编写流式解析逻辑)

[3. Agent 创建与执行](#3. Agent 创建与执行)

四、总结


环境配置详见:https://blog.csdn.net/W_Meng_H/article/details/155595693

一、火山引擎大模型与 LangChain 的集成

1. 官方SDK缺失

目前 LangChain 官方仓库中 没有 直接针对火山引擎大模型服务的模型类。通常需要自行封装 Volcano Engine 的 HTTP API,或者寻找其他兼容的第三方 LangChain 封装。

火山引擎提供的兼容方案:https://www.volcengine.com/docs/82379/1330626?lang=zh#langchain-openai-sdk

2. ChatOpenAI 方式的流式局限

为了快速兼容,我尝试使用 LangChain 中通用的 ChatOpenAI 类,可以实现模型的对接,但是,这种方式往往只能流式输出模型的"最终回答"(Final Answer)部分。 对于 Agent 在执行工具调用之前的 "思考过程"(Reasoning/Thought),ChatOpenAI 的流式机制可能无法捕获或有效解析这部分信息。

二、官方社区的解决方案

正是由于上述的流式输出痛点,在查阅 GitHub Issues 和相关官方文档后,我找到了 LangChain-DeepSeek 项目。它的 ChatDeepSeek 类在设计时,考虑到了大模型在流式输出中包含的 additional_kwargs 字段,尤其是用于承载 推理信息 的内容(在火山引擎中对应于reasoning_content 字段)。

官方链接:https://docs.langchain.com/oss/python/integrations/chat#example-openrouter

三、利用 ChatDeepSeek 实现推理与回答的完整流式输出

我们使用 LangChain-DeepSeek 提供的 ChatDeepSeek 类,直接传入火山引擎的 API Key 和 Base URL,并开启 streaming。

1. 核心 ChatDeepSeek 初始化

python 复制代码
from langchain_deepseek.chat_models import ChatDeepSeek

# 初始化 ChatDeepSeek
volcano_chat = ChatDeepSeek(
    api_key=VOLC_API_KEY,
    api_base=VOLC_BASE_URL,
    model=VOLC_MODEL_NAME, # 火山引擎的模型名称
    top_p=MODEL_TOP_P,
    streaming=True,
    # 请求体中开启 thinking 字段,让模型返回思考过程
    extra_body={"thinking": {"type": "enabled"}} 
)

2. 编写流式解析逻辑

由于 ChatDeepSeek 能够将推理内容放入 message_chunk.additional_kwargs 中,我们需要一个自定义的流式解析函数来区分和打印 思考内容 和 最终回答。

我们使用两个全局变量 REASONING_BUFFER 和 AGENT_STAGE 来管理输出状态:

  • AGENT_STAGE = 0 (思考阶段): 累积并实时打印 reasoning_content 内容。

  • AGENT_STAGE = 1 (回答阶段): 在 content 首次出现时,打印思考总结并切换阶段,然后开始打印 content。

python 复制代码
# 引入 REASONING_BUFFER 和 AGENT_STAGE 
REASONING_BUFFER = ""
AGENT_STAGE = 0 # 0: 思考阶段, 1: 最终回答阶段

def format_stream_step(step: Dict[str, Any]) -> None:
    global REASONING_BUFFER, AGENT_STAGE

    message_chunk = step[0]
    # 提取 reasoning 内容
    reasoning = message_chunk.additional_kwargs.get('reasoning_content', '')
    content = message_chunk.content or ''

    # 1. 累积思维内容 (STAGE 0)
    if reasoning.strip():
        REASONING_BUFFER += reasoning
        if AGENT_STAGE == 0:
             print(f"{reasoning}", end="", flush=True) # 实时打印思考

    # 2. 如果 Content 出现 (触发 STAGE 切换)
    if content:
        if AGENT_STAGE == 0:
            # 首次出现 Content,代表思考结束或工具结果返回
            print("\n" + "=" * 20 + "流式推理过程" + "=" * 20)
            if REASONING_BUFFER.strip():
                 print(f"🧠 [思考总结]: {REASONING_BUFFER}\n", end="", flush=True)
            
            # 切换到回答阶段
            print(f"🤔 [回答]: ", end="", flush=True)
            AGENT_STAGE = 1 

        # 2b. 打印正文内容 (Answer)
        if AGENT_STAGE == 1:
             print(content, end="", flush=True)

3. Agent 创建与执行

最后,我们将 ChatDeepSeek 模型、和动态 System Prompt 中间件组合成一个完整的 Agent。

python 复制代码
# 创建Agent
agent = create_agent(
    model=volcano_chat,
    middleware=[user_role_prompt]
)

# 执行并遍历流
stream = agent.stream(...)
for step in stream:
    format_stream_step(step)

print("\n\n推理完成!")

四、总结

通过使用 ChatDeepSeek 作为代理,并编写自定义的流式解析逻辑,我们实现了:

  1. 完整流式体验: 思考过程和最终回答都能实时打印。

  2. Agent 透明化: 用户能清晰看到 Agent 是如何思考、决定调用工具,并最终给出答案的全过程。

  3. 兼容性增强: 成功将 LangChain Agent 的能力与 Volcano Engine 的强大模型结合起来。

相关推荐
用户31346721435414 小时前
Agent相关-FAISS 与 LangChain 在文档检索中的分工
langchain
用户31346721435415 小时前
Agent相关-文档加载器 Document Loader
langchain·llm
染指111018 小时前
127.Agent-LangChain核心组件-模型输出后json修复
人工智能·langchain·agent·agents
Maiko Star1 天前
* LangChain 自定义中间件详解:Hook、装饰器、类与执行顺序
中间件·langchain
夏天拐跑了西瓜1 天前
一文入门LangChain:从框架认知到构建你的第一个AI Agent
python·langchain·conda·agent
BD_Marathon1 天前
LangSmith的介绍与基本使用
langchain
Alson_Code1 天前
从0到1打造个人专属编程智能体
人工智能·langchain·ai编程
柒和远方2 天前
LangSmith RAG 量化评估:从"感觉还行"到"数据说话"
langchain·llm·测试
火山引擎和TA的超级拍档们2 天前
地上铁×火山引擎:从埋点采集到万物Agent,AI 重构新能源物流全生命周期
人工智能·重构·火山引擎
染指11102 天前
131.Agent-Agent设计模式-MAS多智能体系统(Multi-Agent-System)
人工智能·设计模式·langchain·agent·agents