云计算百科
云计算领域专业知识百科平台

AI智能体循环工程-第1章第4节-2026循环工程元年-四层范式演进史Prompt工程Context工程Harness工程Loop工程

封面图片

第4节 四层范式演进史:Prompt工程→Context工程→Harness工程→Loop工程

一句话总结:四代范式不是相互取代,而是层层包裹——你写的每一个循环,内部都跑着Prompt工程、Context工程和Harness工程。看懂这四层,你才知道自己现在站在哪,下一步往哪爬。

本文导航

  • 一、为什么需要"演进史"视角
  • 二、第一代:Prompt Engineering
  • 三、第二代:Context Engineering
  • 四、第三代:Harness Engineering
  • 五、第四代:Loop Engineering
  • 六、四代对照总表与跃迁规律
  • 七、实操:定位你的层级并往上爬
  • 小结
  • 下节预告

一、为什么需要"演进史"视角

2023年,所有人都在谈Prompt Engineering。 2024年底,“Context Engineering”(上下文工程)开始流行。 2025年,“Harness Engineering”(环境/脚手架工程)被反复提及。 2026年6月,"Loop Engineering"一夜爆火。

很多人困惑:这些词是不是同一件事换了三个马甲?营销词?我后台收到过不下二十条这样的私信,最狠的一条说:“每年造个新词,卖课的又要收智商税了。”

我理解这种愤怒——过去三年被新词割过韭菜的人太多了。但这一次真不一样。答案是:不是马甲,是工程对象的四次跃迁。 每一代解决的核心问题不同,工作单元不同,可复用资产不同。你把四代的工作日志摆在一起看,会发现连"一天在干什么"都长得完全不一样。

#mermaid-svg-xLUo3f9Pk9rul2qD{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xLUo3f9Pk9rul2qD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xLUo3f9Pk9rul2qD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xLUo3f9Pk9rul2qD .error-icon{fill:#552222;}#mermaid-svg-xLUo3f9Pk9rul2qD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xLUo3f9Pk9rul2qD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xLUo3f9Pk9rul2qD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xLUo3f9Pk9rul2qD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xLUo3f9Pk9rul2qD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xLUo3f9Pk9rul2qD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xLUo3f9Pk9rul2qD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xLUo3f9Pk9rul2qD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xLUo3f9Pk9rul2qD .marker.cross{stroke:#333333;}#mermaid-svg-xLUo3f9Pk9rul2qD svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xLUo3f9Pk9rul2qD p{margin:0;}#mermaid-svg-xLUo3f9Pk9rul2qD .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-xLUo3f9Pk9rul2qD .cluster-label text{fill:#333;}#mermaid-svg-xLUo3f9Pk9rul2qD .cluster-label span{color:#333;}#mermaid-svg-xLUo3f9Pk9rul2qD .cluster-label span p{background-color:transparent;}#mermaid-svg-xLUo3f9Pk9rul2qD .label text,#mermaid-svg-xLUo3f9Pk9rul2qD span{fill:#333;color:#333;}#mermaid-svg-xLUo3f9Pk9rul2qD .node rect,#mermaid-svg-xLUo3f9Pk9rul2qD .node circle,#mermaid-svg-xLUo3f9Pk9rul2qD .node ellipse,#mermaid-svg-xLUo3f9Pk9rul2qD .node polygon,#mermaid-svg-xLUo3f9Pk9rul2qD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xLUo3f9Pk9rul2qD .rough-node .label text,#mermaid-svg-xLUo3f9Pk9rul2qD .node .label text,#mermaid-svg-xLUo3f9Pk9rul2qD .image-shape .label,#mermaid-svg-xLUo3f9Pk9rul2qD .icon-shape .label{text-anchor:middle;}#mermaid-svg-xLUo3f9Pk9rul2qD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xLUo3f9Pk9rul2qD .rough-node .label,#mermaid-svg-xLUo3f9Pk9rul2qD .node .label,#mermaid-svg-xLUo3f9Pk9rul2qD .image-shape .label,#mermaid-svg-xLUo3f9Pk9rul2qD .icon-shape .label{text-align:center;}#mermaid-svg-xLUo3f9Pk9rul2qD .node.clickable{cursor:pointer;}#mermaid-svg-xLUo3f9Pk9rul2qD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xLUo3f9Pk9rul2qD .arrowheadPath{fill:#333333;}#mermaid-svg-xLUo3f9Pk9rul2qD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xLUo3f9Pk9rul2qD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xLUo3f9Pk9rul2qD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xLUo3f9Pk9rul2qD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xLUo3f9Pk9rul2qD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xLUo3f9Pk9rul2qD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xLUo3f9Pk9rul2qD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xLUo3f9Pk9rul2qD .cluster text{fill:#333;}#mermaid-svg-xLUo3f9Pk9rul2qD .cluster span{color:#333;}#mermaid-svg-xLUo3f9Pk9rul2qD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xLUo3f9Pk9rul2qD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xLUo3f9Pk9rul2qD rect.text{fill:none;stroke-width:0;}#mermaid-svg-xLUo3f9Pk9rul2qD .icon-shape,#mermaid-svg-xLUo3f9Pk9rul2qD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xLUo3f9Pk9rul2qD .icon-shape p,#mermaid-svg-xLUo3f9Pk9rul2qD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xLUo3f9Pk9rul2qD .icon-shape .label rect,#mermaid-svg-xLUo3f9Pk9rul2qD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xLUo3f9Pk9rul2qD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xLUo3f9Pk9rul2qD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xLUo3f9Pk9rul2qD :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

2023Prompt Engineering工程对象:一段文本

2024Context Engineering工程对象:一个上下文窗口

2025Harness Engineering工程对象:一整套环境

2026Loop Engineering工程对象:一个控制系统

