关注腾讯云开发者,一手技术干货提前解锁👇
本文基于真实工程实践,结合 Harness Engineering 领域的学术论文,分享 AI 辅助编程的架构思考、工程落地与 Token 成本优化。
Part 1 ·什么是 Harness,它从哪儿来
1.1 一个让所有人都很沮丧的问题
你有没有遇到过这种情况——
2025 年,LangChain 发布了一组实验数据:
给同一个大语言模型换上一套更精巧的 Harness 架构,它在 TerminalBench 2.0(AI 编程能力权威榜单)的通过率,从 52.8% 直接拉升到 66.5%。 底层模型权重一个字节没改,单靠换壳,排名从 30 名开外飙进前 5。
这说明一件事:很多时候卡住你的,不是模型,是模型外面那层「壳」。
1.2 Harness 是什么
Harness(直译「挽具/线束」)是包裹在大模型外面的那套代码,它决定三件事:
模型能看到什么(存什么、取什么、怎么呈现)
模型的行为边界在哪里(什么能做、什么不能做)
模型如何知道自己做对了(验证、反馈、修正)「The model contains the intelligence and the harness is the system that makes that intelligence useful.」 —— LangChain, The Anatomy of an Agent Harness, 2026.03
一个公式:Agent = Model + Harness
1.3 Harness Engineering 的诞生史
这个概念并不是一夜冒出来的,而是被一个个真实 Bug 逼出来的。
时间 | 里程碑 | 核心贡献 |
|---|---|---|
2022 | ReAct 论文(Yao et al., ICLR 2023) | 提出 Thought-Action-Observation 循环,推理与行动交错 |
2023 | Reflexion 论文(Shinn et al., NeurIPS 2023) | 失败→反思报告→写入长期记忆,实现「语言强化学习」 |
2023 | Tree of Thoughts(Yao et al., NeurIPS 2023) | 推理从「链」扩展为「树」,支持 BFS/DFS 多路径搜索+回溯 |
2025.11 | Anthropic: Effective Harnesses for Long-Running Agents | 双 Agent 架构 + 进度追踪文件,解决长任务跨窗口失忆 |
2026.02 | Mitchell Hashimoto 命名 Harness Engineering | 「每次发现 Agent 犯错,就设计一个让它永远不再犯的方案」 |
2026.02 | OpenAI: Harness Engineering(Codex) | 3 人 5 月,100 万行代码,1500 PR,零行人工编写代码 |
2026.03 | LangChain: Anatomy of an Agent Harness | 将 Cybernetics(控制论)引入 Harness 框架 |
2026.04 | Thoughtworks(martinfowler.com) | 前馈控制 vs 反馈控制的系统化分类 |
2026 | Meta-Harness(Stanford/MIT/KRAFTON) | AI 自动搜索最优 Harness 代码,同一模型性能差距最高 6 倍 |
1.4 支撑 Harness 的核心数学与算法
Harness 不是玄学,它有扎实的理论基础。
Harness 的本质可以用控制论的「双环控制」来描述:
┌──────────────────────────────────────────────────────────────────┐
│ Harness 双环控制结构 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 前馈控制(开环) │ │
│ │ │ │
│ │ 设计时注入 ──► Rules / Skills ──► AI 推理上下文 │ │
│ │ (先验知识) (约束边界) (行动之前就生效) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 反馈控制(闭环) │ │
│ │ │ │
│ │ AI 行动 ──► 检测结果 ──► 偏差计算 ──► 阻止/纠正 │ │
│ │ (Hooks) (质量阈值) (deny/ask) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 工程映射:Rules(前馈)+ Hooks(反馈)= Harness 的双保险 │
└──────────────────────────────────────────────────────────────────┘数学基础:负反馈系统的稳定性定理(Nyquist, 1932)——只要反馈增益 < 1,系统趋于稳定。Hooks 的 deny 机制本质上是一个「增益截断器」。
> 论文:ReAct: Synergizing Reasoning and Acting in Language Models,Yao et al., ICLR 2023
ReAct 的本质是一个推理与行动交替的循环:
Thought(思考)→ Action(工具调用)→ Observation(观察结果)→ Thought(下一轮)...每一次工具调用就是 ReAct 的一次迭代。而在项目的 Harness 中,这个循环的三阶段分别被 Rules 和 Hooks 接管:
ReAct 阶段 | Harness 对应层 | .codebuddy 配置 |
|---|---|---|
Thought(AI 思考该怎么做) | Rules 约束推理方向 | project-rules.md 规定了技术栈和目录结构,让 AI 不会想错方向 |
Action(AI 决定调用工具) | PreToolUse Hooks 拦截 | settings.json 中配置了 guard-commands.sh、protect-files.sh 等,在行动前检查安全性 |
Observation(工具返回结果) | PostToolUse Hooks 反馈 | impact-analysis.sh 检测到改了公共组件后,自动 grep 全仓库引用方,把影响面报告追加到 Observation |
以 settings.json 中的 Hook 配置为例:
// .codebuddy/settings.json — PreToolUse 阶段
{
"matcher": "Write|Edit",
"hooks": [
{ "command": ".../protect-files.sh" }, // Action 前:敏感文件保护
{ "command": ".../search-gate.js" }, // Action 前:首次写入提醒先搜索
{ "command": ".../suggest-compact.js" } // Action 前:工具调用次数检查
]
}ReAct + Harness 的关键洞察:没有 Harness 的 ReAct 就像没有刹车的车——它能跑,但不知道什么时候该停。Hooks 就是在 Action 阶段加的「刹车系统」。
论文:Reflexion: Language Agents with Verbal Reinforcement Learning,Shinn et al., NeurIPS 2023
Reflexion 的核心是从失败中提取反思,写入长期记忆,供下次任务召回。 把流程从「AI 自动生成」变成了「工程师手工沉淀 + 自动注入」的工程化版本。
Reflexion 在 项目中的三层实现:
第一层:反思提取 → ai-coding-defense.md
原始论文中,AI 在任务失败后自动生成反思报告。我们从真实 Bug 中手工提炼规则:
<!-- .codebuddy/rules/ai-coding-defense.md(alwaysApply) -->
## 8 条编码红线(来自真实 Bug)
1. 方案切换必须清理残留 —— 切换后全文搜索旧关键词
2. 通用控件保护 —— 改公共组件前先评估引用方
3. 改动完整性 —— template/script/style 同步
4. 场景全覆盖 —— 多端、多调用方、多层守卫
5. 避免策略反复 —— 先了解全部约束再定方案
6. 异步操作所有路径必须有终态 —— loading 必须重置
7. Vue 响应式纯净性 —— computed/Pinia getter 禁止副作用
8. 调试硬编码必须打标记并清理 —— [xxx-debug] / __DEBUG_*__每一条都对应一个或一组真实踩过的坑。这就是 Reflexion 中「失败 → 反思」的人工版。
第二层:记忆持久化 → .codebuddy/memory/
# .codebuddy/memory/ 目录结构
memory/
├── MEMORY.md # 长期记忆(项目约定、技术决策等核心结论)
├── 2026-06-09.md # 当日工作记录(每次完成实质性工作后追加)
└── archive/ # 归档(30天以上的旧记录,不再注入)memory 是 CodeBuddy 的内部记忆——单个 memory 文件本身不会被注入上下文、不消耗 token,它只是 AI 跨会话持续学习的存储介质。archive-old-memories.sh 负责把过期记录归档,保持目录整洁。
第三层:记忆召回 → alwaysApply: true + SessionStart Hook
// .codebuddy/settings.json
"SessionStart": [{
"matcher": "compact",
"hooks": [{
"command": "echo '项目 关键约定(compact 后重新注入):1) pnpm 2) request.ts ...'"
}]
}]/compact 会清空上下文,导致 AI「失忆」。SessionStart Hook 在 compact 触发后自动重新注入关键约定,这是 Reflexion 中「episodic memory 持久化」的工程实现。
对比总结:
Reflexion 论文 | 项目工程化 | 配置文件 |
|---|---|---|
AI 自动生成反思报告 | 工程师从 Bug 中提炼规则 | ai-coding-defense.md |
写入 episodic memory | 写入 memory/ 目录 | memory/*.md |
记忆老化(未覆盖) | 30 天自动归档 | archive-old-memories.sh |
下次任务自动召回 | alwaysApply + SessionStart Hook | settings.json SessionStart |
相关论文:CodeTree (Li et al., 2023)、RethinkMCTS (Zhang et al., 2024)
MCTS 的核心是「不一条路走到黑」:生成多个候选方案 → 模拟评估 → 选择最优 → 必要时回溯。这在 Harness 工程中有三层映射。
映射一:dev 阶段2 = MCTS 的「展开 + 选择」
<!-- .codebuddy/skills/项目-dev/SKILL.md 阶段2 节选 -->
## 阶段 2:代码设计
1. 搜索项目中类似功能的现有实现
2. 评估复用 vs 新建 → 优先复用
3. 如果新建,出 2-3 个方案 → 列出每个的优缺点
4. 用户确认方案后再进入阶段3这和 MCTS 的 Expansion + Selection 完全对应:不是直接写代码,而是先出方案树,评估后再选。
映射二:Rules 分级体系 = MCTS 的「剪枝」
<!-- .codebuddy/rules/ 分级设计 -->
L1 核心(alwaysApply):project-rules.md / ai-coding-defense.md
→ 永久剪枝:AI 永远不会考虑「用 npm 而不是 pnpm」这种错误分支
L2 场景(按需):atomic-step-commit / search-first / debug-residue
→ 条件剪枝:只在特定场景下才生效,不浪费 tokenRules 分级本质上是对 AI 搜索空间的剪枝——L1 永久剪掉明显错误的分支,L2 按需剪掉不需要的路径。
映射三:suggest-compact 阈值调优 = MCTS 的「模拟评估参数调优」
// .codebuddy/hooks/suggest-compact.js
const THRESHOLD = 35; // 从 50 调优到 35
// 工具调用超过 35 次 → 建议 /compactMCTS 中模拟次数(rollout count)决定了评估的准确度。suggest-compact 的阈值从 50→35,就是根据实际观察(AI 在 35 次后质量明显下降)对「何时该回溯(compact)」这个参数的调优。
映射四:impact-analysis.sh = MCTS 的「节点评估函数」
# .codebuddy/hooks/impact-analysis.sh
# 改公共组件时,自动 grep 全仓库引用方
# 输出:影响 N 个文件,M 个调用点
# → 评估值 = 影响面大小,帮助决定是否继续展开这个分支一句话总结:MCTS 教我们的不是「让 AI 更聪明」,而是「给 AI 设计一个能试错的机制」——出方案 → 评估 → 选最优 → compact 后重来。
⑤ 信息熵压缩
无 Harness 的搜索空间:
N 个可能的操作,每步有 N 种选择 → 路径空间 = N!(阶乘爆炸)
加上 Rules(约束)后:
「禁止 10 类操作」+ 「必须按 5 步流程」→ 路径空间 ≈ k×N(线性)
信息论解释:
Rules = 先验知识注入 → H(行动|规则) << H(行动) → 搜索熵大幅下降
这就是为什么「壳越精巧,模型表现越好」:
不是模型变聪明了,是它需要搜索的空间被大幅压缩了。Part 2 · .codebuddy 的 Harness 实践
以下所有内容均来自
.codebuddy/的真实配置,不是理想状态,是我们现在正在用的东西。
2.1 架构全景
.codebuddy/ 由四层能力组成:
┌─────────────────────────────────────────────────────────────────┐
│ CodeBuddy IDE Runtime │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Commands(入口) Skills(能力) Rules(约束) │
│ /review-commit 项目-dev ai-coding-defense │
│ /review-branch quick-iterate project-rules │
│ /deploy-test figma-to-code search-first │
│ proto-sync atomic-step-commit │
│ git-commit-push debug-residue │
│ │
│ Hooks(自动兜底) │
│ guard-commands / commit-quality / protect-files │
│ config-protection / search-gate / suggest-compact │
│ post-edit-accumulator / large-file-blocker / impact-analysis │
│ stop-format-typecheck │
│ │
└─────────────────────────────────────────────────────────────────┘四层的职责分工:
层 | 定位 | 触发方式 | Token 消耗 |
|---|---|---|---|
Commands | 流程入口(/review-commit、/deploy-test) | 用户手动执行 | 极低(轻量指令) |
Skills | 领域能力包(项目-dev、quick-iterate 等) | 用户 Prompt 触发 | 2K ~ 11K |
Rules | 约束层(始终激活 or 按需加载) | alwaysApply 或关键词匹配 | 0 ~ 5.8K |
Hooks | 自动化兜底(AI 生命周期钩子) | 工具调用自动触发 | 0(脚本执行) |
2.2 Hooks 体系——反馈控制的工程实现
Hooks 是 Harness「反馈控制」层最具体的落地,也是我们花时间最多的部分。
所有 Hook 都在 AI 生命周期的三个时机自动触发:
用户发出指令
│
▼
Agent 决定调用工具(Write / Edit / Bash)
│
├──► PreToolUse Hooks(行动之前)
│ ├── guard-commands.sh ─ 危险命令?→ deny 阻止
│ ├── commit-quality.sh ─ 质量不过?→ deny 阻止
│ ├── protect-files.sh ─ 敏感文件?→ deny 阻止
│ ├── config-protection.sh─ 配置文件?→ ask 询问用户
│ ├── search-gate.js ─ 首次写入业务目录?→ allow + 提醒
│ └── suggest-compact.js ─ 调用超 35 次?→ allow + 提醒
│
▼ 全部放行后,工具执行
│
├──► PostToolUse Hooks(行动之后)
│ ├── post-edit-accumulator.js ─ 累积编辑文件路径
│ ├── large-file-blocker.sh ─ 文件 > 400 行?→ 提醒拆分
│ ├── impact-analysis.sh ─ 改公共组件?→ 自动影响面分析
│ └── post-commit-review.sh ─ commit ≥ 3 文件?→ 提醒 /review-commit
│
▼ Agent 停止时
│
└──► Stop Hook
└── stop-format-typecheck.js ─ 批量 eslint --fix + 调试扫描每个 Hook 解决的真实问题:
Hook | 解决什么问题 | 对应的 AI 常见错误 |
|---|---|---|
commit-quality.sh | 拦截裸 console、调试残留、非规范 commit msg | AI 忘记清理调试代码就提交 |
search-gate.js | 首次写入业务目录时提醒先搜索 | AI 重复造轮子,不知道项目已有实现 |
suggest-compact.js | 调用 35 次后建议 /compact | 上下文膨胀导致 AI 质量下降 |
impact-analysis.sh | 改公共组件时自动分析引用方 | AI 改了 BlockUploader 却不知道影响了多少页面 |
stop-format-typecheck.js | 每次停止前批量格式化 | AI 改完不跑 lint,留下格式问题 |
config-protection.sh | 修改构建配置时询问 | AI 随意动 nuxt.config / eslint.config |
large-file-blocker.sh | 写入 > 400 行文件时提醒拆分 | AI 把所有逻辑堆在一个文件 |
SessionStart compact | compact 后重新注入 7 条关键约定 | compact 后 AI 「忘记」项目规范 |
2.3 Rules 体系——前馈控制的工程实现
Rules 对应控制论的「前馈控制」:在 AI 行动之前,就把约束注入到上下文中。
分级体系(避免把所有规则都 alwaysApply):
级别 | 加载方式 | 文件 | 作用 |
|---|---|---|---|
L1 核心(always) | 每次对话自动注入 | project-rules.md(~3.5K tokens) | 技术栈、目录、接口规范、8 条 DO NOT |
L1 核心(always) | 每次对话自动注入 | ai-coding-defense.md(~1.5K tokens) | 8 条编码红线(历史 Bug 提炼) |
L1 核心(always) | 每次对话自动注入 | plan-cleanup.mdc(~800 tokens) | Plan 文件管理规范 |
L2 场景(按需) | 关键词触发 | atomic-step-commit.mdc | 多步骤任务原子化提交工作流 |
L2 场景(按需) | 写入业务目录时 | search-first.md | 编码前先搜索复用 |
L2 场景(按需) | 调试/commit 场景 | debug-residue.md | 调试残留统一标记格式 |
ai-coding-defense.md 的 8 条编码红线(全来自项目真实 Bug):
ref() vs 普通变量,导出与引用同步computed/Pinia getter 禁止副作用[xxx-debug]、__DEBUG_*__、TODO(debug-only):这 8 条规则的特殊之处:不是「建议」,是「工具会拦」。
commit-quality.sh在 git commit 前自动扫描[xxx-debug]__DEBUG_*__TODO(debug-only)标记,命中即拒绝提交。 这就是 Reflexion 论文的工程版:历史 Bug → 提炼反思 → 写入「记忆」→ 每次对话注入 → AI 不再犯同类错误。
2.4 Skills 体系——领域知识封装(最新:disable-model-invocation)
Skills 是领域能力包,把「怎么在项目里做一件事」的完整工作流封装起来。
Skills 决策树:
用户说了什么?
├── 提到 Figma 链接 → figma-to-code
├── 「更新 proto」「同步接口」 → proto-sync(disable-model-invocation)
├── 完整需求 + 设计稿 + 多文件 → 项目-dev
├── 简短修改指令(< 20 字) → quick-iterate
├── 「提交」「推送」「commit」 → git-commit-push(disable-model-invocation)
└── 不确定 → 不加载 Skill,按 rules 执行Skill | 触发场景 | Token 消耗 | 核心价值 |
|---|---|---|---|
dev | 完整新功能、多文件联动、含设计稿 | ~11K | 完整的 5 阶段工作流:需求理解→设计→编码→验证→沉淀 |
quick-iterate | 样式微调、文案修改、小交互变更 | ~2K | 精准定位改动范围,避免过度推断 |
figma-to-code | Figma 链接设计稿还原 | ~5K | Figma API + 项目组件规范的结合 |
proto-sync | Proto 文件更新 | ~3K | 类型生成→接口封装→调用方更新的固定流程 |
git-commit-push | 提交代码 | ~2K | conventional commits + TAPD 关联 |
dev 的 5 阶段工作流(对应 ReAct 的 Plan→Execute→Verify 循环):
阶段 1:需求理解 + Plan 创建
→ 读 Figma/需求文档 → 拆解步骤 → 两轮自我优化(边界条件 + 测试矩阵)
阶段 2:代码设计
→ 读现有类似实现 → 确定方案(不新建轮子)→ 用户确认
阶段 3:编码实现
→ 按 Plan 分步 → 每步 lint/type-check → 每步提交
阶段 4:验证测试
→ 端到端验证 → 边界回归 → 再优化一轮
阶段 5:沉淀
→ 写 plan 实施记录 → 更新 memory → 更新 docs/dev/2.5 原子化提交工作流
这是 atomic-step-commit.mdc 的核心设计,也是我们避免「大 PR 噩梦」的关键。
核心原则:每步 = 最小可独立验证单元
错误做法(反模式):
一口气改 10 个文件 → 统一提交 → 发现问题不知道哪步引入的
正确做法:
步骤 1:store 新增字段 → lint + type-check → commit feat(store): ...
步骤 2:API 层封装 → lint + type-check → commit feat(api): ...
步骤 3:组件消费 → lint + type-check → commit feat(component): ...
最终:整体验证 + 再优化一轮 → 用户 review三种 Review 模式(根据任务风险选择):
模式 | 场景 | AI 行为 |
|---|---|---|
A. 自行 review | 低风险日常开发 | 每步 lint/type-check 后自动 commit,直接继续,不打断用户 |
B. 用户 review | 高风险改动 | 每步完成后停下等用户确认,确认才继续 |
C. 传统模式 | 改动关联性强 | 统一修改所有步骤,中间不 commit,最后一起 review |
Part 3 · 模型选型与配额策略
3.1 可用模型一览
模型 | 定位 | 适合场景 | 上下文窗口 |
|---|---|---|---|
Claude | 复杂推理、大上下文、指令遵循最强 | 多文件联动、架构设计、代码审查、新功能开发 | 大(100K+) |
DeepSeek | 代码理解强、性价比高、速度快 | 日常开发主力:单文件 bug fix、样式调整、proto 同步 | 中等(32K) |
GLM | 轻量省 token、长时自主任务 | 批量操作、文案文档、零碎问答 | 中等(32K) |
Hy3 preview | 内部新模型,日常开发能力好 | DeepSeek 的替代方案,可尝鲜日常开发 | 中等 |
3.2 按开发场景选型(决策树)
任务有多复杂?
├── 3+ 文件联动 / Skill 加载 / 架构设计 → Claude
│ (原因:需要大窗口承载 Skill ~11K + Rules ~15K + 多文件代码)
├── 单文件修改 / 中等 bug / proto 同步 → DeepSeek / Hy3
│ (原因:上下文需求小,性价比高,速度快)
├── 批量操作 / 文案文档 / 零碎问答 → GLM
│ (原因:不需要复杂推理,最省 token)
└── 不确定 → Auto 或 DeepSeek3.3 每日配额分配建议
Claude(~25%) → 关键任务:新功能开发、代码审查、架构设计、上线前 review
DeepSeek(~50%) → 日常主力:bug fix、样式调整、proto 同步、git 提交
GLM(~15%) → 批量/轻量:改文案、问答、文档注释
Hy3(~10%) → 尝鲜/备选:日常开发验证3.4 注意事项
disable-model-invocation: true,可用 DeepSeek/GLM 执行,不浪费大模型配额Part 4 · Token 经济学:成本从哪里来、怎么省
4.1 每次对话的固定开销从哪里来
先搞清楚一次对话的「账单」:
每次对话基础开销分解(项目,优化后):
─────────────────────────────────────────────
System Prompt(IDE 内置,不可控) ~5K tokens
─────────────────────────────────────────────
alwaysApply Rules
├── project-rules.md(精简后) ~3.5K tokens
├── ai-coding-defense.md ~1.5K tokens
└── plan-cleanup.mdc ~800 tokens
小计 ~5.8K tokens
─────────────────────────────────────────────
workspace_rules(IDE 自动注入) ~5K tokens(去重后)
─────────────────────────────────────────────
Memories(自动注入) ~500-1K tokens
─────────────────────────────────────────────
合计基础开销 ~15K tokens
═════════════════════════════════════════════要真正理解 Token 成本,必须先理解 KV Cache。
什么是 KV Cache?
Transformer 的自注意力机制中,每个 token 在处理时需要与序列中所有之前的 token 计算注意力。对于序列中第 i 个 token,注意力计算为:
Attention(Q, K, V) = softmax(QK^T / √d_k) · V
其中:
Q = 当前 token 的 Query 向量
K = 所有历史 token 的 Key 向量矩阵 ← 每次推理都要重新计算,代价极大
V = 所有历史 token 的 Value 向量矩阵 ← 同上
KV Cache:把已经计算过的 K/V 向量缓存起来,下次推理直接复用
→ 前缀相同的请求,缓存命中 → 计算成本降至 ×0.1KV Cache 在工程中的三层意义:
┌─────────────────────────────────────────────────────────────────┐
│ KV Cache 工程全景 │
│ │
│ 1. 前缀缓存(Prefix Caching) │
│ ───────────────────────────── │
│ System Prompt + alwaysApply Rules(~15K tokens) │
│ │ │
│ ▼ 第一次请求:full compute │
│ ▼ 后续请求:cache hit → ×0.1 成本 │
│ │
│ 结论:稳定的 Rules 文本 = 高命中率 = 实际成本远低于字面字数 │
│ │
│ 2. 多轮对话复用 │
│ ────────────── │
│ 同一会话多轮 → 相同前缀 KV 直接复用,不重新 prefill │
│ 这是为什么「长对话」不如「长×单价」那么贵 │
│ │
│ 3. Agent 多轮工具调用 │
│ ─────────────────── │
│ ReAct 循环中,每次 Observation 追加到序列尾部 │
│ 前面的 KV 已缓存 → 只需计算新增 token 的 KV │
│ 智能体密集调用工具时,KV Cache 是性能的关键支撑 │
└─────────────────────────────────────────────────────────────────┘Harness 调度层的 KV 管理职责:
智能体多轮工具调用、长代码库上下文极度依赖高性能 KV Cache。
Harness 调度层还要做:
├── 多会话 KV 隔离
│ 不同用户的会话 KV 不能共用(安全边界),
│ 但同一用户的多轮对话要尽量复用(命中前缀缓存)
│
├── 过期上下文回收
│ 超过窗口的 KV 及时释放(prevent memory leak),
│ /compact 命令触发的就是这个机制的应用层接口
│
└── 前缀树管理(Radix Tree)
相同前缀的请求共享 KV 存储,
这是 alwaysApply Rules「一次计算,多次复用」的底层支撑4.3 优化前后对比:-36% 的从何而来
指标 | 优化前 | 优化后 | 降幅 |
|---|---|---|---|
alwaysApply Rules | ~11K | ~5.8K | -47% |
workspace_rules | ~12.5K | ~5K | -60% |
每对话基础开销 | ~23.5K | ~15K | -36% |
项目-dev Skill | ~15K | ~11K | -27% |
32K 窗口剩余空间 | ~8.5K | ~17K | +100% |
对于流程型 Skill(proto-sync、git-commit-push),新增了 disable-model-invocation: true 标记——这类 Skill 是纯脚本执行流程,加载后 AI 按步骤执行即可,不需要再次调用大模型推理,直接节省每步骤的推理 token。
根因分析(三类问题):
原始问题:~23.5K 基础开销中,有 ~8.5K 是「重复注入」或「不必要的 alwaysApply」
① 重复注入(~6K)
├── my-rule.mdc 内容 = workspace_rules「Homepage 项目规则」→ 注入两遍
└── project-rules.md §4 内容 ≈ workspace_rules 各条目描述 → 逐字重复
② 不必要的 alwaysApply(~4.3K)
├── atomic-step-commit:只有 10% 的对话需要多步骤流程
└── search-first:已有 search-gate.js hook 物理提醒,规则层面双重冗余
③ 空白占位(~500)
└── TODO 占位符、空的章节头、模板示范
修复逻辑:消除重复 + 按需加载 + 清理空白 = 节省 ~8.5K tokens级别 | 文件 | alwaysApply | 每对话消耗 |
|---|---|---|---|
L1 核心 | project-rules.md | ✅ | ~3.5K |
L1 核心 | ai-coding-defense.md | ✅ | ~1.5K |
L1 核心 | plan-cleanup.mdc | ✅ | ~800 |
L2 场景 | atomic-step-commit.mdc | ❌ | 0(按需) |
L2 场景 | search-first.md | ❌ | 0(按需) |
L2 场景 | debug-residue.md | ❌ | 0(按需) |
L2 场景 | my-rule.mdc(占位) | ❌ | 0 |
4.4 四层配置成本控制策略
层 | 核心原则 | 具体做法 |
|---|---|---|
Rules | 只有「每次都必须遵守」的才 alwaysApply | 3 条 L1 核心 + 3 条 L2 按需 |
Skills | 按场景精准选择,流程型 Skill 设 disable-model-invocation | 简单改动用 quick-iterate(~2K),不用项目-dev(~11K) |
Memory | 只存核心结论,30 天以上自动归档 | 控制在 ~500 字以内,archive-old-memories.sh 定期执行 |
Plans | 不自动注入,0 固定消耗 | 保留作参考,不删除 |
4.5 用户习惯对 Token 的影响
低效做法 | 高效做法 | Token 差距 |
|---|---|---|
「帮我看看 Editor 有什么问题」 | @Editor.vue:63 insertBlock 无 catch | ~3K |
「优化一下这个页面」 | @Banner.vue 按钮圆角改 12px | ~5K |
「帮我加个功能」 | 需求:投票按钮 文件:ActivityCard.vue + useVoteStore | ~8K |
一次说 5 个需求 | 每个需求独立对话 | ~15K+ |
长对话一直跑 | 35 次工具调用后 /compact | ~5-10K |
Token 估算公式(快速心算):
Token 数 ≈ 中文字符数 ÷ 1.5 + 英文字符数 ÷ 4
快速估算 ≈ 文件字符数 ÷ 2Part 5 · 马上就能用上的实战 Tips
5.1 Prompt 模板速查
场景 | 推荐格式 | 示例 |
|---|---|---|
Bug 修复 | @文件:行号 现象:X 预期:Y | @Editor.vue:63 点击按钮没反应,预期弹出侧栏 |
样式调整 | @文件 把 A 改成 B(附截图) | @Banner.vue 圆角改成 12px(附设计稿截图) |
新功能 | 需求:X 涉及文件:A,B 注意:Y | 需求:加投票按钮 涉及:ActivityCard.vue + useVoteStore 注意:SSR 兼容 |
代码审查 | /review-commit 关注:X | /review-commit 关注:类型安全和 SSR 兼容 |
设计稿还原 | 按 Figma 还原 {链接} | 按 Figma 还原 https://www.figma.com/design/ABC?node-id=123 |
proto 同步 | /proto-sync | 触发 proto-sync Skill(disable-model-invocation,省配额) |
提交代码 | /git-commit-push | 触发 git-commit-push Skill,自动关联 TAPD |
5.2 对话管理策略
✅ 推荐做法 | 效果 |
|---|---|
每个主题开新对话 | 上下文干净,AI 不混淆 |
改完一个模块就 /review-commit | 及时发现问题 |
任务切换时执行 /compact | 清理 5-10K 过期上下文(SessionStart Hook 会自动重新注入项目约定) |
用 @文件:行号 精确指定位置 | 减少 2-3 轮搜索 |
流程型任务用对应 Skill | proto-sync/git-commit-push 设了 disable-model-invocation,省大模型配额 |
❌ 避免做法 | 问题 |
|---|---|
一个对话混杂多个不相关任务 | 上下文膨胀,质量下降 |
遇到报错在同一对话反复重试 | 应贴报错 + compact + 精准重试 |
说「帮我优化一下」但不给方向 | AI 会过度重构 |
遇到 Hook 拦截就绕过 | Hook 拦截意味着有风险,要读原因 |
5.3 7 条黄金法则
search-gate.js 会自动提醒)@文件:行号 而不是模糊描述/compact(compact 后 SessionStart Hook 自动重注入约定)5.4 常见误区纠正
误区 1:「换更好的模型就能解决问题」 LangChain 实验证明仅改 Harness 可提升 13 个百分点。先检查 Harness,再换模型。
误区 2:「Rules 越多越好」 Rules 有成本。只有「每次对话都必须遵守」的才值得 alwaysApply,其余一律按需加载。
误区 3:「Hook 很烦,直接 --no-verify 绕过」 Hook 拦截说明有潜在风险。先读拦截原因,修正后再提交。--no-verify 在 Code Review 时可见。
误区 4:「Memory 越详细越好」 Memory 每次都注入。只存核心结论,定期运行 archive-old-memories.sh 归档老记录。
误区 5:「compact 之后项目规范就丢了」 不会了。SessionStart Hook 会在 compact 触发后自动重新注入 7 条关键约定。
误区 6:「所有 Skill 都需要 AI 推理」 流程型 Skill(proto-sync/git-commit-push)设了 disable-model-invocation: true,加载后按固定步骤执行,不触发额外推理,可以用更省配额的模型跑。
5.5 快速审计你自己的 .codebuddy
# 查看所有 alwaysApply Rules 的大小
grep -rl "alwaysApply: true" .codebuddy/rules/ | xargs wc -m
# 查看 memory 总大小
find .codebuddy/memory -name "*.md" -exec wc -m {} + | tail -1
# 检查是否有新增的 alwaysApply 规则
grep -l "alwaysApply: true" .codebuddy/rules/*.md .codebuddy/rules/*.mdc 2>/dev/null
# 查看哪些 Skill 没有设置退出条件(exit condition)
grep -rL "exit\|退出\|DONE\|complete" .codebuddy/skills/*/SKILL.md
# 查看哪些 Skill 是流程型但未设 disable-model-invocation
grep -rL "disable-model-invocation" .codebuddy/skills/*/SKILL.md判断标准:
archive-old-memories.sh 归档disable-model-invocation: true参考资料
论文 | 作者/机构 | 发表 | 核心贡献 |
|---|---|---|---|
ReAct: Synergizing Reasoning and Acting in Language Models | Yao et al. | ICLR 2023 | Thought-Action-Observation 循环 |
Reflexion: Language Agents with Verbal Reinforcement Learning | Shinn et al. | NeurIPS 2023 | 语言形式反思记忆 |
Tree of Thoughts: Deliberate Problem Solving with Large Language Models | Yao et al. | NeurIPS 2023 | 多路径推理树 + BFS/DFS |
Efficient Memory Management for Large Language Model Serving with PagedAttention | Kwon et al. | SOSP 2023 | KV Cache 页式内存管理 |
GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints | Ainslie et al. | EMNLP 2023 | 分组查询注意力,KV 显存减少 70%+ |
Meta-Harness: End-to-End Optimization of Model Harnesses | Lee et al. | arXiv 2026 | 自动搜索最优 Harness 代码 |
Dive into Claude Code: The Design Space of AI Agent Systems | VILA-Lab | arXiv 2026.04 | 1.6% AI 逻辑 + 98.4% 基础设施 |
SWE-bench: Can Language Models Resolve Real-world Github Issues? | — | ICLR 2024 | AI 编程能力评测基准 |
文章 | 机构 | 时间 |
|---|---|---|
Effective Harnesses for Long-Running Agents | Anthropic | 2025.11 |
My AI Adoption Journey(命名 Harness Engineering) | Mitchell Hashimoto | 2026.02 |
Harness Engineering: Leveraging Codex in an Agent-First World | OpenAI | 2026.02 |
The Anatomy of an Agent Harness | LangChain | 2026.03 |
Harness Design for Long-Running Application Development | Anthropic | 2026.03 |
Harness Engineering for Coding Agent Users | Thoughtworks(martinfowler.com) | 2026.04 |
README.md — AI 编程辅助体系总览ai-infra-analysis.md — Token 消耗深度分析(含优化前后对比)rules/ai-coding-defense.md — 8 条编码红线rules/atomic-step-commit.mdc — 原子化提交工作流hooks/README.md — Hooks 体系完整文档scripts/archive-old-memories.sh — memory 归档脚本scripts/impact-analysis.sh — 影响面分析脚本-End-
原创作者|马俊昌
感谢你读到这里,不如关注一下?👇

📢📢来抢开发者限席名额!点击下方图片直达👇

你对本文内容有哪些看法?同意、反对、困惑的地方是?欢迎留言,我们将邀请作者针对性回复你的评论,欢迎评论留言补充。我们将选取1则优质的评论,送出腾讯云定制文件袋套装1个(见下图)。6月30日中午12点开奖。

扫码领取腾讯云开发者专属服务器代金券!





