Harness Engineering 最佳实践报告

一、什么是 Harness Engineering

1.1 一句话定义

Harness Engineering(缰绳工程)是围绕 AI Agent 构建的"脚手架"工程------通过上下文传递、工具接口、验证循环、记忆系统和安全沙箱,让 Agent 从"能聊天"变成"能可靠地干活"。

1.2 直观类比

类比 说明
计算机体系结构 LLM = CPU (算力),Context Window = RAM (工作记忆),Harness = OS (调度管理),Skill = App(具体功能)
发动机 vs 变速箱 模型是发动机,Harness 是变速箱。500 马力的发动机没有变速箱一样跑不动
仓库 = Agent 的操作系统 Agent 只能看到仓库里的东西。不在仓库里的约定,对 Agent 等于不存在
Agent = 刚入职的博士 很聪明,但缺乏企业级经验。凡是没明说的部分,Agent 大概率"自行合理化"

1.3 四层范式递进

复制代码
Prompt Engineering     → "我该怎么说,它才懂?"        (点状:单次对话质量)
     ↓ 包含
Context Engineering    → "它该知道什么,才能说对?"      (面状:信息流完整性)
     ↓ 包含
Harness Engineering    → "我该如何闭环,它才可靠?"      (体状:业务链路健壮性)
     ↓ 包含
Environment Engineering→ "如何在真实世界中安全运行?"    (域状:物理/数字世界桥梁)

每一层包含前一层,而非替代。核心公式:Agent = Model + Harness------Harness 管的是"非确定性"。

1.4 为什么 Harness 比模型更重要

来自 17 篇高阅读量文章(总阅读 21 万+)的一致结论:

"同一个 Opus 模型,无 Harness 花 9 产出不可用代码,有完整 Harness 花 200 构建出可运行应用。" ------ learn-harness-engineering (8.1K stars)

"强的 Harness 框架比顶级模型更重要------使用 Kimi K2.5 配合精心设计的 Harness,成本仅为 Opus 的 1/20,效果相当。" ------ 麓行《Harness Engineering 长程自动化实践》(7,694 阅读)

"LangChain 仅修改 Agent 周围的脚手架代码(不换模型),TerminalBench 得分从 52.8% 飙升至 66.5%。" ------ 鹏赋(7,157 阅读)

核心公式:Agent 可靠性 = 模型智能 x Harness 质量

反直觉发现:强 Harness + 弱模型 > 弱 Harness + 强模型(成本差 20 倍,效果相当)


二、Harness 的 5 个核心要素

综合 10 篇 文章和 5 个 GitHub 项目,Harness 工程可提炼为 5 个核心要素

复制代码
        ┌─────────────────────────┐
        │   1. 上下文工程          │  ← Agent 能"看到"什么
        │   (Context Engineering) │
        └────────────┬────────────┘
                     │
    ┌────────────────┼────────────────┐
    │                │                │
    ▼                ▼                ▼
┌────────┐    ┌────────────┐    ┌────────────┐
│2. 约束  │    │3. 验证循环  │    │4. 记忆系统  │
│编码化   │    │(Feedback   │    │(Memory)    │
│(Rules) │    │  Loop)     │    │            │
└────────┘    └────────────┘    └────────────┘
    │                │                │
    └────────────────┼────────────────┘
                     │
        ┌────────────┴────────────┐
        │   5. 可观测与安全        │  ← 人能"看到"Agent在干什么
        │   (Observability)       │
        └─────────────────────────┘

要素 1:上下文工程 ------ 让 Agent 看到正确的信息

核心问题:Agent 的行为完全由它收到的上下文决定。上下文错了,行为一定错。

标准分层

层级 内容 加载方式 示例
L1 常驻层 身份、核心约束、禁止项 每次对话自动加载 SOUL.md / CLAUDE.md
L2 规范层 行为规范、踩坑记录 每次对话自动加载 AGENTS.md(<100行索引)
L3 按需层 领域知识、操作手册 匹配到任务时加载 Skills / SKILL.md
L4 运行时层 环境信息、git 状态 动态注入 分支信息、构建命令
L5 记忆层 历史经验、错误教训 语义检索 MEMORY.md / experience.jsonl

