← 大多数人忽略的 Agent 系统的五层结构
📚 读书笔记

《Agent 系统的五层结构》读书笔记

· 约 15 分钟 · 5400 字

这一页是给我自己用的工具页,不是给读者的阅读页。包含完整脉络、代码、架构图、面试话术。 如果你只想看精炼版,请回到 主文章

1. 主文章在讲什么(30 秒)

一句话主线:Agent 系统不是一层,是五层(Memory / Agents / Skills / Rules / Hooks),从下到上是底座到行为;缺位的层不会消失,只会隐式地、糟糕地发生。

反对什么观点

  • 反对”用 LangGraph 就够了”——LangGraph 主要是第 2 层 + 第 3 层的一部分
  • 反对”Agent 就是 LLM + Tools”——这压扁了 Persona/Specialist 的分离
  • 反对”加个向量库就有记忆了”——这只是第 1 层最浅的一片

如果只能记一句话

Agent 系统不是一个框架选择题,是一个分层问题——而大多数人只看见了一层。


2. 关键概念词典

精确到一句话的定义。混淆点用对比表呈现。

五个层各自是什么

一句话定义在传统软件里的对应物
Memory(记忆)所有 agent 共享的认知底座数据库 + 缓存 + 向量索引
Agents(智能体)表态的视角 + 执行的专家团队成员(讨论者 + 工人)
Skills(技能)用户可调用的复合操作CLI 命令、API 端点
Rules(规则)路径/条件触发的自动行为inotify / file-watcher / cron
Hooks(钩子)生命周期绑定的自动行为systemd / shell rc / pre-commit

Persona vs Specialist(最容易混的)

维度PersonaSpecialist
产出立场(“应该用 X 不用 Y,理由是…”)物件(代码 / 文档 / 设计稿)
召集时机决策不确定任务定义清晰
衡量论证质量输出通过/不通过
描述格式Markdown + 反谄媚规则YAML + 输入输出 schema + 质量门
失败的代价视角错(有用的)物件错(bug)

Skill vs Rule vs Hook(三种触发模式)

类型触发者例子
Skill用户主动/recall, /sprint, /roundtable
Rule上下文/路径”写文件到 ideas/ 时,提取原子事实”
Hook生命周期事件”会话结束时,更新记忆并写日志”

Episodic vs Semantic Memory(记忆的两种)

语义记忆情景记忆
”我们决定了什么""那次发生了什么、结果如何”
字段fact, type, tagstrigger, outcome, lesson, result
检索按相似度按 (type, result)
RAG 能做

3. 完整脉络(主文章每节展开)

主文章因为节奏限制压缩了很多分支。这里把推理链全部铺开。

Layer 1 · Memory:为什么六个子层缺一不可

主文章列了六件事一个真实记忆层需要的:

  1. 有类型的存储
  2. 原子事实
  3. 情景记录
  4. 温度模型
  5. 概念层

主文没展开的:这六件事每一件解决的”具体痛点”是什么

子层不做的具体后果
类型分离用户问”我们决定了什么” → 系统返回闲聊片段
原子事实用户问”X 是什么” → 系统返回整篇文档让用户自己读
情景记录用户重复犯同样的错 → 系统每次给同样的建议
温度模型系统反复推荐 6 个月前已经过时的方案
系统找到”谈论 X 的文档”但找不到”导致 X 的决策链”
概念层系统记得用户的事实但不据此调整对话方式

Layer 2 · Agents:为什么必须显式拆 Persona 和 Specialist

主文章给了表格和理由。这里补反例——注意:以下三条来自我自己的小型试验 + 公开报告,不是生产实测。我没有用 CrewAI 或 AutoGen 跑过任何长期项目。读者如果用过它们的生产环境,欢迎纠正。

