上一篇 下一篇 分享链接 返回 返回顶部

AI Agent 上线后又慢又贵?一次生产环境优化复盘

发布人:慈云数据-客服中心 发布时间:24小时前 阅读量:4

AI Agent 性能优化教程|生产环境实测

面向已经上线或即将上线 AI Agent 的团队:本文从生产环境真实问题出发,系统讲解如何优化 AI Agent 的响应速度、稳定性、成本、工具调用效率与用户体验。内容覆盖架构设计、Prompt 优化、模型选择、缓存策略、RAG 优化、工具调用、并发控制、监控评估等关键环节。


一、为什么 AI Agent 在生产环境中容易“变慢、变贵、变不稳”?

很多团队在 Demo 阶段开发 AI Agent 时,体验往往非常顺滑:用户输入问题,Agent 调用大模型,必要时访问知识库或工具,然后返回答案。但一旦进入生产环境,问题会迅速暴露:

  • 响应时间从几秒增加到十几秒甚至几十秒;
  • 大模型 Token 消耗失控,单次请求成本过高;
  • Agent 经常重复调用工具,产生无效链路;
  • 多轮对话上下文越来越长,导致延迟和费用同步上升;
  • RAG 检索结果不稳定,答案质量波动明显;
  • 高并发下出现超时、排队、失败重试;
  • 用户觉得“它会思考,但思考得太慢”。

AI Agent 与普通聊天机器人最大的区别在于:它不只是生成文本,还会规划任务、调用工具、检索知识、执行动作,并根据执行结果继续推理。这种能力越强,系统链路越复杂,性能问题也越突出。

因此,AI Agent 性能优化不能只看“大模型速度”,而要从完整链路出发:

用户请求
  ↓
意图识别
  ↓
上下文构建
  ↓
模型推理
  ↓
工具选择
  ↓
工具调用
  ↓
结果解析
  ↓
二次推理
  ↓
最终回复

任何一个环节耗时、失败或成本过高,都会影响整体体验。


二、生产环境实测:AI Agent 的主要性能瓶颈

在多个生产项目中,我们通常会把 AI Agent 的耗时拆分为以下几个部分:

环节 常见耗时 常见问题
请求接入与鉴权 10ms - 100ms 通常不是主要瓶颈
上下文拼接 10ms - 300ms 历史消息过长、重复内容过多
RAG 检索 100ms - 1500ms 向量库慢、召回过多、重排序耗时
模型首 Token 延迟 500ms - 5000ms 模型负载、Prompt 太长
模型完整生成 2s - 30s 输出过长、推理复杂
工具调用 100ms - 10s+ 外部 API 慢、串行调用过多
Agent 多步推理 3s - 60s+ 循环规划、重复调用、无终止条件
后处理 10ms - 500ms JSON 修复、格式化、内容过滤

实际项目中,最常见的性能瓶颈通常集中在四类:

  1. Prompt 和上下文过长
  2. 模型选择不合理
  3. 工具调用链路过多且串行
  4. 缺少缓存、监控和超时机制

尤其是 Agent 型应用,很多时候不是模型“不够快”,而是系统让模型做了太多不必要的事情。


三、优化目标:不只是快,还要稳、准、省

AI Agent 性能优化不能只追求响应速度。一个生产级 Agent 至少要同时关注四个指标:

1. 延迟 Latency

包括:

  • 首 Token 时间;
  • 完整响应时间;
  • 工具调用耗时;
  • 多轮推理总耗时。

对于在线客服、销售助手、办公助理等场景,用户通常可以接受 3-8 秒的响应。如果超过 15 秒,用户流失会明显增加。

2. 成本 Cost

成本主要来自:

  • 输入 Token;
  • 输出 Token;
  • Embedding;
  • Rerank;
  • 工具 API;
  • 数据库和向量库查询;
  • 失败重试。

很多团队上线后才发现,成本不是随着用户数线性增长,而是被长上下文、多轮工具调用和重复请求放大。

3. 准确率 Accuracy

性能优化不能牺牲答案质量。比如一味减少上下文可能导致 Agent 缺少必要信息;降低模型规格可能导致工具选择错误。

4. 稳定性 Reliability

生产环境中必须关注:

  • 超时率;
  • 错误率;
  • 工具调用失败率;
  • JSON 解析失败率;
  • Agent 死循环率;
  • 降级成功率。

一个优秀的 AI Agent 不是永远不失败,而是在失败时能够可控地降级。


四、第一步:建立可观测性,否则无法优化

