Harness Engineering 01|从 Prompt Engineering 到 Harness Engineering

Harness Engineering 01|从 Prompt Engineering 到 Harness Engineering

activity-dev-harness 项目的 Prompt 调优阶段,团队在 system prompt 上反复打磨了三周:角色定义、输出约束、few-shot 示例、CoT 引导。每改一版,跑几个 case 看起来都有进步。

第三周末拉全量 35 个 case 回归,通过率 45%,波动范围 30%-65%。也就是说,同一份 Prompt,今天跑 65% 明天跑 30%。

后来真正让通过率稳定到 78%(波动 72%-85%)的,不是某一版"更好的 Prompt"。而是一系列跟 Prompt 文案完全无关的改动:固定上下文拼装顺序、限定工具集从 12 砍到 5、给 Reviewer 加独立评测脚本、每轮 findings 累积管理。

这让我意识到一件事:当 AI 从"回答问题"变成"执行任务",优化对象就从"表达"变成了"系统"。这个系统层面的工程方法,就是 Harness Engineering。


三层演进:Prompt → Context → Harness

复制代码
┌─────────────────────────────────────────────────────────────────────────┐
│                     AI 工程方法的三层演进                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  Layer 1: Prompt Engineering                                            │
│  ┌─────────────────────────────────────────────────────────────┐        │
│  │ 关注点:怎么跟模型说话                                       │        │
│  │ 手段:角色设定、输出约束、CoT、few-shot                      │        │
│  │ 天花板:表达再精确,也管不住执行过程                          │        │
│  └─────────────────────────────────────────────────────────────┘        │
│       │ 发现"光说不够,还得管模型看到什么"                               │
│       ▼                                                                 │
│  Layer 2: Context Engineering                                           │
│  ┌─────────────────────────────────────────────────────────────┐        │
│  │ 关注点:模型看到什么                                         │        │
│  │ 手段:RAG 检索、上下文拼装、记忆管理、token 预算分配          │        │
│  │ 天花板:输入控好了,执行链路、权限、验证依然没人管             │        │
│  └─────────────────────────────────────────────────────────────┘        │
│       │ 发现"看到的对了,但做的过程不可控"                               │
│       ▼                                                                 │
│  Layer 3: Harness Engineering                                           │
│  ┌─────────────────────────────────────────────────────────────┐        │
│  │ 关注点:这套系统怎么跑、怎么控、怎么测                       │        │
│  │ 手段:环境设计、权限分层、工具约束、评测回归、轨迹追溯、       │        │
│  │      人工接管、版本治理                                      │        │
│  │ 目标:把不确定的模型能力放进可控制、可验证的执行系统           │        │
│  └─────────────────────────────────────────────────────────────┘        │
│                                                                         │
│  越往下走,优化对象越不像"调模型",越像"做系统工程"                       │
└─────────────────────────────────────────────────────────────────────────┘

三层不是替代关系,是包含关系。Harness 层依然需要好的 Prompt 和好的 Context,但它补上了前两层完全覆盖不了的东西:执行过程的可控性和结果的可验证性。


Agent 不是模型,是被 Harness 的系统

很多团队默认"Agent = 更强的模型",然后习惯性地把所有问题归因到模型能力。activity-dev-harness 的数据打破了这个假设:

复制代码
线上问题归因统计(累计 4 个项目,67 次故障):

归因类别                 占比      典型案例
──────────────          ──────    ──────────────────────────────────
上下文构造问题           28%      拼装顺序错误导致空壳代码
知识供应链问题           22%      旧版规则未退场,新版未入索引
工具/环境问题            19%      pytest 超时无重试,dry-run 脚本路径硬编码
评测/反馈缺失            15%      改了 Prompt 但没跑回归,退化三天后才发现
版本治理问题             9%       模型+Prompt+规则同时变更,无法归因
模型能力本身             7%       真正需要更强模型才能解决的
──────────────────────────────────────────────────────────────────

93% 的问题出在模型周围的系统层。 这意味着:把 Agent 当模型调,90% 的时间花在错误的地方。