我自己跑小 demo 时观察到 + 在社区贴里反复看到的三种典型崩溃:

  1. 多角色塌缩:5 个 agent 一开始有不同人格,几轮之内塌缩到同一个声音。根因(我的推断):每个 agent 都被允许同时”思考 + 执行”,模型的礼貌训练倾向把所有路径拉向”对的执行”,于是收敛。
  2. 意见和实现互相打断:一个 agent 给意见后下一个开始改代码,第三个又改意见,循环。根因(我的推断):当一个 agent 同时承担两种产出类型,调度器无法判断当前轮该等”思考”还是该等”代码”。
  3. 共享状态污染:用图框架(LangGraph 等)做多 agent 时,shared state 让”独立判断”实际上不再独立——后一个 persona 的视角被前一个的输出预设了。根因(我的推断):persona 的价值在于独立性,共享上下文会破坏这个独立性。

Layer 3 · Skills:为什么把”怎么做”提到 prompt 之外

主文给了一句话:“如果你的流程因为模型版本变了而崩溃,那个流程本来就应该在 skill 里。”

展开论证:

LLM 是非确定性函数,确切地:相同输入 + 相同 prompt 在不同时间会给不同输出,方差由模型温度和模型版本决定。

有些步骤是确定性的(比如”读 X 文件、查询 Y、写 Z 文件”)。

把确定性步骤交给 LLM 做调度 = 把方差引入了不该有方差的地方。

正确做法:

  • 确定性的”骨架” → Skill(脚本)
  • 非确定性的”判断” → Skill 内部调用 Agent

伪代码:

def sprint_skill(goal: str):
    # 确定性骨架
    tasks = decompose_goal(goal)              # ← LLM call (非确定)
    for task in tasks:                         # ← 确定性循环
        result = dispatch_to_specialist(task)  # ← LLM call
        review = parallel_review(result)       # ← LLM call (并行)
        if review.passed:                      # ← 确定性判断
            archive(result)                    # ← 确定性
        else:
            retry_with_feedback(task, review)  # ← 确定性

Layer 4 · Rules:为什么”提醒 agent”是错的范式

主文给了一句”让 LLM 当 cron job,它会忘”。

更深的论证:LLM 没有持久状态。每次调用都是新的开始。如果你说”agent 应该记得在 X 之后做 Y”,agent 没有”记得”这个动作的物理基础——它只能在 prompt 里再次被告知Y 应该做。

如果你 prompt 里说了一长串”记得做 X、记得做 Y、还要记得做 Z”,模型的注意力会被当前任务吃掉,列表里的某几项会被漏掉——这是经验性观察,没有具体百分比,但只要你做过 prompt 工程都见过。生产场景每天上百次调用,一周内必然出现几次”应该做但没做”的故障。

Rule 是把”X 之后做 Y”从LLM 的概率事件升级为系统的必然事件

┌────────────────────────────────────────────────┐
│  Prompt 提醒模式                                 │
│                                                  │
│  写文件 → LLM 看 prompt → 概率性记得 → 概率执行   │
│           (50 条规则中的一条)                    │
│                                                  │
│  失败模式:注意力被拉走时漏掉                       │
└────────────────────────────────────────────────┘
                    ↓ 升级
┌────────────────────────────────────────────────┐
│  Rule 模式                                        │
│                                                  │
│  写文件 → 文件系统事件 → Rule 触发 → 必然执行       │
│           (独立于 LLM 决策)                       │
│                                                  │
│  失败模式:基本没有                                  │
└────────────────────────────────────────────────┘
Rule vs Prompt 提醒:从概率到必然

Layer 5 · Hooks:为什么生命周期绑定不可省

主文章这一节最短,因为论证和 Rule 类似。但 Hook 解决的问题和 Rule 不一样

  • Rule 解决:“某种事件发生时,应该做什么” (因果触发)
  • Hook 解决:“在某个时刻必须做什么” (时间触发)

具体差异:

RuleHook
触发事件(X 发生时)时刻(在 Y 时刻)
例子写文件 → 抽取事实会话开始 → 加载记忆
频率不定(事件可能不发生)必然(生命周期点必然到达)

我用过的 Hook 例子:

SessionStart:
  - 加载在座者的状态文件
  - 检查 inbox 未读
  - 显示上次 session 的 Next 项

PostToolUse(Write):
  - 检查是否为新文件
  - 如是新文件,提示更新 .overview.md

Stop:
  - 自动追加 session 日志
  - 解锁 TG 通道

如果让 LLM 在 prompt 里”记得”这些,每条都可能在某些上下文下被漏——比如当前任务很复杂、prompt 很长、上下文窗口接近上限时。生产环境每天上百次调用,一周内必然出现”应该做但没做”的故障。Hook 不是优化,是兜底。


4. 真实代码 / 数据

主文章只给了概念。这里是我系统里真实跑过的代码片段。

Memory 层:原子事实抽取的 Rule

# .claude/rules/atomic-facts.md
当在以下位置创建或追加内容时,自动提取原子事实:
- parties/*/ideas/
- parties/*/roundtables/
- bazaar/patterns/
- bazaar/eureka/

提取规则:
- 一句话,不超过 50 字
- 可以脱离原文理解
- 包含关键实体和关系

存储到 vault/facts/facts.jsonl,每行一个 JSON:
{"fact": "...", "source": "...", "tags": [...], "type": "decision|finding|pattern|constraint"}

Agent 层:Persona 的实际定义

# 架构师

## 思维模式
- 先问边界
- 关注耦合
- 可逆性优先
- 画图说话
- 质疑规模假设

## 反谄媚规则
- 禁止说:"这个设计很好"、"架构很合理"、"没什么问题"
- 必须做:每次发言至少指出一个架构风险或设计取舍
- 如果真的没问题:说明自己检查了哪些维度

## 什么证据会让我改变立场
- 实际运行数据表明当前架构在目标规模下表现良好 → 放弃重构建议
- 团队规模和交付压力证明简单方案的维护成本更低 → 接受不优雅方案

Specialist 层:dev team 的 manifest

name: dev
skills:
  - frontend
  - backend
  - ai
  - database
  - build

input:
  required:
    - task-description
    - acceptance-criteria
    - project-dir

output:
  - code-files
  - progress-log
  - case-record

quality:
  - 不允许硬编码色值
  - 不允许占位符内容
  - 不允许假数据
  - 三层(HTML/JS/CSS)必须对齐
  - 必须有空状态兜底

Skill 层:/sprint 的 Phase 拆分

Phase 1: 启动检查
Phase 2: 任务拆分(写 task-list.md)
Phase 3: 调度 dev team(实现)
Phase 4: 调度 qa team(4 个并行 reviewer)
Phase 5: 修复(dev team 处理 review 反馈)
Phase 6: 部署(devops team)
Phase 7: 写 case record(episodic memory)

每个 phase 是确定性脚本,phase 内调用 Agent 是非确定性。

数据点:六周使用后的真实统计