我自己的演进史就是这四段的活标本:2023年我攒了400多条提示词模板,自认提示词大师;2024年开始天天跟上下文长度搏斗;2025年折腾MCP服务器和AGENTS.md折腾到半夜;2026年回头看,前三段攒下的东西一个都没浪费——它们全变成了循环的零件。这个"全都没浪费"很关键,后面会反复出现。


二、第一代:Prompt Engineering(提示词工程)

核心问题

如何用一段文字,让模型输出我想要的结果?

工程对象

单次输入的那段文本(prompt)。

典型技术

技术说明我的使用体感
Few-shot 给几个例子让模型模仿 对格式类任务立竿见影
Chain-of-Thought 让模型"一步步想" 数学逻辑类提升明显
Role-play 设定角色身份 玄学成分居多,慎用
输出格式约束 “只输出JSON,不要解释” 配合pydantic校验才是完全体

工作单元

一次对话 = 一条精心雕琢的提示词

局限性

  • 单发上限:无论提示词多完美,一次生成的质量天花板是固定的
  • 无法反馈:模型写完就完了,没有"检查-修正"的过程
  • 脆弱:换个模型、换个版本,提示词效果可能骤降

脆弱这一条我吃过血亏。2024年我给团队维护了一套"咒语级"提示词库,某个模型小版本升级后,三分之一的咒语直接失灵——输出格式跑偏、角色扮演失效。把工程能力建立在措辞上,就像把房子盖在沙子上:模型一换代,地基就塌。

遗留资产

Prompt Engineering 没有死亡。它变成了 Loop Engineering 内部的一个原子步骤——你在循环的每一轮里,仍然需要写好提示词。事实上循环工程对提示词的要求更高了,因为循环里的提示词要能被机器组装、被版本管理、被反复运行,而不是靠你现场的手感。

踩坑提示:别信"提示词工程已死"的论调就放弃积累提示词库。正确的姿势是把提示词从"聊天框里的口癖"升级成"仓库里的文件"——放进 Skills、写进模板、纳入代码评审。手艺变成资产,才不会随模型升级蒸发。


三、第二代:Context Engineering(上下文工程)

核心问题

模型面前的上下文窗口是有限的,如何决定"放什么进去、拿走什么"?

触发事件

2024年底到2025年,几个关键人物的表态让这个词出圈:

  • Tobi Lütke(Shopify CEO):把Context Engineering定义为"为模型组装恰到好处的信息集,让它完成下一步"的艺术
  • Andrej Karpathy 转发背书,指出"人们应该少谈Prompt,多谈Context"

工程对象

整个上下文窗口——不只是当前那条提示词,还包括历史对话、工具返回结果、检索到的文档、系统提示词。

核心心智模型:注意力预算

#mermaid-svg-DKz6uLvGEK12jr64{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DKz6uLvGEK12jr64 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DKz6uLvGEK12jr64 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DKz6uLvGEK12jr64 .error-icon{fill:#552222;}#mermaid-svg-DKz6uLvGEK12jr64 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DKz6uLvGEK12jr64 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DKz6uLvGEK12jr64 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DKz6uLvGEK12jr64 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DKz6uLvGEK12jr64 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DKz6uLvGEK12jr64 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DKz6uLvGEK12jr64 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DKz6uLvGEK12jr64 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DKz6uLvGEK12jr64 .marker.cross{stroke:#333333;}#mermaid-svg-DKz6uLvGEK12jr64 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DKz6uLvGEK12jr64 p{margin:0;}#mermaid-svg-DKz6uLvGEK12jr64 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-DKz6uLvGEK12jr64 .cluster-label text{fill:#333;}#mermaid-svg-DKz6uLvGEK12jr64 .cluster-label span{color:#333;}#mermaid-svg-DKz6uLvGEK12jr64 .cluster-label span p{background-color:transparent;}#mermaid-svg-DKz6uLvGEK12jr64 .label text,#mermaid-svg-DKz6uLvGEK12jr64 span{fill:#333;color:#333;}#mermaid-svg-DKz6uLvGEK12jr64 .node rect,#mermaid-svg-DKz6uLvGEK12jr64 .node circle,#mermaid-svg-DKz6uLvGEK12jr64 .node ellipse,#mermaid-svg-DKz6uLvGEK12jr64 .node polygon,#mermaid-svg-DKz6uLvGEK12jr64 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DKz6uLvGEK12jr64 .rough-node .label text,#mermaid-svg-DKz6uLvGEK12jr64 .node .label text,#mermaid-svg-DKz6uLvGEK12jr64 .image-shape .label,#mermaid-svg-DKz6uLvGEK12jr64 .icon-shape .label{text-anchor:middle;}#mermaid-svg-DKz6uLvGEK12jr64 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DKz6uLvGEK12jr64 .rough-node .label,#mermaid-svg-DKz6uLvGEK12jr64 .node .label,#mermaid-svg-DKz6uLvGEK12jr64 .image-shape .label,#mermaid-svg-DKz6uLvGEK12jr64 .icon-shape .label{text-align:center;}#mermaid-svg-DKz6uLvGEK12jr64 .node.clickable{cursor:pointer;}#mermaid-svg-DKz6uLvGEK12jr64 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DKz6uLvGEK12jr64 .arrowheadPath{fill:#333333;}#mermaid-svg-DKz6uLvGEK12jr64 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DKz6uLvGEK12jr64 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DKz6uLvGEK12jr64 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DKz6uLvGEK12jr64 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DKz6uLvGEK12jr64 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DKz6uLvGEK12jr64 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DKz6uLvGEK12jr64 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DKz6uLvGEK12jr64 .cluster text{fill:#333;}#mermaid-svg-DKz6uLvGEK12jr64 .cluster span{color:#333;}#mermaid-svg-DKz6uLvGEK12jr64 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DKz6uLvGEK12jr64 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DKz6uLvGEK12jr64 rect.text{fill:none;stroke-width:0;}#mermaid-svg-DKz6uLvGEK12jr64 .icon-shape,#mermaid-svg-DKz6uLvGEK12jr64 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DKz6uLvGEK12jr64 .icon-shape p,#mermaid-svg-DKz6uLvGEK12jr64 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DKz6uLvGEK12jr64 .icon-shape .label rect,#mermaid-svg-DKz6uLvGEK12jr64 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DKz6uLvGEK12jr64 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DKz6uLvGEK12jr64 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DKz6uLvGEK12jr64 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

