Skip to content

场景隔离设计

场景(Scene)是 CocoCat 中工作上下文隔离的基本单元。类似 IDE 中的"项目"或 Docker 中的"容器"——每个场景是独立的,相互不干扰。

为什么需要场景?

在实际使用中,一个 Agent 团队可能同时处理:

  • 项目 A:开发一个 Web 应用(需要编程知识、代码库、Git 操作)
  • 项目 B:回答客服问题(需要 FAQ 知识库、工单模板)
  • 项目 C:分析数据报告(需要数据分析技能、数据库访问)

如果 Agent 共享所有知识和工具:

  1. 客服 Agent 的上下文会被编程知识污染
  2. 编程 Agent 加载的巨量代码库会浪费其他场景的 token 预算
  3. 工具冲突(如数据库工具在客服场景中毫无意义)

场景的隔离机制

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-kb

3. 技能隔离

场景级技能(env_skills)是场景中所有 Agent 自动获得的能力。例如:

  • development 场景 → code_reviewgit_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 → 添加成员 → 配置频道 → 启动
  1. 创建:在 Web 面板或通过 API 创建场景
  2. 编写上下文:描述场景目标、规则、可用资源
  3. 挂载 KB:选择相关知识库
  4. 分配 Agent:添加 Agent 到 roster
  5. 配置频道:绑定外部渠道(微信、飞书等)
  6. 启动:Rust 核心自动加载场景配置

与 Agent 的关系

Agent 维度         Scene 维度
┌──────────┐      ┌───────────────┐
│ identity │      │ CONTEXT.md     │
│ profile  │      │ mounted_kbs   │
│ skills   │  →   │ roster         │
│ memory   │      │ env_skills     │
│ display  │      │ entries        │
└──────────┘      └───────────────┘

每个 Agent 的 system prompt 由两部分合并:

  • Agent 维度:ID、角色、个性、长期记忆、个人技能
  • Scene 维度:场景上下文、挂载 KB 概览、环境技能

设计权衡

选择替代方案理由
文件系统隔离数据库隔离透明可修改,易于调试
静态配置动态发现降低复杂度,场景变化不频繁
场景绑定 AgentAgent 多场景简化数据模型,避免复杂路由
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"]}

基于 MIT 协议开源