本节摘要:智能体系统的性能由三个指标定义:延迟、成本、稳定性。本节先建立"瓶颈在哪"的判断框架,再给模型选择、工具精简、缓存、并行四类优化手段,最后讨论内存与上下文管理。优化的原则是先量化,再动手。
阅读完本节,你应当能够:
"智能体太慢、太贵"——但慢在哪、贵在哪,很多人说不清。一次请求的耗时分布通常是:模型生成占大头,工具调用次之,框架本身可以忽略。优化顺序错了,时间全花在框架上,收益为零。本节的第一个习惯就是:先量化各部分耗时,再决定优化哪里。
先量后优:给一次完整请求打点,统计"模型耗时、工具耗时、检索耗时"三块,最大那块才是优化目标。
模型成本与两个因素强相关:输入 token(提示词 + 上下文 + 工具描述)与输出 token(回答长度)。提示词每多一段历史、多一个工具描述,都在为每次请求付钱。上下文管理是成本优化的第一抓手。
| 场景 | 模型策略 | 理由 |
|---|---|---|
| 简单问答 | 小快模型 | 便宜且够用 |
| 复杂推理 | 强模型 | 质量优先 |
| 多模态 | 多模态模型 | 能力所需 |
| 批量处理 | 分模型路由 | 按难度分级 |
💡 关键直觉:不是所有请求都要最强模型。按任务难度路由到不同模型(简单用小模型、复杂用大模型),成本可降一半以上。Agno 的模型无关性让路由实现很简单。
# 精简前:instructions 一大段 + 挂 5 个工具 # 精简后:instructions 三条关键规则 + 只挂 2 个必需工具 agent = Agent( name="lean_bot", instructions=["结论放开头", "不确定就明说", "引用来源"], tools=[必需工具A, 必需工具B], # 只留任务需要的 )
每多一个工具,模型要多读一段工具描述;每多一段历史,输入 token 都在涨。精简指令、按需挂工具、控制历史长度,是零成本优化。
# 缓存:重复问题命中缓存,跳过模型调用 # 结果缓存是成本与延迟的"双杀"优化 # 并行:多个独立子任务并发执行 # 多智能体并行(3.3 并行扇出)把总耗时压到最慢成员
⚠️ 常见坑:缓存有正确性问题——带上下文的回答不能直接缓存。只对"无状态、可复现"的查询做缓存;用户相关、时间敏感的回答别缓存。
| 手段 | 效果 |
|---|---|
| 截断历史 | 控制输入 token |
| 摘要历史 | 保留要点压缩体积 |
| 分层记忆 | 会话/用户/长期分存 |
| 清理无关记忆 | 减少噪声 |
长对话是成本与质量的隐形杀手:历史越长,输入越贵,模型也越容易被旧信息干扰。给长会话做滚动窗口或摘要压缩,是生产智能体的标配。
| 手段 | 解决 |
|---|---|
| 超时控制 | 模型/工具卡死 |
| 重试机制 | 瞬时错误 |
| 降级方案 | 服务不可用 |
谈性能先谈钱花在哪。智能体应用的耗时与成本主要分布在四处:模型推理(大头)、工具的网络调用、知识库检索、记忆读写。框架自身的开销(对象创建、指令组装)占比极小——这正是 Agno 薄对象设计的红利,也意味着别把优化精力浪费在框架层。
| 开销来源 | 占比感受 | 优化手段 | 见效难度 |
|---|---|---|---|
| 模型推理 | 通常最大 | 换小模型、精简上下文、缓存 | 中 |
| 工具调用 | 视频率而定 | 重试与超时、结果缓存 | 低 |
| 知识库检索 | 中 | 预加载、收紧返回块数 | 低 |
| 记忆读写 | 随历史增长 | 窗口限制、摘要压缩 | 中 |
原始资料把"简化智能体复杂度"列为第一优化项,方向完全正确。一个智能体挂十几把工具、指令写满三屏,每次请求都要把整包提示词发一遍:token 账单翻倍,工具选择准确率反降。瘦身三刀:砍掉使用率低的工具、指令去重压缩、把不同职责拆给不同成员。
工具复用是另一条朴素的好建议:网页内容提取这类基础能力做成可复用工具,多个智能体共享实现,既省维护又保证行为一致。
记忆优化抓两个旋钮。类型上,轻量任务用进程内记忆就够,别为每个小助手都配上数据库;规模上,给历史设窗口或做摘要压缩,别让三年前的对话还在为今天的请求付 token 费。
优化优先级(先做上边的) 1. 精简指令与工具 —— 零成本,立竿见影 2. 缓存高频结果 —— 检索与工具结果复用 3. 按角色配模型 —— 简单活交给便宜模型 4. 记忆窗口与摘要 —— 控上下文膨胀 5. 并行化成员调用 —— 团队任务提速
⚠️ 常见坑:优化前没有基线。动手前先固定一组测试问题,记录延迟、token 用量、答案质量三项基线,每做一项优化跑一轮对比。没有度量的优化是在撞运气,还可能悄悄劣化质量换速度。
💡 关键直觉:多数"智能体太慢"的真实原因是提示词太胖。上下文里每一段历史、每一块检索结果、每一条指令都在按 token 计费并拖慢推理。先给提示词减肥,再谈架构级手段。
性能优化清单里性价比最高的一族是缓存,值得展开成三层来看。第一层是工具结果缓存:外部接口的返回(搜索结果、行情数据)按"内容加时效"做键,短则几十秒长则数小时的 TTL,重复问题直接命中,省下真实调用。第二层是检索结果缓存:知识库对同一问题的检索块做缓存,知识未更新期间一直有效,ingest 之后记得失效。第三层是答案缓存:完全相同的问题(常见于客服高频问法)连模型调用都省掉,直接回历史答案。
三层的命中率依次下降、收益依次上升,实施顺序就按这个来。工程上有两个共同注意点:键的设计要包含影响输出的所有变量(模型版本、指令版本、用户身份分域),否则会缓存串味的答案;失效策略要与数据变更联动,宁可失效勤一点,也别让用户看到昨天的价格。
另一个常被忽略的省钱项是历史裁剪。长对话里,早期消息的信息密度远低于近期消息,把超出窗口的历史做摘要压缩而不是截断丢弃,上下文体积能压掉一大半而信息损失有限。摘要本身用便宜模型做,成本远低于每次请求多背几百 token 的累积开销。
团队里无依赖的成员调用并行执行(如搜索与财务查询同时跑),是见效最快的并行点。注意只有"彼此不依赖"才可并行,有工序依赖的并行会引入竞态。
多数手段两者同向:精简上下文既省钱又提速、换小模型同理。缓存更是一次投入双向收益。少数手段有取舍(更高温度的强模型慢但质量好),按业务对延迟与质量的敏感度定。
给每次请求记录 token 用量与耗时,按会话聚合看分布。异常贵的请求通常指向:工具结果过长未截断、记忆窗口失效、检索返回块数失控。有了明细,病因自己会浮出来。
把优化工作落成一条时间线,避免"东一榔头西一棒子"。第一周只做零成本项:精简指令、砍低频工具、开启结果缓存,通常就能拿下两三成的延迟与成本改善。第二周建立度量:请求日志加 token 与耗时字段,画出分布图,找到最贵最慢的那百分之十请求——帕累托法则在智能体应用里格外灵验,异常请求往往是某类失控场景(超长工具结果、记忆窗口失效)造成的不成比例开销。第三周做结构性优化:按角色拆分模型档位、历史摘要压缩、无依赖调用并行化。
第四周开始才是"深水区"选项:蒸馏小模型替换高频路径、知识库分层(热数据常驻内存)、跨请求的结果复用体系。这些动作收益大但改动面也大,必须在前三周的度量基线保护下进行。整条时间线的纪律只有一条:每一步都先看数据再动手,每一步之后都用同一把尺子量效果。优化这件事,方向感比聪明更重要,而方向感只来自数字。
延迟优化有硬手段也有软手段,后者常被工程师轻视却效果显著。流式输出是最典型的一个:同样三秒的生成耗时,逐字呈现的三秒感受上远快于转圈三秒后一次性弹出——用户对"正在进行"的容忍度远高于"毫无动静"。进阶玩法是分阶段呈现:先秒回一句"已收到,正在检索资料",再逐步给出结论框架与细节,把等待切成有反馈的小段。优先级排序也是软手段:先算用户最关心的核心答案再补次要细节,让价值前置。这些偏方不减少任何实际耗时,却直接改善"体感延迟",在人机交互产品里,体感就是全部的真实。
最后给一个心态校准:优化的尽头不是最快的系统,而是够用且可控的系统。延迟降到用户无感、成本降到预算安心,就该停手把精力还给功能与质量。性能工程最大的陷阱是把手段当目标,时刻记得你优化的是产品,不是跑分。
系统跑得快了,最后一节让框架"长成你的形状"——扩展与定制开发。