
2025年以来,“Vibe Coding”风靡一时——开发者用自然语言描述需求,AI直接生成代码。这种“随性编程”确实极大提升了原型开发速度,但当项目规模膨胀到万行级别时,问题开始集中爆发:
核心矛盾在于:大模型本质是概率驱动的非确定性引擎,而软件工程要求绝对的确定性。如何弥合这一鸿沟?
AI工程化经历了清晰的演进路径:
阶段 | 时间 | 核心目标 | 局限 |
|---|---|---|---|
Prompt Engineering | 2022-2024 | 优化单次推理质量 | 缺乏系统性和可复现性 |
Context Engineering | 2025 | 为每次决策构建动态上下文 | 仍是“点”的优化,缺乏闭环 |
Harness Engineering | 2026+ | 构建完整的反馈控制系统 | 工程化门槛较高 |
Harness Engineering不是简单的技术叠加,而是一套给AI智能体设立边界、搭建运行环境、实现可控自治的系统级工程方法论。它回答了一个核心问题:如何让AI在复杂代码库中像资深工程师一样工作,而非像刚入职的实习生?
SDD(Spec-Driven Development,规范驱动开发) 的核心思想是:将需求文档(Spec)作为AI开发的“唯一事实来源”(Single Source of Truth)。与传统开发不同,SDD中的Spec不只是“文档”,而是可被AI解析、可驱动代码生成、可作为验收标准的结构化规范。
一个标准的SDD流程包含:
需求想法 → 结构化Spec撰写 → Spec Review → AI代码生成 → 自动化验证 → PR合流以全栈功能开发为例,一份完整的SDD通常包含三个核心文档:
proposal.md:需求提案,描述“为什么要做”和“要做什么”spec.md:技术规格,包含组件设计、接口契约、数据结构、修改范围tasks.md:任务拆分,每个task对应可执行的代码变更单元关键在于,这些文档以结构化Markdown编写,AI可直接解析,而非仅供人类阅读的“说明书”。
得物技术团队的实践揭示了一个关键洞察:Harness思维的本质是“给AI一个已有的实现作为参照,让它照着复刻一份,而不是凭空创造”。
对比两种提示词方式:
❌ 不推荐(凭空创造):
“请实现一个结束语管理的CRUD接口。”
✅ 推荐(Harness约束):
“请参照现有‘场景欢迎语’功能(后端接口
/api/v1/feature/list,前端入口FeatureTable/index.tsx:53-58)实现‘结束语’功能。数据结构、分层方式、命名风格都保持一致。新增场景code:SCENARIO_CLOSING。”
两者差距在于约束和上下文的精度。后者给AI提供了明确的“模仿对象”,代码可用率从30%提升到80%以上。
基于企业级实践,Harness Engineering包含七大核心组件:
组件 | 核心职责 | 落地方式 |
|---|---|---|
上下文工程 | 为AI决策构建完整背景 | 知识库注入、会话级缓存、工具链文档 |
角色分工 | 不同Agent承担不同职责 | Planner、Worker、Reviewer角色划分 |
持久化记忆 | 跨会话状态保持 | 结构化日志、决策轨迹存储 |
架构约束 | 限制AI输出范围 | ArchUnit规则、Linter自定义规则 |
结构化执行 | 任务拆解与编排 | 有限状态机、工具链依赖图 |
反馈循环 | 输出验证与自愈 | 单元/集成/端到端三重验证 |
熵管理 | 对抗系统无序化 | 定期审计、知识蒸馏、自动修复 |
实际落地时,通常采用三步走策略:
阶段1:信息层——让AI看懂项目
AGENTS.md、REPO_WIKI.md等项目级知识文档阶段2:约束层——让AI不能犯错
阶段3:自动化层——让AI自我验证
全栈AI开发的关键决策是工作区组织形式。推荐采用多仓同工作区模式:
workspace/
├── service-frontend/ # 前端代码 + 前端SDD
├── service-backend/ # 后端代码 + 后端SDD
├── .cursor/ # IDE配置(Rules、SDD初始化)
└── .claude/ # CLI工具配置将前后端放在同一工作区的价值在于:
经过实战验证的全栈SDD提示词模板:
这是一个前后端全栈开发工作区,需要你设计技术接口方案,同时开发前后端项目。
首先你需要cd到对应前后端应用目录中,创建sdd文件。所以你需要生成两份sdd文档,之后我会启动两个agent分别实现。
前端应用:service-frontend/sdd-propose feature/your-feature-name
前端修改入口参考:@FeatureTable/index.tsx:53-58
后端应用:service-backend/sdd-propose feature/your-feature-name
后端修改入口参考接口:/api/v1/feature/list
需求内容:
[附上需求描述,并提供前后端需求点清单]关键要素拆解:
要素 | 作用 |
|---|---|
cd到对应目录 | 确保SDD文件生成在正确位置 |
生成两份sdd文档 | 明确前后端各一份,防止混在一起 |
之后启动两个agent分别实现 | 暗示并行开发,让AI提前做好接口对齐 |
@文件路径 | 利用Cursor的@引用能力精准指定参考文件 |
工具 | 适用场景 | 关键能力 |
|---|---|---|
Cursor | 快速迭代、全栈开发 | Codebase Indexing、Composer2模式、@文件引用 |
Claude Code | 长链路复杂任务 | 多Agent注册、全局会话记录,但速度较慢 |
Qoder | 国内环境、中文支持 | 与国产模型深度集成 |
OpenSpec + Superpowers | SDD流程编排 | Spec生成、任务分解、自动化执行 |
当项目复杂度超过单Agent能力边界时,需要引入多Agent协作框架:
┌─────────────┐
│ Planner │ ← 需求拆解、Spec生成
└──────┬──────┘
│
┌─────────────┼─────────────┐
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ Frontend │ │ Backend │ │ Reviewer │
│ Worker │ │ Worker │ │ │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
└─────────────┼─────────────┘
│
┌──────▼──────┐
│ QA Agent │ ← 自动化测试、自愈验证
└─────────────┘核心原则:每个Agent有明确职责边界,通过结构化Spec作为通信协议。
为保障AI生成代码质量,需建立多层验证体系:
验证类型 | 触发条件 | 执行频率 | 失败处理 |
|---|---|---|---|
单元验证 | 每次工具调用 | 实时 | 回滚重试 |
集成验证 | 模块完成 | 每次迭代 | 标记问题模块 |
端到端验证 | 完整构建 | 每日/PR | 触发告警,阻塞合流 |
生产级Harness系统需监控以下核心指标:
陷阱 | 表现 | 解决方案 |
|---|---|---|
上下文窗口溢出 | AI“遗忘”早期需求 | 拆分大任务为子任务,采用摘要压缩历史 |
工具调用死循环 | Agent无限循环调用 | 构建调用依赖图,设置最大深度限制 |
代码风格漂移 | 同一功能前后风格不一致 | 强化Harness约束:提供明确的模仿对象 |
接口契约不对齐 | 前端调用字段与后端返回不一致 | 全栈同工作区 + SDD双文档 + OpenAPI契约拦截 |
验证误报率高 | 规则过于严格导致频繁失败 | 分阶段实施,建立白名单机制 |
SDD+Harness的本质,是将AI从“随机文本生成器”转化为“可靠的软件工程师”。它不依赖更强的模型,而是通过工程化手段——规范驱动、上下文约束、自动验证、反馈自愈——让现有模型的能力被精准释放。
未来演进方向包括:
在AI工程化时代,工程师的核心竞争力不再是“手写代码”,而是“设计AI的运行环境”——这份能力,正是Harness Engineer的使命所在。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。