欢迎光临
我们一直在努力

【AI智能体】Harness Engineering 驾驭工程从使用到项目实战详解

目录

一、前言

二、Harness Engineering 介绍

2.1 Harness 基础概念

2.2 AI 工程范式三次跃迁

2.3 Harness 实际价值

2.3.1 Harness 与传统框架的关系

2.3.2 Harness 解决了哪些问题

三、Harness 核心组件

3.1 上下文工程

3.2 Agent 专业 (Agent Specialization)

3.3 持久化记忆

3.4 结构化执行 (Structured Execution)

3.5 架构约束(Architecture Constraints)

3.6 反馈循环(Feedback Loop)–智能体审智能体

3.7 熵管理(Entropy Management)

3.8 Harness 五大原则

3.9 Anthropic:长时间运行Agent 的有效 Harness

3.10 Harness 行业应用落地准则

四、Harness 开发项目实战

4.1 基于Harness 开发springboot 项目

4.1.1 开发前的准备

4.1.2 三阶段说明

4.1.3 生成项目文档

4.1.4 设计文档规范

4.1.5 生成标准工程包结构

4.1.6 生成项目代码

4.1.7 阶段3 :自动化层,Agent 自我验证和修复

4.1.8 可观测性监控接入

4.1.9 增加配置文件

4.2 开源工具落地实施

4.3 SDD 规范驱动开发

4.3.1 什么是规范驱动开发?

4.3.2 合格的规范文档要求

4.3.3 SDD核心理念

4.4.4 SDD与多AI协同

五、写在文末


一、前言

2026年,AI编程的飞速发展带来了编程领域的大变革,借助AI编程,传统单靠人力编码的开发模式得到彻底重塑,一个程序员,借助AI编程,可以大大提升编码的效率和编码质量,甚至是快速进入一门全新的开发领域所需要的编程领域,但快速发展的同时,在众多的实践中也发现了诸多的问题,这些问题背后的核心焦点是,如何在借助AI编程高效完成开发的同时,也能限定AI写出来的代码是符合预期要求的,即在编码的质量上得到保证,基于这个核心痛点,业界注解形成了以Harness Engineering 理念为潮流的驾驭工程设计,本篇将详细介绍下驾驭工程的实践。

二、Harness Engineering 介绍

2.1 Harness 基础概念

AI大模型如今已经能产出100万行级别的代码,摆在我们面前的真正难题,不再是让它写的更聪明,而是如何让它稳定、可靠、不会脱缰的持续工作。

  • 围绕AI智能体约束设计,反馈和控制系统的这一套方法论,正是2026年在工程圈迅速走红的新潮流,Harness Engineering (驾驭工程)。

  • Harness Engineering(驾驭工程)是一种系统级工程实践,它聚焦于围绕 AI智能体搭建约束体

馈机制、流程编排和持续迭代闭环。

Harness engineering 学习指南:https://github.com/deusyu/harness-engineering

Hamness engineering 生态全貌:https://harness-engineering.ai/

2.2 AI 工程范式三次跃迁

要明白驾驭工程为何在这个节点出现,我们得先回头看一看,整个AI工程是怎么一步步走到今天

范式

关注的问题

优化对象

互动方式

提示词工程

如何把话说明白

Prompt的措辞、结构、范例

单轮问答

上下文工程

如何向AI喂料

文档、代码段、历史会话

注入信息 一 生成结果

驾驭工程

如何让Agent 可靠稳定

约束,反馈,控制系统

人类把握方向,Agent 干活

Harness 优化的对象不是模型本身,而是模型所在的运行环境,一句话总结:人类把握方向,智能体执行。

驾驭工程从来不是给AI带上紧箍咒削减其能力,而是给它打造一个最佳的执行环境,让它跑的飞快且不失控。

一个好记的类比:

  • Prompt Engineering:对马喊话的技巧

  • Context Engineering: 给马看的地图

  • Harness Engineering: 给马造一条高速公路,配上护栏、限速牌和加油站

2.3 Harness 实际价值

2.3.1 Harness 与传统框架的关系

