<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0"><channel><title>海松知道 | 文章</title><description>AI编程方法论与AI应用实践</description><link>https://www.haisong.cc/</link><language>zh-CN</language><fh:complete/><atom:link rel="self" href="https://www.haisong.cc/blog/rss.xml"/><item><title>Agentsmd介绍</title><link>https://www.haisong.cc/blog/agentsmd%E4%BB%8B%E7%BB%8D/</link><guid isPermaLink="true">https://www.haisong.cc/blog/agentsmd%E4%BB%8B%E7%BB%8D/</guid><description>是项目给 Codex 的一份“工作说明书”。 它通常放在仓库根目录或某个子目录中，用来明确说明这个范围内代码的协作规则、实现约束、常见操作方式，以及在执行任务时应优先遵守的工程约定。 在多人协作项目中，人类成员会通过开发规范、目录约定、评审标准来降低沟通成本；而在引入 Codex 后， 的作用就是把这些隐性经验显式化，让 Codex…</description><pubDate>Mon, 10 Aug 2026 18:33:18 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;agentsmd介绍&quot;&gt;&lt;a href=&quot;#agentsmd介绍&quot;&gt;AGENTS.md介绍&lt;/a&gt;&lt;/h1&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;agentsmd概述&quot;&gt;&lt;a href=&quot;#agentsmd概述&quot;&gt;AGENTS.md概述&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; 是项目给 Codex 的一份“工作说明书”。&lt;br&gt;
它通常放在仓库根目录或某个子目录中，用来明确说明这个范围内代码的协作规则、实现约束、常见操作方式，以及在执行任务时应优先遵守的工程约定。&lt;/p&gt;
&lt;p&gt;在多人协作项目中，人类成员会通过开发规范、目录约定、评审标准来降低沟通成本；而在引入 Codex 后，&lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; 的作用就是把这些隐性经验显式化，让 Codex 在生成代码、修改文件、运行命令和编写文档时，尽量贴合团队的真实工作方式。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;span aria-hidden=&quot;true&quot;&gt;💡&lt;/span&gt;&lt;span&gt;TIP&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;p&gt;可以把 &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; 理解成“面向 Codex 的项目内操作手册”。它不是业务代码的一部分，但会直接影响 Codex 的输出质量和执行边界。&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;问题描述&quot;&gt;&lt;a href=&quot;#问题描述&quot;&gt;问题描述&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;如果项目没有清晰的 &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; 约束，Codex 往往只能依据通用经验工作，这会带来几个典型问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;实现风格不一致&lt;/strong&gt;&lt;br&gt;
比如项目要求不使用某个框架特性、必须沿用已有分层结构、接口命名需要遵循团队规范，但这些规则如果没有写出来，Codex 就可能给出“能跑但不符合团队习惯”的方案。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;容易触碰隐性禁区&lt;/strong&gt;&lt;br&gt;
例如不能改动某些基础模块、不能直接执行破坏性命令、不能引入新依赖、不能修改数据库结构。如果这些约束只存在于团队口头约定中，Codex 无法稳定遵守。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;重复解释成本高&lt;/strong&gt;&lt;br&gt;
每次都要重新告诉 Codex “这个项目不用 Lombok”“先读文档再改代码”“提交信息必须按某种格式写”，会显著增加交互成本，也不利于批量复用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;结果可控性不足&lt;/strong&gt;&lt;br&gt;
同样一个任务，不同轮次得到的结果可能差异较大。缺少稳定规则时，Codex 输出会更依赖即时上下文，而不是项目长期约定。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;本质上，问题不是 Codex “不会做”，而是项目没有把“应该怎么做”描述清楚。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;总体思想&quot;&gt;&lt;a href=&quot;#总体思想&quot;&gt;总体思想&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;设计 &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; 的核心思想，不是罗列越多规则越好，而是把最影响结果质量的约束沉淀下来，让 Codex 在执行任务时形成稳定判断。&lt;/p&gt;
&lt;p&gt;可以按下面三个层次来组织：&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-先定义边界&quot;&gt;&lt;a href=&quot;#1-先定义边界&quot;&gt;1. 先定义边界&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;先告诉 Codex 什么能做、什么不能做，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;哪些目录可以修改，哪些目录禁止改动&lt;/li&gt;
&lt;li&gt;是否允许新增依赖、修改数据库、执行脚本&lt;/li&gt;
&lt;li&gt;是否必须先阅读某些文档或接口定义再开始改动&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一步的目标，是先保证“不要做错”。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-再定义规则&quot;&gt;&lt;a href=&quot;#2-再定义规则&quot;&gt;2. 再定义规则&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;在边界明确后，再补充项目的具体工程规则，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;代码分层和目录约定&lt;/li&gt;
&lt;li&gt;命名规范、注释规范、提交规范&lt;/li&gt;
&lt;li&gt;测试要求、文档要求、错误处理方式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一步的目标，是让 Codex “按团队方式做对”。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-最后定义优先级&quot;&gt;&lt;a href=&quot;#3-最后定义优先级&quot;&gt;3. 最后定义优先级&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;当不同规则发生冲突时，需要明确优先顺序，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先遵守安全和破坏性操作限制&lt;/li&gt;
&lt;li&gt;再遵守项目编码规范&lt;/li&gt;
&lt;li&gt;最后再考虑生成效率和简洁性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一步的目标，是让 Codex 在复杂场景下也能稳定决策。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;span aria-hidden=&quot;true&quot;&gt;💡&lt;/span&gt;&lt;span&gt;TIP&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;p&gt;一个好的 &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt;，重点不是“大而全”，而是“高频、关键、可执行”。优先写那些最容易出错、最影响交付质量、最值得长期复用的规则。&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</content:encoded></item><item><title>AGENTS.md实践</title><link>https://www.haisong.cc/blog/agentsmd%E5%AE%9E%E8%B7%B5/</link><guid isPermaLink="true">https://www.haisong.cc/blog/agentsmd%E5%AE%9E%E8%B7%B5/</guid><description>针对上下文工程中的 AGENTS.md 实践，核心原则是保持文件简洁且不超过 200 行。文章构建了组织级、项目级与模块级三级管理框架，明确编码、架构及安全规范，并通过具体示例界定适用范围与修改约束。最终强调在实施完成后必须执行测试与校验，并同步更新任务状态，以保障 AI 开发流程的严谨性。</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;agentsmd实践&quot;&gt;&lt;a href=&quot;#agentsmd实践&quot;&gt;AGENTS.md实践&lt;/a&gt;&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;相关知识点：“Harness Engineering 里面的“上下文工程（Context Engineering）”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;总体原则：保持AGENTS.md简洁，不要超过200行。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#/page/AGENTS.md介绍&quot;&gt;AGENTS.md介绍&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agentsmd分级&quot;&gt;&lt;a href=&quot;#agentsmd分级&quot;&gt;AGENTS.md分级&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;组织级（公司或者团队） 放在 ~/.codex/AGENTS.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;项目级， 放在 project/AGENTS.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;模块级， project/backend/AGENTS.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;组织级-agentsmd管理&quot;&gt;&lt;a href=&quot;#组织级-agentsmd管理&quot;&gt;组织级 AGENTS.md管理&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;创建独立的代码仓库 team-ai-agent-guidelines/&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── coding/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    ├── java.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    ├── react.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    └── database-design.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    └── database-migration.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── security/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    ├── secure-coding.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── architecture/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    ├── microservice.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;└── templates/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;     ├── ADR.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;     ├── Epic.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;     ├── UserStory.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;     └── Task.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;保持AGENTS.md简洁，在AGENTS.md中引用其他文件&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;# XX团队编码规范&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 所有AI开发必须遵循：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;1.&lt;/span&gt;&lt;span&gt; 编码规范&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;2.&lt;/span&gt;&lt;span&gt; 架构规范&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;3.&lt;/span&gt;&lt;span&gt; 安全规范&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 编码规范&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;java项目遵循 @coding/java.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;react项目遵循 @coding/react.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;数据库设计遵循 @coding/database-design.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;数据库升级遵循 @coding/database-migration.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 架构规范&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;微服务设计准许 @architecture/microservice.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 安全规范&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;安全编码遵循 @security/secure-coding.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;支付安全规范 @security/payment-security.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;项目级引用团队级规范&quot;&gt;&lt;a href=&quot;#项目级引用团队级规范&quot;&gt;项目级引用团队级规范&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;示例：CRM项目/AGENTS.md&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 引用团队级规范&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;本项目后端遵循团队级java规范 @team-ai-agent-guidelines/coding/java.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;本项目前端遵循团队级react规范 @team-ai-agent-guidelines/coding/react.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;本项目无支付功能，&lt;/span&gt;&lt;span&gt;**不遵循**&lt;/span&gt;&lt;span&gt;支付安全规范 @security/payment-security.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;项目级agentsmd结构&quot;&gt;&lt;a href=&quot;#项目级agentsmd结构&quot;&gt;项目级AGENTS.md结构&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── docs/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    ├── AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    ├── user_stories/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    └── ADRs/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── backend/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    ├── AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    └── tests/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│         └── AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── frontend/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    ├── AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│    └── tests/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│         └── AGENTS.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;agentsmd示例1---项目级agentsmd&quot;&gt;&lt;a href=&quot;#agentsmd示例1---项目级agentsmd&quot;&gt;AGENTS.md示例1 - 项目级AGENTS.md&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;根目录的AGENTS.md&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;# AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 适用范围&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;本文件适用于当前仓库根目录及全部子目录。&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 修改约束&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 不要执行破坏性 Git 命令&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 不要随意新增第三方依赖&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 修改前优先阅读 README 和接口定义&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 编码规则&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 后端保持现有分层结构&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 公共方法命名要与现有风格一致&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 关键逻辑变更后补充最小必要测试&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 输出要求&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 先说明改动思路，再实施修改&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 输出中明确列出变更文件&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 提交信息使用 Conventional Commits 风格&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;agentsmd示例2---模块级agentsmd&quot;&gt;&lt;a href=&quot;#agentsmd示例2---模块级agentsmd&quot;&gt;AGENTS.md示例2 - 模块级AGENTS.md&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;backend/AGENTS.md&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 适用范围&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;本文件适用于当前仓库backend目录及全部子目录。&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## 后端&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;必须：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Controller直接引用Service层，Service层引用Repository层，Repository层操作数据库&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;禁止：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; Controller直接引用Repository层&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## Database&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;必须:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 使用数据库结构迁移脚本&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;禁止:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 直接连接生产数据库&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 禁止产生多对多关联，多对多关联必须拆分成一个一对多关联和一个多对一关联，并且关联表必须有业务含义，有自己的主键&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;推荐:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; repository pattern&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h2 id=&quot;agentsmd示例3---工作流&quot;&gt;&lt;a href=&quot;#agentsmd示例3---工作流&quot;&gt;AGENTS.md示例3 - 工作流&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;处理一项任务&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## Scope&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;When receiving a task, follow the workflow below:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;## Task Execution&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;When receiving a task:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Step 1&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Read: TASK.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Step 2&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Inspect: related code&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Step 3&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Propose the core design&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Step 4&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Implement&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Step 5&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Test&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Run tests, lint checks, and other validations after implementation is complete&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Step 6&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Update task status in &lt;/span&gt;&lt;span&gt;`TASK.md`&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;</content:encoded><category>编码规范</category><category>架构规范</category><category>安全规范</category><category>引用团队级规范</category><category>适用范围</category></item><item><title>AI-Agent 工程体系演进路线</title><link>https://www.haisong.cc/blog/ai-agent-%E5%B7%A5%E7%A8%8B%E4%BD%93%E7%B3%BB%E6%BC%94%E8%BF%9B%E8%B7%AF%E7%BA%BF/</link><guid isPermaLink="true">https://www.haisong.cc/blog/ai-agent-%E5%B7%A5%E7%A8%8B%E4%BD%93%E7%B3%BB%E6%BC%94%E8%BF%9B%E8%B7%AF%E7%BA%BF/</guid><description>AI-Agent工程体系演进路线包含Prompt、Context、Harness、Loop及Graph Engineering五个阶段，分别解决指令设计、知识注入、工作系统构建、自动反馈闭环及执行流编排问题。通过分析各阶段核心局限与本质，指出真正的竞争点在于构建由Context、Harness、Graph、Loop共同驱动的可持续软件工程系统。</description><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;ai-agent-工程体系演进路线&quot;&gt;&lt;a href=&quot;#ai-agent-工程体系演进路线&quot;&gt;AI-Agent 工程体系演进路线&lt;/a&gt;&lt;/h1&gt;&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;span aria-hidden=&quot;true&quot;&gt;💡&lt;/span&gt;&lt;span&gt;TIP&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;p&gt;这些概念是现在很热门的词汇，并不代表有长期的生命力&lt;br&gt;
对待这些概念需要了解，但不能迷信&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;AI-Agent 工程体系&lt;/strong&gt; 演进路线重点看五个概念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prompt Engineering&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context Engineering&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Harness Engineering&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loop Engineering&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Engineering&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们是层层递进的关系，而是从“会回答问题”逐步走向“能长期、稳定、可治理地完成复杂软件任务”的演进过程。&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;span aria-hidden=&quot;true&quot;&gt;💡&lt;/span&gt;&lt;span&gt;TIP&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;p&gt;Prompt 解决“怎么说清楚”，Context 解决“知道什么”，Harness 解决“如何工作”，Loop 解决“如何自我修正”，Graph 解决“如何组织多步骤、多角色流转”。&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;1-一张图看懂演进路线&quot;&gt;&lt;a href=&quot;#1-一张图看懂演进路线&quot;&gt;1. 一张图看懂演进路线&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Prompt -&gt; Context -&gt; Harness -&gt; Loop&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;                     |&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;                     +-&gt; Graph&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;更准确地说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Prompt&lt;/code&gt; 是起点，负责把任务说清楚。&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Context&lt;/code&gt; 让 AI 不再只看一句话，而是理解项目背景。&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Harness&lt;/code&gt; 把 AI 纳入一个可管理的工程系统。&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Loop&lt;/code&gt; 让 AI 在“执行 -&gt; 验证 -&gt; 修复”中形成闭环。&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Graph&lt;/code&gt; 不是简单排在最后的一层，而是 AI-Agent 进入复杂协作阶段后，用来描述执行流的关键结构。&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;2-第一阶段prompt-engineering&quot;&gt;&lt;a href=&quot;#2-第一阶段prompt-engineering&quot;&gt;2. 第一阶段：Prompt Engineering&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;核心问题&quot;&gt;&lt;a href=&quot;#核心问题&quot;&gt;核心问题&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如何把任务描述清楚，让 AI 一次性给出更高质量的输出？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是最早期、也是最直观的 AI 使用方式。&lt;/p&gt;
&lt;p&gt;普通提示：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;帮我写一个用户登录接口&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;优化后的提示：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;你是一名资深 Java 后端工程师。&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;请使用 Spring Boot 3 + MyBatis Plus 实现用户登录接口。&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;要求：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;1. 使用 JWT 认证&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;2. 密码使用 BCrypt 加密&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;3. 做参数校验&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;4. 返回统一 Result 结构&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;5. 增加异常处理&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;prompt-工程关注什么&quot;&gt;&lt;a href=&quot;#prompt-工程关注什么&quot;&gt;Prompt 工程关注什么&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;维度&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;角色&lt;/td&gt;&lt;td&gt;你是谁&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;任务&lt;/td&gt;&lt;td&gt;要完成什么&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;约束&lt;/td&gt;&lt;td&gt;不能做什么&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;上下文&lt;/td&gt;&lt;td&gt;当前任务背景&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;输出格式&lt;/td&gt;&lt;td&gt;要怎么呈现&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;示例&lt;/td&gt;&lt;td&gt;参考什么风格&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;局限性&quot;&gt;&lt;a href=&quot;#局限性&quot;&gt;局限性&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Prompt 工程可以提升单次回答质量，但有天然边界：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI 不知道项目历史&lt;/li&gt;
&lt;li&gt;AI 不知道之前做过什么&lt;/li&gt;
&lt;li&gt;AI 不知道团队规范&lt;/li&gt;
&lt;li&gt;AI 不知道当前任务处于什么阶段&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以，当任务从“问一个问题”变成“持续开发一个系统”时，仅靠 Prompt 不够。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;3-第二阶段context-engineering&quot;&gt;&lt;a href=&quot;#3-第二阶段context-engineering&quot;&gt;3. 第二阶段：Context Engineering&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;核心问题-1&quot;&gt;&lt;a href=&quot;#核心问题-1&quot;&gt;核心问题&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如何让 AI 不只是理解一句话，而是理解整个项目环境？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Prompt 是一句指令，Context 是一组工作背景。&lt;/p&gt;
&lt;p&gt;例如，在开发一个 CRM 系统时，与其只说：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;帮我开发客户跟进模块&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;不如把这些内容一起交给 AI：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;项目结构：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;docs/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  ├── PRD.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  ├── ARCHITECTURE.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  ├── user_stories/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  ├── ADRs/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  └── tasks/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;backend/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  └── tests/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;frontend/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  └── tests/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;技术栈：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Spring Boot 3&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;PostgreSQL&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Redis&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;React&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;当前任务：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;TASK-023 跟进记录自动提醒&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;context-工程解决什么&quot;&gt;&lt;a href=&quot;#context-工程解决什么&quot;&gt;Context 工程解决什么&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;1-长期记忆&quot;&gt;&lt;a href=&quot;#1-长期记忆&quot;&gt;1. 长期记忆&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;例如 &lt;code dir=&quot;auto&quot;&gt;docs/ADRs/ADR-001-customer-state-machine.md&lt;/code&gt;：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;ADR-001&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Title:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;客户状态机设计&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Date:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;2026-07-01&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Decision:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;客户状态采用有限状态机。&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Context:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;避免状态判断逻辑分散在多个服务中。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这样 AI 下次回来时，不会重新发明一套方案。&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;2-项目知识库&quot;&gt;&lt;a href=&quot;#2-项目知识库&quot;&gt;2. 项目知识库&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;例如 &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt;：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;规则：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;修改数据库必须：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;1. 创建 migration&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;2. 更新 schema&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;3. 添加测试&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这相当于把团队规范变成 AI 可消费的工程规则。&lt;/p&gt;
&lt;div&gt;&lt;h4 id=&quot;3-当前任务上下文&quot;&gt;&lt;a href=&quot;#3-当前任务上下文&quot;&gt;3. 当前任务上下文&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;例如 &lt;code dir=&quot;auto&quot;&gt;docs/tasks/TASK-001.md&lt;/code&gt;：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;目标：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;实现登录&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;输入：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;用户名和密码&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;输出：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;JWT Token&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;验收：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;自动化测试通过&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;局限性-1&quot;&gt;&lt;a href=&quot;#局限性-1&quot;&gt;局限性&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Context 工程让 AI “知道得更多”，但它仍然往往只是一个被动执行者。&lt;/p&gt;
&lt;p&gt;也就是说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你给什么，它看什么&lt;/li&gt;
&lt;li&gt;你问一步，它答一步&lt;/li&gt;
&lt;li&gt;它还没有被纳入可持续的软件交付体系&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;于是就进入下一阶段。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;4-第三阶段harness-engineering&quot;&gt;&lt;a href=&quot;#4-第三阶段harness-engineering&quot;&gt;4. 第三阶段：Harness Engineering&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;核心问题-2&quot;&gt;&lt;a href=&quot;#核心问题-2&quot;&gt;核心问题&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如何把 AI 从“会做事的模型”升级为“可管理、可验证、可持续协作的工程 Agent”？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Harness 可以理解为“缰绳”或“工作控制系统”。&lt;/p&gt;
&lt;p&gt;重点不再是“如何提示 AI”，而是“如何为 AI 设计一个可靠的工作环境”。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;harness-的本质&quot;&gt;&lt;a href=&quot;#harness-的本质&quot;&gt;Harness 的本质&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;如果说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Prompt&lt;/code&gt; 像告诉一个新人“你现在做什么”&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Context&lt;/code&gt; 像把项目资料交给他&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那么 &lt;code dir=&quot;auto&quot;&gt;Harness&lt;/code&gt; 更像是给这个新人配齐：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;工作制度&lt;/li&gt;
&lt;li&gt;任务流转规则&lt;/li&gt;
&lt;li&gt;检查点&lt;/li&gt;
&lt;li&gt;状态记录&lt;/li&gt;
&lt;li&gt;自动验证机制&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;一个典型的-harness-项目&quot;&gt;&lt;a href=&quot;#一个典型的-harness-项目&quot;&gt;一个典型的 Harness 项目&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── docs/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│   ├── PRD.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│   ├── ARCHITECTURE.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│   ├── user_stories/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│   ├── ADRs/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│   └── tasks/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── backend/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│   └── tests/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── frontend/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;│   └── tests/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── feature_list.json&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;├── PROGRESS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;└── scripts/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    ├── init.sh&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    ├── test.sh&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    └── run.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;在-harness-中ai-如何工作&quot;&gt;&lt;a href=&quot;#在-harness-中ai-如何工作&quot;&gt;在 Harness 中，AI 如何工作&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;读取 AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 读取 PRD / user_story / ADR / task&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 修改代码&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 执行测试脚本&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 更新 PROGRESS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 输出结果&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;harness-解决什么&quot;&gt;&lt;a href=&quot;#harness-解决什么&quot;&gt;Harness 解决什么&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;1-防止-ai失忆&quot;&gt;&lt;a href=&quot;#1-防止-ai失忆&quot;&gt;1. 防止 AI“失忆”&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;依靠：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;PROGRESS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;docs/ADRs/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;docs/tasks/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h4 id=&quot;2-防止-ai乱改&quot;&gt;&lt;a href=&quot;#2-防止-ai乱改&quot;&gt;2. 防止 AI“乱改”&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;依靠：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;任务约束&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;自动化测试&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h4 id=&quot;3-支持长期任务&quot;&gt;&lt;a href=&quot;#3-支持长期任务&quot;&gt;3. 支持长期任务&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;p&gt;例如一个 CRM 项目持续开发半年，AI 每次回来都可以先读取：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;当前状态：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;已完成客户管理、联系人管理&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;下一步：&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;开发销售机会评分&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这样它就不是一次性的回答器，而是可持续协作的 Agent。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;5-第四阶段loop-engineering&quot;&gt;&lt;a href=&quot;#5-第四阶段loop-engineering&quot;&gt;5. 第四阶段：Loop Engineering&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;核心问题-3&quot;&gt;&lt;a href=&quot;#核心问题-3&quot;&gt;核心问题&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如何让 AI 不只是执行任务，而是在反馈中持续修正，直到达到目标？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Loop Engineering 的重点是闭环。&lt;/p&gt;
&lt;p&gt;传统开发常常是线性的：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;需求 -&gt; 编码 -&gt; 测试 -&gt; 人工检查 -&gt; 发布&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Loop 模式则是：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;需求&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; AI 规划&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; AI 编码&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 自动测试&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 分析失败原因&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; AI 修复&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 再次测试&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 直到通过&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;一个典型示例&quot;&gt;&lt;a href=&quot;#一个典型示例&quot;&gt;一个典型示例&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;任务：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;实现用户登录&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;第一次执行：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;写代码&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;测试返回：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;失败&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;原因：JWT 过期时间配置错误&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;随后 Agent 继续：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;修改代码&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;重新测试&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;直到通过&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;loop-工程依赖什么&quot;&gt;&lt;a href=&quot;#loop-工程依赖什么&quot;&gt;Loop 工程依赖什么&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;div&gt;&lt;h4 id=&quot;1-自动测试&quot;&gt;&lt;a href=&quot;#1-自动测试&quot;&gt;1. 自动测试&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;mvn test&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;npm test&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;pytest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h4 id=&quot;2-自动反馈&quot;&gt;&lt;a href=&quot;#2-自动反馈&quot;&gt;2. 自动反馈&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;test result&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;error log&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;coverage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h4 id=&quot;3-状态管理&quot;&gt;&lt;a href=&quot;#3-状态管理&quot;&gt;3. 状态管理&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;TASK-001&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;status: implementing&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;test: failed&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;reason: jwt config error&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;本质变化&quot;&gt;&lt;a href=&quot;#本质变化&quot;&gt;本质变化&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;到这一步，AI 不再只是“帮你写代码”，而是开始具备“遇错修正、逐步收敛”的工程行为。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;6-graph-engineering复杂-agent-系统的执行结构&quot;&gt;&lt;a href=&quot;#6-graph-engineering复杂-agent-系统的执行结构&quot;&gt;6. Graph Engineering：复杂 Agent 系统的执行结构&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;为什么-graph-会出现&quot;&gt;&lt;a href=&quot;#为什么-graph-会出现&quot;&gt;为什么 Graph 会出现&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;当 AI-Agent 的工作流越来越复杂时，流程就不再是简单直线，而更像一张图。&lt;/p&gt;
&lt;p&gt;例如“开发 CRM 的退款审批功能”这类任务，真实过程往往是：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;需求分析&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 架构检查&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 任务拆解&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 编码&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 测试&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 判断是否通过&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;   |- 通过 -&gt; 提交&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;   |- 不通过 -&gt; 修复 -&gt; 回到测试&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这已经不是单链路，而是多节点、多分支、多回路结构。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;graph-的核心组成&quot;&gt;&lt;a href=&quot;#graph-的核心组成&quot;&gt;Graph 的核心组成&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Graph Engineering 把 Agent 工作流表示为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Node&lt;/code&gt;：谁来执行&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Edge&lt;/code&gt;：下一步去哪里&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;State&lt;/code&gt;：共享状态是什么&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Decision&lt;/code&gt;：在什么条件下跳转&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;PRD 分析 Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    -&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;任务拆解 Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    -&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Coding Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    -&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Testing Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    -&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;pass?&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt; |- yes -&gt; Review / Merge&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt; |- no  -&gt; Debug Agent -&gt; 回到 Testing&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;graph-和-harness-的关系&quot;&gt;&lt;a href=&quot;#graph-和-harness-的关系&quot;&gt;Graph 和 Harness 的关系&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;这里最容易混淆。&lt;/p&gt;
&lt;p&gt;可以这样理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Harness&lt;/code&gt; 是外部工程治理系统&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Graph&lt;/code&gt; 是内部执行流编排结构&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;也就是说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Harness 负责规定“AI 应该如何工作”&lt;/li&gt;
&lt;li&gt;Graph 负责定义“AI 下一步该由谁做、怎么流转”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关系可以表示为：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Harness&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  └── Graph&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;       └── Loop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这也是为什么 Graph 往往不是单独存在，而是嵌入在 Harness 中，服务于 Loop。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;一个-graph-示例&quot;&gt;&lt;a href=&quot;#一个-graph-示例&quot;&gt;一个 Graph 示例&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  - &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;planner&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    agent&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;requirement-agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  - &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    agent&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;architecture-agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  - &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;coder&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    agent&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;coding-agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  - &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    agent&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;test-agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;edges&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  planner&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    next&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  architect&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    next&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;coder&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  coder&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    next&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  tester&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    success&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;      next&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    failed&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;      next&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;coder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这个配置本质上就是把“谁先做、失败后回哪一步”显式地工程化了。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;7-五个概念放在一起怎么看&quot;&gt;&lt;a href=&quot;#7-五个概念放在一起怎么看&quot;&gt;7. 五个概念放在一起怎么看&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;从能力层级看&quot;&gt;&lt;a href=&quot;#从能力层级看&quot;&gt;从能力层级看&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Prompt Engineering&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;        -&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Context Engineering&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;        -&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Harness Engineering&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;        -&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Loop Engineering&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Graph Engineering 作为执行流结构，通常嵌入 Harness，并支撑 Loop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;从解决的问题看&quot;&gt;&lt;a href=&quot;#从解决的问题看&quot;&gt;从解决的问题看&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;概念&lt;/th&gt;&lt;th&gt;主要解决的问题&lt;/th&gt;&lt;th&gt;类比&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Prompt&lt;/td&gt;&lt;td&gt;怎么把任务说清楚&lt;/td&gt;&lt;td&gt;沟通技巧&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Context&lt;/td&gt;&lt;td&gt;怎么让 AI 知道背景&lt;/td&gt;&lt;td&gt;给新人做项目培训&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Harness&lt;/td&gt;&lt;td&gt;怎么让 AI 在工程里可靠工作&lt;/td&gt;&lt;td&gt;项目管理体系&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Loop&lt;/td&gt;&lt;td&gt;怎么让 AI 自动纠错迭代&lt;/td&gt;&lt;td&gt;持续集成与反馈闭环&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graph&lt;/td&gt;&lt;td&gt;怎么组织多角色、多步骤流转&lt;/td&gt;&lt;td&gt;工作流引擎&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&lt;h3 id=&quot;从软件公司的类比看&quot;&gt;&lt;a href=&quot;#从软件公司的类比看&quot;&gt;从软件公司的类比看&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;概念&lt;/th&gt;&lt;th&gt;对应公司里的什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Prompt&lt;/td&gt;&lt;td&gt;领导下达的一条需求&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Context&lt;/td&gt;&lt;td&gt;公司的知识库和历史资料&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Harness&lt;/td&gt;&lt;td&gt;公司的制度、流程和协作规范&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graph&lt;/td&gt;&lt;td&gt;组织内部的任务流转图&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Loop&lt;/td&gt;&lt;td&gt;复盘、质检和改进机制&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;8-一个真实的-ai-agent-工程落地路径&quot;&gt;&lt;a href=&quot;#8-一个真实的-ai-agent-工程落地路径&quot;&gt;8. 一个真实的 AI-Agent 工程落地路径&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;假设开发一个 CRM 系统，可以把整个过程理解为四步升级。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;第一步只有-prompt&quot;&gt;&lt;a href=&quot;#第一步只有-prompt&quot;&gt;第一步：只有 Prompt&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;设计客户跟进模块&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;结果通常是：AI 能给方案，但不了解你的真实项目。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;第二步加入-context&quot;&gt;&lt;a href=&quot;#第二步加入-context&quot;&gt;第二步：加入 Context&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;把这些资料交给 AI：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;PRD.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;ARCHITECTURE.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;docs/user_stories/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;docs/ADRs/&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;docs/tasks/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;结果是：AI 开始理解业务、架构和历史决策。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;第三步建立-harness&quot;&gt;&lt;a href=&quot;#第三步建立-harness&quot;&gt;第三步：建立 Harness&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;再加入：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;AGENTS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;feature_list.json&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;PROGRESS.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;scripts/test.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;结果是：AI 可以在明确规则下持续开发，而不是一次性回答。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;第四步引入-loop-和-graph&quot;&gt;&lt;a href=&quot;#第四步引入-loop-和-graph&quot;&gt;第四步：引入 Loop 和 Graph&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;此时系统开始形成：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;任务拆解&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 编码&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 测试&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 失败分析&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 修复&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 回归测试&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;如果进一步使用多个 Agent 协作，还会变成：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;Planner Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; Task Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; Coding Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; Review Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; Test Agent&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; Merge&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这时，AI 才真正从“聊天机器人”演进为“软件工程 Agent 系统”。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;9-prdfeaturetaskprogress-在这条路线中的位置&quot;&gt;&lt;a href=&quot;#9-prdfeaturetaskprogress-在这条路线中的位置&quot;&gt;9. PRD、Feature、TASK、PROGRESS 在这条路线中的位置&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;这是很多人研究 Harness 时最容易问到的问题。&lt;/p&gt;
&lt;p&gt;推荐理解为：&lt;/p&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;产品需求&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; PRD.md&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; Feature 拆解&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; feature_list.json&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; TASK 拆解&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; Agent 执行 TASK&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; Loop 验证&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;-&gt; 更新 PROGRESS.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;它们分别承担不同职责：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;PRD&lt;/code&gt;：描述要做什么&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Feature&lt;/code&gt;：描述要拆成哪些能力块&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;TASK&lt;/code&gt;：描述当前要执行的具体工作单元&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;PROGRESS&lt;/code&gt;：描述当前做到哪里、下一步做什么&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这四者共同构成了 Harness 的核心骨架。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;10-总结ai-agent-工程体系真正的竞争点&quot;&gt;&lt;a href=&quot;#10-总结ai-agent-工程体系真正的竞争点&quot;&gt;10. 总结：AI-Agent 工程体系真正的竞争点&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;AI 软件开发的重点是设计出更合适的 &lt;strong&gt;AI-Agent 工程体系&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;可以把全文收束成五句话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Prompt&lt;/code&gt; 是指令设计&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Context&lt;/code&gt; 是知识注入&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Harness&lt;/code&gt; 是工作系统&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Loop&lt;/code&gt; 是自动反馈闭环&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Graph&lt;/code&gt; 是执行流编排结构&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;一个由 Context、Harness、Graph、Loop 共同驱动的可持续 AI-Agent 软件工程系统&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded><category>核心问题</category><category>局限性</category><category>一个典型示例</category><category>本质变化</category><category>从能力层级看</category></item><item><title>ai-agent-graph-engineering</title><link>https://www.haisong.cc/blog/ai-agent-graph-engineering/</link><guid isPermaLink="true">https://www.haisong.cc/blog/ai-agent-graph-engineering/</guid><description>AI Agent Graph Engineering 旨在解决复杂多智能体系统的控制流显式化问题，通过将系统建模为包含节点、边和共享上下文的状态图，实现分支、回环与持久化。核心在于利用显式状态机替代简单链式结构，构建包含状态模式、节点边设计及运行时的工程骨架。该模式适用于多阶段、需人工干预或高合规要求的场景，能构建可运行、可追踪、可治理的整体流程。</description><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;ai-agent-graph-engineering&quot;&gt;&lt;a href=&quot;#ai-agent-graph-engineering&quot;&gt;ai-agent-graph-engineering&lt;/a&gt;&lt;/h1&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;定义&quot;&gt;&lt;a href=&quot;#定义&quot;&gt;定义&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;AI Agent Graph Engineering&lt;/code&gt; 不是简单地“把多个 agent 连起来”，而是把一个复杂 agent 系统显式建模为&lt;strong&gt;状态图&lt;/strong&gt;或&lt;strong&gt;控制流图&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;节点表示可命名的工作单元&lt;/li&gt;
&lt;li&gt;边表示状态跃迁或路由规则&lt;/li&gt;
&lt;li&gt;图状态表示系统在整个执行过程中的共享上下文&lt;/li&gt;
&lt;li&gt;图运行时负责分支、回环、暂停、恢复、并行与持久化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果说 loop engineering 关注的是“单个闭环如何反复工作”，那么 graph engineering 关注的是“多个闭环、多个阶段、多个角色如何组成一个可治理的整体流程”。&lt;/p&gt;
&lt;p&gt;它的核心不是让 agent 更像人，而是让系统结构更像一个可审计、可恢复、可演化的业务流程控制面。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;核心结论&quot;&gt;&lt;a href=&quot;#核心结论&quot;&gt;核心结论&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;1-graph-engineering-解决的是复杂控制流显式化&quot;&gt;&lt;a href=&quot;#1-graph-engineering-解决的是复杂控制流显式化&quot;&gt;1. Graph engineering 解决的是复杂控制流显式化&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;很多 agent 系统在早期都能靠一个 &lt;code dir=&quot;auto&quot;&gt;while&lt;/code&gt; 循环或一个大 prompt 勉强工作，但一旦进入真实业务场景，就会出现下面几类需求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不同条件走不同路径&lt;/li&gt;
&lt;li&gt;某些步骤需要重试，某些步骤不能重试&lt;/li&gt;
&lt;li&gt;某些节点必须人工审批&lt;/li&gt;
&lt;li&gt;某些子任务可以并行&lt;/li&gt;
&lt;li&gt;某些状态要持久化，数小时后继续&lt;/li&gt;
&lt;li&gt;某些失败要回退到特定节点，而不是整个流程重来&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些需求本质上不是“提示词优化”问题，而是&lt;strong&gt;控制流建模&lt;/strong&gt;问题。Graph engineering 的价值，就是把这些本来藏在 prompt、if-else 和临时代码里的逻辑，提升为显式的系统结构。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-graph-比-loop-更适合表达多阶段多分支多角色&quot;&gt;&lt;a href=&quot;#2-graph-比-loop-更适合表达多阶段多分支多角色&quot;&gt;2. Graph 比 loop 更适合表达“多阶段、多分支、多角色”&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Loop 的基本单位是“做一步，再决定下一步”；Graph 的基本单位是“在多个节点之间做状态跃迁”。&lt;/p&gt;
&lt;p&gt;因此：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;loop 更像一个局部执行器&lt;/li&gt;
&lt;li&gt;graph 更像一个总控调度器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个成熟的 agent 系统往往不是二选一，而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图的每个节点内部可能运行一个 loop&lt;/li&gt;
&lt;li&gt;图负责决定这些 loop 何时开始、何时切换、何时暂停、何时汇合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以可以把 graph engineering 理解为：&lt;strong&gt;对 loops 的更高一层编排工程&lt;/strong&gt;。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-graph-engineering-的价值不在多-agent而在显式状态机&quot;&gt;&lt;a href=&quot;#3-graph-engineering-的价值不在多-agent而在显式状态机&quot;&gt;3. Graph engineering 的价值不在“多 agent”，而在“显式状态机”&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;不少人把 graph engineering 等同于 multi-agent orchestration，这只说对了一半。&lt;/p&gt;
&lt;p&gt;真正关键的不是 agent 数量，而是流程是否被建模成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有类型的 state&lt;/li&gt;
&lt;li&gt;有命名的 nodes&lt;/li&gt;
&lt;li&gt;有明确的 edges&lt;/li&gt;
&lt;li&gt;有可解释的 route function&lt;/li&gt;
&lt;li&gt;有持久化和恢复点&lt;/li&gt;
&lt;li&gt;有可追踪的执行轨迹&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;即使只有一个 agent，只要它需要经过“检索 -&gt; 判断证据是否足够 -&gt; 不足则再检索 -&gt; 足够则生成 -&gt; 高风险则人工审核 -&gt; 审核后输出”这样的流程，它就已经更适合 graph，而不再只是一个简单 loop。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;graph-的最小工程骨架&quot;&gt;&lt;a href=&quot;#graph-的最小工程骨架&quot;&gt;Graph 的最小工程骨架&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;一个可落地的 agent graph，至少包含 5 个基本构件：&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-state-schema&quot;&gt;&lt;a href=&quot;#1-state-schema&quot;&gt;1. State Schema&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;这是 graph engineering 的第一性对象。&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;State&lt;/code&gt; 不只是“聊天历史”，而是整个执行系统的共享状态。常见字段包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户输入&lt;/li&gt;
&lt;li&gt;当前阶段&lt;/li&gt;
&lt;li&gt;中间结果&lt;/li&gt;
&lt;li&gt;检索证据&lt;/li&gt;
&lt;li&gt;工具输出&lt;/li&gt;
&lt;li&gt;风险评分&lt;/li&gt;
&lt;li&gt;错误计数&lt;/li&gt;
&lt;li&gt;重试次数&lt;/li&gt;
&lt;li&gt;审批状态&lt;/li&gt;
&lt;li&gt;最终产物&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好的 graph 系统里，状态应尽量类型化、字段化，而不是全部塞进自由文本。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-nodes&quot;&gt;&lt;a href=&quot;#2-nodes&quot;&gt;2. Nodes&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Node 是图中的工作单元。一个 node 最好满足三个特征：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;语义独立&lt;/li&gt;
&lt;li&gt;输入输出清晰&lt;/li&gt;
&lt;li&gt;值得在 trace、审计日志和重试策略里单独出现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个简单判断标准是：&lt;/p&gt;
&lt;p&gt;如果某一步值得被单独观察、单独重试、单独统计或单独审批，它就应该成为一个 node。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-edges&quot;&gt;&lt;a href=&quot;#3-edges&quot;&gt;3. Edges&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Edge 表示节点之间的跃迁关系，通常分成两类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Unconditional edge&lt;/code&gt;：固定流转&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Conditional edge&lt;/code&gt;：根据当前 state 决定下一跳&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;真正体现 graph engineering 水平的，通常不是 node 本身，而是 route 逻辑是否明确、稳定、可解释。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;4-runtime&quot;&gt;&lt;a href=&quot;#4-runtime&quot;&gt;4. Runtime&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Graph 不是静态图纸，而是一个运行时系统。成熟 runtime 通常要支持：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;conditional routing&lt;/li&gt;
&lt;li&gt;retries&lt;/li&gt;
&lt;li&gt;interrupts&lt;/li&gt;
&lt;li&gt;checkpoints&lt;/li&gt;
&lt;li&gt;resume&lt;/li&gt;
&lt;li&gt;streaming&lt;/li&gt;
&lt;li&gt;tracing&lt;/li&gt;
&lt;li&gt;parallel fan-out / fan-in&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这也是为什么 LangGraph 这类框架的价值主要不在“多一个 DSL”，而在“提供长流程 agent 的控制平面”。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;5-observability&quot;&gt;&lt;a href=&quot;#5-observability&quot;&gt;5. Observability&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;没有可观测性，图只会比 loop 更难调试。&lt;/p&gt;
&lt;p&gt;至少应记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;走过哪些节点&lt;/li&gt;
&lt;li&gt;每次路由为什么这样决定&lt;/li&gt;
&lt;li&gt;哪些状态字段发生了变化&lt;/li&gt;
&lt;li&gt;哪一步失败&lt;/li&gt;
&lt;li&gt;为什么重试&lt;/li&gt;
&lt;li&gt;人工在哪个点介入&lt;/li&gt;
&lt;li&gt;最终在哪个条件下终止&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;图越复杂，observability 越不是附属品，而是主体设计。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;graph-与-loop-的关系&quot;&gt;&lt;a href=&quot;#graph-与-loop-的关系&quot;&gt;Graph 与 Loop 的关系&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;最容易混淆的地方，是把 graph 和 loop 写成同一个东西。&lt;/p&gt;
&lt;p&gt;更准确的关系应该是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Loop engineering&lt;/code&gt; 解决局部闭环执行&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Graph engineering&lt;/code&gt; 解决全局结构编排&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以把它们理解成两个层级：&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-loop-是局部控制单元&quot;&gt;&lt;a href=&quot;#1-loop-是局部控制单元&quot;&gt;1. Loop 是局部控制单元&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;例如一个“检索不足就再搜一轮”的 evidence loop，本质上是 loop。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-graph-是上层调度结构&quot;&gt;&lt;a href=&quot;#2-graph-是上层调度结构&quot;&gt;2. Graph 是上层调度结构&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先做问题分类&lt;/li&gt;
&lt;li&gt;再进入不同子流程&lt;/li&gt;
&lt;li&gt;某条子流程内部执行检索 loop&lt;/li&gt;
&lt;li&gt;之后进入风险评估节点&lt;/li&gt;
&lt;li&gt;高风险时暂停等待人工审批&lt;/li&gt;
&lt;li&gt;审批通过后恢复执行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这整个东西更适合建成 graph。&lt;/p&gt;
&lt;p&gt;一句话说：&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;loop 负责反复做对，graph 负责把不同的“做对方式”组织成系统。&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;为什么图比链或-dag-更合适&quot;&gt;&lt;a href=&quot;#为什么图比链或-dag-更合适&quot;&gt;为什么图比链或 DAG 更合适&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;很多人一开始会用 chain 或普通 workflow，但真实 agent 运行一段时间后会发现不够用。&lt;/p&gt;
&lt;p&gt;原因在于 graph 往往同时支持：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;回环&lt;/li&gt;
&lt;li&gt;条件分支&lt;/li&gt;
&lt;li&gt;状态持久化&lt;/li&gt;
&lt;li&gt;中断恢复&lt;/li&gt;
&lt;li&gt;并行汇合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;而普通线性链更适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;固定顺序&lt;/li&gt;
&lt;li&gt;短流程&lt;/li&gt;
&lt;li&gt;无需恢复&lt;/li&gt;
&lt;li&gt;无需复杂状态跃迁&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，graph engineering 的关键判断不在于“流程是不是多步”，而在于“流程是否具有复杂状态跃迁特征”。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;什么时候应该上-graph&quot;&gt;&lt;a href=&quot;#什么时候应该上-graph&quot;&gt;什么时候应该上 graph&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;下面这些信号一旦同时出现 2 到 3 个以上，通常就值得把系统上升为 graph：&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-路径不是固定的&quot;&gt;&lt;a href=&quot;#1-路径不是固定的&quot;&gt;1. 路径不是固定的&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;系统需要按条件进入不同节点，而不是一直顺序执行。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-有局部重试&quot;&gt;&lt;a href=&quot;#2-有局部重试&quot;&gt;2. 有局部重试&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;失败后只想重跑某个阶段，而不是整条链重来。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-有人工暂停点&quot;&gt;&lt;a href=&quot;#3-有人工暂停点&quot;&gt;3. 有人工暂停点&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;例如审批、升级、复核、确认。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;4-需要长时间挂起后恢复&quot;&gt;&lt;a href=&quot;#4-需要长时间挂起后恢复&quot;&gt;4. 需要长时间挂起后恢复&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;例如工单升级后几个小时再继续。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;5-有多个-specialist-或-subagent&quot;&gt;&lt;a href=&quot;#5-有多个-specialist-或-subagent&quot;&gt;5. 有多个 specialist 或 subagent&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;不同角色负责不同子问题，需要 supervisor 或路由器进行编排。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;6-有并行子任务&quot;&gt;&lt;a href=&quot;#6-有并行子任务&quot;&gt;6. 有并行子任务&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;例如同时检索多个来源、并行评估多个候选方案，再汇总结果。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;7-合规和审计要求高&quot;&gt;&lt;a href=&quot;#7-合规和审计要求高&quot;&gt;7. 合规和审计要求高&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;需要明确知道“系统为什么走到这里”。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;节点设计原则&quot;&gt;&lt;a href=&quot;#节点设计原则&quot;&gt;节点设计原则&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;graph 最大的设计错误，通常不是框架选错，而是 node 切分错。&lt;/p&gt;
&lt;p&gt;推荐遵守以下原则：&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-按产品事件切节点&quot;&gt;&lt;a href=&quot;#1-按产品事件切节点&quot;&gt;1. 按产品事件切节点&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;好的节点边界往往对应真实业务事件，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;schema lookup&lt;/li&gt;
&lt;li&gt;retrieve evidence&lt;/li&gt;
&lt;li&gt;grade evidence&lt;/li&gt;
&lt;li&gt;generate draft&lt;/li&gt;
&lt;li&gt;validate result&lt;/li&gt;
&lt;li&gt;request approval&lt;/li&gt;
&lt;li&gt;resume after approval&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果一个步骤对产品行为有意义，它通常就值得成为 node。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-route-function-保持小而明确&quot;&gt;&lt;a href=&quot;#2-route-function-保持小而明确&quot;&gt;2. Route function 保持小而明确&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;路由逻辑最好只做“状态判断”，不要承担大段业务生成逻辑。&lt;/p&gt;
&lt;p&gt;错误做法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 route function 里隐藏复杂 prompt 推理&lt;/li&gt;
&lt;li&gt;用大量隐式规则决定下一跳&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正确做法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先由节点产出结构化判断信号&lt;/li&gt;
&lt;li&gt;再由路由器基于该信号做简单选择&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;3-node-尽量幂等&quot;&gt;&lt;a href=&quot;#3-node-尽量幂等&quot;&gt;3. Node 尽量幂等&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;因为 graph 系统常常涉及重试、恢复、重复执行。节点如果副作用不透明，会让恢复逻辑非常脆弱。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;4-副作用节点与判断节点分离&quot;&gt;&lt;a href=&quot;#4-副作用节点与判断节点分离&quot;&gt;4. 副作用节点与判断节点分离&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;例如“是否应该发送邮件”与“真正发送邮件”最好拆开。这样失败、重试、审计都会更清晰。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;状态设计原则&quot;&gt;&lt;a href=&quot;#状态设计原则&quot;&gt;状态设计原则&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;graph engineering 的成败，往往 60% 取决于 state schema。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-把共享状态做薄而不是做乱&quot;&gt;&lt;a href=&quot;#1-把共享状态做薄而不是做乱&quot;&gt;1. 把共享状态做薄，而不是做乱&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;共享 state 不是越大越好。应只放“跨节点确实要共享”的内容。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-区分控制状态与业务状态&quot;&gt;&lt;a href=&quot;#2-区分控制状态与业务状态&quot;&gt;2. 区分控制状态与业务状态&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;建议至少分成两类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Control state&lt;/code&gt;：当前节点、重试次数、审批状态、暂停标志、错误码&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Domain state&lt;/code&gt;：用户请求、证据、摘要、分析结果、最终结论&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;3-为路由保留显式字段&quot;&gt;&lt;a href=&quot;#3-为路由保留显式字段&quot;&gt;3. 为路由保留显式字段&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;不要让路由器去解析一大段自然语言。应该提前写入结构化字段，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;risk_level&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;needs_human_review&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;evidence_quality&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;retry_count&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;task_status&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;4-为恢复保留足够上下文&quot;&gt;&lt;a href=&quot;#4-为恢复保留足够上下文&quot;&gt;4. 为恢复保留足够上下文&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;如果一个流程会暂停数小时后恢复，state 必须足以支持继续，而不是要求系统重新猜测前情。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;常见图模式&quot;&gt;&lt;a href=&quot;#常见图模式&quot;&gt;常见图模式&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;1-router-pattern&quot;&gt;&lt;a href=&quot;#1-router-pattern&quot;&gt;1. Router Pattern&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;先分类，再分流到不同 specialist 或子流程。&lt;/p&gt;
&lt;p&gt;适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多领域问答&lt;/li&gt;
&lt;li&gt;多工单类型处理&lt;/li&gt;
&lt;li&gt;多策略执行入口&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;2-retry--repair-pattern&quot;&gt;&lt;a href=&quot;#2-retry--repair-pattern&quot;&gt;2. Retry / Repair Pattern&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;执行后先验证，失败则回到修复节点或重新规划节点。&lt;/p&gt;
&lt;p&gt;适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQL 生成&lt;/li&gt;
&lt;li&gt;代码修复&lt;/li&gt;
&lt;li&gt;检索纠偏&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;3-hitl-pattern&quot;&gt;&lt;a href=&quot;#3-hitl-pattern&quot;&gt;3. HITL Pattern&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;在高风险节点 &lt;code dir=&quot;auto&quot;&gt;interrupt&lt;/code&gt;，等待人工输入，再 &lt;code dir=&quot;auto&quot;&gt;resume&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;审批&lt;/li&gt;
&lt;li&gt;合规&lt;/li&gt;
&lt;li&gt;医疗/法律/HR 高风险场景&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;4-supervisor-pattern&quot;&gt;&lt;a href=&quot;#4-supervisor-pattern&quot;&gt;4. Supervisor Pattern&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;由一个 supervisor 根据 state 把任务分配给不同 specialist。&lt;/p&gt;
&lt;p&gt;适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;研究、写作、分析、审校分工&lt;/li&gt;
&lt;li&gt;多 agent 协作系统&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;5-fan-out--fan-in-pattern&quot;&gt;&lt;a href=&quot;#5-fan-out--fan-in-pattern&quot;&gt;5. Fan-out / Fan-in Pattern&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;并行跑多个节点，再在 join 节点汇总。&lt;/p&gt;
&lt;p&gt;适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多来源检索&lt;/li&gt;
&lt;li&gt;多候选方案生成&lt;/li&gt;
&lt;li&gt;多评分器评估&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;高质量-graph-的六个工程原则&quot;&gt;&lt;a href=&quot;#高质量-graph-的六个工程原则&quot;&gt;高质量 graph 的六个工程原则&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;1-路由规则必须显式&quot;&gt;&lt;a href=&quot;#1-路由规则必须显式&quot;&gt;1. 路由规则必须显式&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;分支条件应该写进 state 或 route function，而不是藏在 prompt 里。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-pause--resume-是一等公民&quot;&gt;&lt;a href=&quot;#2-pause--resume-是一等公民&quot;&gt;2. Pause / Resume 是一等公民&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;凡是涉及人工审核或外部等待的系统，都应把暂停与恢复当作主路径设计，而不是异常分支。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-检查点必须能支撑故障恢复&quot;&gt;&lt;a href=&quot;#3-检查点必须能支撑故障恢复&quot;&gt;3. 检查点必须能支撑故障恢复&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;checkpoint 的价值不是“方便调试”，而是进程挂掉、服务重启、任务迁移后仍能继续执行。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;4-图要服务业务契约而不是追求漂亮结构&quot;&gt;&lt;a href=&quot;#4-图要服务业务契约而不是追求漂亮结构&quot;&gt;4. 图要服务业务契约，而不是追求漂亮结构&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;不是所有流程都值得建成复杂图。结构是为业务控制需求服务的。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;5-图上每条边都要可解释&quot;&gt;&lt;a href=&quot;#5-图上每条边都要可解释&quot;&gt;5. 图上每条边都要可解释&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;如果一条边走过去之后，团队说不清楚“为什么走这里”，那它就是坏边。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;6-优先把高风险节点显式化&quot;&gt;&lt;a href=&quot;#6-优先把高风险节点显式化&quot;&gt;6. 优先把高风险节点显式化&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;审批、支付、发送、删除、升级、对外承诺这类动作，必须在图里清楚可见。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;典型失效模式&quot;&gt;&lt;a href=&quot;#典型失效模式&quot;&gt;典型失效模式&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;1-graph-过度设计&quot;&gt;&lt;a href=&quot;#1-graph-过度设计&quot;&gt;1. Graph 过度设计&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;把简单线性流程也拆成复杂图，最终维护成本高于收益。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-节点过粗&quot;&gt;&lt;a href=&quot;#2-节点过粗&quot;&gt;2. 节点过粗&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;一个节点包掉大量逻辑，图看似简单，实则把复杂度重新藏回黑箱。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-节点过细&quot;&gt;&lt;a href=&quot;#3-节点过细&quot;&gt;3. 节点过细&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;每一步都拆成节点，导致图噪声过大、状态频繁跳转、调试体验很差。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;4-路由依赖自由文本&quot;&gt;&lt;a href=&quot;#4-路由依赖自由文本&quot;&gt;4. 路由依赖自由文本&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;route function 靠解析长段自然语言决策，导致路径不稳定、难测试。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;5-无恢复能力的假持久化&quot;&gt;&lt;a href=&quot;#5-无恢复能力的假持久化&quot;&gt;5. 无恢复能力的“假持久化”&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;虽然记录了日志，但 state 不足以 resume，本质上还是一次性流程。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;6-多-agent-无总控&quot;&gt;&lt;a href=&quot;#6-多-agent-无总控&quot;&gt;6. 多 agent 无总控&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;多个 specialist 同时存在，但没有统一 state 和路由规则，最后变成互相污染上下文的聊天群。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;推荐设计顺序&quot;&gt;&lt;a href=&quot;#推荐设计顺序&quot;&gt;推荐设计顺序&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;如果从零设计一个 agent graph，推荐按下面顺序推进：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先画出核心状态跃迁&lt;/li&gt;
&lt;li&gt;再定义 state schema&lt;/li&gt;
&lt;li&gt;再切 node 边界&lt;/li&gt;
&lt;li&gt;再写 route 规则&lt;/li&gt;
&lt;li&gt;再补 checkpoint / interrupt / retry&lt;/li&gt;
&lt;li&gt;最后才选框架或写 prompt&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这比一开始就画“agent 拓扑图”更有效，因为 graph engineering 的本质不是连线，而是控制流建模。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;与-langgraph-的关系&quot;&gt;&lt;a href=&quot;#与-langgraph-的关系&quot;&gt;与 LangGraph 的关系&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;当前关于 graph engineering 的主流实践，很多都落在 LangGraph 这一类框架上，但 graph engineering 本身不等于某个框架。&lt;/p&gt;
&lt;p&gt;从官方定义看，LangGraph 更准确的定位是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;低层 orchestration runtime&lt;/li&gt;
&lt;li&gt;用于 long-running、stateful agents&lt;/li&gt;
&lt;li&gt;强项在 durable execution、human-in-the-loop、persistence、streaming 和 tracing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这说明它解决的是&lt;strong&gt;图运行时问题&lt;/strong&gt;，而不是替你决定业务图应该怎么设计。&lt;/p&gt;
&lt;p&gt;换句话说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LangGraph 提供的是控制平面能力&lt;/li&gt;
&lt;li&gt;Graph engineering 决定的是你的系统结构是否合理&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;一个实用判断标准&quot;&gt;&lt;a href=&quot;#一个实用判断标准&quot;&gt;一个实用判断标准&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;评估一个 agent graph 是否成熟，可以直接问 8 个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;state schema 是否清晰且结构化&lt;/li&gt;
&lt;li&gt;每个 node 是否有明确职责&lt;/li&gt;
&lt;li&gt;路由规则是否显式可测&lt;/li&gt;
&lt;li&gt;是否支持局部重试而非全局重跑&lt;/li&gt;
&lt;li&gt;是否支持暂停与恢复&lt;/li&gt;
&lt;li&gt;是否能解释任意一次状态跃迁&lt;/li&gt;
&lt;li&gt;是否有关键节点的审计轨迹&lt;/li&gt;
&lt;li&gt;是否真的比线性流程更合适&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果前 7 项里有 3 项以上回答不清楚，这通常还不是 graph engineering，只是把复杂 if-else 画成了框图。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;参考来源&quot;&gt;&lt;a href=&quot;#参考来源&quot;&gt;参考来源&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.langchain.com/oss/python/langgraph/overview&quot;&gt;LangGraph overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/html/2607.19297v1&quot;&gt;Graph-Based Agentic AI with LangGraph: Workflow Pathways for Long-Running Stateful Business Processes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/blogs/opensource/building-a-stateful-it-service-desk-agent-with-langgraph-on-amazon-eks/&quot;&gt;Building a Stateful IT Service Desk Agent with LangGraph on Amazon EKS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/blogs/machine-learning/build-multi-agent-systems-with-langgraph-and-amazon-bedrock/&quot;&gt;Build multi-agent systems with LangGraph and Amazon Bedrock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.googleblog.com/announcing-adk-go-20/&quot;&gt;Build reliable multi-agent applications with ADK Go 2.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;一句话判断&quot;&gt;&lt;a href=&quot;#一句话判断&quot;&gt;一句话判断&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;AI agent graph engineering&lt;/code&gt; 的本质，是把复杂 agent 系统的状态、节点、分支、暂停、恢复和协作方式显式建模成一个可运行、可追踪、可治理的状态图系统。&lt;/p&gt;</content:encoded><category>定义</category><category>核心结论</category><category>2. Nodes</category><category>3. Edges</category><category>2. 有局部重试</category></item><item><title>ai-agent-loop-engineering</title><link>https://www.haisong.cc/blog/ai-agent-loop-engineering/</link><guid isPermaLink="true">https://www.haisong.cc/blog/ai-agent-loop-engineering/</guid><description>不是“把提示词写得更好”，而是把模型放进一个可重复执行、可观测、可终止、可纠错的运行闭环中。 核心对象不再是单次回答，而是整条执行轨迹： 读取当前状态 选择下一步动作 调用工具或执行操作 获取外部反馈 判断是否继续、回退、反思或停止 因此，真正决定 agent 上限的，往往不是模型本身，而是环路外面的工程脚手架：目标定义、工具接口、验证器、上下文管理、记忆系统、预算控制与安全边界。 Prompt…</description><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;ai-agent-loop-engineering&quot;&gt;&lt;a href=&quot;#ai-agent-loop-engineering&quot;&gt;ai-agent-loop-engineering&lt;/a&gt;&lt;/h1&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;定义&quot;&gt;&lt;a href=&quot;#定义&quot;&gt;定义&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;AI Agent Loop Engineering&lt;/code&gt; 不是“把提示词写得更好”，而是把模型放进一个可重复执行、可观测、可终止、可纠错的运行闭环中。&lt;/p&gt;
&lt;p&gt;核心对象不再是单次回答，而是整条执行轨迹：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;读取当前状态&lt;/li&gt;
&lt;li&gt;选择下一步动作&lt;/li&gt;
&lt;li&gt;调用工具或执行操作&lt;/li&gt;
&lt;li&gt;获取外部反馈&lt;/li&gt;
&lt;li&gt;判断是否继续、回退、反思或停止&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;因此，真正决定 agent 上限的，往往不是模型本身，而是环路外面的工程脚手架：目标定义、工具接口、验证器、上下文管理、记忆系统、预算控制与安全边界。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;核心结论&quot;&gt;&lt;a href=&quot;#核心结论&quot;&gt;核心结论&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;1-loop-比-prompt-更接近真实工程对象&quot;&gt;&lt;a href=&quot;#1-loop-比-prompt-更接近真实工程对象&quot;&gt;1. Loop 比 Prompt 更接近真实工程对象&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Prompt engineering 的关注点是“这一轮怎么说”；loop engineering 的关注点是“下一轮为什么还能继续做对”。&lt;/p&gt;
&lt;p&gt;在复杂任务里，单轮输出是否完美并不关键，关键是系统能否：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;发现错误&lt;/li&gt;
&lt;li&gt;获得外部证据&lt;/li&gt;
&lt;li&gt;在下一轮修正策略&lt;/li&gt;
&lt;li&gt;在满足完成条件时稳定退出&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这也是 ReAct、Reflexion、Plan-and-Execute 这类模式持续有效的原因。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-最小可用-agent-loop-本质上是-observe---think---act---verify&quot;&gt;&lt;a href=&quot;#2-最小可用-agent-loop-本质上是-observe---think---act---verify&quot;&gt;2. 最小可用 agent loop 本质上是 &lt;code dir=&quot;auto&quot;&gt;Observe -&gt; Think -&gt; Act -&gt; Verify&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;从工程视角看，一个最小可用 loop 不需要“多智能”，但必须完整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Observe&lt;/code&gt;：读取文件、网页、数据库、测试结果、系统状态&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Think&lt;/code&gt;：决定当前最值得做的一步&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Act&lt;/code&gt;：执行工具调用、代码修改、API 请求、消息发送&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Verify&lt;/code&gt;：通过测试、规则检查、评审器、环境反馈判断结果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没有 &lt;code dir=&quot;auto&quot;&gt;Verify&lt;/code&gt; 的 loop，本质上不是工程闭环，而是连续猜测。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-好的-loop-依赖外部反馈而不是自我感觉良好&quot;&gt;&lt;a href=&quot;#3-好的-loop-依赖外部反馈而不是自我感觉良好&quot;&gt;3. 好的 loop 依赖外部反馈，而不是自我感觉良好&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;大量资料都指向同一个事实：agent 的自我修正只有在“有真实反馈信号”时才可靠。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ReAct 的价值，在于让 reasoning 和 action 交替进行，并把 observation 重新喂回模型&lt;/li&gt;
&lt;li&gt;Reflexion 的价值，不是“让模型自我夸赞”，而是把失败后的外部反馈压缩成可复用经验&lt;/li&gt;
&lt;li&gt;Claude Code 团队的 loop 实践，也强调停止条件、可验证目标、技能化检查和明确 turn cap&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以，loop engineering 的第一原则不是“多想一步”，而是“让每一步都能被环境纠偏”。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;最小工程骨架&quot;&gt;&lt;a href=&quot;#最小工程骨架&quot;&gt;最小工程骨架&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;一个可落地的 agent loop，至少应当包含以下构件：&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-goal&quot;&gt;&lt;a href=&quot;#1-goal&quot;&gt;1. Goal&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;目标必须写成可验证条件，而不是模糊意图。&lt;/p&gt;
&lt;p&gt;差的写法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“优化首页体验”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好的写法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“将首页 Lighthouse 分数提升到 90 以上，最多尝试 5 轮”&lt;/li&gt;
&lt;li&gt;“收集 5 个竞品的价格与来源链接，字段完整后停止”&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;2-settings&quot;&gt;&lt;a href=&quot;#2-settings&quot;&gt;2. Settings&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;Settings&lt;/code&gt; 是运行前相对稳定的控制面，应与运行时状态分离。通常包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;system instruction&lt;/li&gt;
&lt;li&gt;tool schema&lt;/li&gt;
&lt;li&gt;权限边界&lt;/li&gt;
&lt;li&gt;预算上限&lt;/li&gt;
&lt;li&gt;最大轮数&lt;/li&gt;
&lt;li&gt;停止条件&lt;/li&gt;
&lt;li&gt;memory 策略&lt;/li&gt;
&lt;li&gt;evaluator / verifier 配置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它回答的问题是：&lt;code dir=&quot;auto&quot;&gt;这个 agent 被允许如何运行&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-states&quot;&gt;&lt;a href=&quot;#3-states&quot;&gt;3. States&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;States&lt;/code&gt; 是 loop 每一轮持续变化的数据面，通常包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当前目标进度&lt;/li&gt;
&lt;li&gt;本轮观察结果&lt;/li&gt;
&lt;li&gt;工具返回值&lt;/li&gt;
&lt;li&gt;中间计划&lt;/li&gt;
&lt;li&gt;错误记录&lt;/li&gt;
&lt;li&gt;当前上下文摘要&lt;/li&gt;
&lt;li&gt;历史反思&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它回答的问题是：&lt;code dir=&quot;auto&quot;&gt;这个 agent 此刻处于什么位置&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;4-action-layer&quot;&gt;&lt;a href=&quot;#4-action-layer&quot;&gt;4. Action Layer&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Action 层不应只是“给模型几个函数名”，而应具备：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;清晰的输入输出 schema&lt;/li&gt;
&lt;li&gt;可机器校验的参数格式&lt;/li&gt;
&lt;li&gt;幂等性或重试策略&lt;/li&gt;
&lt;li&gt;明确的失败返回&lt;/li&gt;
&lt;li&gt;可并行时支持并行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;tool design 越含糊，loop 的误差传播越快。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;5-evaluator--verifier&quot;&gt;&lt;a href=&quot;#5-evaluator--verifier&quot;&gt;5. Evaluator / Verifier&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;这是 loop engineering 里最容易被低估、但最关键的一层。&lt;/p&gt;
&lt;p&gt;推荐拆成两类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Verifier&lt;/code&gt;：规则型校验，如测试是否通过、JSON 是否合法、页面是否打开成功&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Evaluator&lt;/code&gt;：质量型判断，如摘要是否完整、方案是否满足约束&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;常见顺序是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先用 rule-based check 快速挡掉结构性错误&lt;/li&gt;
&lt;li&gt;再用 LLM judge 或独立 critic 判断质量&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h3 id=&quot;6-memory&quot;&gt;&lt;a href=&quot;#6-memory&quot;&gt;6. Memory&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;记忆不应被泛化理解为“把历史全塞回上下文”。&lt;/p&gt;
&lt;p&gt;更有效的划分通常是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Scratchpad&lt;/code&gt;：当前任务即时推理轨迹&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Working memory&lt;/code&gt;：最近几轮关键上下文&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Episodic memory&lt;/code&gt;：失败经验、反思摘要、过去案例&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Long-term memory&lt;/code&gt;：稳定规则、知识、偏好、策略模板&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;真正重要的不是“记得更多”，而是“记住以后真的会改变决策的东西”。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;一个通用-loop-模板&quot;&gt;&lt;a href=&quot;#一个通用-loop-模板&quot;&gt;一个通用 loop 模板&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;figure data-rehype-pretty-code-figure=&quot;&quot;&gt;&lt;pre tabindex=&quot;0&quot; data-theme=&quot;github-light github-dark&quot; dir=&quot;ltr&quot;&gt;&lt;code data-theme=&quot;github-light github-dark&quot;&gt;&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;while not done:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  observe()&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  update_state()&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  choose_next_action()&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  act()&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  verify()&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt; &lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  if verified_success:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    done = true&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  elif recoverable_failure:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    reflect_and_retry()&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;  elif budget_exhausted or stop_condition_hit:&lt;/span&gt;&lt;/span&gt;
&lt;span data-line=&quot;&quot;&gt;&lt;span&gt;    stop()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;这段模板看起来简单，但工程质量主要取决于 4 个点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;observe()&lt;/code&gt; 是否拿到真实世界反馈&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;choose_next_action()&lt;/code&gt; 是否受状态和约束共同控制&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;verify()&lt;/code&gt; 是否真正独立于生成阶段&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;stop()&lt;/code&gt; 是否具有契约化退出条件&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;常见-loop-类型&quot;&gt;&lt;a href=&quot;#常见-loop-类型&quot;&gt;常见 loop 类型&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;结合 Claude Code 团队对 loops 的分类，可以把常见场景分为四类：&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;1-turn-based-loop&quot;&gt;&lt;a href=&quot;#1-turn-based-loop&quot;&gt;1. Turn-based loop&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;由用户每次手动触发，适合一次性任务或较短任务。&lt;/p&gt;
&lt;p&gt;特征：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;人工发起&lt;/li&gt;
&lt;li&gt;agent 自行做若干轮内部迭代&lt;/li&gt;
&lt;li&gt;在完成或需要更多信息时停止&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;2-goal-based-loop&quot;&gt;&lt;a href=&quot;#2-goal-based-loop&quot;&gt;2. Goal-based loop&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;围绕明确目标连续迭代，直到满足条件或触达最大轮数。&lt;/p&gt;
&lt;p&gt;适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试修复&lt;/li&gt;
&lt;li&gt;指标优化&lt;/li&gt;
&lt;li&gt;有清晰完成标准的复杂任务&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;3-time-based-loop&quot;&gt;&lt;a href=&quot;#3-time-based-loop&quot;&gt;3. Time-based loop&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;按时间调度周期性运行，适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每日汇总&lt;/li&gt;
&lt;li&gt;周报生成&lt;/li&gt;
&lt;li&gt;PR / CI 状态轮询&lt;/li&gt;
&lt;li&gt;外部系统变化监测&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;4-proactive-loop&quot;&gt;&lt;a href=&quot;#4-proactive-loop&quot;&gt;4. Proactive loop&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;由事件或环境变化驱动主动执行，适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;监控告警&lt;/li&gt;
&lt;li&gt;队列清理&lt;/li&gt;
&lt;li&gt;竞品追踪&lt;/li&gt;
&lt;li&gt;工单分发&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;复杂系统通常不是只选一种 loop，而是“外层时间驱动 + 内层目标闭环”。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;高质量-loop-的六个工程原则&quot;&gt;&lt;a href=&quot;#高质量-loop-的六个工程原则&quot;&gt;高质量 loop 的六个工程原则&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;1-done-要写成契约&quot;&gt;&lt;a href=&quot;#1-done-要写成契约&quot;&gt;1. Done 要写成契约&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;停止条件必须显式，不要让模型自己猜“差不多做完了”。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;2-先验证再声称完成&quot;&gt;&lt;a href=&quot;#2-先验证再声称完成&quot;&gt;2. 先验证，再声称完成&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;代码改动、网页变更、报告生成，都应先经过环境验证，再输出“已完成”。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;3-把失败当成输入而不是异常&quot;&gt;&lt;a href=&quot;#3-把失败当成输入而不是异常&quot;&gt;3. 把失败当成输入，而不是异常&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;好的 loop 不会把失败看成流程中断，而会把失败转成下一轮的状态更新和策略修正依据。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;4-让记忆压缩成决策提示而不是历史转储&quot;&gt;&lt;a href=&quot;#4-让记忆压缩成决策提示而不是历史转储&quot;&gt;4. 让记忆压缩成决策提示，而不是历史转储&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Reflexion 的启发非常明确：有效记忆不是原始轨迹堆积，而是能指导下一次尝试的短反思。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;5-控制成本增长曲线&quot;&gt;&lt;a href=&quot;#5-控制成本增长曲线&quot;&gt;5. 控制成本增长曲线&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;长环路的主要成本常常不是单次推理，而是上下文不断膨胀。需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;历史压缩&lt;/li&gt;
&lt;li&gt;滚动摘要&lt;/li&gt;
&lt;li&gt;稳定前缀缓存&lt;/li&gt;
&lt;li&gt;轮数上限&lt;/li&gt;
&lt;li&gt;子任务拆分&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;6-从最简单的-loop-开始&quot;&gt;&lt;a href=&quot;#6-从最简单的-loop-开始&quot;&gt;6. 从最简单的 loop 开始&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;很多所谓“agent”本质上只是 workflow。只有在固定流程无法覆盖、需要自主选择下一步时，才值得升级为真正的 agent loop。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;典型失效模式&quot;&gt;&lt;a href=&quot;#典型失效模式&quot;&gt;典型失效模式&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;1-假验证&quot;&gt;&lt;a href=&quot;#1-假验证&quot;&gt;1. 假验证&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;agent 只检查“命令执行过了”，却没有检查“结果是否达标”。&lt;/p&gt;
&lt;p&gt;典型表现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;页面没打开但声称 UI 已完成&lt;/li&gt;
&lt;li&gt;测试未覆盖关键路径却宣称修复成功&lt;/li&gt;
&lt;li&gt;文档结构正确但事实错误&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;2-死循环式重试&quot;&gt;&lt;a href=&quot;#2-死循环式重试&quot;&gt;2. 死循环式重试&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;同一个动作、同一个参数、同一个错误，重复出现。&lt;/p&gt;
&lt;p&gt;根因通常是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;没有 loop detection&lt;/li&gt;
&lt;li&gt;没有反思压缩&lt;/li&gt;
&lt;li&gt;没有最大轮数&lt;/li&gt;
&lt;li&gt;没有把错误写回状态&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;3-工具幻觉&quot;&gt;&lt;a href=&quot;#3-工具幻觉&quot;&gt;3. 工具幻觉&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;模型调用不存在的工具、填错参数或忽略 tool failure。&lt;/p&gt;
&lt;p&gt;应对方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;严格 schema&lt;/li&gt;
&lt;li&gt;强校验&lt;/li&gt;
&lt;li&gt;显式错误返回&lt;/li&gt;
&lt;li&gt;对失败进行二次解释，而不是静默吞掉&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;4-上下文污染&quot;&gt;&lt;a href=&quot;#4-上下文污染&quot;&gt;4. 上下文污染&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;把所有历史全量保留，导致真正重要的状态被淹没。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;5-目标漂移&quot;&gt;&lt;a href=&quot;#5-目标漂移&quot;&gt;5. 目标漂移&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;运行若干轮之后，agent 开始优化“看起来合理的次级目标”，而不是原始目标。&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;6-退出失真&quot;&gt;&lt;a href=&quot;#6-退出失真&quot;&gt;6. 退出失真&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;不是停得太早，就是永远不肯停。根因几乎总是完成条件不够可验证。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;推荐设计顺序&quot;&gt;&lt;a href=&quot;#推荐设计顺序&quot;&gt;推荐设计顺序&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;如果要从零设计一个 agent loop，推荐按下面顺序推进：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先定义 &lt;code dir=&quot;auto&quot;&gt;done&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;再定义 &lt;code dir=&quot;auto&quot;&gt;verify&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;再定义 &lt;code dir=&quot;auto&quot;&gt;state&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;再定义 &lt;code dir=&quot;auto&quot;&gt;action&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;最后才写 prompt&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这是因为 prompt 只影响单轮表现，而前四项决定整个系统是否可持续运行。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;与-context-engineering-的关系&quot;&gt;&lt;a href=&quot;#与-context-engineering-的关系&quot;&gt;与 Context Engineering 的关系&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Loop engineering 和 context engineering 是互补关系，不是替代关系。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Context engineering&lt;/code&gt; 解决的是：当前这一轮，应该给模型哪些上下文&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;Loop engineering&lt;/code&gt; 解决的是：这一轮结束后，系统下一步该怎么走&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前者偏“横向上下文编排”，后者偏“纵向状态跃迁控制”。&lt;/p&gt;
&lt;p&gt;可以把两者理解成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;context 决定模型此刻看到了什么&lt;/li&gt;
&lt;li&gt;loop 决定模型接下来还能做什么&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;适合落地的一个判断标准&quot;&gt;&lt;a href=&quot;#适合落地的一个判断标准&quot;&gt;适合落地的一个判断标准&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;当你评估一个 agent 系统是否成熟时，可以直接问 8 个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;目标是否可验证&lt;/li&gt;
&lt;li&gt;停止条件是否明确&lt;/li&gt;
&lt;li&gt;工具接口是否严格&lt;/li&gt;
&lt;li&gt;失败是否会转成下一轮输入&lt;/li&gt;
&lt;li&gt;是否有独立验证器&lt;/li&gt;
&lt;li&gt;是否有状态压缩与记忆分层&lt;/li&gt;
&lt;li&gt;是否有限制成本的机制&lt;/li&gt;
&lt;li&gt;是否能解释它为什么停止&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果其中有 3 个以上回答不清楚，这通常还不是一个成熟的 loop，只是一个能连续调用模型的脚本。&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;参考来源&quot;&gt;&lt;a href=&quot;#参考来源&quot;&gt;参考来源&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2210.03629&quot;&gt;ReAct: Synergizing Reasoning and Acting in Language Models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openreview.net/forum?id=vAElhFcKW6&quot;&gt;Reflexion: language agents with verbal reinforcement learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents&quot;&gt;Effective context engineering for AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://claude.com/blog/getting-started-with-loops&quot;&gt;Loop engineering: Getting started with loops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ai-boost/awesome-harness-engineering&quot;&gt;Awesome Harness Engineering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;一句话判断&quot;&gt;&lt;a href=&quot;#一句话判断&quot;&gt;一句话判断&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;AI agent loop engineering&lt;/code&gt; 的本质，不是让模型多跑几轮，而是把“目标、状态、动作、反馈、验证、记忆、终止条件”组织成一个可反复自纠的控制系统。&lt;/p&gt;</content:encoded><category>定义</category><category>核心结论</category><category>最小工程骨架</category><category>1. Goal</category><category>典型失效模式</category></item></channel></rss>