塞得越多,反而越笨

上下文窗口例如 200K tokens

注意力预算

系统提示词

历史对话

工具结果

检索文档

当前任务

Context Rot上下文腐烂

关键洞察:上下文不是免费的RAM。塞满100K token的历史,模型反而会:

  • 忽略中间部分(“lost in the middle”)
  • 被无关信息干扰
  • 推理能力下降

我做过一次很土但很有说服力的实验:同一个Bug修复任务,一份上下文里塞了完整对话历史(约90K token),另一份只保留剪枝后的高信号内容(约12K token)。结果精简版一轮就修对了,全量版跑了五轮还在原地绕。上下文工程的本质不是"塞得多",是"每一token都值得被模型看一眼"。

典型技术

技术说明适用时机
Compaction 历史太长时压缩成摘要 对话超过窗口一半时
Tool-result clearing 清除旧的工具返回结果 工具输出巨大时
JIT检索 按需拉取,而非提前全量装载 代码库大、相关性稀疏时
外部记忆 状态存磁盘,不占上下文 跨会话任务
上下文剪枝 只保留高信号token 任何长任务的每一轮

工作单元

一个任务周期 = 一组上下文管理策略

遗留资产

Context Engineering 同样没有死亡。它是 Loop Engineering 内部的燃料管理系统——循环每一轮都要重新组装上下文。循环跑得越久,这层越值钱:一个跑20轮的循环,如果没有Compaction,第15轮的上下文必然腐烂成一锅粥。

本课程第4章《上下文工程:循环的燃料管理系统》会用8篇深度解剖这一层。


四、第三代:Harness Engineering(环境工程)

核心问题

模型再聪明,如果它看不见文件、跑不了命令、拿不到反馈,它什么都干不了。如何为它搭建"能干活的环境"?

工程对象

模型所处的整个工作环境(harness):

  • 有哪些工具可调用(文件读写、Shell执行、搜索)
  • 有哪些文件可见(代码库、文档、配置)
  • 有哪些规范约束(AGENTS.md、编码约定)
  • 有哪些反馈信号(编译错误、测试结果、lint)

核心比喻

如果说模型是"引擎",那harness就是"整台车"——引擎再好,没有方向盘、轮子、仪表盘也开不动。

#mermaid-svg-u0nxJlzsRFyOiIEI{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-u0nxJlzsRFyOiIEI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-u0nxJlzsRFyOiIEI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-u0nxJlzsRFyOiIEI .error-icon{fill:#552222;}#mermaid-svg-u0nxJlzsRFyOiIEI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-u0nxJlzsRFyOiIEI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-u0nxJlzsRFyOiIEI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-u0nxJlzsRFyOiIEI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-u0nxJlzsRFyOiIEI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-u0nxJlzsRFyOiIEI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-u0nxJlzsRFyOiIEI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-u0nxJlzsRFyOiIEI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-u0nxJlzsRFyOiIEI .marker.cross{stroke:#333333;}#mermaid-svg-u0nxJlzsRFyOiIEI svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-u0nxJlzsRFyOiIEI p{margin:0;}#mermaid-svg-u0nxJlzsRFyOiIEI .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-u0nxJlzsRFyOiIEI .cluster-label text{fill:#333;}#mermaid-svg-u0nxJlzsRFyOiIEI .cluster-label span{color:#333;}#mermaid-svg-u0nxJlzsRFyOiIEI .cluster-label span p{background-color:transparent;}#mermaid-svg-u0nxJlzsRFyOiIEI .label text,#mermaid-svg-u0nxJlzsRFyOiIEI span{fill:#333;color:#333;}#mermaid-svg-u0nxJlzsRFyOiIEI .node rect,#mermaid-svg-u0nxJlzsRFyOiIEI .node circle,#mermaid-svg-u0nxJlzsRFyOiIEI .node ellipse,#mermaid-svg-u0nxJlzsRFyOiIEI .node polygon,#mermaid-svg-u0nxJlzsRFyOiIEI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-u0nxJlzsRFyOiIEI .rough-node .label text,#mermaid-svg-u0nxJlzsRFyOiIEI .node .label text,#mermaid-svg-u0nxJlzsRFyOiIEI .image-shape .label,#mermaid-svg-u0nxJlzsRFyOiIEI .icon-shape .label{text-anchor:middle;}#mermaid-svg-u0nxJlzsRFyOiIEI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-u0nxJlzsRFyOiIEI .rough-node .label,#mermaid-svg-u0nxJlzsRFyOiIEI .node .label,#mermaid-svg-u0nxJlzsRFyOiIEI .image-shape .label,#mermaid-svg-u0nxJlzsRFyOiIEI .icon-shape .label{text-align:center;}#mermaid-svg-u0nxJlzsRFyOiIEI .node.clickable{cursor:pointer;}#mermaid-svg-u0nxJlzsRFyOiIEI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-u0nxJlzsRFyOiIEI .arrowheadPath{fill:#333333;}#mermaid-svg-u0nxJlzsRFyOiIEI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-u0nxJlzsRFyOiIEI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-u0nxJlzsRFyOiIEI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-u0nxJlzsRFyOiIEI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-u0nxJlzsRFyOiIEI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-u0nxJlzsRFyOiIEI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-u0nxJlzsRFyOiIEI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-u0nxJlzsRFyOiIEI .cluster text{fill:#333;}#mermaid-svg-u0nxJlzsRFyOiIEI .cluster span{color:#333;}#mermaid-svg-u0nxJlzsRFyOiIEI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-u0nxJlzsRFyOiIEI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-u0nxJlzsRFyOiIEI rect.text{fill:none;stroke-width:0;}#mermaid-svg-u0nxJlzsRFyOiIEI .icon-shape,#mermaid-svg-u0nxJlzsRFyOiIEI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-u0nxJlzsRFyOiIEI .icon-shape p,#mermaid-svg-u0nxJlzsRFyOiIEI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-u0nxJlzsRFyOiIEI .icon-shape .label rect,#mermaid-svg-u0nxJlzsRFyOiIEI .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-u0nxJlzsRFyOiIEI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-u0nxJlzsRFyOiIEI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-u0nxJlzsRFyOiIEI :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

