进阶 📋 6 个步骤 第 532 / 532 篇

用 AgentOps 给多智能体做会话回放与成本审计:生产环境可观测实操

AgentOps 多智能体可观测实操:一行 init 接入,自动记录每个子智能体的 LLM 调用、工具调用与报错,支持逐帧会话回放、按 Agent 拆分成本与失败定位,并给出自托管与告警方案。

2026.10.14· 15 分钟阅读· 约 2086 字· 🕵️ AgentOps / 🤖 多智能体

你有没有遇到过这种场景:一个多智能体流水线跑挂了,日志里只看到「最终答案不对」,却定位不到是调研 Agent 调错了模型、还是写作 Agent 的提示词被上下文冲掉了?更糟的是月底账单暴涨,你甚至不知道是哪个子 Agent 在死循环调 API。本教程教你用 AgentOps——一个框架无关(OpenAI / Anthropic / CrewAI / AutoGen / LangGraph / OpenAI Agents SDK 都支持)的 Agent 可观测平台——只加一行初始化,就能给每个子智能体的会话做回放、把成本拆到具体 Agent、并回放失败现场。

🧩 本教程适合:已经用多智能体框架(或原生多轮 LLM 调用)跑业务,需要「回放会话、定位失败、核算成本」的开发者与团队。你只需会 Python、能装包、有一个 OpenAI / Anthropic 这类受支持模型的 API Key。

先搞懂:AgentOps 解决什么问题?

传统日志只能看到「程序报错」,看不到「Agent 为什么这么决策」。AgentOps 把一次 Agent 运行完整录下来:每一轮 LLM 调用的入参/出参、每次工具调用的参数与返回值、每个子 Agent 的决策链、以及异常堆栈,并可以按 Agent 聚合成本。它站在你的应用和外部模型之间做「自动埋点」,不替换你的模型供应商。

不接可观测接 AgentOps 之后
失败只能靠猜,复现靠手搓输入任意会话可逐帧回放,点开看完整上下文
成本只能看模型厂商月度总账单按 Agent / 会话 / 工具拆出花费曲线
多智能体互相甩锅,分不清谁烧钱每个子 Agent 调用被独立标记与归因

先定边界:AgentOps 是「可观测平台」,不是模型供应商,也不替你生成内容。它按上送的事件数计费——免费档每月 5,000 事件,超出后 Pro 档约 $40/月。默认 SaaS 数据上云;涉及敏感数据走自托管(Step 6)。不要把它当成「能降低模型费用」的工具,它只帮你「看清」钱花在哪。

Step 1:安装并一行初始化 AgentOps

1 装包 + 入口处一行 init

先在项目里装上 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:跑通第一次自动埋点,确认会话进仪表盘

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() 在调用之前执行。

🔑 关键验证点:Dashboard 有会话记录 = 链路通。这一步不通,后面都没意义,务必先确认。

Step 3:用 @agent / @operation 给多智能体分身归因

3 用装饰器把每个子 Agent 的调用贴标签

自动埋点能录调用,但多个 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 追踪工具成本与整体流程

4 给工具标价 + 用 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:在仪表盘做会话回放与失败定位

5 逐帧回放 + 按 Agent 查成本与报错

跑一段时间后,打开 AgentOps 的几个核心面板:

Sessions   # 会话列表;点开任一会话可逐步回放执行轨迹
Cost       # 按 Agent / 会话 / 工具聚合的花费
Errors     # 异常、解析失败、提示词注入攻击检测
  • 失败定位:红色标记的会话点开即看失败时的上下文与完整堆栈,直接定位是哪个 Agent / 工具出错,而不是从头复现。
  • 成本审计:在 Cost 面板按 Agent 拆分,找出反复空转或死循环调用的子 Agent。
  • 安全审计:Errors 面板会标记常见的提示词注入与数据外泄迹象,从原型到生产都留痕。
🐛 把「失败会话回放」养成上线后第一查手段:比翻一堆分散日志高效一个数量级,尤其适合多智能体互相调用导致的问题。

Step 6:自托管(数据留自己机器)+ 生产环境告警

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),数据全在自己服务器
← 返回教程中心