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

如何获取LangChain中LLM对象调用外部API的请求与响应历史?

在LangChain中获取Agent的LLM API调用记录

要捕获LangChain Agent运行过程中LLM对外部API的所有请求和响应内容,可以通过以下两种实用方法实现:

方法一:自定义回调处理器(最直接的方式)

利用LangChain的回调系统,自定义一个处理器来记录每一次LLM调用的请求和响应。具体步骤如下:

  1. 定义继承自BaseCallbackHandler的处理器类,重写on_llm_start和on_llm_end方法,分别记录请求提示和响应内容:
from langchain.callbacks.base import BaseCallbackHandler
from langchain.llms import OpenAI
from langchain.agents import initialize_agent, load_tools

class LLMTraceHandler(BaseCallbackHandler):
    def __init__(self):
        self.llm_calls = []  # 存储所有LLM调用记录

    def on_llm_start(self, serialized, prompts, **kwargs):
        # 记录LLM请求的提示文本
        self.llm_calls.append({
            "prompt": prompts[0],
            "response": None
        })

    def on_llm_end(self, response, **kwargs):
        # 记录LLM返回的响应文本
        self.llm_calls[-1]["response"] = response.generations[0][0].text
  1. 初始化LLM、回调处理器和Agent,将处理器传入Agent的callbacks参数:
# 初始化LLM和回调处理器
llm = OpenAI(temperature=0)
trace_handler = LLMTraceHandler()

# 加载示例工具(可替换为你的自定义工具)
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# 初始化Agent并绑定回调
agent = initialize_agent(
    tools,
    llm,
    agent="zero-shot-react-description",
    verbose=True,
    callbacks=[trace_handler]
)
  1. 运行Agent后,直接从处理器的llm_calls列表中提取所有调用记录:
# 执行Agent任务
agent.run("谁是OpenAI现任CEO?计算他出生年份加100的结果是多少?")

# 打印所有LLM调用记录
for idx, call in enumerate(trace_handler.llm_calls, 1):
    print(f"\n第{idx}次LLM调用:")
    print(f"请求内容:{call['prompt']}")
    print(f"响应内容:{call['response']}")

方法二:使用LangChain内置Tracer(全面追踪场景)

如果需要同时追踪Agent的思考过程、工具调用及LLM请求,可使用LangChain的内置Tracer:

from langchain.callbacks import Tracer

tracer = Tracer()
agent = initialize_agent(
    tools,
    llm,
    agent="zero-shot-react-description",
    verbose=True,
    callbacks=[tracer]
)

agent.run("你的问题")
# 获取完整运行记录,包含所有LLM请求响应细节
run_details = tracer.get_run()

适配ChatModel的注意事项

如果使用的是ChatOpenAI这类聊天模型,需要重写on_chat_model_start方法来捕获对话消息格式的请求:

def on_chat_model_start(self, serialized, messages, **kwargs):
    self.llm_calls.append({
        "messages": messages[0],
        "response": None
    })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:32:36