部署上线的AI Agent就像放飞的无人机——没有监控就等于盲飞。很多团队花了大量精力搭建Agent,却在上线后频繁遭遇静默崩溃、响应超时、Token消耗失控等问题,等到用户投诉才发现为时已晚。本文将从真实生产环境踩坑经验出发,手把手教你搭建一套低成本的AI Agent监控告警体系,让问题在用户感知之前就被捕获和处理。
为什么AI Agent比传统服务更需要监控
传统Web服务的错误通常是确定性的——HTTP 500、数据库超时、磁盘满了。而AI Agent的故障往往更隐蔽:
- 静默失败:Agent执行了工具调用但返回了空结果,没有异常抛出,业务流程却已断裂
- 语义偏移:模型输出格式正确但内容完全跑偏,比如把"删除临时文件"理解成了"删除所有文件"
- 成本失控:一个死循环的Agent可以在一小时内烧掉数千元的Token费用
- 上下文污染:RAG检索到错误知识后,后续所有对话都基于错误信息展开
这些问题传统APM工具根本无法检测。你需要的是一套理解AI Agent语义的监控体系。
监控体系架构设计
一套完整的Agent监控体系包含四个层次:
| 层级 | 监控内容 | 告警方式 |
|---|---|---|
| 基础设施层 | CPU/内存/GPU利用率、网络延迟 | 阈值告警 |
| 模型调用层 | Token消耗、响应延迟、错误率、模型版本 | 趋势告警 |
| Agent行为层 | 工具调用频次、执行时长、成功/失败率、重试次数 | 异常告警 |
| 业务语义层 | 输出质量评分、意图识别准确率、用户满意度 | 智能告警 |
很多团队只做了第一层,这远远不够。真正的价值在第三和第四层——它们能告诉你Agent"做得对不对",而不仅仅是"还活着"。
用Prometheus采集Agent运行指标
Prometheus是监控领域的事实标准,搭配Grafana可视化,可以覆盖前三层监控。关键是为你的Agent暴露自定义指标:
from prometheus_client import Counter, Histogram, Gauge, start_http_server
# 模型调用指标
llm_tokens_total = Counter('llm_tokens_total', 'Total tokens consumed', ['model', 'type'])
llm_latency = Histogram('llm_request_duration_seconds', 'LLM request latency', ['model'])
# Agent行为指标
tool_calls_total = Counter('agent_tool_calls_total', 'Tool call count', ['tool_name', 'status'])
agent_retries = Counter('agent_retries_total', 'Agent retry count', ['task_type'])
active_sessions = Gauge('agent_active_sessions', 'Currently active agent sessions')
def track_tool_call(tool_name, success=True):
tool_calls_total.labels(tool_name=tool_name, status='success' if success else 'fail').inc()
def track_llm_call(model, prompt_tokens, completion_tokens, duration):
llm_tokens_total.labels(model=model, type='prompt').inc(prompt_tokens)
llm_tokens_total.labels(model=model, type='completion').inc(completion_tokens)
llm_latency.labels(model=model).observe(duration)
# 启动指标服务
start_http_server(9090)
这段代码的关键设计思路是:每个工具调用和模型请求都打标签(labels),这样你可以在Grafana中按工具名称、模型类型灵活聚合分析。比如一眼看出"搜索工具"的失败率突然从2%跳到30%,那大概率是搜索引擎API出了问题。
搭建智能告警规则
原始指标只是数据,告警规则才是让数据变成行动的关键。以下是我从多次事故中提炼的核心告警规则:
# Prometheus告警规则
groups:
- name: agent_alerts
rules:
# 规则1:Agent连续失败
- alert: AgentHighFailureRate
expr: rate(agent_tool_calls_total{status="fail"}[5m]) / rate(agent_tool_calls_total[5m]) > 0.3
for: 2m
labels:
severity: critical
annotations:
summary: "Agent工具调用失败率超过30%"
# 规则2:Token消耗异常飙升
- alert: TokenSpike
expr: rate(llm_tokens_total[10m]) > 5 * rate(llm_tokens_total[1h])
for: 5m
labels:
severity: warning
annotations:
summary: "Token消耗速率是1小时均值的5倍以上"
# 规则3:Agent响应延迟过高
- alert: AgentSlowResponse
expr: histogram_quantile(0.95, rate(llm_request_duration_seconds_bucket[5m])) > 30
for: 5m
labels:
severity: warning
annotations:
summary: "95%分位延迟超过30秒"
特别注意第二条规则——Token消耗飙升往往是Agent陷入死循环的最早期信号。我曾经在生产环境中遇到过Agent反复调用同一个API(因为返回格式不匹配导致解析失败,Agent不断重试),5分钟内烧掉了平时一天的Token预算。这条规则就是在那次事故后加上的。
用OpenClaw实现Agent自愈机制
监控的最高境界不是发现问题,而是自动修复。借助OpenClaw的定时任务和技能系统,可以实现Agent自愈:
// OpenClaw Cron配置:每5分钟检查Agent健康状态
{
"schedule": "*/5 * * * *",
"task": "检查Agent健康指标,若异常则自动重启或降级"
}
自愈策略的设计需要分级处理:
- 轻度异常(单次工具失败):自动重试,记录日志
- 中度异常(失败率升高):切换备用模型或降级服务,发送通知
- 重度异常(Token飙升/死循环):立即终止Agent会话,切换到人工接管
这里的核心原则是永远保留人工兜底。自动修复可以处理80%的常见故障,但剩下20%的边缘情况往往最危险——它们可能涉及模型产生有害输出或执行危险操作,这类情况必须由人来判断。
语义监控:检测Agent是否"说对了"
前面所有监控都在检查Agent"是否在运行",但没有检查"是否做对了"。语义监控用另一个轻量模型来评估主Agent的输出质量:
async function semanticCheck(output, expectedIntent) {
const prompt = `评估以下AI输出的质量。期望意图:${expectedIntent}
输出内容:${output.substring(0, 500)}
请从1-5打分,5为完全符合预期。只返回数字。`;
const score = await callLightweightModel(prompt);
if (parseInt(score) < 3) {
await sendAlert('语义质量异常', { output, score, expectedIntent });
}
return score;
}
这个方案的成本很低——评估模型可以用豆包lite或GPT-4o-mini这类轻量模型,每次评估只消耗几十个Token。但它能在用户看到错误回答之前就捕获问题。
告警通知渠道配置
告警只有被人看到才有价值。根据严重程度选择不同渠道:
| 严重程度 | 通知渠道 | 响应时间要求 |
|---|---|---|
| P0-紧急 | 电话+短信+钉钉/企微 | 5分钟内 |
| P1-重要 | 钉钉/企微+邮件 | 30分钟内 |
| P2-一般 | 邮件+Grafana面板 | 次日处理 |
| P3-提示 | Grafana面板 | 周报汇总 |
我的经验是:宁可告警少而精,也不要告警多而全。告警疲劳(Alert Fatigue)是运维最大的敌人——当团队每天收到上百条告警时,真正重要的那一条往往被忽略。
成本监控与预算控制
AI Agent的运行成本是变量,不像传统服务器有固定的月费。必须建立成本监控:
# 每日Token成本估算
daily_cost = (
sum(rate(llm_tokens_total{type="prompt"}[1d])) * 0.003 / 1000 +
sum(rate(llm_tokens_total{type="completion"}[1d])) * 0.015 / 1000
)
# 设置每日预算上限
- alert: DailyBudgetExceeded
expr: daily_cost > 100
labels:
severity: critical
建议为每个Agent任务类型设置独立的成本标签,这样你可以清楚看到哪些任务最烧钱,针对性地优化Prompt或切换更经济的模型。
日志与可观测性最佳实践
指标告诉你"出了什么问题",日志告诉你"为什么出了问题"。为Agent设计日志时,务必记录以下字段:
{
"timestamp": "2026-05-19T10:00:00Z",
"session_id": "sess_abc123",
"agent_id": "blog-publisher",
"step": "tool_call",
"tool_name": "web_search",
"tool_input_hash": "sha256:...",
"tool_output_status": "success",
"model": "doubao-pro-32k",
"prompt_tokens": 1520,
"completion_tokens": 380,
"duration_ms": 2300,
"retry_count": 0
}
注意我用了tool_input_hash而不是直接记录完整输入——既节省存储空间,又避免敏感数据泄露。需要排查时,可以从业务数据库中用hash值反查原始输入。
从零搭建的成本估算
这套监控体系不一定需要大投入。以下是基于团队规模的参考方案:
- 个人开发者:Prometheus + Grafana本地部署,阿里云短信告警,月成本约50元
- 小团队(5人内):上述方案 + 语义监控(轻量模型),月成本约200元
- 中型团队:全套方案 + 日志平台(Loki/ELK),月成本约1000元
最关键的不是工具多先进,而是从第一天就建立监控意识。一个没有任何监控就上线的Agent,不是在服务用户,而是在赌博。
总结
AI Agent生产环境监控的核心思路:从基础设施到语义质量分层监控,用Prometheus+Grafana覆盖技术指标,用轻量模型做语义检查,用OpenClaw的定时任务实现自动修复,用分级告警避免通知疲劳。记住,监控不是锦上添花,而是Agent从demo走向生产的必经之路。
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论