首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >AI Coding Agent Token 成本优化指南(下):工具层、代码图谱与多 Agent 协作

AI Coding Agent Token 成本优化指南(下):工具层、代码图谱与多 Agent 协作

作者头像
深蓝studyzy
发布2026-06-09 09:27:30
发布2026-06-09 09:27:30
4690
举报
文章被收录于专栏:深蓝居深蓝居

如果你把上篇的行动清单做完了,成本通常已经有明显下降。但如果你想继续往下压,就要开始处理系统层的问题:命令输出怎么压、检索怎么少走弯路、多个 Agent 怎么把上下文拆开。

本篇承接上篇的五层模型,继续往下走三层:

层级

主题

作用

特点

第三层

压缩工具

先把高频输入输出压下来

装完即用,立即见效

第四层

代码图谱

让检索不再盲搜

先知道该读哪里,再读文件

第五层

多 Agent 用法

把大任务拆成多个小上下文

边界清晰时更省


第四章 上下文压缩:先把高频上下文压下来

如果说上篇解决的是“少带无关上下文”,这一层解决的就是另一件事:把那些一定会进上下文的内容,尽量压短。

这四个工具方向不同,但可以叠加。你不一定要一次装全,但只要装上一个,通常就能立刻看到收益。

4.1 RTK:终端输出才是真正的 Token 大杀手

很多人把 Token 浪费归因于“聊太多轮”,但忽略了一个隐性大户:终端命令的冗余输出

CodeBuddy 执行 cargo test,成千上万行测试日志、警告、进度条、ANSI 颜色码全部涌进上下文。

实测:30 分钟开发会话对比(来自 2900+ 真实命令测量):

场景

Token 消耗

不用 RTK

~150,000

用 RTK

~16,850

节省

88.9%

按命令类别的典型压缩率:

命令类别

原始 tokens

RTK 后

节省

cargo test / npm test

25,000

2,500

-90%

pytest

8,000

800

-90%

vitest run

102,199 字符

377 字符

-99.6%

ls / tree

2,000

400

-80%

grep / rg

16,000

3,200

-80%

git status

3,000

600

-80%

git diff

10,000

2,500

-75%

cat / read

40,000

12,000

-70%

说明:这张表混合了 token 和字符两种统计口径。前几行是 token,vitest run 这一行是字符长度,用来说明压缩幅度,不能和 token 行直接横向比较。

RTK 的四层过滤策略

  1. 智能过滤:剔除注释、空行、ANSI 颜色码、进度条、无关警告
  2. 分组聚合:同类输出合并展示(搜索结果按文件分组、错误按类型归类)
  3. 智能截断:按信息密度取样,保留关键片段,砍掉重复长尾
  4. 去重合并:「连接超时」重复 10 次 → 「连接超时(×10)」

5 分钟安装

代码语言:javascript
复制
# macOS(推荐)
brew install rtk

# Linux / WSL
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/master/install.sh | sh

注意:安装后用 rtk gain 验证。如果命令不存在,可能装了同名的 Rust Type Kit,需卸载重装。

代码语言:javascript
复制
# 全局启用 CodeBuddy(推荐)
rtk init -g

# 仅启用 Hook,不修改 CODEBUDDY.md
rtk init -g --hook-only

# 其他 AI 工具
rtk init -g --agent cursor   # Cursor
rtk init -g --gemini         # Gemini CLI
rtk init -g --codex          # Codex

重启 CodeBuddy 后自动生效,所有命令透明经过 RTK 过滤,开发者无感知。

代码语言:javascript
复制
# 常用命令
rtk gain                 # 查看节省统计
rtk gain --history       # 带命令历史
rtk discover             # 扫描哪些命令还没用 RTK

# Git(压缩率 60-80%)
rtk git status
rtk git diff

# 测试(压缩率 90-99.6%)
rtk test cargo test
rtk vitest run

4.2 Caveman:压缩输出端的废话

RTK 压缩的是命令输出(输入 Token),Caveman 压缩的是 AI 回复(输出 Token)。两者方向不同,可以叠加。