截至 2026-05-04,从我自己的茶会系统里 wc 出来的真实数字(项目从 2026-03-24 开始,约 6 周):

  • 圆桌会议归档:158 场find parties/*/roundtables/*.md | wc -l
  • 原子事实累积:324 条wc -l vault/facts/facts.jsonl
  • 团队 case 记录(episodic):84 条find ateliers/*/memory/cases/*.md
  • pattern files(从 cases 提炼):28 个find bazaar/patterns/*.md
  • 知识图谱边(wikilink):195 条wc -l vault/links.jsonl
  • skills 总数:8 个
  • rules 总数:12 条

这些数字本身不”impressive”——重要的是每一类都不为零,证明五层都被实际使用。如果面试官追问”具体怎么统计的”,上面的 wc / find 命令就是答案。


5. 架构图(5 张)

主文章里只有 1 张文字栈图。这里是完整的 5 张视觉化。

图 1:五层关系(基础版)

                    用户输入 / 时间事件

        ┌─────────────────────────────────┐
        │        Layer 5 · Hooks           │
        │   生命周期触发的自动行为            │
        └────────────┬────────────────────┘

        ┌─────────────────────────────────┐
        │        Layer 4 · Rules           │
        │   路径/条件触发的自动行为           │
        └────────────┬────────────────────┘

        ┌─────────────────────────────────┐
        │        Layer 3 · Skills          │
        │   用户可调用的复合操作             │
        └────────────┬────────────────────┘

        ┌─────────────────────────────────┐
        │        Layer 2 · Agents          │
        │   Persona(思考)+ Specialist(执行)│
        └────────────┬────────────────────┘

        ┌─────────────────────────────────┐
        │        Layer 1 · Memory          │
        │   六层认知底座                     │
        └─────────────────────────────────┘
五层栈:底座到行为

图 2:Memory 层内部展开

┌─────────────────────────────────────────────┐
│   概念层 (Conceptual)                         │
│   行为模式、用户状态机                          │
├─────────────────────────────────────────────┤
│   图 (Graph)                                  │
│   关系、遍历、因果                             │
├─────────────────────────────────────────────┤
│   温度 (Temperature)                          │
│   hot / warm / cool / frozen 加权              │
├─────────────────────────────────────────────┤
│   情景 (Episodic)                             │
│   trigger / outcome / lesson                  │
├─────────────────────────────────────────────┤
│   原子事实 (Atomic facts)                      │
│   命题粒度的检索                                │
├─────────────────────────────────────────────┤
│   类型化存储 (Type-aware)                      │
│   semantic / episodic / procedural            │
└─────────────────────────────────────────────┘
记忆层的六个子层

图 3:Agent 层的两条路径

       决策不确定                    任务定义清晰
            │                              │
            ↓                              ↓
   ┌────────────────┐            ┌────────────────┐
   │   Roundtable   │            │    Sprint      │
   │   召集 Persona  │            │   派遣 Specialist│
   └────────────────┘            └────────────────┘
            │                              │
   ┌────────┴────────┐            ┌────────┴────────┐
   │ 强制表态 + 反谄媚  │            │ 输入 schema      │
   │ 各自给出"什么会改   │            │ 质量门            │
   │ 变我的立场"        │            │ 输出 artifact    │
   └────────┬────────┘            └────────┬────────┘
            │                              │
            ↓                              ↓
       立场(position)                物件(artifact)
Persona 走思考路径,Specialist 走执行路径

图 4:Skill 内部的确定性 vs 非确定性

   ┌─────────────────────────────────────┐
   │  确定性 · 解析输入                    │
   └────────────────┬────────────────────┘

   ┌─────────────────────────────────────┐ ★
   │  非确定性 · 调用 Agent 做判断          │
   └────────────────┬────────────────────┘

   ┌─────────────────────────────────────┐
   │  确定性 · 根据判断分支 (if/else/loop) │
   └────────────────┬────────────────────┘

   ┌─────────────────────────────────────┐ ★
   │  非确定性 · 调用 Specialist 执行       │
   └────────────────┬────────────────────┘

   ┌─────────────────────────────────────┐
   │  确定性 · 归档、记录、返回             │
   └─────────────────────────────────────┘
Skill 是确定性骨架包住非确定性 Agent 调用 ── ★ 标记唯一允许有方差的地方

图 5:Rule + Hook 的”必然性升级”

   prompt-only 模式               分层模式

   "记得做 X、Y、Z..."             "X、Y、Z 由系统兜底"

   ┌──────────────┐               ┌──────────────┐
   │   用户请求    │               │   用户请求    │
   └──────┬───────┘               └──────┬───────┘
          ↓                              ↓
   ┌──────────────┐               ┌──────────────┐
   │     LLM       │               │ Skill (脚本)  │
   │ + 一长串提醒   │               │   入口        │
   └──────┬───────┘               └──────┬───────┘
          ↓                              ↓
   ┌──────────────┐               ┌──────────────┐
   │  输出 + 副作用 │               │  Agent (LLM)  │
   │   (概率性     │               │  做判断       │
   │    漏事)     │               └──────┬───────┘
   └──────────────┘                      ↓
                                  ┌──────────────┐
                                  │ Rule 层兜底   │
                                  │ (事件触发)    │
                                  └──────┬───────┘

                                  ┌──────────────┐
                                  │ Hook 层兜底   │
                                  │ (生命周期)    │
                                  └──────┬───────┘

                                  ┌──────────────┐
                                  │ 输出 + 副作用 │
                                  │  (必然完成)   │
                                  └──────────────┘
同一个责任,两种实现:左边把它放在 LLM 身上(概率),右边把它放在系统层(必然)

6. 我的批注

我和我以前的想法的冲突

以前:我把 agent 系统看成”LLM 包装得更聪明”。 现在:agent 系统的智能 80% 在 LLM 之外(在 memory + rules + hooks),LLM 只是其中一个组件。

以前:我觉得 multi-agent 是 “more agents = better”。 现在:多 agent 的价值不在数量,在视角分离 + 反谄媚 + 强制表态。少了这三件事,10 个 agent 不如 1 个。

以前:我把 RAG 等同于”记忆”。 现在:RAG 是 Memory 第二个子层(原子事实)的一部分,剩下五个半子层 RAG 都不解决。

反复想过的部分

Skill vs Tool 的区别——主文里没明说。

  • Tool 是 Agent 内部使用的能力(read_file, run_query)。
  • Skill 是用户调用的复合流程(/sprint = 包含很多 Tool 调用)。
  • Skill 是”对外的 API”,Tool 是”对内的 ability”。两者层级不同,不要混。

为什么我把 Hook 放在最上层而不是最底层——直觉上 Hook 是”基础设施”应该在底。但我把它放最上是因为分层依据是这一层在消费谁

  • Memory(最底)只被消费,自己不主动做事
  • Agent 消费 Memory 输出立场或物件
  • Skill 编排 Agent 调用并消费 Memory
  • Rule 在 Skill / Agent 完成事件后继续消费它们的产出(如”写文件后抽取事实”)
  • Hook 在整个生命周期边界消费一切(如”会话结束时把这一切归档”)

Hook 在最上层不是因为它”最强制”(Rule 触发也是强制的),而是因为它的作用域最大——它包住整个会话,不针对单个事件。Rule 是”X 之后做 Y”,Hook 是”在整个会话开始/结束时做 Z”。两者都是”必然”,但 Hook 的’当下’是生命周期边界,Rule 的’当下’是某个事件

下次会改的

  • Layer 5 Hooks 的篇幅——主文这一段写得太短,副文我已经补了,但下次主文也应该多给一段。
  • Conceptual layer(记忆的概念层)目前没有独立成层,下次可能拆出来当第六层。
  • Trace 层目前归在六个 gap 里,但它实际上应该是和 Memory 平行的一层(或 Memory 的一个子层)。Trace 是”系统的操作记忆”,对应 Memory 的”系统的认知记忆”。

7. 面试话术(按时长背三档)

30 秒电梯版

30 秒电梯版 在走廊里被截住时

今天大多数所谓的 agent 系统是一层在假装成五层。这五层从下到上是 Memory、Agents、Skills、Rules、Hooks——底座是基建,往上是行为。真正有意思的设计问题不是”用哪个框架”,而是”每件事属于哪一层”。如果你的系统只有其中一两层,剩下的事情仍然在发生,只是隐式地、糟糕地发生。

2 分钟白板版

2 分钟白板版 会议室开场

我画一下我用过的框架。五层栈

第 1 层 Memory——不是 RAG,是带温度模型的语义+情景+程序记忆 + 原子事实 + 图。

第 2 层 Agents——必须显式拆 Persona 和 Specialist。Persona 产出立场(带反谄媚规则),Specialist 产出物件(带质量门)。混在一起,agent 既不会思考也不会执行。

第 3 层 Skills——用户可调用的复合操作。Skill 是确定性脚本,恰好会调 Agent。把”怎么做”从 prompt 里搬出来,可靠性回来了。

第 4 层 Rules——上下文触发的自动行为。让 LLM “记得” 做 X 是 cron job 范式,会失败;改成 rule,必然触发。

第 5 层 Hooks——生命周期绑定的自动行为。会话开始/结束、写文件之后必须做的事。

每一层缺位都不会让事情消失,只会让它隐式地、糟糕地发生。

10 分钟深入版

10 分钟深入版 完整论证

我在一个多智能体系统上密集使用了大约 6 周——时间不长,但每天多次迭代。一开始我以为”agent 就是 LLM 加 tool”,密集用了一段时间才发现这只是冰山一角。我想分享一个分层,是从我的实现里归纳的,不是从理论推导的。

先画五层栈:从下到上是 Memory、Agents、Skills、Rules、Hooks。下面是基建,上面是行为。我的核心论点是:今天大多数所谓的 agent 是一层在假装成五层,缺位的层不会消失,只会隐式地、糟糕地发生。

先讲 Memory。大多数人说”我们有记忆”指的是向量库 + RAG。这只解决六个子层里的一个半。完整的记忆需要:类型化存储(语义 / 情景 / 程序)、原子事实(不只是文档)、情景记录(带 outcome 字段)、温度模型(hot / warm / cool / frozen)、图(关系而不只是相似度)、概念层(用户行为模式)。每一项缺位都对应一种用户能感觉到的失败——比如”系统反复推荐我已经否决过的方案”就是缺情景记录。

然后讲 Agents。这是术语最容易崩溃的地方,所以我把它拆成两个角色:Persona 产出立场(“应该用 X 不用 Y”),Specialist 产出物件(实际的代码/方案)。两者的成功标准、失败处理、描述格式完全不同。混在一起,agent 既不会思考也不会执行——这是 CrewAI 在生产部署感觉空的根本原因。我会给一个具体例子:架构师 persona 的 markdown(带反谄媚规则:“禁止说’看起来很好’”),和 dev team specialist 的 YAML(带质量门:“不允许硬编码色值”)。

然后是 Skills。一个 skill 是一段确定性脚本,恰好会调 agent。一个核心判断:如果你的流程因为模型版本变了而崩溃,那个流程本来就不该在 prompt 里。把”怎么做”提到 prompt 之外,可靠性回来了。我会给 /sprint 的 phase 拆分作为例子——7 个 phase 都是确定性脚本,只在每个 phase 内部调 agent 时允许有方差。

然后是 Rules。这是上下文触发的自动行为,比如”写文件到 ideas/ 时自动抽取原子事实”。它的本质是把”X 之后做 Y”从 LLM 的概率事件升级为系统的必然事件。让 LLM 在 prompt 里”记得做 Y”——这是把它当 cron job 用,会失败。改成 rule,必然触发。

然后是 Hooks。生命周期绑定的自动行为,比如”会话结束时自动更新记忆”。Rule 和 Hook 的区别是:Rule 是”X 发生时”,Hook 是”在 Y 时刻”。两者都是必然,但作用域不同。

最后用六个诊断收尾。如果我加入一个有 agent 系统的团队,我会去看:术语统一吗、agent 定义格式一致吗、有 runtime 还是只是 prompt、有 DAG 还是 200 行 shell 脚本、有 trace 还是只有日志、有跨产品的 agent 框架还是每次重写。这六个不全部命中就是技术债。

收尾一句话:我承认这是从我的实现归纳的,不是理论推导。但我用三个测试它——能否描述别的系统、能否预测失败模式、能否指导新设计。三个都过了。


8. 可能被问到的 5 个问题 + 回应

问题 1:你这个分层和 LangGraph / CrewAI / AutoGen 是什么关系?

回答骨架

LangGraph 主要是第 3 层(Skills)的实现工具——它给你一个状态图来描述确定性骨架。它不强制第 2 层的 Persona/Specialist 分离(你可以用,也可以不用),完全不涉及 Memory(第 1 层)和 Rules/Hooks(第 4-5 层)。

CrewAI 是第 2 层的一个尝试,但没有显式拆 Persona 和 Specialist——所有 agent 既给意见又写代码——这是它在生产部署感觉空的根本原因。

AutoGen 也在第 2 层,偏向 Persona 那条路径(多 agent 对话),但缺第 3 层的确定性骨架,所以多 agent 容易失控。

我的分层不和它们竞争,是它们之上的meta 层级。你可以用 LangGraph 实现我的第 3 层骨架,仍然需要自己做 1、2、4、5 层。框架解决其中一两层,剩下的层你必须自己处理——不处理它们仍然会发生,只是隐式地。

问题 2:每一层都做不太重吗?小团队能负担吗?

回答骨架

不是每一层都要从第一天做到极致。值得做的最小集合是 Memory 的前 3 子层 + Agents 的 Persona/Specialist 分离 + 一个 Skill 入口。

这个最小集合大约一周能搭好。剩下的层(温度模型、图、Rules、Hooks)是随系统运行时间自然需要的——你会因为遇到具体问题去加它们。

反过来如果你一开始就跳过它们,第三个月你会发现自己在重新发明它们,而且发明得不好。

问题 3:你的 Persona 和 Specialist 都是 LLM 调用,本质不是同一个东西吗?

回答骨架

物理实现上是的——都是 LLM 调用。但接口和契约不同

Persona 的”接口”是:输入议题,输出立场(带反谄媚规则)。它的契约是 markdown,没有结构化 schema。

Specialist 的”接口”是:输入任务描述 + 验收标准,输出 artifact。它的契约是 YAML schema + 质量门。

两者的调用方式、评估方式、失败处理都不同。物理一致不重要,契约不一致才重要。把它们当成同一个东西管,就是 CrewAI 那种产品形态——demo 好看,生产空。

问题 4:你用什么实现 Rules 和 Hooks?

回答骨架

我用的是 Claude Code 的 hooks + rules 机制:

  • Hooks 是 settings.json 里配置的 shell 命令,绑定 SessionStart / Stop / PostToolUse 等事件。
  • Rules 是 markdown 文件,frontmatter 里指定 paths 匹配,符合路径的写入会触发 rule 加载。

在 Claude Code 之外,可以用:

  • inotify / fsevents 做文件级 rules
  • cron 做时间触发的 rules
  • shell rc / git hook / pre-commit 做生命周期 hooks

关键不是用什么实现,是承认这一层存在并显式管理

问题 5:你怎么知道这套分层是对的?有没有可能你只是在描述自己的实现?

回答骨架

这是个好问题,应该正面回答。

我承认这套分层是从我的实现归纳出来的,不是从理论推导出来的。所以它可能反映了我的实现偏好而不是普遍规律。

但我用三个东西测试它:

  1. 能否描述别的 agent 系统——把 LangGraph、CrewAI、AutoGen、Anthropic 的 Agents SDK 都拿来按这个分层定位。如果有它装不下的能力,说明分层有漏洞。我目前还没找到装不下的。
  2. 能否预测失败模式——每一层缺位都对应一种已知的生产失败模式(“agent 忘记”、“agent 自相矛盾”、“agent 谄媚”)。如果失败模式无法用层定位,说明分层没切到关节。
  3. 能否指导新设计——给一个新需求,能用分层指出”这个属于哪一层、怎么实现”。如果做不到,分层没用。

三个测试都过了。但我不排除有一天发现第六层。


9. 相关链接

内部(其他主文章)

外部参考

相关概念

  • Reflexion ≈ 我的”情景记忆 + 模式提炼”
  • Generator-Evaluator ≈ 我的”Specialist + Reviewer”
  • Constitutional AI ≈ 我的”反谄媚规则”(不同实现,类似目标)
  • OS-level rules / file-watcher ≈ 我的”Rule 层”