关键原则

  • 常驻信息要短AGENTS.md < 100 行),做索引指路而非堆砌细节
  • System Prompt 恒定,领域知识以 User Prompt 动态注入------避免认知冲突
  • 上下文退化是真实存在的:长任务后期质量下降时,做上下文重置

要素 2:约束编码化 ------ 让规则自动执行

核心问题:写在文档里的规范 Agent 会忽略,编码进 Linter/Hook/CI 的约束才有执行力。

复制代码
期望 → 写成文档 → 还是会被违反
期望 → 编码为 Linter/Hook/CI → 机械强制执行 ✓
约束类型 实现方式 效果
架构边界 lint-deps 脚本 高层 import 低层可以,反之报错
编码规范 lint-quality 脚本 命名、复杂度自动检查
操作合法性 verify_action 脚本 事前验证,2 次交互搞定
完整性 validate 管道 build → lint → test → verify

关键原则

  • 事前预防 > 事后检查(事前 2 次交互 vs 事后 10 次 tool call 修复)
  • linter 的报错信息就是教学------好的报错让 Agent 自愈
  • 永远改代码而非禁用规则

要素 3:验证循环 ------ 让 Agent 知道做对没有

核心问题:没有反馈循环的 Agent 无法自我改进,就像没有方向盘的车。

标准验证管道

复制代码
代码完成 → 构建验证 → 静态分析 → 单元测试 → 集成测试 → 功能验证
     │                                                    │
     │         ← 失败则自动修复(Ralph Loop,最多 3 轮)  ←   │

闭环五模块(来自 HelixVerify 项目,114 次 AI 自主迭代验证):

  1. 端到端测试:让 AI 能"看懂"系统
  2. 标准化评测:给 AI 统一的量化尺子(metric.txt + detail.txt)
  3. Badcase 自动诊断:数据驱动而非"直觉"
  4. TP 对抗验证:新规则不能误杀正确样本
  5. 阶梯式验证:小样本 3min → 中样本 → 全量 60min

实证效果 :闭环前迭代 5-7 天/轮,闭环后 3-4 小时/轮------提升 30-40 倍

要素 4:记忆系统 ------ 让 Agent 越用越好

核心问题:没有记忆的 Agent 每次从零开始,和 chatbot 没区别。

标准分层

复制代码
L1 身份层    SOUL.md(不可变)
L2 长期记忆  MEMORY.md(提炼精华,<3000 tokens)
L3 中期记忆  memory/YYYY-MM-DD.md(按日期)
L4 短期记忆  .learnings/(即时记录错误和收获)
L5 持久化    经验库 JSONL + 向量检索 + 知识图谱

关键机制

  • 六步迭代循环:触发事件 → 即时记录 → 每日反思 → 验证 ≥3 次 promote 到长期记忆 → 下次加载 → 行为改进
  • 混合检索:70% 向量相似度 + 30% 关键词权重
  • Agent 可以更新记忆,但绝不能修改 SOUL.md

要素 5:可观测与安全 ------ 让人能看到和控制

核心问题:看不见 Agent 在做什么,就无法干预和改进。

维度 机制
事件追踪 tool_start / tool_end / turn_end 全链路
权限控制 Allow / Deny / Ask 三行为模型
沙箱隔离 操作系统级隔离(bubblewrap)
错误自愈 14 种错误分类 + 预设恢复策略
Hook 系统 20+ 种可编程拦截点

三、Harness 标准工程结构

综合文章 + GitHub 5 个实战模板(agentrules-architect 122 stars、ai-harness-template、claude-harness-template、Harness-for-claude、harness-engineering),提炼出标准工程结构:

复制代码
project-root/
│
├── CLAUDE.md                      # 主上下文文件(必须,<200 行)
├── AGENTS.md                      # 跨工具规范(可 symlink → CLAUDE.md,只维护一份)
│
├── .claude/                       # Agent 运行时配置
│   ├── settings.json              #   权限(allow/deny) + hooks
│   ├── settings.local.json        #   个人覆盖(git-ignored)
│   ├── rules/                     #   作用域规则(用 globs: frontmatter 限定范围)
│   │   ├── code-quality.md        #     代码质量规则
│   │   └── tdd.md                 #     TDD 规则
│   ├── commands/                  #   项目级斜杠命令
│   │   ├── bootstrap.md           #     /bootstrap 初始化
│   │   └── check.md               #     /check 质量检查
│   ├── hooks/                     #   生命周期 hooks
│   │   ├── session-start-context  #     SessionStart: 注入仓库状态
│   │   └── stop-check             #     Stop: 结束前自动验证
│   ├── agents/                    #   子 agent 角色定义(可选)
│   ├── skills/                    #   技能包(按需加载)
│   │   └── skill-a/
│   │       ├── SKILL.md
│   │       ├── references/
│   │       ├── scripts/
│   │       └── templates/
│   └── memory/                    #   记忆文件
│       ├── MEMORY.md
│       └── *.md
│
├── scripts/                       # 标准化入口脚本
│   ├── bootstrap                  #   环境初始化 / 依赖安装
│   ├── check                      #   全量检查(lint + typecheck + test)
│   ├── test                       #   运行测试
│   └── verify.sh                  #   强制验证门(AI 结束前必须通过)
│
├── gates/                         # 质量门脚本(大型项目用)
│   ├── check-secrets.sh           #   密钥泄露检测
│   ├── check-boundaries.sh        #   架构边界检查
│   ├── check-complexity.sh        #   复杂度检查
│   └── check-security.sh          #   安全扫描
│
├── docs/                          # 详细文档(按需加载)
│   ├── ARCHITECTURE.md
│   ├── decisions.md               #   架构决策日志
│   └── workflow.md
│
└── .learnings/                    # 即时学习记录
    ├── ERRORS.md
    └── LEARNINGS.md

3.1 "三脚架"强制执行模式

来自 GitHub 5 个项目的一致实践------三层机械防护确保 AI 无法跳过检查:

复制代码
scripts/check(或 verify.sh)   ← 主动验证
        +
pre-commit hooks                ← 提交时拦截(密钥扫描、文件大小、自动文档生成)
        +
Stop hook                       ← AI 结束前强制运行验证(退不出去除非通过)

3.2 settings.json 标准模板

json 复制代码
{
  "permissions": {
    "allow": [
      "Bash(scripts/bootstrap)", "Bash(scripts/check)", "Bash(scripts/test)",
      "Bash(git status)", "Bash(git diff:*)", "Bash(git log:*)", "Bash(rg:*)"
    ],
    "deny": [
      "Read(.env)", "Read(.env.*)", "Read(**/.env)", "Read(**/secrets/**)",
      "Bash(*$(*)*)", "Bash(*`*`*)",
      "Bash(git push --force*)", "Bash(rm -rf /)", "Bash(rm -rf ~)"
    ]
  },
  "hooks": {
    "SessionStart": [{"hooks": [{"type": "command",
      "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/session-start-context"}]}],
    "Stop": [{"hooks": [{"type": "command",
      "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/stop-check"}]}]
  }
}

关键设计 :deny 列表比 allow 列表更重要------必须阻止命令注入($() 和反引号)、密钥读取、强制推送。

3.3 SessionStart hook 要克制

最佳实践(来自 Harness-for-claude):只在有未提交改动或不在 main 分支时才注入上下文,避免浪费 token。

3.4 AGENTS.md / CLAUDE.md 标准写法

markdown 复制代码
# CLAUDE.md --- [项目名]

## 概览
[项目名] 是 [一句话描述]。技术栈: [语言/框架/数据库]

## 必要命令
- 构建: `mvn compile` / `npm run build`
- 测试: `mvn test` / `npm test`
- 验证(每次改动后必须运行): `bash scripts/check`

## 架构
L0 数据层 → L1 核心逻辑 → L2 集成 → L3 接口 → L4 测试
高层可 import 低层,反之不行。详细说明: docs/ARCHITECTURE.md