核心数据(来自 arXiv:2604.00025):

任务类型

正常输出

Caveman

节省

解释 React bug

118 tokens

15 tokens

87%

配置 PostgreSQL

234 tokens

38 tokens

84%

Docker 多阶段构建

104 tokens

29 tokens

72%

Code Review PR

67 tokens

39 tokens

41%

平均

65-75%

Caveman 有四种模式,按压缩程度递增:

  • /caveman lite:删填充词,保留冠词,专业风格(适合正式输出)
  • /caveman(full 默认):删冠词,碎片句,平衡压缩
  • /caveman ultra:极度压缩,用 A→B→C 箭头因果链
  • /caveman wenyan:文言文模式(理论上 token 效率最高的书面语)

实际效果示例(full 模式):

代码语言:javascript
复制
问:为什么 React 组件不断重渲染?

普通输出(69 tokens):
"The reason your React component is re-rendering is likely because you're
creating a new object reference on each render cycle..."

Caveman 输出(19 tokens):
"New object ref each render. Inline object prop = new ref = re-render.
Wrap in useMemo."

安装

代码语言:javascript
复制
# CodeBuddy 插件方式(推荐)
codebuddy plugin marketplace add JuliusBrussee/caveman
codebuddy plugin install caveman@caveman

安装后在 CodeBuddy 里输入 /caveman 即可激活。模式在会话内持续生效,输入 stop caveman 关闭。

4.3 headroom:压“进上下文的所有内容”

RTK 压的是命令输出,Caveman 压的是 AI 回复。headroom 压的是第三个方向:所有读进上下文的内容——文件内容、工具调用返回值、会话历史。

核心机制:可逆压缩(CCR)。原始数据本地保留,压缩版本送给 LLM,LLM 需要细节时再按需取回。不是丢数据,是推迟加载。

实测:47–92% token 减少(取决于内容类型)。

安装

代码语言:javascript
复制
pip install "headroom-ai[all]"

接入 CodeBuddy

代码语言:javascript
复制
# 基础接入
headroom wrap claude

# 推荐:同时开启跨 session 记忆 + 代码图谱集成
headroom wrap claude --memory --code-graph

之后正常用 CodeBuddy,headroom 在后台透明处理压缩,无感知。

也支持 MCP Server 模式

如果不想用 wrap 方式,可以走 MCP:

代码语言:javascript
复制
headroom mcp install

安装后在 CodeBuddy 里自动注册三个工具:headroom_compressheadroom_retrieveheadroom_stats

与 RTK 的区别

RTK

headroom

压缩对象

终端命令的输出

所有进上下文的内容

工作方式

过滤 + 截断

可逆压缩,按需还原

安装方式

brew / curl

pip + wrap 命令

典型节省

89%

47–92%

两者方向不同,可以叠加使用。

4.4 context-mode:工具输出不再撑爆上下文

context-mode 解决的是一个具体痛点:MCP 工具调用的返回值太大

一次 Playwright 快照 56 KB,二十条 GitHub issue 59 KB,一份访问日志 45 KB。用 30 分钟,40% 上下文就没了。然后 /compact 一压缩,CodeBuddy 忘了在改哪些文件、任务进行到哪了。

context-mode 是一个 MCP server 插件,四层能力一起上:

能力一:Sandbox 工具输出(98% 压缩)

工具调用结果先沙箱化,不直接进上下文。315 KB → 5.4 KB。LLM 按需取回原始数据,不是真的删掉。

能力二:跨 compact 会话连续性

所有文件编辑、git 操作、任务进度、错误信息全部记录到本地 SQLite。/compact 之后不丢失现场——context-mode 用 FTS5 全文索引按相关性取回,而不是把所有历史重新塞回去。

能力三:用代码代替读文件

ctx_execute() 工具让 CodeBuddy 写脚本处理数据,而不是读 50 个文件进上下文:

代码语言:javascript
复制
// Before: 47 次 Read() = 700 KB
// After: 1 次 ctx_execute() = 3.6 KB
ctx_execute("javascript", `
  const files = fs.readdirSync('src').filter(f => f.endsWith('.ts'));
  files.forEach(f => {
    const lines = fs.readFileSync('src/' + f, 'utf8').split('\\n').length;
    console.log(f + ': ' + lines + ' lines');
  });
`);

CodeBuddy 生成并运行脚本,只把结果(几行文字)放进上下文,而不是把 47 个文件的内容全部读进来。

能力四:不干预输出格式

context-mode 只管数据往哪走,不管 CodeBuddy 怎么回答。如果你同时装了 Caveman,两者各管各的,不冲突。

安装(CodeBuddy 插件市场直装)

代码语言:javascript
复制
codebuddy plugin marketplace add mksglu/context-mode
codebuddy plugin install context-mode@context-mode

重启 CodeBuddy(或 /reload-plugins)后生效。

验证

代码语言:javascript
复制
/context-mode:ctx-doctor

所有项显示 [x] 即正常。

常用命令

代码语言:javascript
复制
/context-mode:ctx-stats    # 查看节省统计,按工具分类
/context-mode:ctx-insight  # 打开本地分析看板(90 个指标)

四个压缩工具一览

工具互补,不互斥。从左到右压缩复杂度递增:

工具

压缩什么

典型节省

装法

RTK

终端命令输出 → 上下文

89%

brew install rtk + rtk init -g

Caveman

AI 回复输出

65–75%

CodeBuddy 插件市场

headroom

所有进上下文的内容

47–92%

pip install headroom-aiall

context-mode

MCP 工具结果 + 会话连续性

98%(工具输出)

CodeBuddy 插件市场

最低成本起点:先装 RTK + Caveman,五分钟,立即见效。有时间再评估 headroom 和 context-mode。


第五章 代码图谱:让 AI 不再盲搜

前一层压的是“已经进来的东西”。这一层解决的是另一类浪费:本来就不该读进来的东西。

5.1 真正贵的是“找代码”,不是“读代码”

上下文窗口够大,不代表不需要图谱。

项目越大,AI 越容易陷入一个循环:

代码语言:javascript
复制
grep 一圈找入口
→ 读几个文件找关系
→ 发现漏了一个
→ 再 grep 一圈
→ 反复几轮才定位到

这个过程消耗大量 Tool Call 和上下文,而且结果还不一定准确。

代码图谱解决的是:让 AI 在动手读文件之前,就知道该读哪里。

5.2 Graphify:把代码库变成可查询的知识地图

Graphify 在 2026 年 4 月发布,10 天内 GitHub stars 超过 22k,如今已经来到 50.8k。

核心机制:用 Tree-sitter 解析代码构建知识图谱,AI 查图而不是反复读文件。

官方数据:比直接读文件减少 71.5 倍 Token 消耗

安装和使用

代码语言:javascript
复制
# 安装
uv tool install graphifyy
# 或
pipx install graphifyy

# 注册到 CodeBuddy
graphify install --platform codebuddy
# 或
graphify codebuddy install

在 CodeBuddy 里执行 /graphify,自动扫描项目并生成三份产物:

代码语言:javascript
复制
> /graphify

Building knowledge graph...
  Parsed 247 files (TS/Prisma)
  Found 1,832 symbols, 4,217 edges
  Detected 14 communities (clusters)
  Generated:
    - graphify-out/graph.html          ← 交互式可视化
    - graphify-out/GRAPH_REPORT.md     ← 自然语言报告
    - graphify-out/graph.json          ← AI 查询用的数据

后续问跨文件问题时,AI 读 graphify-out/graph.json,而不是反复 grep 源码:

代码语言:javascript
复制
> 我想在 /api/v1/comments 加一个 PATCH 接口。
> 列出会受到影响的所有中间件、Prisma model、和测试文件。

影响分析(基于知识图谱):

中间件链:
  - middleware/auth.ts → optionalAuth → requireAuth
  - middleware/rate-limit.ts(commenting 路径 30/min 限制)