很多团队优化 AI Agent 的第一反应是“换更快的模型”或“改 Prompt”。但如果没有完整监控,就无法判断真正瓶颈在哪里。

建议对每次请求记录 Trace,至少包含:

{
  "request_id": "req_123",
  "user_id": "u_456",
  "agent_name": "sales_agent",
  "total_latency_ms": 6420,
  "model_latency_ms": 3800,
  "retrieval_latency_ms": 420,
  "tool_latency_ms": 1500,
  "input_tokens": 4200,
  "output_tokens": 680,
  "tool_calls": 3,
  "model_name": "xxx",
  "success": true
}

推荐监控指标

指标 说明
P50/P90/P99 延迟 观察普通用户和极端用户体验
平均 Token 数 判断 Prompt 是否过长
工具调用次数 判断 Agent 是否过度行动
工具调用成功率 定位外部系统问题
RAG 命中率 判断知识库是否有效
重试次数 判断稳定性问题
单次请求成本 控制商业化风险
用户满意度 最终业务指标

生产环境中,建议把每一次 Agent 执行拆成类似 OpenTelemetry 的 Span:

agent.run
 ├── context.build
 ├── retrieval.search
 ├── model.plan
 ├── tool.crm_query
 ├── tool.order_query
 ├── model.final_answer
 └── response.format

这样一旦响应慢,就能明确知道慢在检索、模型还是工具。


五、Prompt 优化:减少无效 Token 是最直接的提速方式

Prompt 是 AI Agent 性能优化中收益最高的部分之一。因为输入越长:

  • 模型首 Token 延迟越高;
  • 推理成本越高;
  • 模型越容易被无关信息干扰;
  • 上下文窗口越容易被浪费。

1. 精简 System Prompt

很多 Agent 的 System Prompt 会写得非常长,包含大量规则、背景、示例和安全要求。上线后建议拆分为:

  • 核心行为规则;
  • 场景专用规则;
  • 工具调用规则;
  • 输出格式规则。

不要把所有规则都塞进每次请求。可以根据用户意图动态加载相关规则。

例如,低效写法:

你是一个企业级智能助手,你需要了解公司的全部产品、全部业务流程、全部售后政策……

优化后:

你是企业客服 Agent。
目标:准确回答用户问题,必要时调用工具查询订单或售后政策。
限制:不要编造订单状态;无数据时说明无法确认。
输出:使用简洁中文。

2. 压缩历史对话

多轮对话是 Token 增长最快的来源。生产环境中不要简单把所有历史消息塞给模型,而应采用以下策略:

  • 最近 N 轮原文保留;
  • 更早的对话进行摘要;
  • 与当前问题无关的历史丢弃;
  • 关键信息结构化保存。

示例:

{
  "user_profile": {
    "name": "张先生",
    "member_level": "VIP"
  },
  "conversation_summary": "用户之前咨询过订单A123的物流延迟问题,并希望优先安排售后处理。",
  "recent_messages": [
    {"role": "user", "content": "现在能帮我查一下处理进度吗?"}
  ]
}

这样既保留了必要上下文,又减少了大量冗余 Token。

3. 工具描述要短而准确

Agent 选择工具时通常依赖工具名称、描述和参数说明。如果工具描述过长,不仅浪费 Token,还可能让模型混淆。

不推荐:

这个工具可以用来查询用户在我们公司系统中的所有订单信息,包括但不限于订单创建时间、支付状态、物流状态、售后状态……

推荐:

查询订单状态。适用场景:用户提供订单号并询问支付、物流或售后进度。

参数也应清晰:

{
  "order_id": "订单号,必填"
}

六、模型选择:不是所有步骤都需要最强模型

很多团队把所有任务都交给同一个大模型处理,这是成本和延迟失控的重要原因。生产级 Agent 应采用“分层模型策略”。

1. 简单任务用小模型

适合小模型的任务包括:

  • 意图分类;
  • 敏感词判断;
  • 简单 FAQ;
  • 参数抽取;
  • 标题生成;
  • 结果格式化。

这些任务不需要复杂推理,用低成本、低延迟模型即可。

2. 复杂规划用强模型

适合强模型的任务包括:

  • 多步骤任务规划;
  • 复杂问题分析;
  • 跨系统推理;
  • 高风险决策;
  • 长文本综合。

这样可以把强模型用在真正有价值的地方。

3. 推荐架构

用户输入
  ↓
小模型:意图识别 / 路由
  ↓