## 强制规则
- 每 3-5 个编码任务执行一次增量编译
- 外部依赖不存在的方法禁止直接调用
- 不允许硬编码密钥
- 测试优先:先写测试,再实现

## 已知陷阱(最重要的部分)
- [P001] Spring Bean 未注册导致 NPE → 新建 Service 必须检查配置注册
- [P002] 接口变更未同步 DTO → 先改 DTO 再改接口

## 审查清单
- [ ] 没有超过 300 行的文件
- [ ] 测试通过
- [ ] 陷阱章节已更新(如发现新的非显性行为)

写法原则 :如果 AI 不知道这条信息会写出错误 代码 → 放进来;如果只是写出不够好的代码 → 放 docs/。


四、AI Coding 中的 Harness 最佳实践

4.1 标准 SOP(六阶段全流程)

每个阶段建议在独立会话中运行:

复制代码
recon(侦察)→ explore(探索)→ proposal(提案)→ apply(实施)→ code-review → security-review
阶段 做什么 关键产出
recon 存量代码侦察:架构考古、Git 热点、脆弱性评分 代码地图 + 五维脆弱性评分卡
explore 需求分析:强行把 Agent 从"收到就干"拽回来 分析报告 + 可行性评估
proposal 生成提案:Proposal → Specs → Design → Tasks GIVEN/WHEN/THEN 可测场景
apply 按规范实施:TDD + 三门验证 + 合规矩阵 代码 + changes.json
code-review 范围偏移检测 + 结构审查 + 测试覆盖 审查报告 + 置信度校准
security-review 注入/认证/数据/加密扫描 安全审计报告

4.2 三角色 Agent 分离

复制代码
Planner(规划)→ Developer(执行)→ Evaluator(验证)
    │                  │                  │
    └── 各运行在上下文"甜区"(~40% 窗口占用)──┘

关键:上下文超 40% 后模型表现开始下降(Context Rot),中间信息易被遗忘(Lost in the Middle 效应)。

4.3 四个反模式必须避免

反模式 表现 正确做法
"软约束"陷阱 Prompt 里写 5000 字 DO NOT 编码为 Linter/Hook 机械执行
"军火库"陷阱 给 Agent 塞 20 个 API 让它自己挑 按任务精准提供 3-5 个工具
"盲打"陷阱 暴力死循环重试 分级退化 + 已试策略簿
"官僚主义"陷阱 强制万字设计文档 渐进式披露,按需展开

4.4 AGENTS.md 写法(地图而非手册)

判断标准 :如果 AI 不知道这条信息就会写出错误 的代码 → 放 AGENTS.md;如果只是写出不够好的代码 → 放详细文档。

约 200 行,只写两类内容:

  1. 理解项目全貌的必要信息(技术栈、仓库结构、核心模块)
  2. 违反会直接导致问题的硬性规则(命名约定、分层依赖、禁止项)

4.5 日常编码场景(单人 + 单 Agent)

实践 做法
CLAUDE.md 四层分离 全局偏好 → 项目规范 → 个人私有 → 按文件类型规则
Skills 按需加载 不放进 System Prompt,匹配任务时 User Prompt 注入
编译驱动开发 每改 3-5 个文件执行一次编译,失败立即修
Git Worktree 隔离 并行任务使用独立工作树
反思 cron 每日 23:00 自动整理 .learnings/ 到 MEMORY.md
按需加载规则 不一次性加载所有规则,条件化生效减少上下文消耗

4.6 中型需求场景(多 Agent 协作)

实践 做法
协调者不写代码 协调者只管规划/委派/汇总,执行者做实际编码
标准化数据协议 Agent 间通过 JSON 文件交接(如 changes.json)
渐进式门控 硬门控(阻断)+ 软门控(警告)+ 自修复(Loop)
独立会话运行 每个阶段在独立会话中执行,通过文件传递成果
交叉 Review 用不同模型做 Review,避免同模型"视而不见"

4.7 Rubric 评测体系

分级 含义 权重
Essential 必须满足 最高
Important 应当满足 中等
Optional 锦上添花
Pitfall 必须规避 扣分

四层质量模型:L1 功能正确性(40%) + L2 健壮性(25%) + L3 UI 呈现(20%) + L4 交互体验(15%)

