Langchain/CrewAI场景下,如何更优打印Ollama服务器的请求与响应?
更优的Ollama+LangChain/CrewAI调试与日志记录方案
方案1:利用LangChain内置回调处理器(CallbackHandler)
LangChain原生支持通过自定义CallbackHandler拦截LLM的请求和响应,无需额外搭建代理服务器,直接嵌入业务代码即可实现调试日志记录。
- 实现自定义CallbackHandler,重写关键方法捕获请求与响应:
from langchain.callbacks.base import BaseCallbackHandler from langchain.schema import LLMResult class DebugLLMCallback(BaseCallbackHandler): def on_llm_start(self, serialized, prompts, **kwargs): print("\n=== LLM 请求输入 ===") for idx, prompt in enumerate(prompts): print(f"Prompt {idx+1}:\n{prompt}\n") def on_llm_end(self, response: LLMResult, **kwargs): print("\n=== LLM 响应输出 ===") for idx, generation in enumerate(response.generations): print(f"Response {idx+1}:\n{generation[0].text}\n")
- 将回调绑定到Ollama LLM实例,CrewAI可直接复用该实例:
from langchain.llms import Ollama from crewai import Agent, Task, Crew # 初始化带调试回调的LLM llm = Ollama(model="llama2", callbacks=[DebugLLMCallback()]) # CrewAI中使用该LLM agent = Agent( role="测试代理", goal="完成指定测试任务", backstory="用于调试的测试代理", llm=llm )
方案2:直接启用Ollama内置调试日志
Ollama自带完整的调试日志功能,零开发成本即可捕获所有请求和响应细节:
- 启动Ollama服务器时开启调试模式:
OLLAMA_DEBUG=1 ollama serve
控制台会实时输出完整的HTTP请求、提示词内容和模型返回结果,满足快速调试需求。
- 如需持久化日志,可将输出重定向到文件:
OLLAMA_DEBUG=1 ollama serve > ollama_debug.log 2>&1
方案3:CrewAI自定义执行钩子
针对多Agent协作场景,可直接扩展CrewAI的Agent类,聚焦任务执行流程的输入输出记录:
- 自定义带日志逻辑的Agent:
from crewai import Agent class DebugAgent(Agent): def execute(self, task): print(f"\n=== Agent {self.role} 任务输入 ===") print(f"任务描述: {task.description}") print(f"附加信息: {task.additional_info}\n") # 执行原任务逻辑 result = super().execute(task) print(f"\n=== Agent {self.role} 任务输出 ===") print(f"执行结果: {result}\n") return result
- 使用自定义Agent创建协作流程:
agent = DebugAgent( role="测试代理", goal="完成指定测试任务", backstory="用于调试的测试代理", llm=llm )
方案对比
| 方案 | 优点 | 适用场景 |
|---|---|---|
| LangChain回调 | 集成度高,可自定义日志格式与存储方式 | 侧重LLM层级调试,兼容CrewAI |
| Ollama内置日志 | 零开发成本,日志信息全面 | 快速调试,无需修改业务代码 |
| CrewAI自定义钩子 | 贴合多Agent协作场景,聚焦任务流程 | 需要调试Agent间协作逻辑的场景 |
内容的提问来源于stack exchange,提问作者Max Zemsky
相关产品推荐
相关产品推荐