判断任务复杂度
  ├── 简单问题:FAQ / 小模型直接回答
  ├── 查询类问题:工具调用 + 小模型总结
  └── 复杂问题:强模型规划 + 工具执行 + 强模型总结

在实测中,采用分层模型后,很多场景可以降低 30%-70% 的模型成本,同时延迟明显下降。


七、RAG 优化:不要把知识库内容一股脑塞给 Agent

RAG 是企业 AI Agent 中非常常见的能力,但也是性能和质量问题高发区。

1. 控制召回数量

很多系统默认召回 top 10 或 top 20 文档,然后全部放入 Prompt。这样很容易造成上下文膨胀。

建议策略:

  • 初始召回 top 20;
  • 使用 rerank 精排;
  • 最终只注入 top 3-5;
  • 对长文档片段进行压缩。

2. 优化 Chunk 切分

Chunk 太大,会浪费 Token;Chunk 太小,会丢失上下文。

常见建议:

  • FAQ:每条问答作为一个 Chunk;
  • 产品文档:按小节切分;
  • 政策文档:按条款切分;
  • 技术文档:按标题层级切分;
  • Chunk 长度控制在 300-800 中文字之间。

3. 增加元数据过滤

如果用户询问的是“售后政策”,就不应该从“产品介绍”中召回大量无关内容。可以在检索前增加分类过滤:

{
  "category": "after_sales",
  "product_line": "phone",
  "region": "cn"
}

这样既提高准确率,也减少后续模型处理成本。

4. 对检索结果进行摘要压缩

对于长文档,可以先由小模型做压缩,再交给主模型回答:

原始检索片段:3000 字
压缩后关键信息:500 字

在生产环境中,这种方式能显著减少输入 Token,尤其适合政策、合同、财报、说明书等长文本场景。


八、工具调用优化:减少不必要的行动

AI Agent 的强大之处在于能调用工具,但工具调用也是主要性能瓶颈之一。

1. 明确工具调用条件

不要让 Agent 在任何不确定时都调用工具。应该在 Prompt 中明确:

仅当用户问题需要实时数据、账户数据、订单数据或外部系统状态时,才调用工具。
如果用户询问通用知识,直接回答。
如果缺少必要参数,先向用户追问,不要调用工具。

例如用户问:“退货政策是什么?”
这通常不需要查订单,只需要查知识库。

用户问:“我的订单为什么还没发货?”
这就需要订单号和订单系统查询。

2. 工具调用前做参数完整性校验

常见低效链路是:

用户:帮我查订单
Agent:调用订单查询工具
工具:缺少订单号,失败
Agent:再问用户订单号

更合理的流程:

用户:帮我查订单
Agent:请提供订单号
用户:A123
Agent:调用订单查询工具

这可以减少一次无效工具调用。

3. 并行调用工具

如果多个工具之间没有依赖关系,应并行执行。

例如用户问:

帮我查一下这个客户的最近订单、售后记录和当前会员等级。

低效串行:

查订单 800ms
查售后 1200ms
查会员 500ms
总耗时约 2500ms

优化并行:

max(800ms, 1200ms, 500ms) = 1200ms

并行调用可以显著降低整体延迟。

4. 设置工具超时和降级

每个工具都必须配置:

  • 超时时间;
  • 最大重试次数;
  • 失败后的降级策略;
  • 错误信息标准化。

例如:

{
  "tool": "order_query",
  "timeout_ms": 2000,
  "retry": 1,
  "fallback": "提示用户稍后重试,或转人工客服"
}

没有超时控制的 Agent,在生产环境中非常危险。一个外部 API 卡住,就可能拖垮整个请求链路。


九、缓存策略:减少重复计算和重复调用

缓存是生产环境中最有效的优化手段之一。

1. FAQ 缓存

对于高频问题,如:

  • 如何退货?
  • 发票怎么开?
  • 会员权益有哪些?
  • 运费怎么算?

可以使用语义缓存。用户表达不同,但语义相同,则直接返回缓存答案。

用户A:怎么申请退款?
用户B:我想退钱怎么办?
用户C:退款流程是什么?

这些问题可以命中同一个缓存结果。

2. RAG 检索缓存

对于相同或相似查询,可以缓存:

  • 向量检索结果;
  • rerank 结果;
  • 文档摘要结果。

这样可以减少向量库和模型调用成本。

3. 工具结果缓存

部分工具数据具有短时间稳定性,例如:

  • 商品详情;
  • 物流节点;
  • 用户会员等级;
  • 活动规则;
  • 库存状态。