4.8 选型原则(奥卡姆剃刀)

复制代码
能用 Single Agent 解决的 → 不上 Multi-Agent
知识不够用的 → 先加 Skills,不加 Agent
单 Agent 成功率 > 45% 后 → 加 Agent 的收益边际递减

4.9 组织级关键发现

  • 编码快了但交付周期没降------瓶颈已从代码转移到流程(审批/环境占 50-80%)
  • 文档与编码的精力分配比从 1:3 变为 3:1------设计文档变成最重要的投入
  • AI 千行代码缺陷率、AI 代码生存率成为新的质量度量指标

五、团队现状对比分析

5.1 团队方案概述

团队构建了 AI Software Factory------一个基于 CrewAI 的 7 步自闭环流水线,包含需求评估 → 编码 → 验收 → 自修复 → 经验沉淀的完整链路,配备 7 个专业 Agent 角色。

5.2 逐要素对比

要素 1:上下文工程
对比项 行业最佳实践 团队现状 评价
规范文件 AGENTS.md < 100 行做索引 SKILL.md 定义 Agent 行为(各 Agent 独立) 符合:每个 Agent 有独立 SKILL.md,职责清晰
分层加载 常驻短 + Skills 按需 + 运行时注入 SKILL.md + references/ + knowledge/ 分层 符合:遵循 Anthropic Agent Skills 渐进式披露标准
上下文压缩 三层渐进式压缩 无明确压缩机制 待补充:长任务可能遇到上下文退化
项目级 CLAUDE.md 四层分离(全局/项目/个人/文件类型) 未使用 CLAUDE.md 体系 可优化:目标项目可增加 CLAUDE.md 沉淀通用规范
要素 2:约束编码化
对比项 行业最佳实践 团队现状 评价
架构边界检查 lint-deps 脚本自动拦截 code-executor 的"不可跳步约束"+ 编码拓扑排序 部分符合:有流程约束,但非 linter 机械执行
构建验证 每 3-5 个任务增量编译 编码每 3-5 个任务 mvn compile 完全符合
门控系统 事前预防 + 分级门控 六维评估硬门控 + 领域软门控 + 短路门禁 超越:门控体系比行业实践更完整
操作预检 verify_action.py 事前验证 无显式事前验证 可补充:可在编码前增加操作合法性预检
要素 3:验证循环
对比项 行业最佳实践 团队现状 评价
反馈闭环 验证失败 → 自动修复 → 重新验证 Ralph Loop(最多 3 轮) 完全符合
多维度验收 构建 → 静态分析 → 单测 → 集成 → 功能 Inspector 9 维质检 + Verifier 5 层验证 超越:9 维 + 5 层比行业通用方案更全面
标准化评测 metric.txt + detail.txt 双输出 acceptance-report.json + .md 双格式 完全符合
阶梯式验证 小样本 → 中样本 → 全量 短路门禁(3+ blocking 跳过后续) 变体实现:用短路代替阶梯,思路一致
要素 4:记忆系统
对比项 行业最佳实践 团队现状 评价
经验沉淀 JSONL + 向量检索 + KM 同步 ExperienceCollector + KM Sync 完全符合
经验复用 混合检索注入上下文 本地关键词 + KM 语义检索混合 完全符合
分层记忆 L1-L5 五层 本地 JSONL + 远程 KM 两层 可增强:缺少即时学习层(.learnings/)和每日反思机制
反思循环 每日反思 cron + promote 机制 无自动反思 待补充:可增加自动反思整合机制
要素 5:可观测与安全
对比项 行业最佳实践 团队现状 评价
事件追踪 全链路 tool_start/end SSE Dashboard + events.jsonl 完全符合
实时监控 Agent 工作可见可追踪 SSE 实时推送 + Agent 思考过程展示 超越:Dashboard 可视化超出行业一般水平
错误处理 14 种错误分类 + 自动恢复 PipelineHaltedException + 降级策略 部分符合:有降级但错误分类不够细
沙箱隔离 OS 级沙箱 + 权限引擎 Git Worktree 隔离 部分符合:有工作区隔离,缺 OS 级沙箱

