返回博客

成本优化指南

多智能体交接成本:3 智能体链在 token 上的消耗

了解为什么链中的每个智能体都会重新读取此前所有交接内容、这在 token 上要花多少,以及三种缩小输入的改动。

作者:CheapTokens Team发布于 更新于 5 分钟阅读

封面:链中的三个智能体传递一份不断增长的交接笔记
本页内容
  1. token 在哪里堆积
  2. 每天 100 个任务要花多少
  3. 三种缩小账单的方法
  4. 1. 把交接做成简短的结构化笔记
  5. 2. 只把每个智能体需要的东西交给它
  6. 3. 给短角色配便宜模型
  7. 为什么不直接传 KV 缓存?
  8. 在扩展到数百次运行之前

你的三个智能体完成了任务,但账单比任务本身看起来要贵得多。原因很简单:在文本交接模式下,每个智能体都要付费读取此前所有智能体写下的全部内容。一份 1,500 token 的计划,规划者写它时付一次费,编码者读它时再付一次,审查者读它时又付一次。精简交接内容,只把每个智能体需要的东西交给它,后续每个智能体的输入就会变小。

下面:一个完整的 3 智能体示例及其 token 计算、按实时价格估算每天 100 个任务的成本,以及你今天就能做的三项改动。Chat-completions API 是无状态的,所以每个请求都会再次携带完整上下文(为什么长对话更贵和消息数组如何工作涵盖了基础知识)。

token 在哪里堆积#

假设你运行一个规划者、一个编码者和一个审查者。任务加指令是 1,000 token。规划者写出一份 1,500 token 的计划,编码者写出 3,000 token 的代码和注释,审查者写出 800 token 的结论。这些是示例用的整数,不是实测值;请用你自己从 usage 字段得到的数字替换(如何读取它)。

猜数字

审查者作为输入读取多少 token?

显示答案

答案: 5,500

5,500:任务(1,000)、计划(1,500)和代码(3,000)都会出现在它的请求中。

每个智能体的输入是任务加上它收到的每一次交接:

智能体 读取(输入) 写入(输出)
规划者 1,000(任务) 1,500
编码者 1,000 + 1,500 = 2,500 3,000
审查者 1,000 + 1,500 + 3,000 = 5,500 800
整条链 1,000 + 2,500 + 5,500 = 9,000 1,500 + 3,000 + 800 = 5,300

整条链读取 9,000 token 来产出 5,300。再加第四个智能体,它就要读取任务加上全部三次交接,所以输入会随每一跳增长,而不只是多一次交接。

每天 100 个任务要花多少#

交接 token 在智能体写出它时作为输出计费一次,然后被每个后续读取它的智能体作为输入计费。输出 token 的定价高于输入 token,所以在这个示例中,尽管整条链读取的比写入的多,答案仍占账单的更大份额(输入与输出 token)。

一个任务是 9,000 token 输入、5,300 token 输出。在 MiniMax-M2.7 上,每个任务是 $0.0012。每天 100 个任务,以下是我们各模型的实时价格,旁边是 OpenRouter:

模型 每次请求 100 次请求 OpenRouter,100 次请求
GLM-5.3-Flash $0.00039 $0.0392 $0.0773
DeepSeek-V4-Flash $0.00067 $0.0665 $0.126
MiniMax-M2.7 $0.0012 $0.125 $0.906

每次请求 9,000 个输入 token 和 5,300 个输出 token。每 100 万 token 的价格为当前价格,会随我们的资费一同变动;OpenRouter 列显示相同工作负载的参考价格。

总计,把输入和输出加在一起,对于这条链,上述 CheapTokens 模型比 OpenRouter 更便宜。

想为你自己的链计算?把一个智能体的平均请求放进计算器:大约 3,000 token 输入、1,800 token 输出,重复 300 次,就是三个智能体的 100 个任务。

成本计算器

每天 100 个任务,每个任务三个智能体

每次请求的输入 token 数: 3,000 · 每次请求的输出 token 数: 1,800 · 每日请求数: 300

模型每天每月
GLM-5.3-Flash$0.0396$1.19
DeepSeek-V4-Flash$0.0675$2.03
MiniMax-M2.7$0.126$3.78

三种缩小账单的方法#

1. 把交接做成简短的结构化笔记#

