如何在Autogen(AG2) GroupChat多智能体架构中集成LangSmith实现可观测性追踪?
问题背景
我正在开发基于Autogen(AG2)的文档分析服务,包含reader和analyzer两个核心智能体:
reader负责拆分文档为块并发送给analyzeranalyzer完成笔记记录
二者通过多智能体GroupChat协调工作。
AG2原生支持AgentOps做可观测性,但我的工具链已集成LangSmith,希望改用LangSmith实现追踪。以下是管理流程的DocumentAnalyzer类核心代码:
class DocumentAnalyzer: def __init__(self): logger.info("Initializing DocumentAnalyzer instance.") self.analyzer = analyzer_agent.AnalyzerAgent().agent self.reader = reader_agent.ReaderAgent().agent self.initializer = autogen.UserProxyAgent( name="Init", code_execution_config=False ) logger.debug( "DocumentAnalyzer initialized with AnalyzerAgent, ReaderAgent, and UserProxyAgent." ) # ... other methods ... def start(self): logger.info("Starting DocumentAnalyzer group chat.") self.groupchat = autogen.GroupChat( agents=[self.initializer, self.reader, self.analyzer], messages=[], max_round=20, speaker_selection_method=self._state_transition, ) self.manager = autogen.GroupChatManager( groupchat=self.groupchat, llm_config=settings.llm_config ) try: self.initializer.initiate_chat( self.manager, message="Analyse document_id:" + str(self.document_id) ) logger.info("Initialized chat with initializer agent.") except Exception as e: logger.error(f"Failed to initiate chat: {e}") logger.debug("Group chat and manager setup complete.")
核心问题
如何将LangSmith集成到该AG2 GroupChat架构中,实现可观测性与追踪?
已尝试方案:搜索未找到有效结果,GPT/Claude生成的方案因Autogen内部处理LLM调用而无效,求可行的代码或配置参考。
解决方案
LangSmith集成Autogen的核心是将追踪逻辑注入到Autogen的LLM调用流程中,以下是具体实现步骤:
1. 配置LangSmith基础环境
先安装依赖并设置环境变量:
pip install langsmith autogen export LANGCHAIN_TRACING_V2=true export LANGCHAIN_API_KEY="你的LangSmith API密钥" export LANGCHAIN_PROJECT="你的项目名称"
2. 封装带LangSmith追踪的LLM调用
有两种方式实现追踪,选其一即可:
方式1:使用LangSmith包装LangChain LLM对象(推荐)
Autogen支持直接传入LangChain的LLM实例,利用LangSmith的包装器自动添加追踪:
from langchain.chat_models import ChatOpenAI from langsmith.wrappers import wrap_openai # 包装OpenAI客户端,自动添加LangSmith追踪 wrapped_llm = wrap_openai(ChatOpenAI(model="gpt-4", temperature=0))
方式2:自定义带追踪的LLM函数
如果不使用LangChain,可通过装饰器为自定义LLM函数添加追踪:
import openai from langsmith import traceable @traceable(run_type="llm") def traced_llm_call(messages, **kwargs): # 替换为你的LLM调用逻辑 response = openai.chat.completions.create( model="gpt-4", messages=messages, **kwargs ) return response.choices[0].message.content
3. 修改Autogen的LLM配置
将封装好的LLM对象/函数传入settings.llm_config,确保所有智能体的LLM调用走追踪逻辑:
对应方式1的配置:
settings.llm_config = { "llm": wrapped_llm, # 传入带追踪的LangChain LLM对象 "temperature": 0, # 保留原有其他配置 }
对应方式2的配置:
settings.llm_config = { "function": traced_llm_call, # 传入自定义追踪函数 "model": "gpt-4", "temperature": 0, # 保留原有其他配置 }
4. 为GroupChat添加会话级追踪(可选)
如果需要关联整个GroupChat的流程,可在start方法中添加会话追踪:
from langsmith import Client def start(self): logger.info("Starting DocumentAnalyzer group chat.") # 创建LangSmith会话,关联整个文档分析流程 client = Client() with client.trace(name=f"Document Analysis - {self.document_id}"): self.groupchat = autogen.GroupChat( agents=[self.initializer, self.reader, self.analyzer], messages=[], max_round=20, speaker_selection_method=self._state_transition, ) self.manager = autogen.GroupChatManager( groupchat=self.groupchat, llm_config=settings.llm_config ) try: self.initializer.initiate_chat( self.manager, message=f"Analyse document_id:{self.document_id}" ) logger.info("Initialized chat with initializer agent.") except Exception as e: logger.error(f"Failed to initiate chat: {e}") logger.debug("Group chat and manager setup complete.")
5. 验证效果
运行服务后,登录LangSmith控制台即可查看:
- 每个智能体的LLM调用请求/响应详情
- GroupChat的完整会话流转
- 各步骤的耗时、token使用量等指标
关键注意事项
GroupChatManager会代理所有智能体的LLM调用,只需确保其llm_config配置正确即可,无需单独修改每个智能体的配置- 自定义LLM函数需严格遵循Autogen的参数要求(接受
messages和其他关键字参数) - 确保服务启动时LangSmith环境变量已正确加载
内容的提问来源于stack exchange,提问作者the cosmic introvert dude
相关产品推荐
相关产品推荐