Agent 的正确理解方式:模型是决策核心,但决策核心外面必须有一整套执行系统------环境告诉它能做什么,约束限制它不能做什么,反馈让它知道做得对不对。这套系统就是 Harness。


最小闭环:意图、环境、反馈

所有 Harness 工程实践,最终都可以映射到三个元素:

复制代码
                    ┌─────────────────────────────┐
                    │         意 图 Intent         │
                    │  任务目标 / 成功标准 /        │
                    │  失败条件 / 输出边界          │
                    └──────────────┬──────────────┘
                                   │ 定义
                                   ▼
                    ┌──────────────────────────────┐
                    │       Agent 决策与执行         │
                    └───────┬──────────────┬───────┘
                            │              │
                   提供资源+约束        产生信号
                            │              │
              ┌─────────────┴──┐    ┌──────┴──────────────┐
              │  环境            │    │  反馈                │
              │  Environment    │    │  Feedback            │
              │                 │    │                      │
              │  仓库结构        │    │  工具返回状态         │
              │  工具集+权限     │    │  测试 PASS/FAIL      │
              │  检索知识源      │    │  评测分数变化         │
              │  可编辑范围      │    │  轨迹记录             │
              │  运行状态        │    │  人工审核结论         │
              └────────────────┘    └─────────────────────┘
                            │              │
                            └──────┬───────┘
                                   │ 纠偏
                                   ▼
                          闭环:做完能验证、
                          验证能纠偏、纠偏能积累

这三个元素不是并列概念,是闭环关系。缺任何一个,系统都会退化成不同的失败模式:

复制代码
缺失的元素      系统退化模式                      真实表现
──────────      ────────────────────              ──────────────────────────
缺意图          目标漂移                          Agent 越做越偏,输出看似合理
                                                  但离验收标准越来越远

缺环境          能力幻觉                          模型"会"但做不到------找不到文件、
                                                  调不对工具、改了不该改的目录

缺反馈          黑箱运行                          看起来在跑,但没人知道对不对,
                                                  退化三天后偶然发现

错误示范 vs 正确示范:同一个 Bug 修复任务

复制代码
❌ 只有 Prompt,没有 Harness

  任务:"修复 calculateDamage 函数的暴击伤害计算错误"
  
  Prompt 里写了:
    - 请先分析问题再修改
    - 尽量少改文件
    - 改完运行测试
    
  实际发生了什么:
    1. Agent 改了 calculateDamage ✓
    2. 顺手重构了 calculateDefense(没人要求)
    3. 测试?没找到测试入口,直接说"已修复"
    4. 引入了一个新依赖(Prompt 没说不能引入)
    
  结果:通过率在"能用"和"完全不能用"之间随机波动

