关注腾讯云开发者,一手技术干货提前解锁👇

本文基于真实工程实践,结合 Harness Engineering 领域的学术论文,分享 AI 辅助编程的架构思考、工程落地与 Token 成本优化。

01

Part 1 ·什么是 Harness,它从哪儿来

   1.1 一个让所有人都很沮丧的问题****

你有没有遇到过这种情况——

  • 花半小时纠正 AI 的一个错误,在 Prompt 里写清楚「不要这样做」,第二天开了新会话,AI 毫不犹豫地……又犯了同样的错

  • 换了个更贵的模型,效果并没有你期望的那么好

  • 同一套代码,别人的 AI 跑得很顺,你接进来却各种翻车

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 不是玄学,它有扎实的理论基础。


① 反馈控制论(Cybernetics)— Wiener, 1948

Harness 的本质可以用控制论的「双环控制」来描述:

┌──────────────────────────────────────────────────────────────────┐
                  Harness 双环控制结构

  ┌─────────────────────────────────────────────────────────┐
               前馈控制(开环)

  设计时注入 ──► Rules / Skills ──► AI 推理上下文
  (先验知识)    (约束边界)        (行动之前就生效)
  └─────────────────────────────────────────────────────────┘

  ┌─────────────────────────────────────────────────────────┐
               反馈控制(闭环)

  AI 行动 ──► 检测结果 ──► 偏差计算 ──► 阻止/纠正
             (Hooks)    (质量阈值)   (deny/ask)
  └─────────────────────────────────────────────────────────┘

  工程映射:Rules(前馈)+ Hooks(反馈)= Harness 的双保险
└──────────────────────────────────────────────────────────────────┘

数学基础:负反馈系统的稳定性定理(Nyquist, 1932)——只要反馈增益 < 1,系统趋于稳定。Hooks 的 deny 机制本质上是一个「增益截断器」。


② ReAct 循环(Thought-Action-Observation)

论文: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.shprotect-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 — 反思记忆机制

论文: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

④ 蒙特卡洛树搜索(MCTS)

相关论文: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
  → 条件剪枝:只在特定场景下才生效,不浪费 token

Rules 分级本质上是对 AI 搜索空间的剪枝——L1 永久剪掉明显错误的分支,L2 按需剪掉不需要的路径。

映射三:suggest-compact 阈值调优 = MCTS 的「模拟评估参数调优」

// .codebuddy/hooks/suggest-compact.js
const THRESHOLD = 35;  // 从 50 调优到 35
// 工具调用超过 35 次 → 建议 /compact

MCTS 中模拟次数(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(行动) → 搜索熵大幅下降
 
这就是为什么「壳越精巧,模型表现越好」:
  不是模型变聪明了,是它需要搜索的空间被大幅压缩了。

02

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.shcommit3 文件?→ 提醒 /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):

  1. 方案切换必须清理残留 — 切换方案后全文搜索旧关键词(防止两套方案并存)

  2. 通用控件保护 — 改公共组件前先评估所有引用方影响面

  3. 改动完整性 — template/script/style 同步,ref() vs 普通变量,导出与引用同步

  4. 场景全覆盖 — 多端(PC/Mobile)、多调用方、多层守卫、tab 缓存

  5. 避免策略反复 — 先了解全部约束再定方案,确定后不轻易切换

  6. 异步操作所有路径必须有终态 — 所有退出路径(成功/失败/提前 return)都必须重置 loading

  7. Vue 响应式纯净性 — computed/Pinia getter 禁止副作用

  8. 调试硬编码必须打标记并清理 — 统一格式:[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-syncdisable-model-invocation
├── 完整需求 + 设计稿 + 多文件    → 项目-dev
├── 简短修改指令(< 20 字)       → quick-iterate
├── 「提交」「推送」「commit」     → git-commit-pushdisable-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-checkcommit feat(store): ...
  步骤 2:API 层封装 → lint + type-checkcommit feat(api): ...
  步骤 3:组件消费 → lint + type-checkcommit feat(component): ...
  最终:整体验证 + 再优化一轮 → 用户 review

三种 Review 模式(根据任务风险选择):

模式 场景 AI 行为
A. 自行 review 低风险日常开发 每步 lint/type-check 后自动 commit,直接继续,不打断用户
B. 用户 review 高风险改动 每步完成后停下等用户确认,确认才继续
C. 传统模式 改动关联性强 统一修改所有步骤,中间不 commit,最后一起 review

03

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 或 DeepSeek

   3.3 每日配额分配建议

Claude(~25%)    → 关键任务:新功能开发、代码审查、架构设计、上线前 review
DeepSeek(~50%)  → 日常主力:bug fix、样式调整、proto 同步、git 提交
GLM(~15%)       → 批量/轻量:改文案、问答、文档注释
Hy3(~10%)       → 尝鲜/备选:日常开发验证

   3.4 注意事项

  • 小窗口模型 + dev Skill:Skill ~11K + Rules ~15K ≈ 26K,32K 窗口只剩 ~6K → 建议拆分任务,每次只执行 1 阶段,或改用 Claude

  • 长文件(> 300 行)建议用 Claude,小窗口模型可能截断

  • 多轮对话超过 5 轮深度建议切 Claude,小模型容易丢失早期上下文

  • 流程型 Skill(proto-sync / git-commit-push)已设 disable-model-invocation: true,可用 DeepSeek/GLM 执行,不浪费大模型配额

04

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
═════════════════════════════════════════════

Transformer 的 KV Cache 机制(理解成本的关键)

要真正理解 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.1

KV 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-syncgit-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

Rules 分级最终状态

级别 文件 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
快速估算 ≈ 文件字符数 ÷ 2

05

Part 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 条黄金法则****

  1. 先搜后写 — 动手写代码前,先搜索项目中是否已有可复用实现(search-gate.js 会自动提醒)

  2. 精准定位 — 用 @文件:行号 而不是模糊描述

  3. 单一职责 — 每次对话只做一件事

  4. 选对 Skill — 简单修改不加载 Skill,流程型任务用 disable-model-invocation Skill

  5. 及时 compact — 35 次工具调用后考虑 /compact(compact 后 SessionStart Hook 自动重注入约定)

  6. 信任 Hooks — Hook 拦截意味着有风险,不要绕过

  7. 沉淀经验 — 重要决策写 plan,核心结论存 memory(30天自动归档)

   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

判断标准:

  • alwaysApply Rules 总字符数控制在 20K 以内(约 10K tokens),超出就要做一次规则降级或精简

  • memory 文件超过 30 天的,运行 archive-old-memories.sh 归档

  • 流程型 Skill(固定步骤执行)建议设 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

项目文件(.codebuddy/)

  • 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点开奖。

图片

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

图片

图片

[

图片

](https://mp.weixin.qq.com/s?__biz=MzI2NDU4OTExOQ==&mid=2247695194&idx=1&sn=030591ea76020210c5f06692fb30243f&scene=21#wechat_redirect)

[

图片

](https://mp.weixin.qq.com/s?__biz=MzI2NDU4OTExOQ==&mid=2247695142&idx=1&sn=af2cfe933dd06f9e49243b5a957e3e1f&scene=21#wechat_redirect)

[

图片

](https://mp.weixin.qq.com/s?__biz=MzI2NDU4OTExOQ==&mid=2247695151&idx=1&sn=d00ab30cbefa36f0f860ef37f059600e&scene=21#wechat_redirect)

图片