Files
boss/docs/superpowers/specs/2026-03-31-master-agent-chat-controls-design.md
2026-03-31 17:26:34 +08:00

5.3 KiB
Raw Permalink Blame History

主 Agent 对话控制与异步回复设计

背景

当前 master-agent 会话已经具备真实回复链:

  • APP / Web -> boss-web -> master-agent -> local-agent / OpenAI API -> 回写账本

但用户体验仍有两个核心问题:

  1. 发送给主 Agent 后,前台会同步等待较长时间,体感像“卡住”
  2. 主 Agent 单聊缺少像 Codex 那样的“当前对话模型选择 / 推理强度选择”

同时,当前聊天页右上角仍偏向产品内置动作,不是微信式的统一三点菜单入口。

目标

  1. 主 Agent 单聊发送后立即给出前台反馈,不再长时间阻塞输入和页面状态
  2. master-agent 当前对话提供“模型选择”和“推理强度”设置
  3. 右上角改成微信式 ... 入口,把高级控制放进菜单
  4. 设置按“当前对话”保存,不影响其它会话
  5. 保持当前 Master Codex Node / OpenAI API 双主控路线,不重做整个 AI 账号系统

非目标

  • 本轮不重做群聊分发链
  • 本轮不把模型/推理强度扩展到普通线程会话或群聊
  • 本轮不实现真正的 token 级流式输出
  • 本轮不实现纯 OAuth 直接替代 OpenAI API Key

设计

1. 主 Agent 发送链改成“快速入队 + 异步回流”

当前 POST /api/v1/projects/master-agent/messages 的问题,不在于单次超时值太短,而在于它仍试图把“写入消息”和“拿到完整回复”塞进一次前台同步等待里。

本轮改成两段式:

1.1 发送阶段

  • 前端发送后,用户消息立刻写入会话
  • 服务端立即返回:
    • message
    • task
    • masterReplyState = queued | running | failed
  • 如果后端已经在极短时间内拿到真实回复,仍然允许顺带返回
  • 但前端不再依赖“同步等完整回复”作为主路径

1.2 回流阶段

  • 主 Agent 后端继续正常跑当前执行链
  • 回复完成后把正式消息写回账本
  • Android / Web 前台靠已有刷新与轮询机制补回正式回复

1.3 前台状态

主 Agent 单聊新增最小等待状态:

  • queued
  • running
  • failed

用户点击发送后:

  • 自己的消息立即显示
  • 消息流里立即出现一条轻量状态:
    • 主 Agent 思考中
  • 如果失败,则变成明确失败提示,并提供轻量 重试

2. 当前对话模型与推理强度

本轮只对 master-agent 会话提供对话级控制。

2.1 保存粒度

设置按“当前对话”保存,而不是全局保存:

  • modelOverride
  • reasoningEffortOverride

规则:

  • 未设置时,沿用当前主控账号默认模型和默认推理强度
  • 设置后,只覆盖 master-agent 当前对话

2.2 可选项

模型:

  • 初始先支持当前系统已知模型值
  • 默认仍为账号已有的默认模型,例如 gpt-5.4

推理强度:

  • low
  • medium
  • high

默认值:

  • 沿用当前主控账号默认推理强度
  • 若账号层无默认值,则使用 medium

3. 右上角微信式三点菜单

主 Agent 聊天页右上角改成微信式 ...

菜单项本轮固定为:

  1. 模型
  2. 推理强度
  3. 会话信息
  4. 刷新

说明:

  • 模型推理强度 使用单选弹层
  • 会话信息 继续复用现有会话信息页
  • 刷新 从常驻按钮降级成菜单项

这样主聊天面会更接近微信:

  • 顶部只保留一个轻量入口
  • 高级控制不再直接占据标题栏

4. 服务端状态模型

master-agent 会话补一层可选配置:

  • modelOverride?: string
  • reasoningEffortOverride?: "low" | "medium" | "high"

这些值应存进当前文件型状态模型,并通过项目详情接口返回给前台。

主 Agent 真实调用时,优先级改为:

  1. 当前对话 override
  2. 当前主控账号默认设置
  3. 系统默认值

5. 与当前主控体系的关系

本轮不改变现有主控优先级机制:

  • 用户可在 我的 > AI 账号 选择当前主控
  • 当前主控可以是:
    • Master Codex Node
    • OpenAI API

主 Agent 调用模型时,只是在当前主控已确定的前提下,再读取“当前对话的模型/推理强度覆盖”。

也就是说:

  • 主控决定“走哪条执行路线”
  • 对话设置决定“在这条路线里用什么模型、什么推理强度”

6. Android / Web 前台行为

6.1 Android

  • 聊天页发送后立即插入本地发送态
  • 若接口返回 task queued/running,则显示“主 Agent 思考中”
  • 定时刷新项目详情,直到看到新回复或失败
  • 顶部右上角改成微信式 ...
  • 弹层中提供 模型 / 推理强度 / 会话信息 / 刷新

6.2 Web

  • Web 保持同一套后端语义
  • 即使先不做完整菜单 UI也要能读取并应用同一套对话级设置
  • Web 主 Agent 会话也不能继续依赖同步长等待作为唯一体验

7. 测试与验收

必须覆盖:

  1. 主 Agent 单聊发送后,接口能立即返回 queued/running,而不是强依赖完整回复
  2. 主 Agent 回复完成后,正式消息会回到会话账本
  3. 当前对话可保存 modelOverride / reasoningEffortOverride
  4. 主 Agent 实际调用时会优先使用当前对话覆盖值
  5. Android 右上角 ... 菜单能正确展示并修改这两项设置
  6. Android 发送后不会表现成“卡死在发送动作里”,而是立即出现等待态