可以设置 TTL:

数据类型 建议 TTL
商品详情 10-60 分钟
活动规则 5-30 分钟
物流状态 1-5 分钟
会员等级 5-30 分钟
订单支付状态 30 秒-2 分钟

注意,涉及资金、权限、强实时状态的数据要谨慎缓存。

4. 模型响应缓存

对于确定性较高的请求,可以缓存最终回答。建议配合:

  • 低 temperature;
  • 标准化 Prompt;
  • 用户权限隔离;
  • 业务版本号;
  • 知识库版本号。

缓存 Key 可以包含:

hash(user_intent + normalized_query + knowledge_version + policy_version)

十、Agent 循环控制:防止无限思考和重复调用

Agent 经常会出现一种问题:它不断分析、调用工具、再分析、再调用工具,却迟迟不给最终答案。

生产环境中必须设置硬性限制:

{
  "max_steps": 5,
  "max_tool_calls": 4,
  "max_total_latency_ms": 15000,
  "max_tokens": 2000
}

推荐终止条件

  • 已获取回答所需信息;
  • 工具返回明确失败;
  • 缺少必要参数;
  • 达到最大步骤数;
  • 达到最大耗时;
  • 用户问题超出能力范围。

避免重复调用同一工具

可以记录工具调用历史:

[
  {
    "tool": "order_query",
    "params": {"order_id": "A123"},
    "result_hash": "xxx"
  }
]

如果 Agent 再次准备以相同参数调用同一工具,应阻止并提示模型使用已有结果。


十一、流式输出:改善用户感知速度

即使总耗时无法大幅下降,也可以通过流式输出改善用户体验。

例如:

正在查询订单状态……
已查询到物流信息,正在核对售后记录……
根据查询结果,你的订单目前……

流式输出的价值在于:

  • 降低用户等待焦虑;
  • 让用户知道系统没有卡死;
  • 提前展示中间进度;
  • 提升对长任务的容忍度。

但要注意,工具调用前后的流式提示应真实,不要假装已经完成某个操作。

推荐结构:

1. 接收请求
2. 判断需要查询订单
3. 展示“正在查询订单”
4. 工具返回
5. 展示最终结果

十二、输出控制:减少冗长回答

很多 Agent 输出过长,是因为 Prompt 中没有明确要求。输出越长,延迟越高,成本越高,用户也未必愿意看。

可以在 Prompt 中加入:

默认回答不超过 300 字。
除非用户要求详细解释,否则优先给出结论。
使用项目符号展示关键信息。

对于客服类 Agent,推荐回答结构:

结论:
原因:
下一步建议:

对于数据分析类 Agent,推荐:

关键发现:
数据依据:
建议动作:

对于代码类 Agent,推荐:

问题原因:
修改方案:
示例代码:
注意事项:

十三、生产环境实测优化案例

下面以一个企业客服 Agent 为例。

优化前

该 Agent 具备以下能力:

  • 查询知识库;
  • 查询订单;
  • 查询售后;
  • 查询物流;
  • 总结回答。

用户问题示例:

我的订单 A123 为什么还没收到?

优化前链路:

1. 加载完整 System Prompt:约 3000 tokens
2. 加载最近 20 轮对话:约 5000 tokens
3. RAG 召回 10 个片段:约 4000 tokens
4. 模型判断需要查订单
5. 调用订单工具:800ms
6. 模型判断需要查物流
7. 调用物流工具:1200ms
8. 模型生成最终回答:900 tokens

实测指标:

指标 优化前
平均总耗时 14.8s
P90 耗时 28.5s
平均输入 Token 12000+
平均输出 Token 900
平均工具调用 2.7 次
单次成本 较高
用户满意度 一般

优化措施

我们做了以下调整:

  1. System Prompt 从 3000 tokens 压缩到 900 tokens;
  2. 历史对话只保留最近 5 轮,其余摘要;
  3. RAG 先按意图过滤,只召回物流和售后相关内容;
  4. RAG 最终注入 top 3 片段;
  5. 订单和物流工具在参数已知时并行调用;
  6. 对订单状态设置 60 秒缓存;
  7. Agent 最大步骤数限制为 4;
  8. 默认回答限制在 300 字内;
  9. 简单物流问题用小模型总结。

优化后

指标 优化前 优化后
平均总耗时 14.8s 5.6s
P90 耗时 28.5s 9.8s
平均输入 Token 12000+ 3800
平均输出 Token 900 280
平均工具调用 2.7 次 1.6 次
单次成本 100% 约 38%
用户满意度 一般 明显提升