Prisma model:
  - Comment(直接修改)
  - User(通过 authorId 关联)
  - Mention(通过 commentId 关联,PATCH 后需要重算)

测试:
  - tests/comments.test.ts
  - tests/integration/registration.test.ts(间接依赖)

不用图谱时,同样问题经常要靠多轮 grep 和补读文件来兜底,遗漏关键路径并不少见。用图谱后,定位和影响分析会稳定得多,尤其适合跨文件问题。

支持范围

  • 30+ 种语言:Python、TypeScript、Go、Rust、Java、C/C++、Ruby、C#、Kotlin 等
  • 多模态:SQL schema、Markdown 文档、PDF、图片(通过 LLM 提取语义)
  • 增量更新:git hook 触发,每次 commit 自动重建

与 CodeGraph 的区别

CodeGraph 是另一个方向的工具,基于 MCP Server + 持久化图数据库(Neo4j/KuzuDB),对 7 个真实开源仓库做了完整 benchmark(v0.9.4,2026-05-24 复验):

平均数据:57% 更少 Token、71% 更少 Tool Call、35% 更低成本、46% 更快。

分仓库明细

代码库

语言

成本

Tokens

工具调用

VS Code

TypeScript

-26%

-78%

-85%

Excalidraw

TypeScript

-52%

-90%

-96%

Tokio

Rust

-82%

-86%

-92%

Django

Python

-12%

-36%

-53%

Gin

Go

-21%

-34%

-40%

OkHttp

Java

-2%

-13%

-45%

Alamofire

Swift

-47%

-64%

-83%

注意:收益和项目规模、语言强相关。Rust/TypeScript 大型项目收益最显著,Java/Go 较小项目收益相对有限。

CodeGraph 安装

代码语言:javascript
复制
# npm 安装
npm i -g @colbymchenry/codegraph

# 初始化项目
cd your-project
codegraph init -i

手动配置 CodeBuddy:

代码语言:javascript
复制
// ~/.codebuddy/.mcp.json
{
  "mcpServers": {
    "codegraph": {
      "type": "stdio",
      "command": "codegraph",
      "args": ["serve", "--mcp"]
    }
  }
}

核心工具:

  • codegraph_context:找入口点和关键符号(第一跳)
  • codegraph_trace:追调用路径(含动态派发)
  • codegraph_impact:重构前影响分析

选哪个:个人项目、快速上手 → Graphify(Skill 形态,零配置)。团队、大型仓库、需要持久化查询 → CodeGraph(MCP 服务器,功能更完整)。

第六章 多 Agent 协作:边界清晰时,CodeBuddy 会更省 Token

前两层解决的是“单个上下文怎么更省”。这一层继续往前走:别让所有任务都挤进同一个上下文。

换句话说,前面讲的是“单个会话怎么省”,这里讲的是:多个 Agent 怎么分工协作,才能在任务边界清晰时更省。

CodeBuddy 本身就支持 subagent 调度、worktree 隔离、Skill 绑模型——不需要自己写 Orchestrator,用好内置能力就够了。

6.1 单 Agent 为什么越用越贵

复杂项目里,单 session 很容易演变成这样:

  • 规划、写代码、跑测试、Code Review 全在一个会话
  • 上下文越积越长(所有历史都往一个 session 里塞)
  • 所有任务用同一个模型配置,便宜活也用最贵模型

职责越混,上下文越胖,成本越高。

6.2 subagent:任务隔离的最低成本方式

CodeBuddy 的 Skill 里可以直接调用 Agent tool,把子任务分发出去:

代码语言:javascript
复制
使用 Agent tool 分析这个 PR 的影响范围,
然后把结果返回给我,不需要读具体实现文件。

每个 subagent 都应该有独立的上下文边界——它只看到自己需要的内容,主 session 只看到结果。前提是子任务真的能拆开;如果每个 Agent 都要重复读同一批背景,拆得越多,反而越贵。

典型分工

