如何用LangSmith追踪CrewAI中的LLM调用?解决调用未捕获问题
问题分析
你直接调用agent.llm.call()时,CrewAI封装的LLM实例没有触发LangChain的LangSmith追踪机制,而直接调用LangChain原生的llm.invoke()能正常被捕获,核心原因是CrewAI默认不会自动继承LangSmith的追踪回调,需要手动配置链路。
解决方案
1. 修复代码导入错误
先修正第一行的导入语句:
from crewai import Agent from langchain_openai import ChatOpenAI
2. 配置追踪回调,让CrewAI调用被LangSmith捕获
有三种可行方式:
方式一:给LLM实例显式启用追踪
如果已正确配置LangSmith环境变量(LANGCHAIN_TRACING_V2=true、LANGCHAIN_API_KEY等),初始化ChatOpenAI时保留空回调列表即可,LangChain会自动加载环境配置的追踪逻辑:
llm = ChatOpenAI( model="gpt-4o", temperature=0.7, verbose=True, callbacks=[] )
方式二:给CrewAI Agent传入追踪回调
直接将LangChain的追踪回调传递给Agent,确保所有Agent发起的LLM调用走追踪链路:
from langchain.callbacks.tracers.langchain import LangChainTracer def create_simple_agent(): tracer = LangChainTracer() agent = Agent( role='Question Answerer', goal='Answer questions clearly and concisely', backstory="""You are a helpful AI assistant that answers questions directly and accurately. Keep responses clear and to the point.""", llm=llm, verbose=True, callbacks=[tracer] ) return agent
方式三:使用Agent标准执行方法(推荐)
避免直接调用agent.llm.call(),改用CrewAI Agent的标准方法执行任务,内部会自动处理回调传递:
if __name__ == "__main__": agent = create_simple_agent() # 用run方法替代直接调用agent.llm.call test_result = agent.run("Tell me a lame dad joke") print(test_result) test_result = llm.invoke("Tell me a good dad joke") print(test_result.content)
验证步骤
- 打印环境变量确认LangSmith配置生效:
print(os.environ.get("LANGCHAIN_TRACING_V2")) - 运行修改后的代码执行两次调用
- 登录LangSmith后台检查两条调用记录是否都被捕获
内容的提问来源于stack exchange,提问作者Ya.
相关产品推荐
相关产品推荐

