You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangChain Agent提前终止问题求助:声明调用工具却未执行

LangChain Agent未执行收尾工具问题排查与解决

可能原因

  • OpenAI GPT-4模型迭代:上月OpenAI对GPT-4系列模型做过指令对齐、输出逻辑的调整,可能导致Agent思考链提前终止。
  • 结构化Agent模板兼容性:旧版LangChain的STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION模板,可能和新版GPT-4的输出格式不匹配,导致Agent误判任务已完成。
  • 上下文窗口占满:前置工具返回内容过长,耗尽GPT-4的上下文空间,导致跳过收尾工具调用步骤。

解决方法

1. 强化Prompt约束

修改Agent的系统Prompt,明确强制要求必须执行收尾工具后才能结束:

任务完成的唯一判定标准是调用了[你的收尾工具名称],未调用该工具前,绝对不能终止流程,必须继续触发工具调用。

同时在Prompt中明确收尾工具的触发时机:

所有前置工具执行完成后,立即调用[你的收尾工具名称],不得省略该步骤。

2. 自定义输出解析器强制检查

针对结构化Agent的输出,自定义解析器,检查是否遗漏收尾工具调用,若遗漏则强制触发:

from langchain.agents import AgentOutputParser
from langchain.schema import AgentAction, AgentFinish
from langchain.agents.structured_chat.output_parser import StructuredChatOutputParser

class ForceFinalToolParser(AgentOutputParser):
    def __init__(self, final_tool_name):
        self.final_tool_name = final_tool_name
        super().__init__()

    def parse(self, llm_output: str) -> AgentAction | AgentFinish:
        # 执行原有结构化解析逻辑
        base_parser = StructuredChatOutputParser()
        parsed = base_parser.parse(llm_output)
        
        # 检查是否触发终止且未调用收尾工具
        if isinstance(parsed, AgentFinish):
            # 从思考日志中检查是否已调用目标工具
            if self.final_tool_name not in parsed.log:
                return AgentAction(
                    tool=self.final_tool_name,
                    tool_input={},  # 替换为你的工具输入参数
                    log="必须调用收尾工具完成任务"
                )
        return parsed

绑定到Agent上:

from langchain.agents import StructuredChatAgent

parser = ForceFinalToolParser(final_tool_name="你的收尾工具名称")
agent = StructuredChatAgent.from_llm_and_tools(
    llm=your_gpt4_llm,
    tools=your_tools,
    output_parser=parser,
    # 保留原有其他参数
)

3. 截断前置工具返回内容

限制前置工具的返回长度,避免耗尽上下文空间:

def your_pre_tool_function(input_data):
    # 原有工具执行逻辑
    raw_result = execute_pre_tool(input_data)
    # 截断到合理长度,比如1500字符
    max_len = 1500
    truncated_result = raw_result[:max_len] + "\n[内容已截断,仅保留关键信息]" if len(raw_result) > max_len else raw_result
    return truncated_result

4. 切换Agent类型验证

暂时切换到CHAT_ZERO_SHOT_REACT_DESCRIPTION类型Agent测试,若问题消失,说明是结构化Agent的特定兼容性问题,可以针对性调整模板。

5. 检查Azure OpenAI模型版本

登录Azure OpenAI控制台,确认当前GPT-4部署的模型版本是否有变更(比如从旧版切换到gpt-4-0613或更高),若有,尝试回滚到之前稳定的版本测试。

内容的提问来源于stack exchange,提问作者Cekir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:32:25