Harness 不是要替代SDK、脚手架或者Agent框架,而是在叠加在它们基础之上的一层:

  • 传统框架回答的是怎么搭建出一个AI智能体,而驾驭工程处理的是怎么让这个智能体跑的快,跑得稳。

  • 事实上,模型本身正在把框架80%左右的能力,智能体定义、消息分发、任务生命周期等逐步内化进去,但剩下的20%,比如持久化、可复现重放、成本管控、可观测性、错误自愈等,恰恰是驾驭层存在的重要意义。

2.3.2 Harness 解决了哪些问题

Anthropic 工程师在长期跑Agent实战过程中总结出3种常见的翻车姿势,恰好是驾驭工程需要正面回应的核心问题:

问题1:试图一步到位

Agent习惯在单个会话里把所有事情一次性搞定,结果就是上下文窗口被撑破,留下一堆没文档的半成品,等下一轮会话起来时,只能靠瞎猜上一次做了什么。

问题2:提前宣布胜利

在项目进展到后期,看到已经有部分功能跑起来了,Agent就会环顾一圈宣布任务完成,哪怕还有一大堆功能根本没有动。

问题3:没有验证就标记完成

如果没有明确指令,Agent写完代码就直接打钩,跳过端到端验证,要知道单元测试或者一条curl命令跑通,根本不等于功能真的好用。

除此之外,智能体还有一个值得警惕的特性,它很擅长依葫芦画瓢,代码仓里是什么风格,它就照单全收复刻并放大,包括一些糟糕的写法,换句话说,没有约束的Agent会以惊人的速度堆积技术债。

三、Harness 核心组件

下面介绍一下Harness 体系下的核心组件。

3.1 上下文工程

相当于新人入职手册,好比给新入职员工了一本上手指南,AGENTS.md就是AI智能体接入代码仓库时翻开的第一页。

  • 但是决不能写成一本厚厚的静态说明书,上下文是宝贵的资源,一次性喂的太多会挤掉真正的该承载任务‘代码和文档空间,最后沦为陈年规则的存档地。

  • 更聪明的做法是:留一个小而稳定的入口,再训练Agent学会按当下任务自己去检索,按需拉取更多上下文。

实践建议:三层上下文体系

层级

加载时机

内容示例

上下文占用

Tier 1:会话常驻

每次会话自动加载

AGENTS.md /CLAUDE.md,项目结构概览

最小

Tier 2:按需加载

特定子Agent 或技能被调用时

专业化Agent的上下文、领域知识

中等

Tier3:持久化知识库

Agent主动查询时

研究文档、规格说明、历史会话

按需

3.2 Agent 专业 (Agent Specialization)

核心原则:专注于特定领域、拥有受限工具的Agent优于拥有全部权限的通用Agent。

  • Carlini(Anthropic C编译器项目)将Agent 专业化为编译器核心、去重、性能优化和文档四类角色。

  • Vasilopoulos 部署了19个领域特定 Agent。

  • Huntley 使用子 Agent 来保持主 Agent 上下文的清洁。

专业化不仅是组织性的一-它本身就是上下文管理策略。每个专家因为携带更少的无关信息,所以运行在"Smart Zone'内。

实践中的角色分工:

Agent 角色

职责范围

工具权限

研究Agent

探索代码库、分析实现细节

只读 (Read, Grep, Glob)

规划Agent

将需求分解为结构化任务

只读,无写入权限

执行Agent

实现单个具体任务

限定范围的读写权限

审查Agent

审计完成的工作,标记问题

只读+标记权限

调试 Agent

修复审查发现的问题

限定范围的修复权限

清理Agent

对抗熵积累,清理低质量代码

读写权限

3.3 持久化记忆

核心原则:进度持久化在文件系统上,而非上下文窗口中。每次新Agent 会话从零开始,通过文件系统制品重建上下文。

Anthropic 解决这一问题的方案堪称经典:

  • 初始化 Agent:

    • 首次会话使用专门的prompt,要求模型建立初始环境-init.sh脚本、claude-progress.txt 进度文件和初始 git提交。

  • 编码Agent:

    • 后续每次会话要求模型在做出增量进展的同时,留下结构化更新。