环境 Harness

结构化喂回

模型 Model

工具箱 Tools

文件系统 Files

反馈信号 Feedback

规范约定 Conventions

典型技术

技术说明我踩过的坑
工具注册表 定义模型可调用的函数 工具描述写得含糊,模型就乱调
MCP协议 标准化连接外部系统 52%的端点已停维护,选型看维护者
AGENTS.md 把项目意图写在智能体外面 写成小说没人读,要写成条令
确定性验证器 编译/lint/测试三件套 别用模型自评冒充验证器
沙箱隔离 安全的命令执行环境 没沙箱跑rm的事故我见过一次就够

工作单元

一个智能体 = 模型 + 环境设施

遗留资产

Harness Engineering 是 Loop Engineering 内部的执行层。循环每一轮"采取行动"时,用的就是这套环境。工具翻车一次,循环就多绕一圈——环境质量直接决定循环的单轮成功率。

本课程第5章《循环的五大原语与生态》、第8章《工具与MCP生态实战》、第7章《验证工程》都在讲这一层。


五、第四代:Loop Engineering(循环工程)

核心问题

模型能干活了,但谁来决定"下一步干什么"?谁来检查"干得对不对"?谁来记住"已经干过什么"?如何让整个过程自主运行起来?

工程对象

整个控制系统——不只是单次任务的环境,而是:

  • 提示的自动生成(谁来写下一轮的prompt)
  • 结果的自动检查(谁来判定成功与否)
  • 状态的自动记忆(跨轮次、跨会话保留什么)
  • 流程的自动重跑(失败后如何自我修正)

核心比喻

如果:

  • Prompt Engineering 是"写一封好邮件"
  • Context Engineering 是"整理好办公桌"
  • Harness Engineering 是"给员工配齐工具和电脑"
  • 那 Loop Engineering 就是"设计整个公司的工作流"——谁派活、谁验收、谁存档

#mermaid-svg-SH9sZB28G6cAasIb{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SH9sZB28G6cAasIb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SH9sZB28G6cAasIb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SH9sZB28G6cAasIb .error-icon{fill:#552222;}#mermaid-svg-SH9sZB28G6cAasIb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SH9sZB28G6cAasIb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SH9sZB28G6cAasIb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SH9sZB28G6cAasIb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SH9sZB28G6cAasIb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SH9sZB28G6cAasIb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SH9sZB28G6cAasIb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SH9sZB28G6cAasIb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SH9sZB28G6cAasIb .marker.cross{stroke:#333333;}#mermaid-svg-SH9sZB28G6cAasIb svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SH9sZB28G6cAasIb p{margin:0;}#mermaid-svg-SH9sZB28G6cAasIb .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-SH9sZB28G6cAasIb .cluster-label text{fill:#333;}#mermaid-svg-SH9sZB28G6cAasIb .cluster-label span{color:#333;}#mermaid-svg-SH9sZB28G6cAasIb .cluster-label span p{background-color:transparent;}#mermaid-svg-SH9sZB28G6cAasIb .label text,#mermaid-svg-SH9sZB28G6cAasIb span{fill:#333;color:#333;}#mermaid-svg-SH9sZB28G6cAasIb .node rect,#mermaid-svg-SH9sZB28G6cAasIb .node circle,#mermaid-svg-SH9sZB28G6cAasIb .node ellipse,#mermaid-svg-SH9sZB28G6cAasIb .node polygon,#mermaid-svg-SH9sZB28G6cAasIb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SH9sZB28G6cAasIb .rough-node .label text,#mermaid-svg-SH9sZB28G6cAasIb .node .label text,#mermaid-svg-SH9sZB28G6cAasIb .image-shape .label,#mermaid-svg-SH9sZB28G6cAasIb .icon-shape .label{text-anchor:middle;}#mermaid-svg-SH9sZB28G6cAasIb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SH9sZB28G6cAasIb .rough-node .label,#mermaid-svg-SH9sZB28G6cAasIb .node .label,#mermaid-svg-SH9sZB28G6cAasIb .image-shape .label,#mermaid-svg-SH9sZB28G6cAasIb .icon-shape .label{text-align:center;}#mermaid-svg-SH9sZB28G6cAasIb .node.clickable{cursor:pointer;}#mermaid-svg-SH9sZB28G6cAasIb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SH9sZB28G6cAasIb .arrowheadPath{fill:#333333;}#mermaid-svg-SH9sZB28G6cAasIb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SH9sZB28G6cAasIb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SH9sZB28G6cAasIb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SH9sZB28G6cAasIb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SH9sZB28G6cAasIb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SH9sZB28G6cAasIb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SH9sZB28G6cAasIb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SH9sZB28G6cAasIb .cluster text{fill:#333;}#mermaid-svg-SH9sZB28G6cAasIb .cluster span{color:#333;}#mermaid-svg-SH9sZB28G6cAasIb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SH9sZB28G6cAasIb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SH9sZB28G6cAasIb rect.text{fill:none;stroke-width:0;}#mermaid-svg-SH9sZB28G6cAasIb .icon-shape,#mermaid-svg-SH9sZB28G6cAasIb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SH9sZB28G6cAasIb .icon-shape p,#mermaid-svg-SH9sZB28G6cAasIb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SH9sZB28G6cAasIb .icon-shape .label rect,#mermaid-svg-SH9sZB28G6cAasIb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SH9sZB28G6cAasIb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SH9sZB28G6cAasIb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SH9sZB28G6cAasIb :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

