场景系统
场景(Scene)定义 agent 的工作上下文。每个场景是一个独立的工作目录,包含场景专属的配置、知识和成员。
目录结构
scenes/
└── {scene_name}/
├── CONTEXT.md # 场景描述(供 LLM 读取)
├── mounted_kbs.json # 挂载的知识库
├── roster.json # 场景成员列表
├── skills/
│ ├── manifest.json # 本场景启用的技能
│ └── {skill_name}.md # 技能说明
├── entries.json # 通道入口注册
└── chat/
└── {scene_id}.jsonl # 场景聊天记录CONTEXT.md
场景的"自述"文件,由管理员编写,描述场景的目标、规则、风格等。
示例:
markdown
# 客服场景
## 目标
为用户提供产品咨询和问题解答。
## 规则
- 响应必须在 30 秒内开始
- 使用礼貌用语
- 不回答与技术无关的问题roster.json
定义哪些 agent 属于本场景:
json
[
{"agent_id": "alice", "role": "leader"},
{"agent_id": "bob", "role": "employee"},
{"agent_id": "carol", "role": "employee"}
]场景隔离模型
每个场景是独立的上下文环境:
| 维度 | 隔离方式 |
|---|---|
| 文件系统 | 场景目录独立,不共享 |
| 知识库 | mounted_kbs.json 控制可见性 |
| 聊天 | 场景内消息只在本场景可见 |
| Agent | Agent 可属于多个场景,但每次对话只在一个场景中 |
| 记忆 | 全局 MEMORY.md 共享,但场景对话上下文隔离 |
Agent 分配
Agent 在 agents/config.toml 中通过 scene 字段分配到场景:
toml
[[agents]]
id = "alice"
name = "Alice"
interpreter = "python"
enabled = true
role = "leader"
scene = "default"每个 agent 启动时通过 --scene 参数知道自己所属场景。
场景生命周期
创建场景 → 编写 CONTEXT.md
→ 配置 roster.json
→ 挂载知识库
→ 注册通道入口
→ 分配 agent
↓
运行中 → 场景对话
→ 动态调整成员
↓
销毁 → 归档场景目录
→ agent 回到未分配状态