
LangChain 中工具调用后模型未生成自然语言响应,根本原因常在于所选大模型不真正支持结构化工具调用协议(如 OpenAI-style tool calling),即使文档声称“支持”,也可能缺乏对 tool_calls → tool_messages → 最终 content 生成的完整闭环能力。
langchain 中工具调用后模型未生成自然语言响应,根本原因常在于所选大模型不真正支持结构化工具调用协议(如 openai-style tool calling),即使文档声称“支持”,也可能缺乏对 `tool_calls` → `tool_messages` → 最终 `content` 生成的完整闭环能力。
在 LangChain 的标准工具调用流程中,模型需完成三阶段协同:
-
第一轮响应:识别用户意图,输出
tool_calls(而非content); -
工具执行:开发者调用对应函数,将结果封装为
ToolMessage并追加至消息历史; -
第二轮响应:模型基于原始提问 + 工具返回结果,生成最终人类可读的
content。
你的代码逻辑完全正确——messages 正确追加了 HumanMessage、AIMessage 和两个 ToolMessage,且 second_response 确实被调用。但关键问题在于:你使用的模型 mistralai/Mixtral-8x7B-Instruct-v0.1(通过 Together AI 提供)虽能输出 tool_calls,却无法在接收到 ToolMessage 后生成有意义的 content。其 second_response.content 为空、output_tokens=1、finish_reason='eos',表明模型直接终止输出,未进行推理整合。
✅ 正确做法是选用原生、稳定支持 LangChain 工具调用协议的模型,例如:
-
gpt-4o-mini(推荐:轻量、高效、兼容性极佳) -
gpt-4o、gpt-3.5-turbo-0125(OpenAI 官方模型,协议最成熟) -
claude-3-haiku-20240307或sonnet-20240229(Anthropic 模型,需使用ChatAnthropic)
? 修改示例(仅替换模型配置):
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o-mini", # ✅ 替换为真正支持 tool calling 的模型
api_key="your_openai_api_key", # 使用 OpenAI 官方 API Key
temperature=0,
)
⚠️ 注意事项:
- 不要依赖第三方平台(如 Together AI、Fireworks AI)对开源模型的“工具调用”标注——它们往往仅模拟
tool_calls输出,缺失完整的工具响应链路; - 若必须使用开源模型,请优先选择明确支持
function calling的微调版本(如Qwen2.5-7B-Instruct配合langchain_qwen工具适配器),并验证其是否能处理ToolMessage输入; - 始终检查
second_response.content是否非空,并添加容错逻辑:if not second_response.content.strip(): print("Warning: Model returned empty content. Check model compatibility.")
总结:LangChain 工具调用不是纯代码问题,而是模型能力契约问题。确保模型、客户端(如 ChatOpenAI)、消息格式(ToolMessage)三者严格对齐 OpenAI 工具调用规范,才能实现从工具执行到自然语言回答的无缝闭环。