这个案例说明:AI Agent 优化不是单点优化,而是链路优化。Prompt、RAG、工具、缓存、模型路由共同作用,才能获得明显收益。


十四、推荐的生产级 AI Agent 架构

一个较成熟的生产级 Agent 架构可以设计为:

用户请求
  ↓
请求预处理
  ├── 鉴权
  ├── 限流
  ├── 敏感信息处理
  ↓
意图识别与路由
  ├── FAQ
  ├── RAG
  ├── 工具调用
  └── 人工转接
  ↓
上下文管理
  ├── 最近对话
  ├── 长期记忆
  ├── 用户画像
  └── 会话摘要
  ↓
Agent 执行器
  ├── 规划
  ├── 工具选择
  ├── 工具调用
  ├── 结果检查
  └── 最终回答
  ↓
后处理
  ├── 格式化
  ├── 安全检查
  ├── 引用来源
  └── 日志记录
  ↓
响应用户

关键是不要让一个大模型承担所有职责,而是通过工程架构拆解任务。


十五、上线前性能压测清单

AI Agent 上线前建议做压测和回归测试。

1. 延迟测试

  • 单用户连续对话;
  • 多用户并发请求;
  • 长上下文请求;
  • 多工具调用请求;
  • RAG 大文档请求。

2. 稳定性测试

  • 工具 API 超时;
  • 向量库不可用;
  • 模型返回格式错误;
  • 用户缺少参数;
  • 用户输入异常内容;
  • 高并发限流。

3. 成本测试

  • 单次平均 Token;
  • P90 Token;
  • 每日请求量预估;
  • 缓存命中率;
  • 重试成本;
  • 不同模型路由比例。

4. 质量测试

  • FAQ 准确率;
  • RAG 引用正确率;
  • 工具调用正确率;
  • 多轮上下文一致性;
  • 拒答和转人工策略;
  • 幻觉率。

十六、常见误区

误区一:只换更快的模型

换模型可能有效,但如果 Prompt 很长、工具调用混乱、RAG 注入过多,换模型只能缓解一部分问题。

误区二:上下文越多越好

上下文越多不代表答案越准。无关上下文会干扰模型判断,也会增加成本和延迟。

误区三:Agent 步骤越多越智能

在生产环境中,步骤越多意味着越慢、越贵、越不稳定。优秀的 Agent 应该尽量少走弯路。

误区四:所有问题都需要 Agent

很多问题用 FAQ、规则引擎或普通检索就能解决。不是所有请求都应该进入复杂 Agent 流程。

误区五:没有监控就凭感觉优化

没有 Trace 和指标,优化很容易变成猜测。生产环境必须数据驱动。


十七、性能优化最佳实践总结

最后给出一份简洁的优化清单:

  • 压缩 System Prompt,动态加载规则;
  • 历史对话摘要化,避免无限增长;
  • 简单任务使用小模型;
  • 复杂任务才调用强模型;
  • RAG 先过滤、再召回、再重排、再压缩;
  • 控制注入 Prompt 的文档数量;
  • 明确工具调用条件;
  • 工具调用前校验参数;
  • 无依赖工具并行执行;
  • 设置工具超时、重试和降级;
  • 对 FAQ、RAG、工具结果做缓存;
  • 限制 Agent 最大步骤数;
  • 防止重复调用同一工具;
  • 使用流式输出改善体验;
  • 控制最终回答长度;
  • 建立完整 Trace 监控;
  • 持续评估延迟、成本、准确率和满意度。

结语

AI Agent 的生产环境优化,本质上是“大模型能力”和“工程系统能力”的结合。模型决定了 Agent 的智能上限,而工程优化决定了它能否稳定、快速、低成本地服务真实用户。

一个优秀的 AI Agent,不应该只是会回答问题,更应该具备以下特征:

  • 该快的时候快;
  • 该查的时候查;
  • 不该查的时候不乱查;
  • 知道自己什么时候不知道;
  • 出错时能够降级;
  • 成本可控;
  • 指标可观测;
  • 质量可持续改进。

如果你的 AI Agent 已经上线但体验不稳定,建议不要急着重构系统,而是先从监控入手,拆解每一次请求的耗时、Token、工具调用和错误率。通常只要完成 Prompt 压缩、上下文管理、模型分层、RAG 精简、工具并行和缓存策略,就能在不牺牲质量的前提下,显著提升性能并降低成本。

目录结构
全文