规划者不需要为编码者写一篇长文。要求它填写字段:目标、文件、步骤、约束。假设一份包含八个单行步骤的简短笔记大约 400 token,而不是 1,500(这是一个假设:请用你自己从 usage 得到的数字),后续每个智能体读取的都是这份更小的笔记。用 max_tokens 限制回答长度,设置得略高于预期笔记长度,这样啰嗦的模型就无法把长文偷偷塞回来。

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)
task = 'Add a --dry-run flag to the export command'

plan = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    max_tokens=500,
    messages=[
        {'role': 'system', 'content': 'Reply with JSON only: {goal, files, steps, constraints}. At most 8 steps, one line each.'},
        {'role': 'user', 'content': task},
    ],
)
note = plan.choices[0].message.content
print(plan.choices[0].finish_reason, plan.usage.completion_tokens)

如果 finish_reason 是 length,说明笔记被上限截断了:稍微调高 max_tokens 或缩短 schema(该错误的样子)。模型 id 和 base URL 在 CheapTokens 文档中。

一份 JSON 格式的交接笔记,以及显示它被截断的 finish_reason
结构化交接笔记,以及表示笔记被截断的 finish_reason 值。

2. 只把每个智能体需要的东西交给它#

如果审查者对照任务检查代码,它不需要计划:任务和代码就够了。如果它还要对照计划检查代码,那就保留计划。把计划从它的上下文中去掉,在你的编排器里只需改一行:

比较

审查者读取的内容

之前:所有内容

任务 1,000 + 计划 1,500 + 代码 3,000 = 5,500 token 输入。

之后:任务和代码

任务 1,000 + 代码 3,000 = 4,000 token 输入。

两项改动都做(再加上 400 token 的笔记,这是我们的假设),示例链变成:规划者 1,000 输入、400 输出,编码者 1,000 + 400 = 1,400 输入、3,000 输出,审查者 1,000 + 3,000 = 4,000 输入、800 输出。也就是 1,000 + 1,400 + 4,000 = 6,400 token 输入,400 + 3,000 + 800 = 4,200 token 输出,而之前是 9,000 和 5,300。同样是每天 100 个任务:

模型 每次请求 100 次请求 OpenRouter,100 次请求
GLM-5.3-Flash $0.0003 $0.0296 $0.0583
DeepSeek-V4-Flash $0.00052 $0.0516 $0.0963
MiniMax-M2.7 $0.00095 $0.095 $0.696

每次请求 6,400 个输入 token 和 4,200 个输出 token。每 100 万 token 的价格为当前价格,会随我们的资费一同变动;OpenRouter 列显示相同工作负载的参考价格。

在 MiniMax-M2.7 上,一个任务经过精简后的链是 $0.00095,低于之前的 $0.0012。

3. 给短角色配便宜模型#

规划者写的是短回答,所以从它开始:试试 GLM-5.3-Flash(390K 上下文,每次回答最多 8,192 输出 token),并在你自己的 10–20 个任务上比较结果。编码者写最长的回答:DeepSeek-V4-Flash 每次回答最多允许 32,768 输出 token。由于所有模型共用一个余额、任何时段都是同一价格,在一条链中混用它们,只需为每个智能体设置不同的 model 字符串。两者的当前价格见价格表和 DeepSeek 页面。

为什么不直接传 KV 缓存?#

论文 SwaT (arXiv:2610.15095) 由 Alabdulkareem、Tenison、Zhang、Zhu、Katz 和 Gutfreund 于 2026 年 10 月 10 日提交,提出的正是这个思路:智能体之间传递 KV 缓存状态而不是文本,这样接收方就无需再次读取文本。根据摘要页面(2026 年 10 月 31 日读取),作者报告在 17 个基准、12 个 LLM 和 6 个模型家族上,平均准确率比文本到文本通信高 40%(配合 KV 缓存压缩),平均实际耗时快 4 倍。这 40% 是准确率,不是 token 或价格的节省。

这样的研究方法需要访问模型的内部缓存。chat-completions 请求输入文本、输出文本,所以在 API 场景下,你的杠杆就是文本:也就是上面三项改动。

在扩展到数百次运行之前#

清单

交接检查清单

关于智能体预算的更大图景,见如何估算 AI 智能体的成本和为什么智能体使用这么多 token。