每个编码Agent的典型会话启动流程如下:

  • 运行pwd查看工作目录

  • 读取git log和进度文件,了解最近的工作

  • 读取featurelist文件,选择最高优先级的未完成功能

  • 启动开发服务器,运行基础端到端测试

  • 确认基本功能正常后,开始新功能开发

  • 关键发现:使用JSON格式追踪feature 状态比 Markdown更有效,因为Agent 不太可能不恰当地修改或覆盖结构化数据。

    3.4 结构化执行 (Structured Execution)

  • 核心原则:

  • 将思考与执行分离。研究和规划在受控阶段进行,执行基于验证过的计划,验证通过自动化反馈(测试、Linter、CI)和人类审查完成。

  • 所有团队都施加了刻意的执行序列:

  • 理解一规划一执行一验证。

  • OpenAI使用声明式prompt和反馈回路。轻量的计划用于小变更,复杂工作通过带有进度和决策日志的执行计划完成,并检入仓库。

    • Huntley 将规划模式与构建模式分离。

    • Horthy 的Research-Plan-Implement 工作流围绕上下文管理精心设计。

    • 人工检查点的价值:审查计划远比审查代码快。当规格正确时,实现自然可靠。当规格有误时,可以在500行代码生成之前及时纠正。

    3.5 架构约束(Architecture Constraints)

    OpenAI团队建立了严格的层级依赖模型:

    • Types -> Config -> Repo -> Service -> Runtime ->UI

    • 下层不能反向依赖上层。所有架构规则被编码为自定义Linter规则,违反即CI阻止合并-无论代码是人写的还是AI写的。

    有个关键细节:Linter的错误信息本身也是上下文工程。它不只说你违反了规则X,而是解释为什么这个规则存在、正确做法是什么,这样Agent读到错误后就能自我理解并修正,不需要人类介入。

    3.6 反馈循环(Feedback Loop)–智能体审智能体

    传统开发中,人类工程师负责代码审查(Code Review)。在驾驭工程中,这个工作变成了智能体对智能体的方式:Codex在本地审核自身更改,请求额外审查,循环往复直到通过。

    反馈循环中的钩子可以运行预定义的测试套件,并在失败时带着错误信息循环回到模型,或者提示模型独立评估其代码。如果AI写的测试用例通过了带有Bug的代码,Harness就会判定测试无效,强迫它重新思考测试边界。

    3.7 熵管理(Entropy Management)

    随着时间推移,软件系统会逐渐混乱(熵增),技术债务会积累。OpenAI采用持续小额偿还的策略,而不是等问题严重时集中处理-他们把这个方法形象地称为垃圾回收,并认为技术债务就像高息贷款。

    具体措施:定期运行后台Codex任务扫描偏差、更新质量等级、发起针对性重构PR。此外还有一个专门的Doc-gardeningAgent(文档园丁代理),在后台自动扫描文档与代码之间的不一致,发现过时内容就自动提交PR修复Agent为Agent 维护文档。

    3.8 Harness 五大原则

  • 原则1:

  • 设计环境,而非编写代码。工程师的工作转向为Agent准备高效运行的环境。当Agent卡住时,不是“更加努力”,而是诊断"缺少什么能力”并让Agent自己构建该能力。

  • 原则2:

  • 机械化地执行架构约束。他们为每个领域定义了依赖方向-> Types-> Config-> Repo-> Service-> Runtime-> UI-> 并用自定义Linter和结构测试自动检测违规。文档中记录是不够的,如果不能机械化地强制执行,Agent 就会偏离。

  • 原则3:

  • 将代码仓库作为唯一事实源。写在Slack讨论或Google Docs中的知识对Agent来说等于不存在。所有团队知识都作为版本控制的制品放置在仓库中。

  • 原则4:

  • 将可观测性连接到Agent。他们将Chrome DevTools连接到运行时,使Agent 能够捕获DOM快照和截图。通过赋予查询日志和指标的能力,"将启动时间降至800ms以下"变成了可度量的目标。

  • 原则5:

  • 对抗熵。最初团队每周五花20%的时间手动清理"AI Slop”(低质量生成物)。这后来被自动化为Codex运行的后台任务–清理吞吐量与代码生成吞吐量成正比扩展。

  • 自定义Linter 的巧妙设计:当Agent违反架构约束时,错误消息不仅标记违规-还告诉Agent 如何修复。工具在Agent工作时同时“教会”它。

    3.9 Anthropic:长时间运行Agent 的有效 Harness

    Anthropic工程团队从另一个角度切入–跨上下文窗口的连续性问题–来研究Harness设计

    核心痛点:长时间跑的Agent必须在一个个独立会话里工作,每次新会话启动时对前一次做了什么一无所知。就像一个项目组全是轮班工程师,每个人上岗时对之前的进展一脸懵。

    两阶段解决方案:

    • 初始化 Agent

      • 使用专门的 prompt 建立初始环境,包括init.sh 脚本、claude-progress.txt 进度日志和初始 git 提交。

    • 编码Agent

      • 每次后续会话要求模型做出增量进展,然后留下结构化更新。

    3.10 Harness 行业应用落地准则

    综合 OpenAl、Anthropic、LangChain、Stripe、HashiCorp 等多个独立信息源,业界在以下六个方面已形成明确共识:

    编号

    共识

    核心观点

    1

    瓶颈在基础设施,不在模型智能

    五个独立团队得出相同结论。仅改变Harness工具格式,就能让模型得分从6.7%跳至68.3%

    2

    文档必须是活的反馈循环

    静态文档是坟场,动态文档才有价值。让后台Agent 定期清理过时文档并提交PR

    3

    思考与执行分离

    复杂任务不可能在单个上下文窗口内完成,需要 Orchestrator+Worker 分层架构,状态持久化到外部存储

    4

    上下文不是越多越好

    上下文是稀缺资源。巨大的指令文件会挤掉任务空间,应按需检索、动态注入

    5

    约束必须自动化

    人工 Review 是瓶颈。护栏要编码为Linter、CI、类型系统,让机器来执行而非人

    6

    工程师角色在转变

    从代码的编写者变成环境的建筑师。最大的工程挑战是设计让Agent 可靠工作的控制系统

    四、Harness 开发项目实战

    4.1 基于Harness 开发springboot 项目

    4.1.1 开发前的准备

    需求: 基于 Harness Engineering 从O到1开发一个Java项目

    技术栈:Spring Boot 3.2.x + Java 17 + Maven 3.6.3

    在开始之前,基于 Harness Engineering 的思想,先画清楚路线。Harness Engineering的落地不是"一把梭”,而是渐进式的,如下,针对本次的开发,给出下面3个阶段的规划:

    注意:

    • 不要一步到位。很多人失败就在于想一次性搭完所有基础设施。阶段1已经能带来显著提升,阶段2是质变点,阶段3是锦上添花。

    4.1.2 三阶段说明

    对上述规划的3个阶段的内容分别做详细的说明。

    阶段1:信息层让Agent"看得懂"你的项目

    • AGENTS.md:写地图,不写百科全书

    • OpenAI用"地图模式”,替代超长指令文件。这里给出可以直接拷贝使用的模板。

    反面教材:

    • 问题:挤占上下文窗口、难以维护、Agent很难定位需要的信息。

    #X错误示范:把所有内容塞进一个文件
    我d用 Spring Boot 2.7.18 + Java 1.8 + Maven 3.6.3 + MySQL 5.7…
    类命名使用 PascalCase,方法用 camelCase,常量用 UPPER_SNAKE_CASE…
    ORM 用 MyBatis-Plus,迁移用Flyway,缓存用 Caffeine…
    (后面还有500行)

    正确做法:

    # AGENTS.md

    # 项目简介
    [一句话]这是一个面向中小企业的在线项目管理平台,基于SpringBoot 3.2.x+Java 17+MySQL8.0。

    ## 技术栈基线(不允许擅自升级)
    – JDK:17,不可使用 Java 9+ 语法(record/var/text blocks)
    – Spring Boot:3.2.x
    – Maven:3.6.3,由 enforcer 强制
    – 数据库:MySQL8.0(utf8mb4)
    – 持久化:MyBatis-Plus 3.5.x (基于 MyBatis 3.5) + Flyway (含flyway-mysql 子模块),不引入 JPA

    ## 快速导航
    | 你想做什么 | 去哪里看 |
    |———–|———|
    | 了解系统架构 | docs/architecture/overview.md |
    | 了解模块边界和依赖规则 | docs/architecture/boundaries.md |
    | 了解编码规范 | docs/conventions/README.md |
    | 了解当前迭代任务 | docs/plans/current-sprint.md |
    | 了解 API 规范 | docs/reference/api-spec.yaml |
    | 了解错码 | docs/reference/error-codes.md |
    | 了解测试规范 | docs/conventions/testing.md |

    ## 硬性规则(必须遵守,CI会验证)
    1、依赖方向: domain > config mapper > service > controller
    2、横切关注点(auth/log/telemetry)只能通过 Spring 注入,禁止 ‘new’ 实例化
    3、单文件(.java) ≤300 行;单方法≤50行
    4、禁止 `System.out.println/ e.printStackTrace()`,统一使用 SLF4J `Logger`
    5、禁止裸 RestTemplate/ HttpURLConnection,统一通过 ApiClient 抽象
    6、禁止字段级 @Autowired,必须构造器注入(推荐Lombok @RequiredArgsConstructor2)或者@Resource注解
    7、新增代码必须有对应JUnit5测试,行覆盖率≥80%

    ## 提交规范
    – feat: 新功能
    – fix: 修复
    – refactor: 重构
    – docs: 文档
    – test: 测试

    关键设计原则:

    • AGENTS.md控制在50-100行。超过就说明你在写百科全书了

    • "你想做什么一去哪里看"比" 这是什么”更有效–面向任务而非面向知识

    • 硬性规则单独列出,这些是CI会强制验证的,不是"建议"

    结构化知识库doc目录:

    • 用于存放项目在长期运行、维护和迭代过程中沉淀下来的各种知识文档和文件

    如下是一个参考的doc目录:

    docs/
    ├── architecture/
    │ ├── overview.md
    │ ├── boundaries.md
    │ └── data-flow.md

    ├── conventions/
    │ ├── README.md
    │ ├── naming.md
    │ ├── error-handling.md
    │ ├── testing.md
    │ └── logging.md

    ├── design/
    │ ├── feature-auth.md
    │ ├── feature-search.md
    │ └── feature-billing.md

    ├── plans/
    │ ├── current-sprint.md
    │ └── backlog.md

    └── reference/
    ├── api-spec.yaml
    └── error-codes.md

    4.1.3 生成项目文档

    创建一个项目工程目录,这里以Codex 为例进行说明,在工程目录下创建.codex 目录,然后将上面的ANENTS.md文件放进去

    在Codex 中打开项目目录可以看到规则文件已经加载进来了

    然后让Codex 按照上面的知识库目录,为当前项目生成相应的文档

    经过一段时间响应之后最终按照要求得到了相应的文件目录

    每个文件目录下的文档模板也有了

    为了方便后续文档的自动更新,再给每个文档头部增加下面的信息

    4.1.4 设计文档规范

    在后续Agent执行复杂功能前,先写设计文档。下面是一个规范模板,通过这个模板,可以让AI 每次开发功能之前,先出设计方案:

    # Feature: [功能名称]

    ## Status: 📝 Draft | 📋 Approved | 🚧 In Progress | ✅ Implemented

    ## 目标
    一句话描述这个功能要解决什么问题。

    ## 非目标
    明确列出这次不做什么(防止 Agent 扩大范围)。

    ## 技术方案

    ### 涉及的模块
    – domain/ : 新增 XXX 实体(@TableName)与 DTO
    – mapper/ : 新增 XXXMapper extends BaseMapper<XXX>
    – service/ : 新增 XXXService 业务逻辑
    – controller/ : 新增 /api/xxx 端点

    ### 数据模型变更
    ```sql
    — 如有数据库变更,写在这里(Flyway 迁移脚本路径: src/main/resources/db/migration/V__xxx.sql)

    为什么要这么做?

    Agent拿到一个功能需求后,先填写这个模板(或人工填写),审批通过后再动手写代码。这就是”明

    确意图"的工程化实现。

    4.1.5 生成标准工程包结构

    为了让AI生成的代码是符合我们预期的工程规范要求的,定义下面的标准结构:

    src/main/java/com/example/app/
    ├── domain/ # 领域模型与 DTO(不依赖任何业务包;纯 POJO + MyBatis-Plus Entity)
    │ ├── model/ # MyBatis-Plus Entity(@TableName / @TableId / @TableField)/ Value
    │ └── dto/ # Request/Response/Command/Query(Java 17 用 Lombok @Value 模拟 record)
    ├── config/ # Spring 配置类、@ConfigurationProperties、@MapperScan、MybatisPlusInterceptor
    ├── mapper/ # MyBatis-Plus Mapper 接口(extends BaseMapper<T>; 只依赖 domain、config)
    ├── service/ # 业务逻辑(依赖 domain、config、mapper)
    ├── controller/ # REST Controller、@ControllerAdvice 全局异常处理
    └── infrastructure/ # 横切关注点:ApiClient、日志、指标、安全

    在当前的会话窗口中,让Codex 基于上面生成的规范文件,结合本次的工程规范要求,生成项目结构

    4.1.6 生成项目代码

    基于上面的项目模版,以及相关的规范文档,开始生成代码,给出下面的提示词

    基于上面的工程目录结构,开始生成代码,第一版增加员工管理模块的功能,包括:员工的增删改查,参考当前的项目规范文档去做,生成完毕后,注意跑一下单元测试,pom文件中目前还没有引入依赖,整体的技术栈在AGENTS.md中有说明

    通过输出日志可以看到,Codex 按照规范要求文档以及本次的说明,先导入依赖,然后写代码,最后做单元测试用例编写和验证

    4.1.7 阶段3 :自动化层,Agent 自我验证和修复

    当项目持续往前推进过程中,随着时间的推移,承载的业务越来越多,文档也越来越多,有一些垃圾代码也会越来越多,在实际的项目中,需要定期对项目代码进行review ,对项目相关的文档进行定期更新维护,这个是一项非常大的工作量,现在有了AI之后,可以专门开启一个自动化任务Agent 来处理这件事,参考下面的编排提示词:

    • 在Codex 中,做自动化任务编排很容易,只需要把下面的规则通过对话框输入,并加上一句:帮我每周3自动执行一次,并且输出报告,Codex 即可做成一个自动化任务定时执行

    # 任务:代码库卫生清理

    请执行以下检查,对每个发现的问题生成独立的修复 PR:

    ## 检查清单
    1. **超长文件**:找出 src/main/java/ 下超过 300 行的 .java 文件,拆分为更小的类
    2. **缺失测试**:找出 src/main/java/ 下没有对应 *Test.java 的类,补充基础测试
    3. **未使用的 import**:清理所有未使用的 import 语句
    4. **TODO/FIXME**:列出所有 TODO 和 FIXME,超过 30 天未处理则生成清理 PR
    5. **重复代码**:找出高度相似的代码段(>10行),提取为共享工具类(infrastructure/)
    6. **过时文档**:检查 docs/design/ 中状态为 Draft 但已超过 30 天的文档
    7. **Checkstyle/SpotBugs 历史告警**:清理 mvn verify 中累积的非阻塞告警

    ## 约束
    – 每个修复作为独立 PR,不要混在一起
    – 每个 PR 修改后必须确保 `mvn -B clean verify` 通过
    – PR 标题格式:`chore(cleanup): [具体描述]`
    – 不允许使用 Java 9+ 语法(record/var/text blocks),保持 JDK 1.8 兼容
    – 不允许升级 Spring Boot 主版本(保持 2.7.x)
    – 如果不确定某个修改是否安全,跳过并在 PR 中标注原因

    4.1.8 可观测性监控接入

    有过线上项目运维经历的同学应该知道,为了有效监控服务发布在线上环境之后,服务的各项运行指标,是否监控运行,通常会将服务对接第三方监控平台,比如微服务领域经常对接的 prometheus + grafana ,下面是一个本地服务接入的容器服务编排文件

    version: '3.8'

    services:
    loki:
    image: grafana/loki:2.9.0
    ports: ["3100:3100"]

    promtail:
    image: grafana/promtail:2.9.0
    volumes:
    – ./logs:/var/log/app
    – ./promtail-config.yml:/etc/promtail/config.yml

    prometheus:
    image: prom/prometheus:latest
    ports: ["9090:9090"]
    volumes:
    – ./prometheus.yml:/etc/prometheus/prometheus.yml

    grafana:
    image: grafana/grafana:latest
    ports: ["3001:3000"]
    depends_on: [loki, prometheus]

    Spring Boot 项目中需开 Actuator + Micrometer Prometheus (已包含 actuator starter 中) :

    # application.yml
    management:
    endpoints:
    web:
    exposure:
    include: health,info,metrics,prometheus
    metrics:
    tags:
    application: ${spring.application.name}

    4.1.9 增加配置文件

    在初始化的项目中还没有配置文件,这些项目的配置信息,可以手动添加,也可以让AI基于生成的项目自己生成

    总结:

    Harness Engineering 的核心不是搭建一套复杂的基础设施,而是一个简单的闭环,约束 ->告知 -> 验证 -> 纠正,从AGENTS.md和一条ArchUnit 规则开始,比什么都不做强一百倍。

    4.2 开源工具落地实施

    在使用Harness 推进项目落地过程中,会涉及到使用各种开源工具的协同配合一起完成,以上述的springboot项目为例,在项目开发过程中会涉及到各种技术组件,比如JDK,maven,单元测试组件 junit ,可观测性组件Prometheus 等,这里就涉及到一个工具组合额选择和落地实践,下面这个全景图给出了一个参考:

    ┌───────────────────────────────────────────────────────────────┐
    │ 你的项目代码仓库(Spring Boot 2.7 / JDK8) │
    └───────────────────────────────┬───────────────────────────────┘

    ┌───────────────────────┼───────────────────────┐
    │ │ │
    ┌───────▼────────┐ ┌───────▼────────┐ ┌───────▼────────┐
    │ 阶段1:信息层 │ │ 阶段2:约束层 │ │ 阶段3:自动化层 │
    │ │ │ │ │ │
    │ • AGENTS.md │ │ • ArchUnit │ │ • Git Worktree │
    │ • docs/ 结构 │ │ • Checkstyle 9.3│ │ • Actuator + Loki│
    │ • Aider Repo Map│ │ • SpotBugs/JaCoCo│ │ • Prometheus │
    └───────┬────────┘ │ • maven-enforcer│ └───────┬────────┘
    │ └───────┬────────┘ │
    └───────────────────────┼───────────────────────┘

    ┌──────▼──────┐
    │ Agent 工具 │
    │ (选一个) │
    │ │
    │ Aider │
    │ Cline │
    │ Claude Code │
    │ OpenHands │
    │ Cursor │
    │ Codex │
    └─────────────┘

    Agent 工具对比与选型

    工具

    Stars

    类型

    最适合的场景

    Harness 友好度

    Aider

    30k+

    CLI 结对编程

    个人开发者,终端党

    ⭐⭐⭐⭐⭐

    Cline

    40k+

    VS Code Agent

    小团队,需要 Plan/Act 模式

    ⭐⭐⭐⭐

    Claude Code

    CLI Agent

    深度自主任务(6h+ 连续工作)

    ⭐⭐⭐⭐⭐

    OpenHands

    50k+

    平台

    团队级部署,需要沙箱隔离

    ⭐⭐⭐⭐⭐

    SWE-agent

    15k+

    CLI Agent

    自动修复 GitHub Issue

    ⭐⭐⭐

    Superpowers

    127k

    技能框架

    强制 TDD + 子 Agent 模式

    ⭐⭐⭐⭐⭐

    4.3 SDD 规范驱动开发

    4.3.1 什么是规范驱动开发?

    SDD(Specification Driven Development,规范驱动开发)是一种'先把说明书写清楚,再动手写代码"的开发方法、

    换个生活化的角度理解SDD,可以想象你要盖一栋房子:

    走传统路线(边干边想):

    1、直接抄起砖头开砌

    2、发现哪里不对就拆掉重来

    3、不停返工,时间全耗在反复推倒上

    走SDD路线(规范先行):

    1、先把建筑图纸画详细-也就是spec.md规格文档

    2、图纸里写明:房子尺寸、房间数量、水电走向等所有细节

    3、照图纸施工,由A自动产出代码、测试和文档

    1、和传统开发模式的对照

    • 传统开发: 需求一> 设计一> 程序员于上般代码 一> 测试

    • SDD开发:需求 -> 细致的规范(spec.md) -> AI自动生成 -> 体系化验证

    2、三处根本差异

    • 规范才是唯一的真理来源

    • 代码不过是规范的副产品

    • 质量由验证体系来兜底

    3、SDD的四步工作链路

  • Specify(写规范)

  • 用自然语言把要做的事情讲清楚

  • Plan(定方案)

  • 设计技术路线和整体架构图

  • Tasks(拆任务)

  • 切成一条条具体的待办清单

  • Implement(AI落实)

  • AI 按照规范把代码生成出来

  • 4.3.2 合格的规范文档要求

    一份好的规范要具备如下5个要素:

  • 目标与价值

  • 这件事到底解决什么问题

  • 上下文约束

  • 技术栈是什么?性能要求?依赖关系…

  • 功能性需求

  • 核心行为与关键特性

  • 非功能性需求

  • 安全、性能、可扩展性

  • 验收口径

  • 怎么判断这个事情真的做成了

  • 一句话总结:

    • 先把说明书(规范文档)写细致,再让AI产出代码,最后让质量闸门来把关。

    4.3.3 SDD核心理念

    SDD核心理念如下:

  • 设计走在前面

  • 先用自然语言(中文/英文)把要做什么写清楚

  • 规格文档(spec.md)是唯一的真理来源

  • 一切AI自动生成

  • 代码自动产出、测试自动产出、技术文档自动产出

  • 文档会过期

  • 传统开发里遇到的一个问题,代码改完了,文档常常忘了同步

  • SDD模式:只需要更新spec.md,其余内容自动跟着变

  • 实践中的几点启示:

    • AI编程不能放任AI自由发挥,必须有规范行为约束

    • 一份好的规格文档抵得过上千行代码,把要什么讲清楚远比讨论怎么做更重要

    • 理想与现实需要平衡,SDD理念再美好,也得结合实际情况去执行

    4.4.4 SDD与多AI协同

    目前使用AI编程中要面对的核心问题:

  • 跑得太快容易跑偏,AI生成代码速度飞快,可结果往往对不上需求

  • 频繁返工:单个AI在面对复杂业务时能力捉襟见肘时,错误一抓一大把

  • 成本高,效率低,所有的事情都让最贵的模型去干,资源浪费严重

  • 破局思路:SDD+多AI协同

    1、SDD(规范驱动开发)的四阶段流程,把开发过程划成4步走,就像盖房子需要先画图:

    Specify(写规范):用中文把要做什么讲清楚(需求文档)
    -> Plan (做规划):设计怎么做(技术方案)
    -> Tasks(拆任务):列出每一步(任务清单)
    -> Implement(写代码并校验):让AI按步骤产出代码并完成自我校验

    OpenSpec 工具:规范管理的好帮手

    OpenSpec 是一款命令行工具,专门用来帮你打理整个开发流程,包含3个核心目录:

    specs/ <- 已完成的功能规范(项目说明书)
    changes/ <- 进行中的新功能(施工方案)
    archive/ <- 已归档的历史变更(施工档案)

    这套工具的工作流循环过程:

  • 起草提案(proposal.md),说明这次要变更什么

  • 写出任务清单(task.md)

  • AI 按清单把代码实现出来

  • 完成之后归档到 specs/ ,同步刷新项目规范

  • 多AI协同:让每个模型都干自己擅长的事

    Claude + Codex + Gemini的三模型协同方案,就像在组一支技术团队,充分利用不同模型的特长

    AI 模型

    担当角色

    核心擅长

    类比

    Claude

    项目经理

    读懂复杂业务、协调和调度其他 AI

    既懂需求又会规划的产品经理

    Codex

    资深工程师

    专注代码生成与重构

    技术大牛,代码又快又稳

    Gemini

    文档分析师

    大体量文档分析、多模态处理

    什么资料都看得懂的助理

    将上面的规范文档目录投递给Codex

    打开项目目录,可以看到已经按照要求生成了几个规范文档和目录

    五、写在文末

    本文通过较大的篇幅详细介绍了Harness Engineering (驾驭工程)的使用,并且通过一个实际案例操作演示了如何在实际项目开发中基于Harness Engineering的思想进行规范落地,希望对看到的同学有帮助,本篇到此结束,感谢观看。

    赞(0)
    未经允许不得转载:171主机测评 » 【AI智能体】Harness Engineering 驾驭工程从使用到项目实战详解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址