工程化:部署、监控、成本优化

📅 2026/7/6 5:35:58 👁️ 阅读次数 📝 编程学习
工程化:部署、监控、成本优化

工程化:部署、监控、成本优化

Agent 做出来只是第一步,上线运行还要考虑部署架构、稳定性、监控告警、成本控制。这篇讲 Agent 的工程化落地:服务部署、流式输出、并发处理、监控指标、成本优化、错误重试、版本管理。

大家好,我是黒漂技术佬。

Demo 好做,生产环境难。Agent 跑通了不代表就能上线,还要考虑:高并发撑不撑得住、出了问题能不能发现、一个月花多少 API 钱、出故障了怎么回滚……

这篇讲 Agent 的工程化:部署架构、监控、成本优化、错误处理、版本管理。


一、部署架构

基础架构

用户 → 前端/聊天界面 → Agent 后端服务 → 大模型API ↓ 向量数据库 工具服务(搜索、数据库等)

服务形态

1. API 服务

封装成 HTTP API,前端调用。推荐 FastAPI + Python,大部分 LLM 框架都是 Python 的,对接方便。

2. 流式输出(SSE)

Agent 执行时间长,不能让用户一直等。用 Server-Sent Events 流式返回,边想边输出,用户体验好很多,不会以为卡住了。

3. WebSocket

双向通信,适合实时对话场景。比 SSE 复杂一点,但功能更强。

并发处理

  • 异步框架:用 asyncio + FastAPI,异步处理请求
  • 连接池:HTTP 客户端用连接池,复用连接
  • 队列 + Worker:请求丢队列,Worker 慢慢处理,前端轮询或者推送结果
  • 限流:按用户/按接口限流,防止被刷爆

无状态设计

服务做成无状态的,方便水平扩展。用户会话存在 Redis 或者数据库里,不存内存。


二、监控指标

上线了不监控,出问题都不知道。

核心指标

1. 业务指标
  • 对话量:每天/每小时多少对话
  • 任务成功率:成功完成的比例
  • 用户满意度:点赞/点踩比例
  • 转人工率:Agent 解决不了转人工的比例(客服场景)
2. 性能指标
  • 平均响应时间:从提问到给出答案的总时间
  • 首字延迟:多久开始输出第一个字(流式场景)
  • 平均步数:完成一个任务平均几轮
  • P95/P99 延迟:长尾耗时
3. 成本指标
  • 总 token 消耗:每天/每月
  • 平均每对话 token:单次对话消耗
  • 工具调用次数
4. 错误指标
  • 错误率:请求失败比例
  • 工具调用失败率
  • 超时率
  • 常见错误类型分布

告警

关键指标异常要告警:错误率突增、响应时间飙升、token 消耗异常、下游 API 挂了。


三、成本优化

大模型 API 不便宜,Agent 多轮调用更贵。做好优化能省不少钱。

1. 模型选型

不是所有场景都要用最贵的模型。

场景推荐模型理由
简单问答、分类小模型/便宜模型足够用,省钱
工具调用、推理中等模型能力够用
复杂规划、长任务大模型能力强,减少出错反而省钱

策略:简单任务用小模型,复杂任务升级大模型。可以做路由,先让小模型试,搞不定再换大的。

2. 缓存

相同的问题不要重复调用模型。

  • 语义缓存:问题相似就直接返回之前的答案
  • 工具结果缓存:相同的搜索查询、相同的数据库查询,缓存结果
  • Prompt 缓存:有些模型支持 Prompt 缓存,系统提示词部分不重复计费

缓存命中率高的话,能省很多钱。

3. 上下文压缩

  • 历史对话做摘要,不用全量传
  • 工具返回结果做摘要,只保留关键信息
  • RAG 检索结果 rerank 之后只留最相关的几条
  • 长文档先总结再给模型

上下文越短,token 越少,越快越便宜。

4. 减少步数

  • 优化 Prompt,让 Agent 一步到位,少绕路
  • 并行工具调用,一轮搞定多个查询
  • 简单任务直接回答,不要走 Agent 循环

5. 限制最大步数

防止死循环烧 token,设最大步数上限。

6. 成本监控和告警

  • 每天看 token 消耗
  • 设置预算上限,超了告警
  • 异常消耗及时发现

四、错误处理和重试

