你有没有遇到过这种场景:一个多智能体流水线跑挂了,日志里只看到「最终答案不对」,却定位不到是调研 Agent 调错了模型、还是写作 Agent 的提示词被上下文冲掉了?更糟的是月底账单暴涨,你甚至不知道是哪个子 Agent 在死循环调 API。本教程教你用 AgentOps——一个框架无关(OpenAI / Anthropic / CrewAI / AutoGen / LangGraph / OpenAI Agents SDK 都支持)的 Agent 可观测平台——只加一行初始化,就能给每个子智能体的会话做回放、把成本拆到具体 Agent、并回放失败现场。
先搞懂:AgentOps 解决什么问题?
传统日志只能看到「程序报错」,看不到「Agent 为什么这么决策」。AgentOps 把一次 Agent 运行完整录下来:每一轮 LLM 调用的入参/出参、每次工具调用的参数与返回值、每个子 Agent 的决策链、以及异常堆栈,并可以按 Agent 聚合成本。它站在你的应用和外部模型之间做「自动埋点」,不替换你的模型供应商。
| 不接可观测 | 接 AgentOps 之后 |
|---|---|
| 失败只能靠猜,复现靠手搓输入 | 任意会话可逐帧回放,点开看完整上下文 |
| 成本只能看模型厂商月度总账单 | 按 Agent / 会话 / 工具拆出花费曲线 |
| 多智能体互相甩锅,分不清谁烧钱 | 每个子 Agent 调用被独立标记与归因 |
先定边界:AgentOps 是「可观测平台」,不是模型供应商,也不替你生成内容。它按上送的事件数计费——免费档每月 5,000 事件,超出后 Pro 档约 $40/月。默认 SaaS 数据上云;涉及敏感数据走自托管(Step 6)。不要把它当成「能降低模型费用」的工具,它只帮你「看清」钱花在哪。
Step 1:安装并一行初始化 AgentOps
先在项目里装上 SDK(建议顺带 python-dotenv 管密钥),然后在程序入口初始化一次即可,之后所有受支持的 LLM 调用都会被自动埋点:
# 安装
pip install agentops python-dotenv
# .env(切勿提交到公开仓库)
OPENAI_API_KEY=sk-你的官方模型Key
AGENTOPS_API_KEY=ao-你的AgentOpsKey # 从 AgentOps Dashboard 获取
import os
import agentops
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
# 一行接入:不传 api_key 时会自动读取环境变量 AGENTOPS_API_KEY
agentops.init(api_key=os.environ["AGENTOPS_API_KEY"])
client = OpenAI() # 之后所有受支持的 LLM 调用都被自动记录
密钥安全红线:AgentOps Key 能读取你上送的 prompt / 响应 / 工具参数,权限等同你的模型 Key。务必放在服务端环境变量或密钥管理服务,绝不能出现在前端代码、浏览器包或公开 Git 仓库。一旦泄露,别人可调你的额度并看到会话内容。
Step 2:跑通第一次自动埋点,确认会话进仪表盘
照常写调用逻辑,结束时用 agentops.end_session(...) 标记会话终态(Success / Fail / Indeterminate)。这是结算成本与归类失败的关键一步:
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "用一句话解释什么是多智能体系统。"}],
)
print(resp.choices[0].message.content)
agentops.end_session("Success") # 必调:标记会话结局,否则成本可能不结算
运行后回到 AgentOps Dashboard 的 Sessions 页面,应该能看到这次会话——模型、Token、耗时、状态都列出来了。看不到的话,先确认 AGENTOPS_API_KEY 已加载、且 agentops.init() 在调用之前执行。
Step 3:用 @agent / @operation 给多智能体分身归因
自动埋点能录调用,但多个 Agent 混在一起时你需要「分身」。用 @agent 标子类、@operation 标方法,AgentOps 就会把类里的 LLM 调用归到对应 Agent 名下,仪表盘按 Agent 拆成本:
from agentops.sdk.decorators import agent, operation
@agent(name="researcher") # 子智能体 A
class ResearcherAgent:
@operation
def search(self, topic):
return client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"研究:{topic}"}],
).choices[0].message.content
@agent(name="writer") # 子智能体 B
class WriterAgent:
@operation
def write(self, draft):
return client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"据此写报告:{draft}"}],
).choices[0].message.content
r = ResearcherAgent()
w = WriterAgent()
report = w.write(r.search("AgentOps 的会话回放能力"))
agentops.end_session("Success")
在 Dashboard 的 Cost / Sessions 面板里,就能看到 researcher 与 writer 各自的 Token 与花费占比——哪个子 Agent 是「烧钱大户」一目了然。没用装饰器的调用会归入 Default Agent。
researcher / writer / reviewer),回放和成本归因会清晰得多。Step 4:用 @tool / @workflow 追踪工具成本与整体流程
Agent 常调用外部工具(搜索、计算、查库)。用 @tool(cost=...) 给工具标单次成本,仪表盘会自动汇总;用 @workflow 把多步逻辑归到一个有名字的流程下,便于在回放里整体查看:
from agentops.sdk.decorators import tool, workflow
@tool(cost=0.05) # 标注单次工具成本,Dashboard 自动累加
def web_search(query):
return f"搜索结果:{query}"
@workflow(name="report_pipeline", tags=["production"])
def report_pipeline(topic):
data = web_search(topic) # 工具调用被记录并按 cost 计费
return w.write(r.search(topic))
print(report_pipeline("多智能体可观测"))
此外还有 @session(根跨度)、@trace(推荐用于自定义分组)等装饰器。官方建议:大多数应用只需 agentops.init() 即可;需要更细粒度时再用装饰器。
@session → @agent → @operation / @tool 形成树状结构,层级清晰回放才好看。不要在所有函数上都乱加装饰器,会淹没真正有用的信息。
Step 5:在仪表盘做会话回放与失败定位
跑一段时间后,打开 AgentOps 的几个核心面板:
Sessions # 会话列表;点开任一会话可逐步回放执行轨迹
Cost # 按 Agent / 会话 / 工具聚合的花费
Errors # 异常、解析失败、提示词注入攻击检测
- 失败定位:红色标记的会话点开即看失败时的上下文与完整堆栈,直接定位是哪个 Agent / 工具出错,而不是从头复现。
- 成本审计:在 Cost 面板按 Agent 拆分,找出反复空转或死循环调用的子 Agent。
- 安全审计:Errors 面板会标记常见的提示词注入与数据外泄迹象,从原型到生产都留痕。
Step 6:自托管(数据留自己机器)+ 生产环境告警
如果数据合规要求高,AgentOps 官方 App(Dashboard + API + 存储)可完全自托管,用 Docker Compose 一键拉起:
git clone https://github.com/AgentOps-AI/agentops
cd agentops/app
cp .env.example .env # 填入 Supabase / ClickHouse 等变量
docker compose up -d # 启动后访问 localhost:3000 即你的私有仪表盘
生产环境还建议:用 tags=["production"] / ["staging"] 区分环境,并在 Dashboard 设预算告警(花费阈值 / 错误率阈值触发邮件或 Webhook),半夜跑飞也能第一时间收到通知。
自托管提醒:自托管需要你自己维护 Supabase / ClickHouse / API 等基础设施,运维成本不低。小团队建议先用 SaaS 免费档验证价值,再评估是否自托管。代码与文档随版本演进,部署前以官方 app/README.md 为准。
常见问题速查
| 现象 | 大概率原因与解决 |
|---|---|
| Dashboard 看不到会话 | agentops.init() 没在调用前执行;或 AGENTOPS_API_KEY 未加载 |
| 成本显示 0 / 不结算 | 忘了在结尾调 end_session("Success") |
| 调用没归到具体 Agent | 相关类/方法没加 @agent / @operation,落入 Default Agent |
| 涉及敏感数据不敢上云 | 改用 AgentOps 自托管(开源 App),数据全在自己服务器 |