循环 Loop

未达成

更新状态

达成

Prompt工程写本轮指令

Context工程组装燃料

Harness工程提供工具环境

验证器检查结果

记忆外置状态

交付

典型技术

技术说明
/goal 可验证终止条件
Sub-agents Maker/Checker分离
Worktrees 并行循环隔离
Automations 定时心跳
Hooks 生命周期拦截
轨迹落盘 可回放日志

工作单元

一个可交付成果 = 一个自主运行的循环

到这里四代讲完了。注意一个规律:每一代都在回答"下一代才敢问的问题"。没有Prompt层的质量打底,Context层无从优化;没有Harness层的反馈信号,Loop层的验证器根本无米下锅。


六、四代对照总表与跃迁规律

维度Prompt工程Context工程Harness工程Loop工程
诞生年份 2023 2024 2025 2026
核心问题 怎么措辞 放什么进去 配什么环境 怎么自主跑
工程对象 一段文本 一个上下文窗口 一整套环境 一个控制系统
工作单元 一条提示词 一组上下文策略 一个智能体环境 一个可交付循环
关键指标 输出质量 注意力效率 工具成功率 无人值守成功率
代表技术 CoT/Few-shot Compaction/剪枝 MCP/AGENTS.md /goal/Sub-agents
失败模式 措辞不当 上下文腐烂 工具翻车 doom loop
可复用资产 提示词模板 上下文策略库 工具/技能包 循环架构

用一张图理解"包裹"关系

#mermaid-svg-sDDJjSxKLkGsRdv5{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sDDJjSxKLkGsRdv5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sDDJjSxKLkGsRdv5 .error-icon{fill:#552222;}#mermaid-svg-sDDJjSxKLkGsRdv5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sDDJjSxKLkGsRdv5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sDDJjSxKLkGsRdv5 .marker.cross{stroke:#333333;}#mermaid-svg-sDDJjSxKLkGsRdv5 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sDDJjSxKLkGsRdv5 p{margin:0;}#mermaid-svg-sDDJjSxKLkGsRdv5 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-sDDJjSxKLkGsRdv5 .cluster-label text{fill:#333;}#mermaid-svg-sDDJjSxKLkGsRdv5 .cluster-label span{color:#333;}#mermaid-svg-sDDJjSxKLkGsRdv5 .cluster-label span p{background-color:transparent;}#mermaid-svg-sDDJjSxKLkGsRdv5 .label text,#mermaid-svg-sDDJjSxKLkGsRdv5 span{fill:#333;color:#333;}#mermaid-svg-sDDJjSxKLkGsRdv5 .node rect,#mermaid-svg-sDDJjSxKLkGsRdv5 .node circle,#mermaid-svg-sDDJjSxKLkGsRdv5 .node ellipse,#mermaid-svg-sDDJjSxKLkGsRdv5 .node polygon,#mermaid-svg-sDDJjSxKLkGsRdv5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sDDJjSxKLkGsRdv5 .rough-node .label text,#mermaid-svg-sDDJjSxKLkGsRdv5 .node .label text,#mermaid-svg-sDDJjSxKLkGsRdv5 .image-shape .label,#mermaid-svg-sDDJjSxKLkGsRdv5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-sDDJjSxKLkGsRdv5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sDDJjSxKLkGsRdv5 .rough-node .label,#mermaid-svg-sDDJjSxKLkGsRdv5 .node .label,#mermaid-svg-sDDJjSxKLkGsRdv5 .image-shape .label,#mermaid-svg-sDDJjSxKLkGsRdv5 .icon-shape .label{text-align:center;}#mermaid-svg-sDDJjSxKLkGsRdv5 .node.clickable{cursor:pointer;}#mermaid-svg-sDDJjSxKLkGsRdv5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sDDJjSxKLkGsRdv5 .arrowheadPath{fill:#333333;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sDDJjSxKLkGsRdv5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sDDJjSxKLkGsRdv5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sDDJjSxKLkGsRdv5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sDDJjSxKLkGsRdv5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sDDJjSxKLkGsRdv5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sDDJjSxKLkGsRdv5 .cluster text{fill:#333;}#mermaid-svg-sDDJjSxKLkGsRdv5 .cluster span{color:#333;}#mermaid-svg-sDDJjSxKLkGsRdv5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sDDJjSxKLkGsRdv5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sDDJjSxKLkGsRdv5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-sDDJjSxKLkGsRdv5 .icon-shape,#mermaid-svg-sDDJjSxKLkGsRdv5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sDDJjSxKLkGsRdv5 .icon-shape p,#mermaid-svg-sDDJjSxKLkGsRdv5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sDDJjSxKLkGsRdv5 .icon-shape .label rect,#mermaid-svg-sDDJjSxKLkGsRdv5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sDDJjSxKLkGsRdv5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sDDJjSxKLkGsRdv5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sDDJjSxKLkGsRdv5 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Loop 循环工程

Harness 环境工程

Context 上下文工程

包含

包含

包含

Prompt 提示词工程

提示词

