Skip to content

专题 06 成本、延迟与稳定性优化

本专题解决的是 AI Agent 项目进入真实使用阶段后最容易暴露的一类问题:为什么 Demo 看起来一切正常,但一旦请求量上来、链路变长、用户变多,系统就开始变贵、变慢、变不稳定。

对前端工程师来说,这一层其实并不陌生。过去你可能做过首屏优化、接口并发控制、缓存策略、降级方案和线上异常治理;在 Agent 系统里,这些问题仍然存在,只是优化对象从“页面渲染链路”扩展到了“模型调用 + 检索 + 工具执行 + 工作流状态”的全链路。

1. 为什么这三个问题要放在一起看

很多团队会把成本、延迟和稳定性拆开处理,但在 Agent 系统里它们高度耦合:

  • 为了提升质量,你可能增加检索证据、增加工具调用或切换更大模型,结果成本上升、延迟变长。
  • 为了降低延迟,你可能减少上下文或减少步骤,结果质量下滑、回退增多,反而影响稳定性。
  • 为了追求稳定,你可能加大量重试和兜底逻辑,结果成本和总耗时都被拉高。

所以这三个指标不能单独优化,而要作为一个平衡问题来设计。

2. 先拆清楚成本从哪里来

Agent 系统的成本通常不是只有“模型 token 费”,而是由多部分叠加:

  • 模型调用成本:输入 token、输出 token、重试次数、模型档位。
  • 检索成本:向量检索、重排、索引更新、存储。
  • 工具成本:浏览器操作、第三方 API、数据库查询、文件处理。
  • 工作流成本:多节点重复调用、失败重试、人工审核等待。
  • 运维成本:日志、追踪、监控、缓存、队列和服务资源。

如果只盯住 token 单价,往往会忽略真正的成本大头。

3. 延迟要拆成链路预算

很多团队说“系统很慢”,但不清楚到底慢在什么地方。 建议把总耗时拆成几个部分:

  • 用户请求进入前端到服务层的网络耗时。
  • 检索召回与重排耗时。
  • 模型首次响应时间。
  • 工具调用耗时。
  • 工作流节点切换耗时。
  • 前端流式渲染与状态更新耗时。

一旦拆成预算,你就能回答:

  • 第一屏反馈需要在多少秒内出现。
  • 总体任务完成时间的上限是多少。
  • 哪一层才是当前瓶颈。

4. 稳定性不是“别报错”,而是“出问题也能控”

稳定性至少包含四层含义:

  • 正常情况下能稳定成功。
  • 边界场景下不会明显漂移。
  • 依赖异常时能优雅降级。
  • 出问题后能快速恢复并解释。

很多 AI Agent 系统不稳定,不是因为每次都报错,而是因为:

  • 有时调用大模型,有时走了错误回退。
  • 有时格式正确,有时输出漂移。
  • 有时工具超时后没有降级。
  • 有时用户看到的状态和系统内部状态不一致。

5. 一套推荐的优化顺序

第一步:先测基线,不要先拍脑袋优化

先记录:

  • 单次请求平均成本。
  • P50 / P95 延迟。
  • 关键链路成功率。
  • 重试率。
  • 回退触发率。
  • 用户取消率。

没有基线,优化容易变成“感觉快了一点”或“感觉好像省钱了”。

第二步:找最大瓶颈,而不是平均优化

例如:

  • 如果 70% 的时间花在工具调用上,就不要先盯 Prompt 微调。
  • 如果大头成本来自重排和大模型双重调用,就要先看路由策略。
  • 如果大部分失败来自外部依赖超时,就要先做熔断和降级。

第三步:优先优化高频路径

不是所有路径都值得同等投入。 先找到:

  • 最高频场景。
  • 最高价值用户路径。
  • 最容易形成成本黑洞的流程。

优化这些路径,收益会更直接。

6. 成本优化的常见方法

6.1 模型分层与路由

并不是每个请求都必须上最贵的模型。 可以按场景设计路由:

  • 简单分类、意图识别、格式修复用轻量模型。
  • 复杂推理、长文本综合、关键决策用更强模型。
  • 先用轻量模型筛,再决定是否升级到更大模型。

6.2 控制上下文长度

上下文长度是成本和延迟的大头之一。 建议控制:

  • 历史消息不要全量透传。
  • 检索证据先重排再注入。
  • 用摘要代替重复上下文。
  • 结构化状态不要反复转成自然语言长文本。

6.3 缓存高重复结果

适合缓存的内容包括:

  • 高频制度问答结果。
  • 固定文档的检索摘要。
  • 低变化率的工具结果。
  • 某些中间节点输出。

但要注意缓存命中条件和失效策略,尤其是文档更新和权限变化场景。

6.4 减少无效重试

有些重试能提高成功率,有些重试只是浪费钱。 建议区分:

  • 临时性超时,可重试。
  • 参数错误、权限错误、格式错误,重试意义不大。
  • 模型理解偏差,应优先修上下文而不是盲目重试。

