性能优化:Agent与Skill的调优指南

AI 系统的性能,不只是“模型跑得快不快”。真正拖慢体验的,通常是 prompt 太长、工具调用太多、上下文反复传、或者本来能异步处理的任务被你写成了同步等待。

本文要点

  • 先测 first-token latency、总耗时、工具调用次数、缓存命中率,再谈优化
  • 静态前缀适合缓存,交互输出适合流式,非紧急任务适合批处理
  • 真正省时间的地方,往往不是模型本身,而是减少重复上下文和重复调用
  • 先改最贵的环节,别一上来就盯着“换更强模型”

先测哪几个指标

我现在会先看这几个数:

  • 首个 token 出来的时间
  • 完整响应结束的时间
  • 一次任务里用了多少次工具调用
  • prompt 里有多少静态内容可以复用
  • 缓存命中了多少

如果这几个指标没测出来,很多“优化”其实只是感觉更快了。

先改最贵的地方

1. 把静态前缀放前面

系统提示、工具定义、规则说明、固定示例,这些内容如果每次都重复传,就很浪费。OpenAI 的 prompt caching 文档明确提到,静态前缀更容易命中缓存,也更省时省钱。

对中级开发者来说,最实际的做法不是研究缓存原理,而是直接问自己:

  • 哪些内容每次都一样
  • 哪些内容每次才变
  • 能不能把前者固定在最前面

2. 交互场景先流式输出

用户正在等的时候,别等模型完整想完再吐结果。OpenAI 的 streaming 文档说得很直接:流式输出可以让你在模型还在生成时就开始处理前半段内容。

这对问答、代码解释、审查建议都很有用。用户看到第一段内容,体验就已经变了。

3. 不着急的任务直接批处理

如果一个任务不需要立刻回应,比如评估、分类、批量摘要、离线整理,直接用 Batch API 比同步请求更合理。OpenAI 官方文档给出的方向很明确:这类任务适合异步批量处理,而且成本更低。

4. 少做重复工具调用

很多 Agent 慢,不是慢在模型,而是慢在每一步都去问一次文件系统、一次数据库、一次搜索接口。能合并的调用尽量合并,能并行的任务尽量并行。

比如:

  • 先把同一目录下的文件一次性读完
  • 能一起完成的检查不要拆成串行
  • 一次能返回多个结果的接口,不要切成多个小请求

一个很实用的判断

如果任务是“人正在等结果”,先想流式和缓存。 如果任务是“结果今天之内出来都行”,先想批处理。 如果任务里有很多互不依赖的子步骤,先想并行。 如果任务里有大段固定上下文,先想缓存前缀。

这个判断比“换哪个模型”更值钱。模型升级当然有帮助,但它通常不是最先该动的地方。

容易踩的坑

只盯模型,不盯工作流

很多人一遇到慢,就想换更强的模型。结果本质问题还在:prompt 还是很长,工具调用还是很多,流程还是一层套一层。

把所有事情都塞进一个大 prompt

大 prompt 看起来像“上下文完整”,实际很容易把成本和延迟一起放大。该固定的内容固定,该变的内容放后面。

不区分在线和离线任务

交互场景和批处理场景应该走不同路径。一个追求感知快,一个追求总体吞吐。不要把这两个目标混在一起。

一个落地清单

如果你现在就要改一个 AI 工作流,我会按这个顺序来:

  1. 记录当前的 first-token latency 和总耗时。
  2. 找出最重复的 prompt 前缀。
  3. 把交互场景改成流式。
  4. 把非紧急任务改成批处理。
  5. 减少重复工具调用,能并行的就并行。
  6. 再考虑换更强的模型。

结语

AI 系统的性能优化,本质上是把“重复、等待、串行”这三件事拆掉。

先测清楚,再改最贵的地方,通常比直接换模型有效得多。

数据来源