关键洞察:高一层不是抛弃低一层,而是把低一层作为组件封装进来。

  • 你设计一个循环(Loop),循环的每一轮还是要写好提示词(Prompt)
  • 你管理上下文(Context),但上下文里装的还是提示词组装的结果
  • 你搭建环境(Harness),环境里的模型依然需要好的上下文和提示词

为什么是"包裹"而非"取代"

三类关系辨析
关系类型例子是否成立判据
取代 汽车取代马车 马车真的消失了 旧事物退出使用
并列 前端 vs 后端 各管各的领域 边界清晰不重叠
包裹 函数调用嵌套 高层每次运行都调用低层 旧事物成为内部组件

四代范式是包裹关系:

Loop Engineering
└── 依赖 Harness Engineering(执行环境)
└── 依赖 Context Engineering(上下文管理)
└── 依赖 Prompt Engineering(提示词组装)

判断"取代还是包裹"有个很实用的检验法:把高层拆开,看低层还在不在里面干活。拆开任何一个循环,你都能看到每一轮的提示词组装、上下文剪枝、工具调用——低层活得好好的,只是不再由你亲手干了。这就叫包裹。

一个具体例子:一个Bug的四层旅行

假设你要实现"夜间自动修Bug循环",拆开看每一层的贡献:

# Loop层:定义整个控制系统
while not goal_achieved():

# Context层:组装本轮上下文(不是全量历史,而是剪枝后的高信号集)
context = build_context(
recent_turns=last_3,
summary=compacted_summary,
relevant_files=jit_retrieve(bug_keywords)
)

# Prompt层:组装本轮具体指令
prompt = f"""
当前目标:
{goal}
最近失败信息:
{context.last_error}
约束:
{context.conventions}
"""

# Harness层:提供工具并有能力执行
response = model.chat(prompt, tools=[read_file, edit_file, run_test])

# 执行动作(Harness层)
result = dispatch_tool(response.tool_call)

# 验证(Loop层的核心动作)
if validate(result): # 确定性验证器
break

# 记忆外置(Loop层)
save_trace(result)

一篇文章里,四层同时在场。这就是"包裹"的含义。

我再给你讲个更具体的案例故事。去年我接手过一个跑了半年的"依赖升级循环",它状态很差:成功率只有41%,团队想推倒重来。我拆开看,问题根本不在循环——是第13轮左右上下文开始腐烂(Context层没做Compaction),模型在被污染的上下文里越修越错。我只加了一个"每8轮压缩历史为摘要"的策略,其他一行没动,成功率回到78%。高层的病,病根在低层——这是包裹关系最实用的推论:排查问题时四层都要看,别只会重启循环。

踩坑提示:包裹关系的反面教材是"跳层"。我见过有人连提示词都写不利索就上多Agent编排,结果15个并行循环每个都产出垃圾——循环只是把垃圾的生产效率提高了15倍。高层放大的是低层的水平,无论好坏。


范式跃迁的驱动力

为什么会出现这四次跃迁?背后有共同规律:

#mermaid-svg-RPsXACZgXPKzY26w{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RPsXACZgXPKzY26w .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RPsXACZgXPKzY26w .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RPsXACZgXPKzY26w .error-icon{fill:#552222;}#mermaid-svg-RPsXACZgXPKzY26w .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RPsXACZgXPKzY26w .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RPsXACZgXPKzY26w .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RPsXACZgXPKzY26w .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RPsXACZgXPKzY26w .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RPsXACZgXPKzY26w .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RPsXACZgXPKzY26w .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RPsXACZgXPKzY26w .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RPsXACZgXPKzY26w .marker.cross{stroke:#333333;}#mermaid-svg-RPsXACZgXPKzY26w svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RPsXACZgXPKzY26w p{margin:0;}#mermaid-svg-RPsXACZgXPKzY26w .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-RPsXACZgXPKzY26w .cluster-label text{fill:#333;}#mermaid-svg-RPsXACZgXPKzY26w .cluster-label span{color:#333;}#mermaid-svg-RPsXACZgXPKzY26w .cluster-label span p{background-color:transparent;}#mermaid-svg-RPsXACZgXPKzY26w .label text,#mermaid-svg-RPsXACZgXPKzY26w span{fill:#333;color:#333;}#mermaid-svg-RPsXACZgXPKzY26w .node rect,#mermaid-svg-RPsXACZgXPKzY26w .node circle,#mermaid-svg-RPsXACZgXPKzY26w .node ellipse,#mermaid-svg-RPsXACZgXPKzY26w .node polygon,#mermaid-svg-RPsXACZgXPKzY26w .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RPsXACZgXPKzY26w .rough-node .label text,#mermaid-svg-RPsXACZgXPKzY26w .node .label text,#mermaid-svg-RPsXACZgXPKzY26w .image-shape .label,#mermaid-svg-RPsXACZgXPKzY26w .icon-shape .label{text-anchor:middle;}#mermaid-svg-RPsXACZgXPKzY26w .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RPsXACZgXPKzY26w .rough-node .label,#mermaid-svg-RPsXACZgXPKzY26w .node .label,#mermaid-svg-RPsXACZgXPKzY26w .image-shape .label,#mermaid-svg-RPsXACZgXPKzY26w .icon-shape .label{text-align:center;}#mermaid-svg-RPsXACZgXPKzY26w .node.clickable{cursor:pointer;}#mermaid-svg-RPsXACZgXPKzY26w .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RPsXACZgXPKzY26w .arrowheadPath{fill:#333333;}#mermaid-svg-RPsXACZgXPKzY26w .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RPsXACZgXPKzY26w .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RPsXACZgXPKzY26w .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RPsXACZgXPKzY26w .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RPsXACZgXPKzY26w .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RPsXACZgXPKzY26w .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RPsXACZgXPKzY26w .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RPsXACZgXPKzY26w .cluster text{fill:#333;}#mermaid-svg-RPsXACZgXPKzY26w .cluster span{color:#333;}#mermaid-svg-RPsXACZgXPKzY26w div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RPsXACZgXPKzY26w .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RPsXACZgXPKzY26w rect.text{fill:none;stroke-width:0;}#mermaid-svg-RPsXACZgXPKzY26w .icon-shape,#mermaid-svg-RPsXACZgXPKzY26w .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RPsXACZgXPKzY26w .icon-shape p,#mermaid-svg-RPsXACZgXPKzY26w .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RPsXACZgXPKzY26w .icon-shape .label rect,#mermaid-svg-RPsXACZgXPKzY26w .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RPsXACZgXPKzY26w .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RPsXACZgXPKzY26w .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RPsXACZgXPKzY26w :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

