从“省着用”到“循环用”:Agent Token成本优化的逻辑重构与工程全景

从"省着用"到"循环用":Agent Token成本优化的逻辑重构与工程全景

摘要

大语言模型 Agent 正从实验室走向生产环境,Token 成本已成为制约其规模化的核心瓶颈。现有优化方案多聚焦于压缩、缓存与规划分离,但常出现"重输入轻输出""重缓存轻冷启动""将互补策略误作递进关系"等认知偏差。本文基于因果成本模型与任务分布理论,系统梳理 Agent Token 优化的真实杠杆、学术进展与工程落地路径,建立统一的成本归因框架。文章进一步提出"规划即文档"的架构范式,明确长上下文操作与文档化解析的决策临界点,并阐明"省着用"与"循环用"作为正交策略的互补关系------前者兜底一次性任务,后者收割高频场景,二者共同构成 Agent 系统经济性设计的完整拼图。

关键词:Agent、Token 成本优化、规划-执行分离、上下文压缩、计划缓存、成本归因


一、问题重定义:成本归因的第一性原理

1.1 Token 成本的结构性困境

大语言模型 Agent 正被广泛部署于软件工程、运营自动化、数据分析等复杂多步任务中。然而,当 Agent 从单轮问答走向多轮交互与长时程任务时,上下文长度的指数级膨胀迅速成为根本性瓶颈。

Agent 的"状态"并非由模型参数表征,而是由提示上下文构成:系统指令、演化中的计划、历史推理轨迹、工具调用结果、用户指令、长期记忆与检索知识。随着任务深度与广度的增加,这一状态日益庞大、冗余且昂贵。更为严峻的是,即便拥有 200k--1M token 窗口的模型,在处理结构不良或信息过载的上下文时,其推理质量亦会显著退化------业界称之为"上下文腐烂"(Context Rot)。现代 Agent 的失败,压倒性地是上下文失败,而非模型能力不足。

Token 成本优化由此成为 Agent 系统从实验室走向大规模生产的必答题。

1.2 成本公式与优先级倒置的纠正

Agent 系统的 Token 成本(C)可分解为三个核心变量:

复制代码
C = Σ (i=1..N) [ p_in · l_in(i) + p_out · l_out(i) ]

其中:

  • N 为调用轮次
  • l_inl_out 分别为输入/输出 Token 长度
  • p_inp_out 为对应单价

真实 API 定价中,p_out ≈ 3 × p_in(如 GPT-4o:输入 5/1M tokens,输出 15/1M tokens)。由此可得成本优化的优先级排序:

  1. 减少调用轮次 :同时节省 l_in + 3 × l_out 的成本;
  2. 控制输出长度:边际收益为等量输入的 3 倍;
  3. 压缩输入长度:虽可降低单次成本,但若引发轮次增加,则得不偿失。

因此,成本优化的第一杠杆永远是"减少调用轮次",其次为"控制输出",最后才是"压缩输入"。将"输入控制"置于首位,是对成本结构的根本误判。成本优化的本质是成本归因------先算清每一笔账,再决定使用何种工具。


二、学术视角:效率理论的真实贡献与边界

2.1 上下文压缩:信息密度的"不可能三角"

学术界聚焦于固定 Token 预算下的信息有效密度最大化。

  • ACON:提出统一压缩框架,可将环境观测与交互历史压缩为信息凝缩,峰值 Token 减少 26%--54%,性能保持率达 95% 以上。
  • PAACE:引入规划感知压缩,在 AppWorld 基准上取得最高准确率,蒸馏版本保留教师模型 97% 的性能。
  • SimpleMem:基于语义无损压缩,实现 26.4% 的平均 F1 提升,推理 Token 消耗减少高达 30 倍。
  • AgentDiet:通过移除冗余轨迹信息,将输入 Token 减少 39.9%--59.7%。

边界与局限:上述框架报告的 95%--97% 性能保持率为平均表现。在长尾异常日志、非标准系统报错等边缘案例中,压缩导致的信息熵损失往往引发性能断崖。压缩率与泛化能力的"不可能三角"依然存在------99% 的压缩率必然伴随不可逆信息损失。此外,PAACE 的规划感知压缩依赖"下一任务相关性建模",需额外 LLM 调用;SimpleMem 的记忆构建依赖离线预计算,难以应对冷启动场景。

2.2 规划-执行分离:解耦的真实收益

ReAct(Reasoning + Acting)范式虽能提升任务性能,但以过量的工具调用、更长的轨迹和更高的 Token 消耗为代价。

