1. 基本认知

一般来说Token 总成本可概括为:

总消耗 ≈ API 调用次数 × 单次上下文规模 × 模型单价

优化需同时作用于调用次数、上下文体积和模型选型,三者缺一不可。仅精简 Prompt 措辞,收益有限。

2. 架构层

2.1 选用与任务复杂度匹配的架构

架构层级越高,Token 消耗通常呈倍数增长。应遵循「最小够用」原则:

任务类型

推荐架构

应尽量避免

分类、摘要、翻译

单次 LLM 调用

ReAct / 多 Agent

固定业务流程

工作流图(少量 LLM 节点)

开放式 Agent 循环

需调用工具但步骤有限

单轮或少量 Tool Call

长链 ReAct

知识问答

传统 RAG(1–2 次调用)

Agentic 多轮检索

开放复杂任务

ReAct(设步数上限)

多 Agent 协作

核心判断:在引入 Agent 之前,先确认单次调用或固定工作流是否足以完成任务。

2.2 多 Agent 改单 Agent + 多工具

多 Agent 架构中,各角色往往携带独立 System Prompt,并在 Agent 间传递完整中间结果,导致上下文在多套 Prompt 间重复计费。在多数业务场景下,单Agent配合语义化工具集即可满足需求。

多 Agent 仅适用于必须并行执行,或上下文必须严格隔离的场景。

2.3 规则与小模型前置,强模型后置

在请求进入主链路前,通过规则引擎、关键词匹配或小模型完成意图识别、任务分流、是否需检索等判断。简单任务直接走模板或小模型,复杂任务再进入 Agent 或强模型。

该分级路由将高单价模型的调用集中在真正需要推理的环节。

2.4 合并步骤,减少循环轮次

在 ReAct 等循环架构中,每多一轮,历史轨迹都会进入后续上下文。应将可在工具内部完成的操作(搜索 + 阅读 + 摘要)合并为单一工具调用,或通过 API 聚合减少往返次数。

减少一步循环,往往比压缩数百 Token 的 Observation 更具成本效益。

3. Prompt 与上下文

3.1 精简并稳定 System Prompt

删除冗余说明、重复示例和过长 Few-shot;将稳定内容置于 Prompt 前端以利于缓存;对Prompt做版本管理,避免无意义变动导致缓存失效。

稳定、精简的 System Prompt 既降低单次成本,也提升缓存命中率。

3.2 抑制冗长的推理输出

在 Agent 场景中,应约束模型保持简短思考,禁止复述 Observation 或重复用户已提供的信息。冗长的 Chain-of-Thought 会在多轮循环中被反复带入上下文,造成显著膨胀。

3.3 采用结构化输出

工具调用与中间决策宜使用 JSON 等结构化格式,替代叙述性推理文本。结构化输出 Token 更少,解析更可靠,也有利于后续自动化处理。

3.4 动态注入,避免全量上下文

每轮仅注入与当前意图相关的规则、知识和状态,而非完整用户画像或全量业务文档。结合Scratchpad(一般指给大模型 / 智能体用的临时工作区)中已知结论,避免在消息历史中重复堆叠相同信息。

4. 工具与 API 层

4.1 动态加载工具子集

工具定义(Schema)在每轮请求中都会占用上下文。应按意图分类后,每次仅暴露 3–5 个相关工具,而非一次性暴露全部工具集。

4.2 精简 Tool Schema

工具描述应简洁明确;功能相近的工具宜合并;去掉模型不需要的可选参数;对外暴露语义化接口,内部再对接 GraphQL、REST 等复杂 API。

4.3 Observation 摘要化,原文存入Scratchpad

工具返回的大体积数据(如完整 JSON、日志、文档)不应全文进入消息历史。应提取 200–500 Token 的结构化摘要进入 Observation,完整数据存入 Scratchpad 或外部存储,按需再取。

这是 ReAct 类架构中最重要的单项优化之一:Observation会出现在后续每一轮的上下文中。

4.4  API 返回最小必要字段

在REST中使用字段过滤或专用摘要接口;在 GraphQL中使用固定模板查询,避免模型自由构造贪婪查询;在SQL中只查询必要列并设置LIMIT

4.5 批处理替代循环调用

将多次单条查询合并为一次批量请求(如 get_users(ids=[...])),减少工具调用次数及相应的 Thought-Action-Observation轨迹。

5. 上下文与记忆管理

5.1 滑动窗口与早期摘要

当 Agent步数较多时,对早期历史做压缩摘要,仅保留最近若干步的完整轨迹。摘要本身可用小模型生成,以控制成本。

5.2 Scratchpad 替代历史堆砌

用结构化工作区记录已确认的事实(用户 ID、订单号、查询结论等),替代在消息历史中反复携带相同信息。模型只需引用 Scratchpad,无需重复阅读冗长历史。

5.3 固定置顶用户目标

在多轮交互中,将原始用户意图固定在上下文前端,既减少任务漂移,也避免模型在推理中反复复述任务描述。

6. RAG 专项

6.1 少而准的检索策略

Top-K建议3–5(配合 Rerank);Chunk大小建议256–512Token;检索轮数以 1 次为主,最多2次。盲目增大K值或Chunk会线性推高输入成本。

6.2 两阶段检索

先召回标题或摘要层(低成本),再对Top结果做全文精读(高成本),避免一次性注入大量完整Chunk。

6.3 上下文压缩

检索到Chunk后,用小模型或规则抽取与问题直接相关的句子,再注入生成 Prompt,剔除无关段落。

6.4 离线构建层级索引

对知识库预建摘要层(如 RAPTOR、LLM Wiki),在线查询时先读摘要,按需下钻详情,避免一次塞入过多Chunk。

7. 护栏与成本工程

7.1 设置硬性上限

对Agent循环、单次输出、Observation长度、单任务Token预算设置明确上限(如max_steps=5–8),防止失控循环。

7.2 重复调用与无进展检测

对相同工具与参数的重复调用、连续多步Scratchpad 无变化等情况做检测,及时终止或转人工,避免无效循环。

7.3 模型分级路由

分类、摘要、压缩等步骤使用小模型;工具选择与ReAct循环使用中等模型;最终回答与复杂推理使用强模型。

7.4 Prompt Caching 与响应缓存

将稳定的 System Prompt、工具定义、政策文档等置于 Prompt 前端并保持版本一致,以利用各厂商的前缀缓存降价。对高频、确定性查询在应用层做响应缓存,实现零LLM调用。

8. 核心原则

AI 场景中节省 Token,可归纳为5条:

少调用:能不用Agent就不用;能合并步骤就合并;能批处理就不循环。

少体积:摘要Observation,精简Prompt与Schema, API只返回必要字段。

少重复:用 Scratchpad 和缓存替代上下文中反复出现的内容。

少滥用:简单任务交给规则与小模型,强模型只用于关键推理。

可度量:按步骤记录Token消耗,优先优化Observation最大、步数最多的任务类型。

Token 优化不是一次性调整 Prompt,而是架构选型、工具设计、上下文工程与成本工程的系统工程。架构与信息组织方式对成本的影响,通常远大于对措辞的局部修改。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