触发

转向

能力天花板暴露

工程重心上移

新范式诞生

旧范式降级为子步骤

提示词写不出更好结果

从优化输入,到优化系统

跃迁触发的天花板重心转移
Prompt→Context 提示词再精妙也无法突破上下文限制 从"一条文本"到"整个窗口"
Context→Harness 上下文再好模型也无手无脚 从"看"到"做"
Harness→Loop 环境再好也需人按按钮 从"工具"到"自主"
一个有用的判断法则

当你在某一层反复调优却收效甚微时,说明瓶颈已经转移到更高一层。

  • 提示词怎么写都不满意 → 检查上下文是否被污染
  • 上下文管得很好还是不行 → 检查工具体系是否缺失
  • 环境齐全了还是要人盯着 → 该上循环工程了

这个法则我叫它"层间止损"。人最容易犯的错,是在自己熟悉的那层死磕——提示词大师愿意花三天调措辞,也不肯花三十分钟看一眼上下文里是不是混进了三页无关日志。熟悉的锤子,会让人把所有问题都看成钉子。


七、实操:定位你的层级并往上爬

阶段1:确认你的当前层级

自测清单:
– [ ] 我是否还在纠结"换个措辞试试"?→ 你停在 Prompt 层
– [ ] 我是否开始关注"该给模型看什么文件"?→ 你到了 Context 层
– [ ] 我是否在搭建工具/配置MCP/写AGENTS.md?→ 你到了 Harness 层
– [ ] 我是否在设计循环、验证器、停止条件?→ 你到了 Loop 层

阶段2:用代码度量你的层级

自测清单是主观的,我更喜欢能跑出数字的度量。下面这个小工具扫描你的项目目录,按四层资产的存在性给出量化评分——工程规范照旧:pydantic 校验配置,日志控制台+文件双输出、按月滚动保留12个月,退出打印总结:

"""layer_scout.py — 四层范式成熟度度量器
用法: uv run python layer_scout.py –path .
依赖: uv add pydantic
"""

import logging, logging.handlers
from pathlib import Path
from pydantic import BaseModel

# 日志:控制台+文件双输出,按月分割,保留12个月
log = logging.getLogger("scout")
log.setLevel(logging.INFO)
log.addHandler(logging.StreamHandler())
fh = logging.handlers.TimedRotatingFileHandler(
"logs/scout.log", when="MIDNIGHT", interval=30, backupCount=12, encoding="utf-8")
fh.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(message)s"))
log.addHandler(fh)

class LayerScore(BaseModel):
"""四层评分结果,pydantic保证字段类型正确"""
prompt: int = 0 # 提示词模板文件数
context: int = 0 # 上下文策略痕迹(compaction/memory)
harness: int = 0 # 工具/MCP/AGENTS.md
loop: int = 0 # 循环配置/验证器/CI门禁

def level(self) –> str:
total = self.prompt + self.context + self.harness + self.loop
return ("Loop架构师" if total >= 12 else "Harness层"
if total >= 8 else "Context层" if total >= 4 else "Prompt层")

def scan(root: Path) –> LayerScore:
files = [p for p in root.rglob("*") if p.is_file()]
return LayerScore(
prompt=sum("prompt" in p.name.lower() or "template" in p.name.lower() for p in files),
context=sum(any(k in p.name.lower() for k in ("memory", "compact", "summary")) for p in files),
harness=sum(any(k in p.name.lower() for k in ("agents", "mcp", "tool")) for p in files),
loop=sum(any(k in p.name.lower() for k in ("loop", "goal", "validator", "workflow")) for p in files),
)

if __name__ == "__main__":
score = scan(Path("."))
log.info("Prompt层=%d Context层=%d Harness层=%d Loop层=%d",
score.prompt, score.context, score.harness, score.loop)
log.info("当前定位=%s", score.level())
log.info("========== 度量总结 ==========")
log.info("短板层=%s", min(score.model_dump(), key=score.model_dump().get))

跑完的控制台输出长这样:

$ uv run python layer_scout.py –path .
2026-09-15 20:11:03 [INFO] Prompt层=6 Context层=1 Harness层=2 Loop层=0
2026-09-15 20:11:03 [INFO] 当前定位=Context层
2026-09-15 20:11:03 [INFO] ========== 度量总结 ==========
2026-09-15 20:11:03 [INFO] 短板层=loop

这个输出的含义很直白:提示词资产不少、环境刚起步、循环还没影——典型的"上层地基没打好就想跳楼"。别急着上多Agent,先把 loop 字段从0变1:写一个带停止条件的最小循环。

阶段3:不要跳过任何一层

很多人想直接上循环工程,但底层不牢,循环一定跑不稳:

跳过后果补救
跳过Prompt 每轮输出质量差,循环在垃圾上迭代 先沉淀5个高频任务的提示词模板
跳过Context 几轮后上下文爆炸或腐烂,循环失智 先上Compaction+外部记忆
跳过Harness 模型无反馈信号,只能靠自我评估(不可信) 先接通编译/测试/lint三件套

阶段4:按"包裹"思路建设资产

