AI 编程铁三角:03 Harness Engineering 从入门到实战
一个令人沮丧的AI编程协作场景
设想一下这个场景:你让 AI 助手协助你重构一个模块。
✓ 功能实现了✗ 代码风格与项目规范不一致(它用了 var,你用的是 const)✗ 目录结构被它擅自修改(新增了 utils/helper.js)✗ 测试文件被它删除了(「我觉得没必要保留」)✗ 留下了 10 个 TODO 注释(「后续再优化吧」)
你问 AI:为什么要这样改?
AI 回答:我觉得这样更好...
核心问题:AI 虽然有强大的能力,但缺乏明确的边界约束。
这正是 Harness Engineering 要解决的核心痛点。
什么是 Harness Engineering
一句话概括:核心理念
Agent = Model + HarnessModel(模型)= 马,提供核心能力Harness(约束)= 缰绳,提供行为边界
你无法改变马的能力(模型是给定的),但你可以精心设计缰绳——Harness 才是你真正能够掌控的部分。
反直觉的核心洞察
很多人误以为:约束会限制 AI 的发挥空间。 事实恰恰相反:精良的约束反而能激发 AI 的更高效率。 来看一个对比:无约束场景:AI 陷入猜测:这个数据结构该用 Map 还是 Object?自己决定吧这个函数要不要加缓存?先加上再说这个模块放哪个目录?随便找一个有约束场景:AI 清晰执行:CLAUDE.md 明确要求「使用 Object 而非 Map」「所有 I/O 操作都必须加缓存」「工具函数统一放在 src/utils/」→ 无需猜测,直接执行,效率大幅提升
两个场景的差异一目了然——AI 不需要做决策的地方,约束本身就是最好的决策。
三大支柱
Harness Engineering 由三大核心支柱构成:支柱一:Context Engineering(上下文工程)
核心问题:AI 无法感知的信息,对它而言就等于不存在。| AI 的上下文窗口 |
|---|
| LAUDE.md← 项目规范约定 CLAUDE.md← 项目规范约定 AGENTS.md← Agent 角色定义 代码注释← 逻辑说明 设计文档← 架构决策记录 Git 状态← 项目当前上下文 |
| 上下文类型 | 作用 | 管理方式 |
|---|---|---|
| 静态上下文 | 项目约定、编码规范 | CLAUDE.md / AGENTS.md |
| 动态上下文 | 运行状态、Git 信息 | 自动注入或 Hook 抓取 |
| 记忆上下文 | 历史决策、长期积累知识 | MEMORY.md / 日志系统 |
支柱二:Architectural Constraints(架构约束)
核心问题:如何为 AI 划定清晰的边界?| 约束项 | 目录结构 | src/api/牛r> |
|---|---|---|
| 命名规范 | 变量统一 camelCase | |
| 代码风格 | TypeScript strict 模式||
| 单个模块不超过 00 行 | ||
| 依赖规则 | api 不允许直接调用 db 层 |
支柱三:Entropy Management(熵管理)
核心问题:系统如何长期保持健康状态?| 实践项 | 定期清理 | 删除死代码与冗余逻辑 |
|---|---|---|
| 约束验证 | 检查代码仍符合 CLAUDE.md | |
| 性能监控 | 关注关键指标变化 | |
| 文档同步 | 保持代码与文档一致 |
| 评估指标 | 无 Harness | 有 Harness |
|---|---|---|
| 代码风格一致性 | 60% | 95% |
| 测试覆盖率 | 65% | 88% |
| 文档同步率 | 50% | 90% |
| 返工率 | 30% | 8% |
Level 2 Harness:动态约束与自动化
Level 2 在 Level 1 的基础上增加了 动态上下文 和 更多 Hook,让 AI 能够感知项目的实时状态。增加动态上下文
动态上下文是指那些随时间变化的项目状态信息,AI 需要了解这些实时信息才能做出更准确的决策。静态上下文(不变或很少变化):├── CLAUDE.md← 项目约定、架构设计├── 代码规范← 命名规则、代码风格└── 目录结构← 文件组织方式动态上下文(经常变化):├── Git 分支← 当前所在分支├── 修改的文件← 哪些文件被改动过├── 测试状态← 测试是否全部通过├── 依赖版本← 已安装的包版本└── 运行环境← Python/Node 版本等
创建脚本自动生成项目当前状态信息,让 AI 了解实时环境:
#!/bin/bash# scripts/generate_context.shecho "# 项目动态上下文" > CONTEXT.mdecho "" >> CONTEXT.mdecho "生成时间: $(date)" >> CONTEXT.mdecho "" >> CONTEXT.md# Git 信息echo "## Git 状态" >> CONTEXT.mdecho "- 当前分支: $(git branch --show-current)" >> CONTEXT.mdecho "- 最近提交: $(git log -1 --oneline 2>/dev/null || echo '无')" >> CONTEXT.mdecho "- 未提交的修改:" >> CONTEXT.mdgit status --short 2>/dev/null | sed 's/^/- /' >> CONTEXT.mdecho "" >> CONTEXT.md# 测试状态echo "## 测试状态" >> CONTEXT.mdif pytest tests/ -q --tb=no 2>/dev/null; thenecho "- 测试结果: ✅ 全部通过" >> CONTEXT.mdelseecho "- 测试结果: ❌ 存在失败的测试" >> CONTEXT.mdfiecho "" >> CONTEXT.md# Python 环境echo "## 环境信息" >> CONTEXT.mdecho "- Python 版本: $(python --version 2>&1)" >> CONTEXT.mdecho "- 已安装的包:" >> CONTEXT.mdpip list 2>/dev/null | head -10 | sed 's/^/- /' >> CONTEXT.md
在 CLAUDE.md 中添加以下内容:
## 动态上下文在执行任何任务之前,请先运行 `scripts/generate_context.sh` 生成最新的 CONTEXT.md,然后读取它了解项目的当前状态。
这样做的好处:AI 能够感知 Git 分支、修改文件、测试状态等动态信息,从而做出更准确的决策。
增加 Hook 种类
Pre-commit Hook 增强:添加更智能的检查逻辑#!/usr/bin/env sh# 检查是否修改了核心文件(如 hot-trends 的 fetchers 目录)CHANGED=$(git diff --cached --name-only)if echo "$CHANGED" | grep -q "src/fetchers/"; thenecho "⚠️ 检测到数据抓取器被修改,请确认:"echo "1. 是否需要同步更新对应的测试?"echo "2. 是否需要更新 API 文档?"fi# 运行测试npm test# 运行 lintnpm run lint
其他可选的 Hook:
- pre-push: 推送前运行完整的测试套件
- commit-msg: 验证提交信息的格式(如约定式提交)
- post-merge: 合并后自动安装依赖
实际效果:当你在 hot-trends 中修改 src/fetchers/zhihu.py 时,Hook 会自动提醒你检查测试和文档是否需要同步更新。
Level 3 Harness:完整工程化体系
Level 3 是企业级的 Harness 方案,适用于团队协作和大型项目。对于 hot-trends 这样的单人项目,可以根据实际需求选择性采用。1. 多层约束
企业级 Harness 层级结构| 层级 | 说明 |
|---|---|
| L1: 企业规范 | 所有项目共享的基础规范 |
| L2: 团队规范 | 团队内部统一遵守 |
| L3: 项目规范 | 项目特有的约束 |
| L4: 模块规范 | 模块级别的细粒度约束 |
2. 纵深防御
通过多层验证确保代码质量:| 层级 | 说明 |
|---|---|
| 第1层 | CLAUDE.md 静态约束定义 |
| 第2层 | 测试套件验证边界 |
| 第3层 | Pre-commit Hook 自动检查 |
| 第4层 | CI/CD 流水线自动验证 |
| 第5层 | Code Review 最终人工把关 |
3. 熵管理流程
建立定期检查机制,防止系统逐渐走向混乱:# 每周熵管理 Checklist## 代码质量- [ ] 运行 `npm run lint` 检查代码风格一致性- [ ] 运行 `npm test` 检查测试通过率- [ ] 检查是否有新增的 TODO 注释需要处理## 文档同步- [ ] 检查 CLAUDE.md 是否需要更新- [ ] 检查 README 是否已过时- [ ] 检查 CHANGELOG 是否有遗漏## 依赖管理- [ ] 运行 `npm outdated` 检查过期依赖- [ ] 运行 `npm audit` 检查安全漏洞
熵增的典型表现:
- 代码风格不一致(如有的地方用 var,有的用 const)
- 目录结构混乱(如在 src/ 根目录直接堆放文件)
- 测试覆盖率下降(新增代码缺少对应测试)
- 文档过时(README 中的使用说明与实际行为不符)
建议:对于 hot-trends 这样的个人项目,可以每月进行一次熵管理检查。
常见问题
Q1:Harness 会不会限制 AI 的创造力?
答案:完全不会。 Harness 约束的是行为边界,而不是具体方法。约束:使用 TypeScript strict 模式AI 仍然可以自由选择:算法、设计模式、实现细节约束:测试覆盖率 > 80%AI 仍然可以自由决定:测试怎么写、测什么内容约束:代码风格统一AI 仍然可以自由发挥:逻辑实现方式
Q2:CLAUDE.md 写多少内容最合适?
答案:刚好够用就好。内容太少:AI 仍然需要自己猜测内容太多:没人愿意看,变成形式主义刚好适中:覆盖所有核心决策点
建议:
- 项目概述:50-100 字
- 技术栈:列出主要技术
- 目录结构:只写核心目录即可
- 代码规范:5-10 条核心规则
- 质量要求:可量化的具体指标
Q3:和 Superpowers / OpenSpec 的关系?
OpenSpec → 定义「做什么」(需求约束)Superpowers→ 定义「怎么按流程做」(流程约束)Harness→ 定义「如何确保可控」(行为约束)
三者结合 = 完整的 AI 编程工程化体系
我们会在下一篇「铁三角导论」中详细讲解三者的协同关系。
下一步
你已经掌握了 Harness Engineering 的基本概念和实践方法,知道了如何为 AI 套上缰绳。 到此为止,你已经认识了「铁三角」的三个核心工具: 1. Superpowers → 流程约束 ✅ 2. OpenSpec → 需求约束 ✅ 3. Harness Engineering → 行为约束 ✅ 下一篇,我们将深入讲解 铁三角导论:三层架构设计,揭示三者如何协同工作,形成完整的 AI 编程工程化体系。扩展阅读
- Claude Code 官方文档 - CLAUDE.md 最佳实践指南 - Git Hooks 原理与配置相关推荐
补充同频道和同主题内容,方便继续浏览更多相关内容。
同类最新
继续查看同栏目最近更新的文章。
Windows Docker Desktop RabbitMQ生产级部署完整指南
前言 在 Windows 本地开发环境中,直接安装 RabbitMQ 确实颇为周折:需要单独配置 Erlang 运行环境、手动管理环境变量、服务启停全凭手工操作。更令人困扰的是,版本兼容冲突、端口占用、环境不一致等问题层出不穷。笔者见过不少开发者为搭建环境就得耗费整整半天时间。 相比之下,借助 Do
AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践
先分享一个切实感受。过去两年,我们与福建制造企业合作较为频繁,发现一个非常突出的现象:超过80%的企业官网,产品参数仍然存放在PDF或图片中。AI爬虫?根本无法抓取。这些企业技术实力不弱、资质证照齐全、应用案例也丰富,但在AI搜索这一全新战场上,它们几乎处于隐身状态。 一、一个正在发生的行业变化 A
阿里云Token Plan团队版功能价格与省钱购买指南
阿里云百炼近期推出了名为“Token Plan 团队版”的全新服务,这一服务专为企业与开发者量身打造,定位为AI大模型订阅平台。通过引入Credits作为统一计量单位,将文本生成、图像生成等多模态AI能力纳入单一计费体系,同时无缝兼容主流AI编程工具及智能体(Agent)生态系统。其核心亮点包括:全
阿里云物联网.NET Core客户端位置信息上报
阿里云物联网平台的位置服务并非一个完全独立的功能模块。位置信息可包含二维坐标与三维坐标,而位置数据的来源本质上是借助设备属性进行上传。换言之,若要让设备上报位置,您需先将其视为一个普通属性进行处理。 1)添加二维位置数据 操作过程十分简洁。进入数据分析 → 空间数据可视化 → 二维数据,点击添加,将
年阿里云服务器选型配置与网站部署全攻略
2026年,阿里云服务器生态已高度成熟,形成了清晰的轻量应用服务器与ECS云服务器两大产品阵营。无论你是计划搭建个人博客、企业官网,还是运营电商平台、进行应用开发,基本都能找到理想的解决方案。本指南将从服务器选型、配置选择、部署流程到安全运维,系统梳理2026年最实用的操作要点,帮助你少走弯路,让网
