如何将LangChain Agent的Verbose输出保存至变量?
保存LangChain Agent的Verbose执行日志到变量
调用agent.run()仅能获取最终结果,若需要捕获包含思考、动作、观察等完整执行流程的日志,可通过以下两种方式实现:
方法一:自定义回调Handler(推荐)
通过LangChain的回调系统,自定义BaseCallbackHandler来精准捕获Agent执行各阶段的信息,灵活性更高。
import json from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI from langchain.callbacks.base import BaseCallbackHandler from langchain.schema import AgentAction, AgentFinish # 自定义回调Handler,用于收集执行日志 class AgentLogHandler(BaseCallbackHandler): def __init__(self): self.logs = [] def on_chain_start(self, serialized, inputs, **kwargs) -> None: self.logs.append("> Entering new AgentExecutor chain...") def on_agent_thought(self, thought: str, **kwargs) -> None: self.logs.append(thought.strip()) def on_agent_action(self, action: AgentAction, **kwargs) -> None: self.logs.append(f"Action: {action.tool}\nAction Input: {action.tool_input}") def on_tool_end(self, output, **kwargs) -> None: self.logs.append(f"Observation: {output}") def on_agent_finish(self, finish: AgentFinish, **kwargs) -> None: self.logs.append(f"Final Answer: {finish.return_values['output']}") # 初始化LLM与工具 llm = OpenAI(temperature=0.1) tools = load_tools(["python_repl", "llm-math"], llm=llm) # 实例化日志Handler log_handler = AgentLogHandler() # 初始化Agent,关闭默认verbose避免重复输出,传入自定义回调 agent = initialize_agent( tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=False, callbacks=[log_handler] ) # 执行查询 response = agent.run("What is 3^2. Use calculator to solve.") # 拼接并查看完整日志 full_log = "\n".join(log_handler.logs) print("完整执行日志:") print(full_log) print("\n最终结果:") print(response)
方法二:捕获标准输出流
直接重定向标准输出,捕获verbose=True模式下打印的所有内容,实现简单快捷。
import json import sys from io import StringIO from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI # 初始化LLM与工具 llm = OpenAI(temperature=0.1) tools = load_tools(["python_repl", "llm-math"], llm=llm) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) # 临时替换标准输出为内存缓冲区 old_stdout = sys.stdout captured_output = StringIO() sys.stdout = captured_output # 执行查询 response = agent.run("What is 3^2. Use calculator to solve.") # 恢复标准输出 sys.stdout = old_stdout # 获取并查看完整日志 full_log = captured_output.getvalue() print("完整执行日志:") print(full_log) print("\n最终结果:") print(response)
内容的提问来源于stack exchange,提问作者Troyanovsky
相关产品推荐
相关产品推荐