常见错误

  1. 大模型 API 报错:限流、超时、服务不可用
  2. 工具调用失败:第三方服务挂了、参数错了
  3. 模型输出格式错:Function Calling 返回的 JSON 解析失败
  4. 超时:某一步执行太久

重试机制

指数退避重试

失败了等一会儿再试,每次等待时间翻倍:1秒 → 2秒 → 4秒 → 放弃。

哪些要重试
  • 网络错误、超时、限流 → 重试
  • 参数错误、权限错误 → 不要重试,没用
  • 格式解析错误 → 可以让模型重新生成一次

降级策略

主路走不通了走备用方案:

  • 大模型挂了 → 切备用模型
  • RAG 检索失败 → 用通用回答模板
  • 工具调用失败 → 告诉用户暂时用不了,换种方式

超时控制

  • 每一步设置超时时间
  • 整体任务设置最大执行时间
  • 超时了返回友好提示,不要一直挂着

友好的错误提示

不要把技术错误抛给用户。比如「抱歉,当前服务繁忙,请稍后再试」。


五、版本管理和灰度发布

为什么需要版本管理

  • Prompt 改了效果怎么样?不知道就全量上线,容易翻车
  • 模型换了、工具加了,都可能影响效果
  • 出问题了要能快速回滚

版本管理

  • Prompt 版本化:每次改动存一个版本
  • 模型版本:记录用的什么模型、什么参数
  • 工具版本:工具列表和描述也纳入版本
  • 配置版本:温度、最大步数等参数

灰度发布

新版本先给一小部分用户用,没问题再全量:

  1. 内部测试 → 自己人先用
  2. 小流量灰度 → 1% 用户用新版本
  3. 逐步放量 → 10% → 50% → 100%
  4. 监控指标 → 效果不好就回滚

A/B 测试

两个版本同时跑,对比效果,数据说话,哪个好用哪个。


六、可观测性

日志

  • 每个请求有 trace_id,贯穿全链路
  • 记录每一步的输入输出、耗时、token
  • 结构化日志(JSON),方便检索

追踪(Tracing)

Agent 多步骤的,要能看到完整链路:每一步的 Thought、Action、Observation、耗时、token。

工具

  • LangSmith:LangChain 官方,调试追踪很好用
  • Langfuse:开源,功能全
  • OpenTelemetry:通用的可观测性框架
  • 自建:ELK / Prometheus + Grafana

七、高可用设计

多模型备份

不要只依赖一家大模型服务商。主模型挂了切备用的。

限流和熔断

  • 下游 API 限流了,自己这边也要限流,不要一直发请求
  • 错误率太高就熔断,暂时停掉,等恢复了再开

兜底回答

实在处理不了的时候,有个兜底回复,别报错给用户。


八、工程化 Checklist

上线前对照检查:

部署

  • 无状态服务,可水平扩展
  • 流式输出
  • 异步处理,不阻塞
  • 限流机制

监控

  • 核心指标监控(调用量、延迟、错误率、token)
  • 告警配置
  • 日志完整,有 trace_id
  • 链路追踪

成本

  • 模型选型合理
  • 缓存机制
  • 上下文压缩
  • 最大步数限制
  • 成本监控和预算告警

稳定性

  • 重试机制(指数退避)
  • 超时控制
  • 降级方案
  • 兜底回答
  • 备用模型

版本

  • Prompt 版本化
  • 配置版本化
  • 灰度发布能力
  • 快速回滚能力

九、本篇小结

  • 部署架构:API 服务 + 流式输出 + 异步并发 + 无状态水平扩展
  • 监控指标:业务指标、性能、成本、错误率,关键指标要告警
  • 成本优化:模型分级、缓存、上下文压缩、减少步数、限制最大步数
  • 错误处理:指数退避重试、降级策略、超时控制、友好错误提示
  • 版本管理:Prompt 和配置版本化、灰度发布、A/B 测试、快速回滚
  • 可观测性:结构化日志、链路追踪,每一步都要能回看
  • 高可用:多模型备份、限流熔断、兜底回答
  • 上线前对照 Checklist 逐项检查,确保工程质量

下一篇是系列收尾实战篇:智能客服 Agent 完整实现,把前面讲的知识全部串起来,做一个完整的智能客服。

我是黒漂技术佬。