5.3 综合评分

要素 得分 说明
上下文工程 7/10 Skills 分层好,缺 CLAUDE.md 体系和上下文压缩
约束编码化 8/10 门控体系优秀,可补充 linter 级机械约束
验证循环 9/10 Ralph Loop + 9 维 + 5 层验证,行业领先
记忆系统 7/10 经验沉淀完整,缺即时学习和自动反思
可观测与安全 8/10 Dashboard 优秀,可增强错误分类和沙箱
综合 8/10 整体处于行业前列,在验证循环和门控方面领先

5.4 改进建议(按优先级)

P0:快速见效(1 周内)
  1. 为目标项目增加 CLAUDE.md

    • 在目标项目根目录创建 CLAUDE.md,沉淀构建命令、分支策略、架构约束
    • 让日常 AI Coding(不走工厂流水线时)也能受益于规范约束
  2. 增加 .learnings/ 即时学习

    • 在 Agent 执行过程中即时记录错误和收获
    • 为后续反思机制做数据准备
P1:系统增强(1 个月内)
  1. 增加自动反思机制

    • 每日 cron 整合 .learnings/ 到长期经验
    • 验证 ≥ 3 次的 pattern 自动 promote
  2. 增加 lint 级架构约束

    • 为目标项目编写 lint-deps 脚本,将"编码拓扑排序"从 SKILL.md 文字约束变为机械执行
    • linter 报错信息设计为教学性质
P2:长期演进
  1. 上下文压缩机制

    • 长任务中监控上下文使用比例,超 50% 时自动压缩
    • 保留压缩优先级:架构决策 > 已修改文件 > 验证状态
  2. Harness 自进化飞轮

    • Agent 执行 → 验证抓问题 → Critic 分析模式 → Refiner 更新规则 → 下一个 Agent 受益
    • 成功轨迹编译为确定性脚本

六、团队方案的独特优势

值得强调的是,团队方案在某些方面超越了行业通用实践

优势 说明
全链路自动化 从 PRD → 代码 → 验收的端到端自动化,行业多数只做编码环节
六维需求评估 在编码之前评估 PRD 质量,有效避免"垃圾进垃圾出"
编译驱动修复 Ralph-fix-agent 先获取完整错误列表再批量修复,比"修一个编译一次"高效
多后端适配 qodercli/opencode/cursor/claude 四后端统一抽象,不绑定单一工具
Agent Skills 标准兼容 SKILL.md 遵循 Anthropic 开放标准,可跨工具复用
SSE Dashboard 实时可视化 Agent 思考过程,超出行业一般可观测水平

相关推荐
Ajie'Blog2 小时前
AI 周报 | Claude Opus 4.8、Copilot Agent 和 Codex 工作流加速
前端·人工智能·gpt·ai·copilot·ai编程
小时前端2 小时前
如何实现AI驱动开发代码采纳率达到100%?
ai编程·领域驱动设计·cursor
lulu12165440783 小时前
大模型API聚合平台技术架构深度对比:六大平台协议转换、路由调度与安全治理全解析 - 微元算力(weytoken)
java·人工智能·安全·架构·ai编程
组合缺一3 小时前
SolonCode(编码智能体)支持鸿蒙 PC
java·华为·ai·ai编程·harmonyos·solon·soloncode
得物技术3 小时前
让 Claude Code 拥有自我进化和记忆系统|得物技术
程序员·ai编程·claude
DO_Community3 小时前
Mythos级最强 AI 模型 Claude Fable 5 现已上线 DigitalOcean无服务器推理
人工智能·serverless·agent·ai编程·claude
木白CPP4 小时前
Claude Code 自用高效插件
ai·ai编程
沉默王二4 小时前
老板:“你是怎么使用 AI 的,真能做到不手写代码?为什么 Codex 在我手里感觉是个智障。。”我:“这样,然后再这样。。”老板直接跪了。
人工智能·agent·ai编程
peterfei4 小时前
我把 12 个经典方法论做成了 AI Skill,现在你一句话就能激活一套思维框架
ai编程