在使用 AI(尤其是按 Token 计费的 API 或长上下文模型)时,节约 Token 的核心思路是:减少无效输入、压缩有效信息、控制输出长度、复用上下文。以下是分维度的具体方法及示例:


一、Prompt 工程:让输入更精炼

1. 删除冗余修饰词

低效:

“请你作为一个非常专业、经验丰富、在业界享有盛誉的资深 Java 后端开发工程师,帮我详细分析一下下面这段代码可能存在的问题,要非常详细、全面、深入、透彻地分析……”

高效:

“作为资深 Java 工程师,分析以下代码的潜在问题(重点关注 NPE、并发安全、资源泄漏):”

节约点:删除形容词堆砌,直接限定角色 + 任务 + 约束条件。


2. 使用结构化标记替代自然语言描述

低效:

“这里有一个用户表,字段包括用户ID、用户名、邮箱、创建时间、状态。还有一个订单表,字段包括订单ID、用户ID、订单金额、订单状态、创建时间。用户表和订单表通过用户ID关联。请帮我写一条SQL查询每个用户的订单总金额……”

高效:

表结构:
- users(id, username, email, created_at, status)
- orders(id, user_id, amount, status, created_at)

需求:查询每个用户的订单总金额,按金额降序。

节约点:用表格/列表/代码块替代大段叙述,结构化信息密度更高。


3. 提供最小可复现示例(MRE)

低效: 粘贴 500 行业务代码让 AI 找 Bug。

高效:

// 问题:以下代码在并发下可能丢失更新
public void deductStock(Long itemId, int qty) {
    int stock = getStock(itemId);  // ①
    if (stock >= qty) {
        updateStock(itemId, stock - qty);  // ②
    }
}
// 请指出问题并给出修复方案

节约点:只保留与问题相关的核心逻辑,删除无关业务代码、注释、空行。


二、上下文管理:避免重复携带历史

4. 主动摘要历史对话

当对话轮次很长时,不要让模型重复读取完整历史。

操作方式:

“以上对话我们讨论了 MySQL 索引优化的 5 个要点。后续问题请基于这 5 点展开,无需重复之前的详细解释。”

API 层面:定期将多轮对话压缩为一条 System Prompt:

System: 用户正在优化 MySQL 慢查询。已确认:①无索引 ②回表过多 ③需用覆盖索引。当前问题:如何优化 LIMIT 深分页。

节约点:将 10 轮对话(可能 3000+ Token)压缩为 1 条摘要(200 Token)。


5. 分片处理长文本(Chunking)

处理超长文档(如 PDF、代码库)时,不要一次性全量投喂。

低效: 直接粘贴 2 万字技术文档问"总结一下"。

高效:

  1. 先让 AI 分段处理:

    “这是文档第 1-5 章,请提取各章核心论点(限 50 字/章)。”

  2. 再将摘要汇总:

    “基于以下各章摘要,生成全文总结……”

节约点:避免单次请求超出上下文窗口,同时减少重复计费。


三、控制输出:限定响应长度

6. 显式约束输出格式和长度

低效:

“介绍一下 Redis 持久化。”

高效:

“用表格对比 RDB 和 AOF,3 行以内,只列核心差异(机制、性能、场景)。”

API 参数:设置 max_tokens 上限,避免模型"发散"生成冗长内容。


7. 要求代码-only 回复

低效:

“请给我写一个 Java 单例模式,并附带详细解释、优缺点分析、使用场景说明……”

高效:

“用 Java 枚举实现线程安全单例,只输出代码,不要解释。”

节约点:解释性文字往往占输出 Token 的 60% 以上。


四、工具与策略层面

8. 使用 Prompt Cache / 上下文缓存

部分平台(如 Claude、Kimi)支持Prompt Cache

  • 将不变的系统指令、文档背景缓存,后续请求只计费变化的 Token。
  • 示例:把 5000 Token 的产品文档作为缓存上下文,每次只问新问题(50 Token),只需付 50 Token 而非 5050 Token。

9. 批量处理替代单条循环

低效(API 调用):

for code_snippet in code_list:
    response = ai.chat(f"Review this code: {code_snippet}")  # 每次都要付系统 Prompt Token

高效:

prompt = "批量审查以下代码片段,按序号输出问题:\n" + "\n---\n".join(code_list)
response = ai.chat(prompt)  # 只付一次系统 Prompt Token

节约点:减少系统消息(System Prompt)的重复计费。


10. 用英文关键词替代中文长句(API 场景)

模型对英文 Token 的切分效率通常高于中文(1 个英文词 ≈ 1 Token,1 个汉字 ≈ 1~1.5 Token)。

示例:

  • “请详细解释” → “Explain in detail”(3 Token vs 5 Token)
  • 技术术语直接用英文:OOPNPEGC 比全称更省 Token。

五、总结对照表

策略 适用场景 预估节约比例
删除冗余修饰 所有对话 10%~20%
结构化输入 代码/数据分析 20%~40%
最小可复现示例 Bug 排查 50%~80%
主动摘要历史 长对话 30%~60%
分片处理长文本 文档分析 避免超限重复计费
限定输出长度 所有场景 20%~50%
Prompt Cache 固定背景 + 多变问题 80%~90%(背景部分)
批量处理 API 批量任务 30%~50%

核心原则Token 是信息的度量单位,不是字数的度量单位。信息密度越高、冗余越低,同样的任务消耗的 Token 就越少,模型理解也越精准。

Logo

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

更多推荐