Plan-then-Execute(P-t-E) 模式将战略规划与战术执行显式解耦:Planner 由推理能力强的模型承担,Executor 按计划逐步执行。P-t-E 的成本优势不仅在于"少调用",更在于调用结构的优化------将 N 次复杂推理压缩为 1 次规划 + M 次轻量执行(M << N)。研究表明,角色分解的 Agent 团队持续占据成本-准确率的帕累托前沿,异构团队相比同构团队准确率可提升高达 44%,或以低至 1/12 的每任务成本达到同等性能。

Agentic Plan Caching(APC) 进一步将计划缓存引入测试时记忆,实现成本与延迟的显著降低------但收益高度依赖缓存命中率,未命中时还需支付检索与比对开销。

2.3 代码化执行:从"对话"到"编译"

CodeMem 提出将 LLM 重新定位为可执行工作流的架构师。Agent 在沙箱中编写、验证并将成功逻辑持久化为代码,将复杂逻辑从易失性上下文窗口转移到确定性代码中,解决了概率模型固有的可复现性危机。CodeAct(以 Python 代码作为 Action 空间)可将复杂操作压缩为单步执行,有助于保持上下文精简。

需澄清的是:代码化执行并非"零 Token 消耗"------处理 GB 级数据仍需在上下文中读取文件元数据或样本以编写代码。其真正价值在于:将多轮试错压缩为单轮生成,将消耗从执行时转移到规划时,并使代码可反复复用摊销成本。


三、工程视角:三大控制维度的落地实践

3.1 成本权重修正:轮次 > 输出 > 输入

工程落地应以成本权重为指导,而非 Token 体积:

维度 控制策略 单位成本系数 杠杆排序
调用轮次 规划-执行分离、并行工具调用、计划缓存 l_in + 3 × l_out 🥇 第一
输出量 结构化输出、截断、终止序列 3 × 🥈 第二
输入量 摘要、截断、缓存读取 1 ×(缓存仅 0.1 × 🥉 第三

特别注意:前缀缓存虽能将输入成本降至 0.1 倍,但仅对 System Prompt 及固定前缀生效,动态上下文不命中缓存。"缓存读取 Token 按 0.1 倍计算"不可泛化为"所有输入成本降低 90%"。

3.2 调用轮次:被低估的最大杠杆

减少轮次的具体工程手段包括:

  • Orchestrator 模式 :1 次规划 + 1 次总结 = 2 次调用,对比 ReAct 的 7 次调用,成本差距为 (7−2) × (l_in + 3 × l_out)
  • 并行工具调用:单次 Prompt 生成多个工具调用,一次 API 完成多个动作。
  • 计划缓存:命中时直接将 3--5 轮试错压缩为 1 轮调用,但收益须乘以命中率。
  • 最大重试阈值:约定最多自动重试 2 次,第 3 次失败后直接报告错误,避免无限循环。

3.3 控制输入:什么该进,什么不该进

System Prompt 固化与缓存:确保静态前缀稳定命中 API 的自动缓存,删除未使用的工具定义(每调用减少 8KB--12KB)。

数据与逻辑分离

类型 处理方式 缩减率 重复出现概率 缓存策略
数据文件(日志、CSV) 头尾截断/结构化提取/统计摘要 70%--90% 绝不缓存
程序逻辑(脚本、命令) AST 哈希去重/参数化泛化/工具缓存复用 95%+ 值得投入缓存体系建设

分层隔离:执行工具只接收原子指令(动作 + 参数,≤200 Token),不携带对话历史、任务背景等上下文,单次调用降幅达 99%+。

3.4 控制输出:堵住终端的"废话管"

输出 Token 单价为输入的 3 倍,必须强力管控:

  • 脚本层 :要求输出结构化数据(JSON/CSV),强制添加输出截断(如 Select-Object -First 50),丢弃无用输出。
  • API 层 :设置 max_tokens 为预期值的 1.5 倍,设置 stop 终止序列(如 ["\n\n", "```"])强制刹车。
  • Prompt 层:System Prompt 末尾加死命令:"禁止开场白、禁止结束语、禁止解释过程,只输出最终结果。"

四、核心决策:长上下文工具操作 vs. 文档化解析

4.1 问题定义

一个频繁出现却鲜有定量回答的问题是:带着长上下文进行工具操作划算,还是先将其输出为文档、再让工具解析文档划算?

4.2 成本数学模型

设原始长上下文长度为 L (如 100k Tokens),每次工具调用输出为 O(固定 1k),输入单价为 1,输出单价为 3(相对值)。

方案 A(直接携带)

复制代码
Cost_A = N × (L × 1 + O × 3) = N × (L + 3O)

方案 B(先输出文档,再解析)

第一步生成摘要/结构化文档 D(D ≈ 5%~10% L),消耗一次输出;后续调用上下文变为极短的 D。

复制代码
Cost_B = (L × 1 + D × 3) + N × (D × 1 + O × 3)

代入 L = 100k, D = 5k, O = 1k

调用次数 (N) 方案 A 方案 B 结论
1 次 103k 单位 115k 单位 A 更便宜(B 贵约 12%)
2 次 206k 单位 128k 单位 B 更便宜(B 节省约 38%)
5 次 515k 单位 140k 单位 B 碾压(B 节省约 73%)

数学阈值 :当 N ≥ 2 时,文档化策略开始展现优势;N ≥ 3 时优势极其显著。

4.3 被忽略的"缓存陷阱"与工程范式转移

有人会反驳:"方案 A 可以利用前缀缓存,长上下文前 90% 固定,成本只算 10%。"------致命缺陷在于:前缀缓存要求前缀完全一致。多轮工具调用中,每次返回的观察结果不同,会破坏缓存连续性,命中率随轮次增加急剧下降。

文档化的优势在于将长上下文物理剥离出对话窗口,后续工具调用时 System Prompt 极短(可命中缓存),工具仅读取本地文件指针,彻底将数据从 Token 计费体系中移除。更进一步,方案 B 中生成的结构化文档(JSON/CSV)可由确定性算法零 Token 消耗解析------这正是 CodeMem 理念的落地:将"模糊的推理负担"转化为"确定的计算负担"。

4.4 实操黄金法则

  • 一次性任务(≤2 次操作) → 直接带长上下文,成本最低,省去解析逻辑的维护成本。
  • 长期运行任务(≥3 次迭代) → 采用文档化策略,从第二次起节约 70% Token 费,并将延迟从 15 秒降至 2 秒。

五、范式升级:规划即文档

5.1 从"额外生成"到"本职工作"

文档化策略引出一个更深层的洞察:在成熟的"规划-执行分离"架构中,AI 的标准规划输出本身就是"文档",根本不需要"额外生成"一步。

Planner 的职责正是读取长上下文、输出一份结构化的执行清单(Plan),这份清单自然就是文本(JSON 或 Markdown)。Planner 输出 Plan 是本职工作,无论是否需要工具操作都必须完成。将这份现成的 Plan 复用为文档,边际成本为 0------这比"多调一次 API 专门写摘要"要高明一个维度。

5.2 从"传递文本"到"传递指针"

  • 旧思维(拷贝):将长文本压缩为摘要,再塞入下一次 Prompt------摘要依然消耗 Input Token。
  • 新思维(指针) :Planner 输出 Plan 后,通过函数返回 Plan ID 或文件路径传给 Executor------上下文仅为"请根据 /tmp/plan.json 执行" ≈ 20 Token,从 L 降至 O(1)。

5.3 格式决定成败

Plan 格式 Executor 解析方式 成本
散文式 Plan 仍需消耗大量 Token 理解 极高
结构化 JSON Plan 只解析键值对 极低
可执行代码(CodeMem 模式) 工具直接运行代码,不再调用 LLM 解析 归零

5.4 唯一需要"额外生成"的反例

当长上下文是"待操作的原始数据池"(如 10 万行日志),而非"待执行的任务说明"时,Planner 无法将全部数据写入 Plan,只能输出"数据切片指针"(如 grep "Error" | head -50)。若工具返回的结果仍需格式化为精简的"中间证据文档"供下一轮推理使用,这才需要"额外生成"------但这属于状态管理范畴,与规划文档化是两回事。


六、"省着用"与"循环用":正交策略而非线性演进

6.1 错误二分法的纠正

"省着用"(压缩/截断)与"循环用"(缓存/复用)并非递进关系,而是面向不同任务分布的正交工具箱:

策略 适用场景 核心机制 冷启动成本 边际收益
省着用 一次性任务、长尾探索 降低单次调用的输入/输出 Token 线性递减
循环用 高频重复任务、标准化流程 将成功经验固化为可复用资产 高(首次编写/泛化) 指数摊销

6.2 二者不可相互替代

  • 若 Agent 面对的全是一次性任务,缓存命中率趋近于 0,"循环用"的构建成本无法回收。
  • 若面对的是标准化运维操作(如"查昨日错误日志 Top10"),"循环用"可将每次数千 Token 的调用压缩为哈希查找 + 确定性执行。

合理的架构应为混合策略:对任务请求进行路由分类------高频任务走缓存执行路径,长尾任务走动态生成路径,二者共享底层的压缩与截断能力作为兜底。

6.3 能力飞轮:从"动态生成"到"条件固化"

将一次性成功经验转化为可复用资产,需经过四个前置判断:

  1. 重复性检测:计算任务指纹(AST 哈希/意图向量),查询缓存库------命中则直接复用。
  2. 参数化泛化:将硬编码路径、IP 等替换为变量,使脚本从"针对某实例"升维为"针对某类问题"。
  3. 入库阈值判定:若该任务类型在过去 30 天内出现 ≥3 次,才封装为工具入库------避免"一次性逻辑"污染缓存库。
  4. 动态检索:调用时通过向量检索召回 Top-3 最相关工具注入上下文,避免全量工具列表撑爆 System Prompt。

核心原则:不是所有成功经验都值得固化,只有高频且稳定的模式才应进入复用池。


七、结语:成本优化的本质是成本归因

Agent 的 Token 成本优化,正在从"提示词工程"走向"系统工程"。系统工程的起点不是"用什么技术",而是"算清每一笔账":

  • 成本权重决定了优化优先级:轮次 > 输出 > 输入;
  • 任务分布决定了策略选择:高频走缓存,长尾走压缩,二者并行不悖;
  • 性能报告必须附带边缘案例表现与冷启动开销,否则"95% 性能保持"只是平均数的胜利;
  • 架构设计应将规划输出本身视为可复用文档,避免"额外生成"的无谓消耗;
  • 缓存策略必须挂钩命中率,未命中的缓存只是纯粹的系统开销。

最终,Agent 成本优化的本质不是让模型"少说话",也不是让系统"变聪明",而是让每一笔 Token 支出都经得起成本-收益核算------把高频成功经验转化为确定性资产,对一次性任务务实压缩,既不盲目崇拜缓存,也不否定压缩的价值。让 Agent 从"事必躬亲的执行者"进化为"运筹帷幄的调度者",让每一次 Token 支出都用在刀刃上。这才是工程落地应有的理性姿态。


关键决策速查表

场景 推荐策略 核心动作
一次性任务(≤2 次操作) 直接携带长上下文 省去解析逻辑维护成本
多轮迭代(≥3 次操作) 文档化解析 生成结构化文档供后续零 Token 解析
高频标准化任务 循环用(缓存/复用) 哈希去重 + 参数化泛化 + 工具入库
长尾探索任务 省着用(压缩/截断) 头尾截断、结构化提取、统计摘要
规划-执行架构 规划即文档 Planner 输出 JSON Plan,Executor 只读指针
代码化执行 CodeMem / CodeAct 将试错循环压缩为单轮代码生成
相关推荐
焦虑的说说4 小时前
订单库多表合并重构:零停机、无感知与数据一致性保障实践
重构·架构
课件帮8 小时前
教师数字分身+AI协同备课:2026课件帮如何重构教学内容生产?
人工智能·重构
LabVIEW开发9 小时前
LabVIEW按段拆分TDMS文件的格式边界与重构
开发语言·数据库·重构·labview·labview知识·labview功能·labview程序
布谷歌10 小时前
如何自定义 MyBatis枚举处理器(EnumTypeHandler):分享从 “同包同名 shadow 覆盖” 到 “官方扩展点” 的重构经历
重构·mybatis
智慧物业老杨11 小时前
业财一体化的底层重构:从“两套账“到“一套账“的技术闭环
重构
龙虾PRO11 小时前
大模型时代二进制漏洞攻防体系重构:从 AFL 模糊测试到 AI 智能体的全链路落地路径
人工智能·重构
STQY燊桐启元(深圳)电子科技12 小时前
免涂硅脂新时代,ST‑PCMTC96 与 ST‑PCM180 相变陶瓷片重构功率器件热管理
经验分享·笔记·重构·pcm
DS随心转APP12 小时前
AI导出鸭插件 如何解决这些痛点,以及它如何重构“批量导出”这件事,让 纳米AI导出Excel 和其他格式告别手动整理,让AI导出回归优雅。
人工智能·重构·word·excel·deepseek·ai导出鸭
薛晓刚13 小时前
国产化深水区:正在被重构的DBA价值与第三方服务格局
oracle·重构·dba
顿哥GPT1 天前
2026年8月AI编程实验:ChatGPT Plus / Pro + Codex 提示词粒度对重构质量与测试覆盖的影响
chatgpt·重构·ai编程