场景隔离设计
场景(Scene)是 CocoCat 中工作上下文隔离的基本单元。类似 IDE 中的"项目"或 Docker 中的"容器"——每个场景是独立的,相互不干扰。
为什么需要场景?
在实际使用中,一个 Agent 团队可能同时处理:
- 项目 A:开发一个 Web 应用(需要编程知识、代码库、Git 操作)
- 项目 B:回答客服问题(需要 FAQ 知识库、工单模板)
- 项目 C:分析数据报告(需要数据分析技能、数据库访问)
如果 Agent 共享所有知识和工具:
- 客服 Agent 的上下文会被编程知识污染
- 编程 Agent 加载的巨量代码库会浪费其他场景的 token 预算
- 工具冲突(如数据库工具在客服场景中毫无意义)
场景的隔离机制
scenes/{scene_id}/
├── CONTEXT.md # 场景上下文描述(注入 system prompt)
├── mounted_kbs.json # 挂载的知识库列表
├── roster.json # 场景成员列表
├── skills/
│ ├── manifest.json # 场景级技能(env_skills)
│ └── {name}.md # 技能定义
└── entries.json # 场景频道入口1. 上下文隔离
每个场景有独立的 CONTEXT.md,描述场景的目标、规则和背景。这段文本直接注入到 Agent 的 system prompt 中。不同场景的 Agent 收到不同的上下文。
2. 知识库隔离
场景通过 mounted_kbs.json 指定可访问的知识库。Agent 的 search_kb 工具只能搜索当前场景挂载的 KB。
development 场景 → 挂载 team-wiki, product-docs
customer-service 场景 → 挂载 faq-kb, policy-kb3. 技能隔离
场景级技能(env_skills)是场景中所有 Agent 自动获得的能力。例如:
development场景 →code_review、git_ops技能customer-service场景 →ticket_management技能
4. 成员隔离
场景通过 roster.json 定义参与的 Agent。Agent 的 scene 字段决定其归属。
toml
# agents/config.toml
[[agents]]
id = "employee_a"
scene = "development" # employee_a 只属于 development 场景如果 agent 没有被添加到场景的 roster 中,场景的频道入口不会向该 agent 路由消息。
5. 频道入口隔离
每个场景(或 agent)可以配置外部频道入口。同一套 Agent 部署可以为不同场景处理不同渠道的消息。
场景的工作流
创建场景 → 编写 CONTEXT.md → 挂载 KB → 添加成员 → 配置频道 → 启动- 创建:在 Web 面板或通过 API 创建场景
- 编写上下文:描述场景目标、规则、可用资源
- 挂载 KB:选择相关知识库
- 分配 Agent:添加 Agent 到 roster
- 配置频道:绑定外部渠道(微信、飞书等)
- 启动:Rust 核心自动加载场景配置
与 Agent 的关系
Agent 维度 Scene 维度
┌──────────┐ ┌───────────────┐
│ identity │ │ CONTEXT.md │
│ profile │ │ mounted_kbs │
│ skills │ → │ roster │
│ memory │ │ env_skills │
│ display │ │ entries │
└──────────┘ └───────────────┘每个 Agent 的 system prompt 由两部分合并:
- Agent 维度:ID、角色、个性、长期记忆、个人技能
- Scene 维度:场景上下文、挂载 KB 概览、环境技能
设计权衡
| 选择 | 替代方案 | 理由 |
|---|---|---|
| 文件系统隔离 | 数据库隔离 | 透明可修改,易于调试 |
| 静态配置 | 动态发现 | 降低复杂度,场景变化不频繁 |
| 场景绑定 Agent | Agent 多场景 | 简化数据模型,避免复杂路由 |
| KB 挂载 | KB 复制 | 避免数据冗余,保证 KB 一致性 |
典型配置
development 场景
json
// scenes/development/CONTEXT.md
# Development Scene
软件开发团队,处理代码编写、审查、测试等任务。json
// scenes/development/mounted_kbs.json
{"mounted": ["team-wiki", "api-docs", "code-standards"]}customer-service 场景
json
// scenes/customer-service/CONTEXT.md
# Customer Service Scene
客服团队,处理用户咨询、投诉、工单等。json
// scenes/customer-service/mounted_kbs.json
{"mounted": ["faq", "product-manual", "policy"]}