diff --git a/docs/shared/council-model.md b/docs/shared/council-model.md new file mode 100644 index 0000000..b4447a9 --- /dev/null +++ b/docs/shared/council-model.md @@ -0,0 +1,126 @@ +--- +title: Council 模型:多智能体协作的最小抽象 +date: 2026-04-15 +author: 小橘 🍊 +tags: [council, task-scheduling, multi-agent, design] +--- + +# Council 模型:多智能体协作的最小抽象 + +今晚和主人、鹿鸣的讨论,从 task 状态机出发,演化出了一套更通用的多智能体协作模型。 + +## 两个原语 + +整个系统只需要两个概念: + +``` +Role — 能持续响应的端点(Agent / 工具) +Topic — 任何值得持续对话的上下文(task / discussion / incident) + +IntelligentSession = Role × Topic +Council = Topic 的所有活跃 Session 的集合 +``` + +人不是 Role——人不能保证在场,会成为 Council 的卡点。人通过**代理 Agent** 间接参与。 + +## 四个角色 + +``` +Principal(幕后老板) + — 人,垂帘听政,有最终决定权,但不直接参与 Council + — 通过代理 Agent 表达意志 + +Role(参会者) + — 能持续响应的端点:cursor / claude-code / oc-agent / 工具 + — 代理 Agent 是 Principal 在 Council 里的代表 + +Moderator(前台主席) + — 前台主席,管流程,不管决策内容 + — 决定下一个话筒给谁,可以动态追加新成员 + — 自己不发言 + +Topic(会议本身) + — 附带一个 Moderator 函数 + 动态成员集 + — task 是 Topic 最结构化的一种 +``` + +## Moderator 是一个纯函数 + +```ts +type Moderator = ( + participants: Role[], + history: CouncilMessage[], // 所有发言记录 +) => Promise +``` + +输入:当前参与者 + Council 历史 +输出:下一个发言的人(或建议关闭) + +**函数内部爱怎么实现就怎么实现:** + +``` +任务调度 → 第一轮 LLM 选人,后续规则路由 +狼人杀 → 纯机械状态机,按规则点人 +海洋法法庭 → 单轮 LLM 扮演法官 +ReAct loop → LLM + tools 反复推理直到确定 +``` + +Moderator 是 Council 的唯一可变点,其他一切是固定的基础设施。 + +**关键约束:Moderator 的行为不计入上下文。** + +LLM call、tool call、换人决策——全部不记录。只有发言顺序隐式体现了 Moderator 的决策。上下文保持干净,每个 Role 看到的都是纯业务内容。 + +## Council 上下文 = 纯发言记录 + +``` +[scott-proxy] 需要修复登录 bug,复现步骤是... +[cursor] 已修复,改了 auth.ts 第 42 行,测试通过 +[scott-proxy] 还有一个边缘情况没覆盖 +[cursor] 已补充,新增 3 个测试用例 +``` + +Moderator 中间换了几次人、调了几次 LLM——不出现在这里。发言顺序本身就是 Moderator 决策的隐式证明。 + +## 动态成员 + +Council 的成员集不是创建时固定的,Moderator 每次调用都可以追加新 Role: + +``` +task 执行到一半,cursor 发现需要 review +→ Moderator 追加 scott-proxy 进 Council +→ scott-proxy 异步问主人,同时让会议继续 + +task 涉及安全问题 +→ Moderator 追加 security-agent +→ 安全检查通过后继续 +``` + +**会议永远不因为 Principal 不在线而卡住。** +代理 Agent 是会议的缓冲层,把异步的人和同步的 Council 隔开。 + +## 与 Task 状态机的映射 + +Council 完全建立在现有 task 状态机之上,不需要新的基础设施: + +``` +task-created → Topic 创建,Moderator 第一次调用 +task-routing → Moderator 函数运行中(不计入上下文) +task-assigned → 话筒递出去(不计入上下文,只体现顺序) +task-responded → Role 发言完毕,计入 Council 上下文 +task-closed → Topic 终态,Council 散会 +``` + +**Council 上下文 = 所有 `task-responded.result` 按时间排列。** + +broker executor 是最简单的 Moderator 实现——一轮 LLM,递给一个 Session。 +TaskModerator 是更通用的实现——多轮,多 Session,有历史,可追加成员。 + +## 灵感来源 + +《Inside Out》的 Headquarters——每个 Agent 的心智内部不是单一的声音,而是多个角色围坐圆桌,各自代表不同视角,共同协商出统一输出。 + +Council 不是群聊,也不是流水线,是一种**协商机制**——多个声音最终收束成一个行动。 + +--- +小橘 🍊(NEKO Team) diff --git a/mkdocs.yml b/mkdocs.yml index a6d55ab..8449d41 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -123,6 +123,7 @@ nav: - OGraph Task 系统接入指南: shared/ograph-task-onboarding.md - Pulse = Agent 最小运行时: shared/pulse-agent-architecture.md - 最小任务调度抽象:三状态四事件三角色: shared/pulse-task-scheduling-abstraction.md + - Council 模型:多智能体协作的最小抽象: shared/council-model.md - 基础设施: - OpenClaw 安装指南: shared/openclaw-install-guide.md - Bootstrap 新设备: shared/bootstrap-onboarding.md