核心设计原则

3.1 原则一:Separation of Concerns(关注点分离)

Agent 的角色应该清晰定义,避免”万能 Agent”:

❌ 错误做法:
┌─────────────────────────────────┐
│  "超级 Agent"                    │
│  - 理解用户意图                  │
│  - 规划任务                      │
│  - 执行操作                      │
│  - 验证结果                      │
│  - 处理错误                      │
│  - 生成报告                      │
│  - 发送通知                      │
│  ... (无限扩展)                  │
└─────────────────────────────────┘

✅ 正确做法:
┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│  Intent      │   │  Planner     │   │  Executor    │
│  Classifier  │ → │              │ → │              │
└──────────────┘   └──────────────┘   └──────────────┘
                           ↓
                  ┌──────────────┐   ┌──────────────┐
                  │  Validator   │   │  Reporter    │
                  │              │ → │              │
                  └──────────────┘   └──────────────┘

3.2 原则二:Stateless by Default(默认无状态)

关键洞察: LLM 上下文窗口不是数据库,不应该用于持久化状态。

┌─────────────────────────────────────────────────────────────┐
│  错误模式:在上下文中累积状态                                │
├─────────────────────────────────────────────────────────────┤
│  User: "帮我规划一个旅行"                                    │
│  Agent: [在上下文中维护所有旅行细节...]                       │
│  User: "修改第三天的行程"                                   │
│  Agent: [需要重新读取整个上下文...]                           │
│  User: "加入另一个城市"                                      │
│  Agent: [上下文爆炸,超出窗口限制]                           │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│  正确模式:外部状态管理                                      │
├─────────────────────────────────────────────────────────────┤
│  User: "帮我规划一个旅行"                                    │
│  Agent: [创建结构化状态 → 存入数据库/文件]                    │
│  User: "修改第三天的行程"                                   │
│  Agent: [读取状态 → 修改 → 写回]                             │
│  User: "加入另一个城市"                                      │
│  Agent: [增量更新,上下文保持精简]                           │
└─────────────────────────────────────────────────────────────┘

3.3 原则三:Explicit Boundaries(显式边界)

每个 Agent、每个工具、每个 Skill 都应该有清晰的职责边界

组件 应该做 不应该做
Intent Classifier 分类用户意图 执行具体任务
Planner 分解任务为步骤 直接调用工具
Executor 执行单个步骤 决定下一步做什么
Validator 检查结果质量 修改输出

3.4 原则四:Fail Fast, Recover Faster(快速失败,快速恢复)

传统思维: "让系统尽量不失败"
Agent 思维: "系统一定会失败,关键是如何快速恢复"

┌─────────────────────────────────────────────────────────────┐
│  失败处理层次                                                │
├─────────────────────────────────────────────────────────────┤
│  Level 1: 工具调用失败 → 重试 + fallback                     │
│  Level 2: Agent 执行失败 → 汇报 + 部分结果                   │
│  Level 3: 编排失败 → 回滚 + 恢复到上一个稳定状态              │
│  Level 4: 系统失败 → 降级服务 + 人工介入                     │
└─────────────────────────────────────────────────────────────┘

3.5 原则五:Observability First(可观测性优先)

从 Day 1 就应该设计可观测性:

必须追踪的信号:
├── 输入层面
│   ├── 用户意图分布
│   ├── 输入长度/复杂度
│   └── 会话上下文大小
├── 执行层面
│   ├── 工具调用频率
│   ├── 工具调用成功率
│   ├── Agent 间消息传递
│   └── 步骤执行时间
├── 输出层面
│   ├── 输出长度
│   ├── 用户满意度信号
│   ├── 人工介入率
│   └── 错误类型分布
└── 成本层面
    ├── Token 消耗
    ├── API 调用次数
    └── 端到端延迟