代码语言:javascript
复制
主 session(规划 + 决策)
  ├── subagent A:影响分析(只看图谱,不读源码)
  ├── subagent B:写实现(只看相关文件)
  └── subagent C:跑测试 + 生成报告

与上篇 3.5 的连接:subagent 可以单独绑定便宜模型(见下节)。规划用强模型,执行用便宜模型,两者在不同 session 里,互不干扰。

6.3 /new/compact、subagent、worktree:四种手段别混用

这四个动作都和“上下文变轻”有关,但解决的问题完全不同:

手段

解决什么

历史怎么处理

代码改动怎么处理

适用场景

/new

切断无关任务

直接开新会话

仍在同一仓库

换话题、换需求

/compact

压长会话历史

保留摘要,不保留完整过程

仍在当前工作区

长任务续做

subagent

拆子任务

只给子任务需要的上下文

默认不做代码隔离

搜索、分析、验证

worktree

隔离并发改动

历史不是重点

独立 git worktree

多任务并行开发

一句话:

代码语言:javascript
复制
/new 解决换任务
/compact 解决历史过长
subagent 解决职责拆分
worktree 解决代码并发

6.4 worktree 并发:多任务同时跑不冲突

有一批互相独立的任务要处理(比如修 5 个不相关的 Bug),可以用 worktree 模式并发:

代码语言:javascript
复制
主分支
  ├── worktree-1:修 Bug A(独立 git worktree)
  ├── worktree-2:修 Bug B(独立 git worktree)
  └── worktree-3:修 Bug C(独立 git worktree)

每个 Agent 在隔离的 worktree 里工作,改的是不同文件,互不冲突。

怎么开:在 CodeBuddy 里启动新任务时,指定 worktree 隔离:

代码语言:javascript
复制
开一个新的 worktree 分支修这个 Bug,
修完后告诉我分支名,我来 review 再合并。

怎么合:worktree 没改动自动清理;有改动返回路径和分支名,自己决定 review 后合并。

适用场景:互相独立的 Bug 修复、并行跑不同重构方案对比效果、同时生成多个文档。

6.5 Skill 绑定模型:系统默认更省

上篇 3.5 说过“Skill 可以绑定模型”,这里给具体配置。

CodeBuddy 的 Skill 支持在 frontmatter 里指定模型,不靠人记得手动切:

代码语言:javascript
复制
---
name: write-unit-tests
description: 为指定函数生成单元测试
model: deepseek-v4-pro
---

为以下函数写完整的单元测试,覆盖正常路径和边界情况:
...

推荐配置原则

Skill 类型

推荐模型

理由

写 UT、补注释、生成 commit

DeepSeek

模式固定,不需要强推理

Code Review、影响分析

中高档模型

需要语义理解

架构设计、复杂 Bug 分析

不绑定(用默认最强)

需要长链路推理

一旦固化到 Skill 配置,成本治理就从“靠人记得切”变成“系统默认更省”。

6.6 记忆外置:别让 session 承载全部历史

用“永不清空的超长会话”模拟记忆,是最贵也最脆弱的做法。

真正该长期保留的信息,外置出去:

CODEBUDDY.md 系统:项目约定、关键决策、架构边界。保持 < 50 行,是索引不是文档。详细内容放 docs/,让 CodeBuddy 按需读取。

Graphify graph.json:代码结构的外置记忆。建一次,跨 session 共享,新 session 不需要重新扫描整个仓库。

headroom --memory:如果你装了 headroom,--memory 模式会把重要信息持久化到本地,跨 session 恢复。

好处不只是省 Token:

  • 可更新(旧信息能被替换)
  • 可检索(按需读入,不是全量注入)
  • 不依赖 session 存活

原则:会话只承载“当前工作状态”,背景信息按需读入。

到这里,下篇真正想建立的心智模型其实也可以浓缩成一句话:不要只想着把单次回答压短,更要想办法让系统少把同一批背景反复搬进来。


第七章 误区:很多“优化”其实在加成本

误区一:上下文越多越好。

上下文越多不一定越准,但通常越贵。噪音越多,模型越容易分神。该读哪个文件,比读多少文件更重要。