7. 延迟优化的常见方法

7.1 让用户尽早看到反馈

从体验角度看,“第一段可见反馈时间”通常比“总完成时间”更关键。 前端可以先展示:

  • 正在检索。
  • 正在读取资料。
  • 正在生成计划。
  • 正在等待确认。

这会显著降低用户对“卡住”的感知。

7.2 并行化可并行的步骤

如果多个工具调用互不依赖,可以考虑并行执行。 例如:

  • 同时拉多个数据源。
  • 同时做检索与某些预处理。

但前提是你能控制并发上限,并处理部分失败。

7.3 把高耗时步骤后移

有些步骤不是每次都需要立即执行。 例如:

  • 先给出初步结果,再补充详细分析。
  • 先展示计划,再在确认后执行写入类操作。
  • 先做粗召回,再决定是否触发重排。

7.4 避免前端二次等待

后端明明已经返回阶段性结果,但前端如果仍等全部结束才展示,用户仍会觉得慢。 因此要把服务端阶段状态和前端展示状态严格对齐。

8. 稳定性优化的常见方法

8.1 设计降级路径

当大模型不可用、工具超时或检索异常时,系统至少要知道如何降级:

  • 换到更轻量或备用模型。
  • 跳过非关键工具。
  • 返回保底结果或解释性提示。
  • 转人工处理。

8.2 明确熔断与超时规则

不是每个请求都值得无限等下去。 建议对模型调用、工具调用、工作流节点分别设置:

  • 超时阈值。
  • 最大重试次数。
  • 熔断条件。
  • 回退策略。

8.3 控制工作流扩张

很多系统变慢、变贵、变不稳,根因是工作流步骤越堆越多。 新增一个节点前,先问三个问题:

  • 它是否真正提升成功率。
  • 它是否引入新的失败点。
  • 它是否值得这部分成本和耗时。

8.4 做幂等和恢复设计

对执行型 Agent 尤其重要。 否则一旦超时或前后端状态错位,就可能导致重复执行、重复写入或重复通知。

9. 前端工程师最有价值的切入点

9.1 体验上的“快”和系统上的“快”要一起设计

前端可以通过:

  • 流式输出。
  • 分阶段反馈。
  • 可取消操作。
  • 延迟感知提示。 帮助用户感受到系统“没有失控”。

9.2 把性能问题可视化

前端不只是消费结果,也可以帮助暴露问题:

  • 展示当前阶段。
  • 标明是否在等待外部工具。
  • 对长时间步骤给出提示。
  • 对回退或降级做可理解说明。

9.3 识别“技术成功但体验失败”的情况

例如系统 20 秒后成功返回,但用户在第 6 秒就取消了。 从技术指标看这是成功,从体验角度看却是失败。 这类问题需要前端埋点和行为分析来发现。

10. 一组推荐指标

建议至少追踪以下指标:

  • 单次请求平均成本。
  • P50 / P95 总延迟。
  • 第一段可见反馈时间。
  • 关键路径成功率。
  • 重试率。
  • 回退触发率。
  • 用户取消率。
  • 高风险节点确认通过率。

如果是 RAG 场景,还可以补:

  • 每条回答平均证据条数。
  • 检索命中率。
  • 重排触发率。

11. 常见失败模式

11.1 为了追求质量无限加步骤

结果往往是成本、延迟和失败点一起增加。

11.2 一上来就优化最贵模型单价

但真正的大头可能是无效检索、过长上下文或重复工具调用。

11.3 只看平均值,不看长尾

很多用户真正感知到的是 P95 的慢,而不是平均值。

11.4 只做技术降级,不做产品降级

后端回退了,但前端没有解释,用户仍然觉得系统坏了。

11.5 把稳定性交给运气

没有超时、熔断、幂等、回退规则的系统,规模一上来就会暴露问题。

12. 可复用模板

12.1 性能预算模板

text
场景名称:
第一段可见反馈目标:
总完成时间目标:
检索预算:
模型调用预算:
工具调用预算:
前端渲染预算:

12.2 成本分析模板

text
场景名称:
日请求量:
平均单次模型成本:
平均单次工具成本:
平均单次检索成本:
平均重试次数:
总日成本:
可优化环节:

12.3 降级策略模板

text
异常类型:模型不可用 / 工具超时 / 检索异常 / 输出解析失败
当前策略:
回退路径:
用户提示:
是否转人工:是 / 否

13. 面试表达

你可以这样讲:

“我把 AI Agent 的成本、延迟和稳定性当成一个联动问题来做,而不是只盯模型效果。我的方法是先建立基线,再拆链路预算,区分模型、检索、工具和前端展示的耗时与成本来源,然后通过模型路由、上下文控制、缓存、降级和前端阶段反馈去平衡效果和体验。这样项目不只是能跑,而是能长期稳定运行。”