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

如何在等待LangChain Agent React最终响应时实时获取其中间步骤?

实时获取LangChain AgentReact的中间交互步骤

问题背景

使用LangChain库中的AgentReact时,需要在等待最终响应的过程中实时获取并显示中间交互步骤,但当前代码仅在整个流程完成后才返回交互记录与最终结果,无法满足实时展示的需求。

现有代码

def question_answer(question: str, agents: AgentExecutor):
    
    list_logs_result = []
    answer = agents.invoke({'input': prompt_templates_100.format(question=question)}, )
    interactions = format_interactions(answer)

    
    for interaction in interactions:
        list_logs_result.append({"log": interaction["log"], "result": interaction["result"]})

    return answer["output"], list_logs_result

解决方案

LangChain的AgentExecutor支持通过**回调函数(Callback Handler)**实时捕获中间步骤,无需等待整个流程结束。具体实现步骤如下:

1. 自定义回调类

继承BaseCallbackHandler,重写关键方法来处理Agent的每一步动作和工具调用结果,实现实时输出或收集中间日志:

from langchain.callbacks.base import BaseCallbackHandler
from langchain.schema import AgentAction, AgentFinish

class RealTimeAgentCallback(BaseCallbackHandler):
    def __init__(self):
        self.interactions = []

    def on_agent_action(self, action: AgentAction, **kwargs) -> None:
        # 捕获Agent思考后的动作(比如调用工具的决策)
        log_entry = {"log": action.log, "result": f"准备调用工具: {action.tool},参数: {action.tool_input}"}
        self.interactions.append(log_entry)
        # 这里可以直接打印实时显示,或者发送到前端等
        print(f"实时日志: {log_entry['log']}")
        print(f"实时结果: {log_entry['result']}")

    def on_tool_end(self, output: str, **kwargs) -> None:
        # 捕获工具调用后的返回结果
        log_entry = {"log": "工具调用完成", "result": output}
        self.interactions.append(log_entry)
        print(f"实时日志: {log_entry['log']}")
        print(f"实时结果: {log_entry['result']}")

    def on_agent_finish(self, finish: AgentFinish, **kwargs) -> None:
        # 捕获Agent最终完成的结果
        log_entry = {"log": "Agent流程结束", "result": finish.return_values['output']}
        self.interactions.append(log_entry)
        print(f"实时日志: {log_entry['log']}")
        print(f"实时结果: {log_entry['result']}")

2. 修改调用逻辑

在调用AgentExecutor.invoke时传入自定义的回调实例,同时可以实时收集或展示中间步骤:

def question_answer(question: str, agents: AgentExecutor):
    # 初始化回调实例
    callback = RealTimeAgentCallback()
    
    # 调用Agent时传入回调
    answer = agents.invoke(
        {'input': prompt_templates_100.format(question=question)},
        callbacks=[callback]
    )
    
    # 最终返回结果和所有交互记录(也可以在回调中实时处理,无需等到最后收集)
    return answer["output"], callback.interactions

关键说明

  • on_agent_action:在Agent决定调用工具时触发,可获取Agent的思考日志和工具调用信息
  • on_tool_end:在工具调用完成返回结果时触发,可获取工具输出
  • on_agent_finish:在Agent完成所有步骤返回最终结果时触发
  • 如果需要将实时日志发送到前端(比如Web应用),可以在回调方法中加入WebSocket推送、队列通知等逻辑,替代示例中的print

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:30:01