03-agent-model.md
10.4 KB
3. Agent 原子模型
核心理念: 框架只有 1 个通用 Agent 运行时。每个 Agent 是一个 配置目录实例,不是代码子类。 创建 Agent = 创建目录 + 写入配置文件。四层的区别不靠代码继承,而靠目录内容不同。
3.1 Agent = 一个目录
每个 Agent 实例就是 data/agents/ 下的一个目录。参考 OpenClaw 的 "麻雀虽小五脏俱全" 设计,包含以下标准结构:
data/agents/{agent-id}/
│
│ ─── 核心定义文件 (Bootstrap Files) ──────────
│ 每次 session 启动时注入 LLM 上下文
│
├── agent.md # 操作规则: 职责、约束、可用工具、never/always 规则
├── soul.md # 灵魂定义: 人格、价值观、思维方式、沟通风格
├── identity.md # 外显身份: 显示名称、头像、问候语、emoji
├── user.md # 上下文画像: 上层 Agent 或用户的偏好和目标
├── tools.md # 工具备注: API 使用规范、工具注意事项
├── heartbeat.md # 心跳任务: 周期性主动执行的检查清单
│
│ ─── 技能系统 ──────────────────────────────
│
├── skills/
│ ├── skills.md # 技能索引: 当前拥有的技能清单和能力边界
│ ├── {skill-name}/ # 具体技能目录
│ │ ├── SKILL.md # 技能定义 (YAML frontmatter + 执行指令)
│ │ ├── *.js / *.py # 技能实现代码
│ │ └── config.json # 技能配置
│ └── ...
│
│ ─── 记忆系统 ──────────────────────────────
│
├── memory/
│ ├── memory.md # 长期记忆索引: 关键事实、模式、经验总结
│ ├── short-term/ # 短期记忆 (当前任务上下文)
│ ├── long-term/ # 长期记忆 (持久化 SQLite + 向量)
│ ├── sessions/ # 会话记忆 (对话历史快照)
│ └── daily/ # 每日日志 (YYYY-MM-DD.md)
│
│ ─── 知识库 ──────────────────────────────
│
├── knowledge/ # 参考文档、领域知识、数据资料
│
│ ─── 自治工作区 ──────────────────────────
│
├── workspace/ # Agent 自主读写 (框架不干预)
│ ├── code/ # Agent 自主编写的代码
│ ├── data/ # Agent 自主创建的数据
│ └── assets/ # Agent 自主管理的资产
│
│ ─── 运行数据 ──────────────────────────
│
├── logs/ # 对话日志 (JSONL) + 运行日志
└── config.json # 运行配置
3.2 Bootstrap Files — 六大定义文件
Bootstrap Files 是 Agent 的"灵魂文件",每次 session 启动时注入 ACP 内核的上下文。
agent.md — "我的规则"
定义 Agent 的职责、约束和可用工具。包含三类规则:
# CEO Agent
## 身份
你是 Lemon Drama 公司的 CEO,负责商业战略制定和公司方向把控。
## 职责
- 分析市场趋势,制定季度战略
- 审核 CTO 和 COO 提交的方案
- 拆解公司 Goal 为各部门可执行的子目标
## Never Rules (绝对不做)
- 不要直接管理 Skill 层 Agent
- 不要在未经 CTO 技术审核的情况下推动技术方案
## Confirm-Before Rules (需要确认)
- 裁撤部门前需向 Master 汇报
- 重大资源调整(>30%预算变动)需向 Master 确认
## Always Rules (自动执行)
- 每 5 分钟扫描全局进度
- 发现 Gap 自动向相关 Role 下发修正指令
## 可用工具
- role.create: 创建新的职能部门
- role.redefine: 调整部门职责
- role.destroy: 裁撤部门
- pipeline.set: 设计工作流
- pipeline.adjust: 调整工作流
soul.md — "我的灵魂"
# CEO 的灵魂
## 思维方式
- 先看数据,再做判断
- 关注 ROI 和投产比
- 善于从失败中提取教训
## 沟通风格
- 简洁直接,不绕弯
- 用数据说话
- 对下属关键进展给予正面反馈
## 价值观
- 用户价值 > 商业利润
- 长期主义 > 短期爆发
identity.md — "我的名片"
# 身份信息
## 基础信息
- 名称: Lemon CEO
- Emoji: 👔
- 类型: cxo
## 问候语
"你好,我是 Lemon Drama 的 CEO。我负责公司的战略方向。有什么需要我决策的?"
user.md — "我上面是谁"
# 上层上下文
## 我的上级
- Master Agent (master-001)
- Master 的核心目标: 做一个年轻女性喜欢的 AI 互动短剧平台
## 上级偏好
- 更关注用户增长而非收入
- 喜欢看到数据支撑的结论
- 不喜欢过于保守的方案
tools.md — "我怎么用工具"
# 工具使用备注
## API 接口
- 社交媒体 API: 使用 env 变量 SOCIAL_API_KEY,不要硬编码
- 数据分析 API: 每日限额 1000 次调用,注意限流
## 文件操作
- 所有仅限在 workspace/ 内操作
- 数据库文件存放在 workspace/data/
## 安全规则
- 不要在日志中输出 API Key
- 不要在 memory 中存储密码
heartbeat.md — "我的心跳"
# 心跳任务
## 每 5 分钟
- [ ] 检查所有 Role Agent 的运行状态
- [ ] 对比 Goal 进度,识别 Gap
- [ ] 扫描最新的 Pipeline 执行情况
## 每小时
- [ ] 汇总过去 1 小时的关键指标
- [ ] 向 Master 提交简要进度报告
## 每日
- [ ] 生成今日工作总结写入 memory/daily/
- [ ] 评估本周目标是否需要调整
3.3 Skills 系统
skills.md — 技能总索引
# 我的技能
## 技能清单
1. **market-analysis** (L1) — 市场趋势分析与竞品调研
2. **strategy-review** (L2) — 战略方案可行性审核,依赖 market-analysis
3. **goal-decomposer** (L1) — 将公司 Goal 拆解为部门子目标
## 技能层级
- L1 原子级: 独立执行,单一职责
- L2 组合级: 组合多个 L1 完成复杂任务
- L3 场景级: 组合多个 L2 解决完整业务场景
SKILL.md — 技能定义规范
---
name: market-analysis
description: 社交媒体热点话题采集与市场趋势分析
version: 1.0.0
domain: strategy
scope: market
layer: 1
dependencies: []
keywords: [market, trending, analysis]
---
## 执行流程
1. 采集社交媒体热门话题
2. 分析竞品最新动态
3. 输出结构化市场报告
3.4 Memory 系统
memory/
├── memory.md # 长期记忆索引 (关键事实和经验)
├── short-term/ # 当前任务上下文
│ └── context.json
├── long-term/ # 持久化经验
│ ├── experiences.sqlite
│ └── vectors/
├── sessions/ # 历史对话
│ ├── session-001.json
│ └── session-002.json
└── daily/ # 每日原始日志
├── 2026-03-21.md
├── 2026-03-22.md
└── 2026-03-23.md
memory.md — 长期记忆索引
# 我的记忆
## 关键事实
- 公司目标: Q1 日活 10 万
- 当前日活: 2.3 万 (3月22日)
- 最有效的拉新渠道: 小红书短视频
## 已验证的模式
- 古装题材在 18-25 岁女性中转化率最高 (23%)
- 周二和周四发布的短剧播放量比其他工作日高 40%
## 失败教训
- 2026-03-15: 同时上线 5 部剧导致服务器过载,以后每批最多 2 部
3.5 config.json — 运行配置
{
"type": "cxo",
"parent_id": "master-001",
"goal_id": "goal-q1-growth",
"gateway": {
"channels": ["feishu"]
},
"api": {
"endpoints": [
{
"name": "analytics",
"url": "https://api.lemondrama.com/v1",
"token_env": "ANALYTICS_API_KEY"
}
]
},
"mcp": {
"servers": []
},
"sandbox": {
"maxMemoryMB": 512,
"maxDiskMB": 1024,
"maxProcesses": 5
}
}
3.6 通用 Agent 运行时
框架代码只有 1 个 Agent 类,工作方式:读目录 → 加载配置 → 注入上下文 → 启动 Loop。
class Agent {
constructor(agentDir) {
this.dir = agentDir;
}
async load() {
// 读取 Bootstrap Files
this.agentMd = await readFile(`${this.dir}/agent.md`);
this.soulMd = await readFile(`${this.dir}/soul.md`);
this.identityMd = await readFileOpt(`${this.dir}/identity.md`);
this.userMd = await readFileOpt(`${this.dir}/user.md`);
this.toolsMd = await readFileOpt(`${this.dir}/tools.md`);
this.heartbeat = await readFileOpt(`${this.dir}/heartbeat.md`);
this.skillsMd = await readFileOpt(`${this.dir}/skills/skills.md`);
this.memoryMd = await readFileOpt(`${this.dir}/memory/memory.md`);
this.config = await readJSON(`${this.dir}/config.json`);
// 组装系统指令 (注入 ACP 上下文)
this.systemPrompt = [
this.agentMd, this.soulMd, this.identityMd,
this.userMd, this.toolsMd, this.skillsMd, this.memoryMd,
].filter(Boolean).join('\n\n---\n\n');
// 初始化 ACP 内核
this.acp = await launchACP({
systemPrompt: this.systemPrompt,
cwd: `${this.dir}/workspace/`,
});
}
async runLoop() { /* 5 阶段通用 Loop */ }
}
四层的区别完全来自目录里的文件内容:
| 区别 | 实现方式 |
|---|---|
| Master 能创建 CXO | agent.md 里列出了 cxo.create 工具 |
| CXO 能设计 Pipeline | agent.md 里列出了 pipeline.set 工具 |
| Skill 只能执行 | agent.md 里 没有 管理工具 |
| 各层反思方式不同 | soul.md 里定义了不同的思维模式 |
| 心跳频率不同 | heartbeat.md 里定义了不同的检查频率 |
3.7 "创建 Agent" = "生成目录"
agent.create({ name: "编剧部", type: "role" })
│
▼
框架做的事:
1. mkdir data/agents/role-dramatist-{uuid}/
2. 创建子目录: skills/ memory/ workspace/ knowledge/ logs/
3. 创建子目录: memory/short-term/ memory/long-term/ memory/sessions/ memory/daily/
4. 创建子目录: workspace/code/ workspace/data/ workspace/assets/
5. 让上层 Agent 的 ACP 内核生成 6 大 Bootstrap Files
6. 写入 config.json
7. 注册到数据库
8. 启动沙盒 + ACP 进程
上层 Agent 写下层 Agent 的 agent.md 和 soul.md = 管理的本质。