使用 AgentOps 回调集成监控 LlamaIndex Agent:从安装、初始化到事件采集原理
【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index
导读
llama-index-callbacks-agentops是 LlamaIndex 官方回调(Callback)集成包,它将 LlamaIndex 的 Agent 工作流与 AgentOps 可观测平台打通:只需一行初始化代码,Agent 运行过程中的 LLM 调用、工具调用与异常就会被自动采集并上报到 AgentOps 仪表盘。读完本文你将掌握该包的安装方式、两种初始化姿势、init()全部可用参数,以及事件采集的底层实现原理(span/event 双处理器架构)。
安装
该包以独立集成包的形式发布,通过 pip 直接安装:
pip install llama-index-callbacks-agentops从 pyproject.toml 可以看到它的依赖与约束:
agentops>=0.2.2,<0.3:底层 AgentOps Python SDK;llama-index-core>=0.13.0,<0.15:依赖 LlamaIndex 核心库提供的 instrumentation(插桩)框架;- 要求
Python >=3.10,<4.0,当前包版本为0.5.0,采用 MIT 协议。
快速上手:两种初始化方式
方式一:全局 Handler(推荐)
利用llama_index.core提供的set_global_handler,将 AgentOps 注册为全局回调处理器:
from llama_index.core import set_global_handler set_global_handler("agentops", api_key="...")在核心库 global_handlers.py 中,agentops分支会执行懒加载——只有在调用时才从llama_index.callbacks.agentops导入AgentOpsHandler并执行AgentOpsHandler.init(**eval_params);若包未安装则抛出 ImportError 并提示安装命令。这意味着api_key之外的所有关键字参数都可以通过set_global_handler原样透传。
方式二:直接初始化 Handler
如果你希望更显式地控制处理器生命周期,可以直接导入并初始化:
from llama_index.callbacks.agentops import AgentOpsHandler AgentOpsHandler.init(api_key="...")该类的导出声明位于init.py,同时它也被注册进 LlamaIndex 命令行映射(见 mappings.json),便于相关工具链识别。
两种方式底层走的是同一条路径:AgentOpsHandler.init()。
init() 参数详解
根据 base.py 中AgentOpsHandler.init()的方法签名,可用的关键字参数如下:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
api_key | Optional[str] | None | AgentOps 平台 API Key,用于身份认证 |
parent_key | Optional[str] | None | 父级 API Key(AgentOps 组织/账户层级扩展场景) |
endpoint | Optional[str] | None | 自定义上报端点,用于自托管 AgentOps 或代理环境 |
max_wait_time | Optional[int] | None | 事件批量上报的最大等待时间(秒级) |
max_queue_size | Optional[int] | None | 上报队列的最大长度,超出后的处理策略由 AgentOps SDK 决定 |
tags | Optional[List[str]] | None | 附加到会话的标签列表,便于在仪表盘按标签过滤 |
instrument_llm_calls | bool | True | 是否由 AgentOps SDK 额外插桩 LLM 调用 |
inherited_session_id | Optional[str] | None | 继承已有会话 ID,用于多进程/多服务串联同一会话 |
init()内部会将这些参数构造为一个参数字典,并过滤掉所有值为None的键后再传给 AgentOps 的AOClient,因此任何 AgentOpsAOClient支持的参数都可以沿用同名关键字透传(README 亦明确说明这一点)。此外,init()还强制注入了两个会话行为参数:
auto_start_session=True:初始化后自动开启会话;skip_auto_end_session=False:不跳过会话自动结束逻辑(即允许会话自动结束)。
也就是说,只要调用了init(),AgentOps 会话生命周期管理会自动开启,无需额外手动调用。
底层原理:Span 与 Event 双处理器架构
AgentOpsHandler继承自核心库的BaseInstrumentationHandler(位于llama_index.core.instrumentation),它本身不直接消费事件,而是在init()时从根 dispatcher 获取分发器(instrument.get_dispatcher()),创建一对共享状态的处理器并注册:
AgentOpsSpanHandler(继承SimpleSpanHandler):负责 span 生命周期与异常关联;AgentOpsEventHandler(继承BaseEventHandler):负责把 LlamaIndex 事件翻译成 AgentOps 事件并调用ao_client.record()上报。
两者通过AgentOpsHandlerState(一个 Pydantic 模型)共享运行时状态,该状态维护了四类映射:span 是否源自 Agent 聊天(is_agent_chat_span)、Agent 聊天起始事件(agent_chat_start_event)、span 的父 span(span_parent)、span 内抛出的异常集合(span_exception)。
Span 处理器:异常捕获与上报
AgentOpsSpanHandler在new_span时登记子 span 与父 span 的关联;在prepare_to_exit_span时清理状态;在prepare_to_drop_span时处理异常:若当前 span 因异常被丢弃,先尝试把异常关联到父 span(避免父 span 重复上报子 span 已记录的异常),若该异常尚未被记录,则调用self._ao_client.record(ErrorEvent(details=str(err)))上报为 AgentOps 的ErrorEvent。
事件处理器:LLM 与工具调用映射
AgentOpsEventHandler.handle()只处理 Agent 场景下的事件,核心映射逻辑如下:
AgentRunStepStartEvent:标记当前 span 为 Agent 聊天 span,触发后续事件采集;LLMChatStartEvent(且处于 Agent 聊天 span 中):缓存该事件的 span 关联,供结束事件回溯模型名;LLMChatEndEvent(且处于 Agent 聊天 span 中):把消息列表转换为{content, role}结构作为prompt,把响应内容作为completion,并从response.raw["usage"]中提取prompt_tokens/completion_tokens,再通过get_chat_start_event()沿祖先 span 链回溯到对应的 start 事件获取model字段,最终构造LLMEvent上报;AgentToolCallEvent:将event.arguments(JSON 字符串)反序列化为参数对象,连同工具名构造ToolEvent上报。
其中check_is_agent_chat_span()会沿span_parent链递归检查所有祖先 span,判断某个事件是否处于 Agent 运行步骤之下;get_chat_start_event()同样沿祖先链寻找最近的LLMChatStartEvent。这正是"只采集 Agent 场景下 LLM 调用"这一设计意图的实现细节。
使用建议与注意事项
- Agent 场景限定:从源码可见,普通(非 Agent)的 LLM 调用不会被采集——
LLMChatEndEvent只有在is_agent_chat_event为真时才上报。若你的业务是纯 RAG 问答而非 Agent 编排,该集成可能无法覆盖所有调用。 - 异常自动采集:span 内抛出的异常会自动转为
ErrorEvent上报,无需手动 try/except 包装。 - 版本配套:包依赖
llama-index-core>=0.13.0,<0.15,升级 LlamaIndex 核心库时请注意保持在该区间,以免 instrumentation API 不兼容。 - 自托管端点:企业内部部署 AgentOps 时,通过
endpoint参数指定上报地址即可。
相关文件索引
- 集成包 README:官方安装与初始化说明
- 核心实现 base.py:
AgentOpsHandler、Span/Event 双处理器与状态模型 - 包导出init.py:公开 API 面
- 包配置 pyproject.toml:依赖与版本约束
- 全局 Handler 注册表:
set_global_handler("agentops", ...)的分发逻辑
【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考