Appearance
一句话总结:Agent 是完整软件系统;模型只是 10% 的工作,流式、持久性、可观测性占另外 90%。先看可观测与预算,再谈上线。
上线前基线(缺一不可)
- 日志追踪:没有它 Agent 是"没有仪表盘和刹车的车"
- 成本预算机制:预算上限、每用户配额、每请求成本跟踪
生产教训(真实案例)
- 无限循环:单 Agent 死循环烧巨额 token(必须预算/最大步数硬性)
- 上下文截断:多 Agent 传参被 token 限制截断,下游拿到残缺数据
- 行业数据:79% 企业在搞 Agent,跑通生产的只有 2%——卡在工程化
架构与工程化
- 分层:接入层 → 编排层 → 能力层(工具统一注册/调用/可插拔) → 模型层 → 运维层(日志/耗时/成本统计/告警/并发)
- 容器化:Docker 多阶段构建保证环境一致、一键部署、快速回滚
- 可靠性工程:重试、补偿、回滚、升级路径、幂等动作、检查点状态;API 会超时、模型会幻觉、计划会偏离
- 并发控制:信号量限流(如 50 并发)、忙时友好降级
可观测性(三支柱 + Agent 专属)
- 基础设施:指标(Prometheus)+ 日志(Loki)+ 链路追踪(OpenTelemetry)
- Agent 专属信号:
- 完整 prompt-response 对;多轮上下文分组
- Agent 轨迹与中间步骤(工具调用、推理选项)——没它无法复盘"为什么答错"
- LLM trace:tokens in/out、延迟、模型版本
- 语义指标:faithfulness(忠实检索源)、completeness(覆盖任务)、sufficiency(不幻觉不遗漏)、drift(质量漂移)
质量监控(在线 eval)
- 采样 1-5% 生产 trace 触发检查(JSON schema 有效?误拒良性请求?工具调用无错?):便宜 LLM-as-judge 判软问题、结构化断言判硬问题
- 持续评分线上交互:抓工具选错、任务失败、质量退化(基础设施指标看不到)
- 离线 eval 管线:回归测试集 + 版本对比
成本治理(FinOps)
| 杠杆 | 做法 | 效果 |
|---|---|---|
| 模型分层路由 | 复杂推理贵模型,格式化/摘要/分类便宜模型 | 成本 -60~80% |
| Prompt Caching | system prompt + 工具定义固定部分命中缓存 | 显著降费 |
| 缓存 | 2 级缓存(精确+语义,30%+ 重复问题成本归零) | 单次成本归零 |
| 限流/熔断 | 并发控制、错误率>5% 熔断走降级 | 防打爆账户 |
| 退避重试 | 指数退避(1s→2s→4s)+ 最大重试次数 | 防无限重试烧 token |
| 成本监控+熔断 | 单日成本超预算自动降级/暂停 | 防失控 |
真实案例:月耗 $28万 → $9.3万(微调→缓存→编排→监控全链路)。
上线流程
原型 → 单 Agent 循环跑通(规划→执行→反思→重试)→ 加可观测与预算 → 灰度发布 → 全量。多 Agent 协作放最后。
面试要点
- "模型是 10%,其余 90% 是流式/持久性/可观测性"
- 上线前必须有日志追踪 + 成本预算
- 可观测三支柱 + Agent 轨迹/中间步骤 + faithfulness/completeness/drift
- 在线 eval:1-5% 采样 + LLM-as-judge + 结构化断言
- 成本杠杆:模型路由 / Prompt Caching / 语义缓存 / 限流熔断 / 退避重试 / 预算熔断
- 可靠性:幂等、检查点、补偿回滚;防无限循环