误区二:MCP 越多越强。

工具堆得越多,选择空间越大、决策越慢、错误调用概率越高。低频工具长期挂载,贡献的更多是成本。

误区三:所有 Agent 都上最强模型。

这不叫优化质量,叫放弃路由。每个环节默认最贵模型,系统里就没有“资源分配”,只有“直接烧钱”。

误区四:聊天记录当长期记忆。

长会话方便,但不是记忆系统。长期依赖会话承载全部背景,最终成本越来越高,关键信息越来越难提取。

误区五:只看单价不看总成本。

便宜模型如果导致更多重试、更多搜索、更多上下文回填,总成本未必更低。真正该看的是完成一次任务的总成本

误区六:Prompt 越短越好。

压缩时丢掉了必要的 few-shot 或格式说明,导致第一次输出不合格,反复重试。压缩要精准,不是一味缩短。


第八章 结语

两篇文章的核心只有一句话:

代码语言:javascript
复制
AI Agent 成本优化
本质不是让你少问一句话
而是让系统少重复做无效工作

压成公式:

代码语言:javascript
复制
更低成本
=
更少重复上下文(RTK、Caveman、headroom、context-mode、会话管理)
+ 更合理模型路由(任务匹配、Skill 绑模型)
+ 更精准代码检索(Graphify、CodeGraph)
+ 更清晰 Agent 分工(subagent 隔离、worktree 并发、记忆外置)

参考资料

1 Anthropic,《Prompt caching》

https://platform.claude.com/docs/en/build-with-claude/prompt-caching

2 Claude Code Prompt Cache 实战指南

https://cloud.tencent.com/developer/article/2662618

3 RTK(Rust Token Killer)GitHub

https://github.com/rtk-ai/rtk

4 RTK 实战指南

https://juejin.cn/post/7628503584259211316

5 Caveman GitHub

https://github.com/JuliusBrussee/caveman

6 Caveman 论文:Brevity Constraints Reverse Performance Hierarchies

https://arxiv.org/abs/2604.00025

7 Graphify GitHub

https://github.com/safishamsi/graphify

8 CodeGraph GitHub

https://github.com/colbymchenry/codegraph

9 LLM 推理成本工程:五层防御体系

https://jishuzhan.net/article/2062415217950273537

10 Google AI,《Context caching - Gemini API》

https://ai.google.dev/gemini-api/docs/caching

11 headroom GitHub

https://github.com/chopratejas/headroom

12 context-mode GitHub

https://github.com/mksglu/context-mode

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第四章 上下文压缩:先把高频上下文压下来
    • 4.1 RTK:终端输出才是真正的 Token 大杀手
      • RTK 的四层过滤策略
      • 5 分钟安装
    • 4.2 Caveman:压缩输出端的废话
      • 安装
    • 4.3 headroom:压“进上下文的所有内容”
      • 安装
      • 接入 CodeBuddy
      • 也支持 MCP Server 模式
      • 与 RTK 的区别
    • 4.4 context-mode:工具输出不再撑爆上下文
      • 安装(CodeBuddy 插件市场直装)
      • 验证
      • 常用命令
    • 四个压缩工具一览
  • 第五章 代码图谱:让 AI 不再盲搜
    • 5.1 真正贵的是“找代码”,不是“读代码”
    • 5.2 Graphify:把代码库变成可查询的知识地图
      • 安装和使用
      • 支持范围
      • 与 CodeGraph 的区别
  • 第六章 多 Agent 协作:边界清晰时,CodeBuddy 会更省 Token
    • 6.1 单 Agent 为什么越用越贵
    • 6.2 subagent:任务隔离的最低成本方式
    • 6.3 /new、/compact、subagent、worktree:四种手段别混用
    • 6.4 worktree 并发:多任务同时跑不冲突
    • 6.5 Skill 绑定模型:系统默认更省
    • 6.6 记忆外置:别让 session 承载全部历史
  • 第七章 误区:很多“优化”其实在加成本
  • 第八章 结语
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档