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

LangChain对话Agent:工具执行后终止链并返回原始输出

解决对话式Agent工具调用后直接返回原始输出的问题

方法一:通过自定义回调强制终止链并返回工具结果

这种方法能在指定工具调用完成后立即终止Agent的后续处理,直接返回工具原始输出,适合需要严格避免LLM额外处理的场景(比如图表序列化数据)。

实现步骤

  1. 定义回调处理器,检测目标工具调用并触发终止:
from langchain.callbacks.base import BaseCallbackHandler

class DirectToolResultCallback(BaseCallbackHandler):
    def __init__(self, target_tool_names):
        self.target_tool_names = target_tool_names  # 指定需要直接返回结果的工具名称

    def on_tool_end(self, output, tool_name, **kwargs):
        if tool_name in self.target_tool_names:
            # 抛出特定异常以终止Agent执行
            raise ValueError(f"DIRECT_RETURN:{output}")
  1. 初始化Agent并添加该回调,同时封装运行逻辑捕获异常返回结果:
# 配置需要直接返回结果的工具名称(根据你的工具实际name字段调整)
target_tools = ["Calculator", "ChartSerializer"]

# 创建回调实例
result_callback = DirectToolResultCallback(target_tools)

# 初始化Agent
conversational_agent = initialize_agent(
    agent='chat-conversational-react-description',
    tools=[CalculatorTool()],  # 加入你的所有工具
    llm=llm_gpt4,
    verbose=True,
    max_iterations=2,
    early_stopping_method="generate",
    memory=memory,
    callbacks=[result_callback]
)

# 封装Agent运行函数
def run_agent(input_text):
    try:
        return conversational_agent.run(input_text)
    except ValueError as e:
        error_msg = str(e)
        if error_msg.startswith("DIRECT_RETURN:"):
            # 提取并返回工具原始输出
            return error_msg.split(":", 1)[1].strip()
        # 其他异常正常抛出
        raise

方法二:修改Agent提示词,让LLM直接返回工具输出

通过修改Agent的系统提示,明确告知LLM在调用指定工具后无需添加额外格式化内容,直接返回工具结果。这种方法更简洁,但依赖LLM遵循提示指令。

实现步骤

from langchain.agents.chat.prompt import CHAT_CONVERSATIONAL_REACT_DESCRIPTION_PROMPT

# 自定义系统提示,添加特定工具的返回规则
custom_system_prompt = """你是对话式助手,需按以下规则处理工具调用:
- 调用Calculator或ChartSerializer工具后,直接返回工具的输出结果,不要添加任何解释、格式化文本;
- 其他工具按正常流程处理,生成合适的最终回答。"""

# 替换原prompt的系统消息部分
custom_prompt = CHAT_CONVERSATIONAL_REACT_DESCRIPTION_PROMPT.partial(
    system_message=custom_system_prompt
)

# 使用自定义prompt初始化Agent
conversational_agent = initialize_agent(
    agent='chat-conversational-react-description',
    tools=[CalculatorTool()],
    llm=llm_gpt4,
    verbose=True,
    max_iterations=2,
    early_stopping_method="generate",
    memory=memory,
    agent_kwargs={"prompt": custom_prompt}
)

说明

  • 方法一的优势是强制终止链,完全避免LLM后续处理,适合对输出准确性要求极高的场景(比如序列化图表数据);
  • 方法二更简洁,无需额外异常处理,但需要确保LLM能准确遵循提示中的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:53:13