如何捕获发送至OpenAI API的原始消息并调试LangChain代理?
查看LangChain发送给OpenAI API的完整原始消息与响应的方法
以下两种方法可以直接获取发送到OpenAI的完整请求及响应,方便调试代理的记忆和指令遗漏问题:
方法一:自定义LangChain回调捕获请求与响应
通过自定义回调处理器,在LLM调用前后打印完整的请求内容和返回结果:
from langchain.callbacks.base import BaseCallbackHandler from langchain.chat_models import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.agents import initialize_agent, AgentType class OpenAIDebugHandler(BaseCallbackHandler): def on_llm_start(self, serialized, prompts, **kwargs): print("\n=== 发送至OpenAI的完整请求内容 ===") for prompt in prompts: print(prompt) def on_llm_end(self, response, **kwargs): print("\n=== OpenAI返回的完整响应内容 ===") print(response) # 初始化组件并绑定回调 memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) llm = ChatOpenAI(temperature=0, callbacks=[OpenAIDebugHandler()]) agent_chain = initialize_agent( tools, llm, agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, verbose=True, memory=memory ) agent_chain.run(input="hi, I am Bob")
运行后会直接输出完整的请求prompt(包括LangChain自动添加的代理指令、历史对话)和OpenAI的原始响应。
方法二:开启OpenAI库的调试日志
利用OpenAI Python库本身的日志功能,打印所有API交互的细节:
import openai import logging # 开启debug级别的日志 logging.basicConfig(level=logging.DEBUG) openai.log = "debug" # 原有业务代码 memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) llm = ChatOpenAI(temperature=0) agent_chain = initialize_agent(tools, llm, agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, verbose=True, memory=memory) agent_chain.run(input="hi, I am Bob")
该方式会输出HTTP请求的完整细节,包括请求体中的消息数组(系统提示、历史对话、当前输入)和响应的所有内容。
额外调试提示
可以通过以下代码检查记忆组件是否正确存储了历史对话:
print(memory.load_memory_variables({}))
确认chat_history中是否包含之前的对话内容,排查记忆未生效的问题。
内容的提问来源于stack exchange,提问作者Piotrek
相关产品推荐
相关产品推荐