#mermaid-svg-J2zX9fTFuVQuS6uS{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-J2zX9fTFuVQuS6uS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-J2zX9fTFuVQuS6uS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-J2zX9fTFuVQuS6uS .error-icon{fill:#552222;}#mermaid-svg-J2zX9fTFuVQuS6uS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-J2zX9fTFuVQuS6uS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-J2zX9fTFuVQuS6uS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-J2zX9fTFuVQuS6uS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-J2zX9fTFuVQuS6uS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-J2zX9fTFuVQuS6uS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-J2zX9fTFuVQuS6uS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-J2zX9fTFuVQuS6uS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-J2zX9fTFuVQuS6uS .marker.cross{stroke:#333333;}#mermaid-svg-J2zX9fTFuVQuS6uS svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-J2zX9fTFuVQuS6uS p{margin:0;}#mermaid-svg-J2zX9fTFuVQuS6uS .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-J2zX9fTFuVQuS6uS .cluster-label text{fill:#333;}#mermaid-svg-J2zX9fTFuVQuS6uS .cluster-label span{color:#333;}#mermaid-svg-J2zX9fTFuVQuS6uS .cluster-label span p{background-color:transparent;}#mermaid-svg-J2zX9fTFuVQuS6uS .label text,#mermaid-svg-J2zX9fTFuVQuS6uS span{fill:#333;color:#333;}#mermaid-svg-J2zX9fTFuVQuS6uS .node rect,#mermaid-svg-J2zX9fTFuVQuS6uS .node circle,#mermaid-svg-J2zX9fTFuVQuS6uS .node ellipse,#mermaid-svg-J2zX9fTFuVQuS6uS .node polygon,#mermaid-svg-J2zX9fTFuVQuS6uS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-J2zX9fTFuVQuS6uS .rough-node .label text,#mermaid-svg-J2zX9fTFuVQuS6uS .node .label text,#mermaid-svg-J2zX9fTFuVQuS6uS .image-shape .label,#mermaid-svg-J2zX9fTFuVQuS6uS .icon-shape .label{text-anchor:middle;}#mermaid-svg-J2zX9fTFuVQuS6uS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-J2zX9fTFuVQuS6uS .rough-node .label,#mermaid-svg-J2zX9fTFuVQuS6uS .node .label,#mermaid-svg-J2zX9fTFuVQuS6uS .image-shape .label,#mermaid-svg-J2zX9fTFuVQuS6uS .icon-shape .label{text-align:center;}#mermaid-svg-J2zX9fTFuVQuS6uS .node.clickable{cursor:pointer;}#mermaid-svg-J2zX9fTFuVQuS6uS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-J2zX9fTFuVQuS6uS .arrowheadPath{fill:#333333;}#mermaid-svg-J2zX9fTFuVQuS6uS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-J2zX9fTFuVQuS6uS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-J2zX9fTFuVQuS6uS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-J2zX9fTFuVQuS6uS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-J2zX9fTFuVQuS6uS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-J2zX9fTFuVQuS6uS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-J2zX9fTFuVQuS6uS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-J2zX9fTFuVQuS6uS .cluster text{fill:#333;}#mermaid-svg-J2zX9fTFuVQuS6uS .cluster span{color:#333;}#mermaid-svg-J2zX9fTFuVQuS6uS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-J2zX9fTFuVQuS6uS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-J2zX9fTFuVQuS6uS rect.text{fill:none;stroke-width:0;}#mermaid-svg-J2zX9fTFuVQuS6uS .icon-shape,#mermaid-svg-J2zX9fTFuVQuS6uS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-J2zX9fTFuVQuS6uS .icon-shape p,#mermaid-svg-J2zX9fTFuVQuS6uS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-J2zX9fTFuVQuS6uS .icon-shape .label rect,#mermaid-svg-J2zX9fTFuVQuS6uS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-J2zX9fTFuVQuS6uS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-J2zX9fTFuVQuS6uS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-J2zX9fTFuVQuS6uS :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

资产体系

提示词库

上下文策略库

环境资产

循环资产

代码审查模板

修复指令模板

压缩提示词

剪枝规则

工具包与MCP服务器

AGENTS.md模板

验证器组件

编排模式与看板

一句话记住资产建设的顺序:先攒零件,再装整机。四层资产是四个零件盒,循环是整机——零件盒越满,整机组装越快。


小结

  • 四代范式是四次工程对象的跃迁:一段文本→一个上下文窗口→一整套环境→一个控制系统,不是营销换皮
  • 每一代都留下了活的资产:提示词变成循环的原子步骤,上下文策略变成燃料管理,环境变成执行层——低层从没死,只是沉到了里面
  • 四层是包裹关系不是取代关系:检验法是把高层拆开,看低层还在不在干活
  • 一条实用法则:某层反复调优收效甚微,说明瓶颈已上移——熟悉的锤子会让人把问题都看成钉子
  • 跳层必翻车:高层放大的是低层的水平,无论好坏;用 layer_scout 量化定位自己的短板层再补
  • 一句话记住四代:Prompt决定说什么,Context决定看什么,Harness决定能做什么,Loop决定谁来决定下一步

  • 下节预告

    四层范式给了你地图,但地图上有个巨大的坑还没填:为什么84%的人在用AI,却只有29%的人敢信AI输出的代码?下一节我用Stack Overflow和JetBrains的调查数据、METR那个"AI让你慢19%"的扎心实验,把信任危机的三重根源拆开——然后给你看清楚:这条信任鸿沟,恰恰是验证工程最大的机会窗口。


    如果觉得本文对你有帮助,欢迎点赞、收藏、关注三连! 本系列持续更新中,120篇循环工程实战通关,关注不迷路~

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » AI智能体循环工程-第1章第4节-2026循环工程元年-四层范式演进史Prompt工程Context工程Harness工程Loop工程
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!