✅ Prompt + Harness

  同样的 Prompt,但加了 Harness:
  
  意图层:
    ┌──────────────────────────────────────────────┐
    │ 目标:修复 calculateDamage 暴击倍率            │
    │ 成功标准:test_damage.py 全部 PASS              │
    │ 边界:只允许改 combat/ 目录                     │
    │ 约束:不允许新增依赖                            │
    └──────────────────────────────────────────────┘
  
  环境层:
    ┌──────────────────────────────────────────────┐
    │ 可编辑范围:combat/*.lua                       │
    │ 工具集:file_read, file_write, pytest, grep    │
    │ 测试入口:pytest tests/test_damage.py           │
    └──────────────────────────────────────────────┘
  
  反馈层:
    ┌──────────────────────────────────────────────┐
    │ 自动验证:修改后强制跑 pytest                   │
    │ diff 检查:变更文件不在 combat/ 内 → 自动拒绝   │
    │ 回归:跑完后对比 gold case 通过率是否下降         │
    └──────────────────────────────────────────────┘
  
  结果:通过率 82%,波动范围 ±5%

区别不是 Prompt 写得好不好,而是系统有没有兜底。


四个项目的 Harness 需求热力图

不同系统需要的 Harness 完全不同。理解这张图,才能避免"所有项目照搬同一套 Harness":

复制代码
Harness 维度         activity-dev    AIReview    配置表风险    Crashsight
                      harness                    评估
─────────────        ───────────    ─────────    ─────────    ──────────
意图结构化            ████           ███          ██           ███
仓库可读性(Repo)      ████           ██           █            ██
工具权限分层          ████           ███          ██           ███
评测回归(Eval)        ████           ████         ████         ████
轨迹追溯(Trace)       ████           ███          ██           ████
检索验证(RAG)         ██             ████         ████         ████
安全与边界(Safety)    ████           ███          ███          ███
人工接管(HITL)        ███            ██           ████         ██

████ = 核心瓶颈   ███ = 重要   ██ = 有但不是主要矛盾   █ = 几乎不涉及

activity-dev-harness 的核心挑战在多 Agent 编排和仓库可读性;AIReview 的核心挑战在检索精度;配置表的核心挑战在批处理成本和人工接管;Crashsight 的核心挑战在历史数据质量和轨迹追溯。

没有万能 Harness,只有匹配场景的 Harness 组合。


三元框架映射:后续每篇在补哪一环

复制代码
                        意图          环境          反馈
                        ────          ────          ────
02 Repo Harness                       ████
   让仓库对 Agent 可读                (可读性/可导航)

03 Eval & Trace                                     ████
   验证和追溯                                       (可验证/可观测)

04 Tool & RAG                         ████
   能力可靠性工程                     (动作可靠/知识有效)

05 Safety & HITL        ████          ████          ████
   边界、接管与回滚     (风险边界)     (权限约束)    (治理反馈)

06 Harness Platform     ████          ████          ████
   平台化沉淀          (全局治理)     (环境标准化)   (反馈体系化)

Safety & HITL 覆盖三元框架的全部维度,这也是为什么它在 Harness Engineering 中最独特------手记系列完全没有覆盖这块。


与手记系列的分工

复制代码
AI 工程化手记(7 篇)            Harness Engineering(6 篇)
─────────────────────           ──────────────────────────────
基建视角                         方法论视角
拆每一层是什么、怎么做            拆这些层怎么组成可控系统

手记 01: AI 工程全景              Harness 01: 三层演进 + 三元框架
手记 02: 推理服务                 Harness 02: Repo Harness(独有)
手记 03: 评测与观测               Harness 03: Eval & Trace 的 Harness 组织方式
手记 04: RAG                     Harness 04: 工具+检索的可靠性工程
手记 05: 上下文工程               Harness 05: Safety & HITL(独有)
手记 06: Tool Use & Agent         Harness 06: 平台化沉淀的 Harness 视角
手记 07: 版本治理

手记回答"每层长什么样"            Harness 回答"这些层怎么围成闭环"

Harness Engineering 的核心判断:Prompt Engineering 管表达,Context Engineering 管输入,Harness Engineering 管系统------环境、约束和反馈回路才是 AI 从"能用"到"可交付"的决定性因素。

相关推荐
干洋芋果果18 小时前
AI念咒_浏览器测试自动化
prompt
qcx231 天前
【解构】DeepSeek V4 发布:技术报告深度解读 + 横向对比六大开源模型,我们的判断是……
人工智能·chatgpt·prompt
蓝色的音乐1 天前
GPT Image 2 提示词怎么写?分享一个 400+ 案例 Prompt Gallery
gpt·prompt
迦南的迦 亚索的索1 天前
AI_05_基于Prompt工程的金融行业项目
人工智能·金融·prompt
2501_940041742 天前
AI创建小游戏指令词
人工智能·游戏·prompt
2501_940041742 天前
投喂:AI生成各类游戏提示词
人工智能·游戏·prompt
renhongxia12 天前
计算机视觉实战:图像去噪模型训练与应用
开发语言·人工智能·机器学习·计算机视觉·prompt
IT届小白2 天前
无代码开发实战:用AI+Prompt工程从0到1构建排班记录App
人工智能·prompt
做个文艺程序员2 天前
用 Codex 写运维脚本(二)—— Prompt 工程:如何精准描述你的脚本需求
运维·prompt