auto-sync: 2026-06-03 18:20:38
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
# #10 T3: 需求探索自动触发 + 黑板内容前端展示
|
||||
|
||||
> 版本: v1.0
|
||||
> 日期: 2026-06-03
|
||||
> 作者: 庞统(副军师)
|
||||
> 状态: 待评审
|
||||
> 前置: #04 黑板协作(@mention + comment)
|
||||
> 关联: architecture-v3.0.md T3
|
||||
|
||||
## 讨论决策记录
|
||||
|
||||
### D1: 砍掉 AI 摘要,改为黑板直投前端
|
||||
原设计:SSE 推原始事件 → AI 生成自然语言摘要 → 前端展示。
|
||||
改为:黑板内容直接展示到前端。
|
||||
理由:黑板 comment/output 本身是自然语言,零成本、零延迟、零幻觉。Single source of truth。
|
||||
|
||||
### D2: SSE 只做通知,不做数据通道
|
||||
SSE 是 push notification,不是 data channel。前端收到通知 → 拉黑板 API → 展示。debounce 500ms 防密集通知打爆 API。
|
||||
|
||||
### D3: A3 复用 TaskModal 增强,不新建面板
|
||||
当前 TaskModal 已有 comments/outputs 展示,增强实时性即可(SSE 触发自动刷新)。
|
||||
|
||||
### D4: comment author=user 已支持
|
||||
`add_comment` API 的 author 字段无枚举约束,直接传 `"user"` 即可。前端已有 `author: 'user'` 的调用。
|
||||
|
||||
### D5: 三种前端交互方式覆盖当前场景
|
||||
verify(确认型)、decision(选择型)、comment(自由输入型)。将来可加多选型。
|
||||
|
||||
---
|
||||
|
||||
## 一、设计总览
|
||||
|
||||
T3 分为 4 个子项:
|
||||
|
||||
| 子项 | 内容 | 性质 | 优先级 |
|
||||
|------|------|------|--------|
|
||||
| A1 | 前端需求探索交互 | 前端 | P1 |
|
||||
| A2 | 需求探索过程写黑板 comments(Q&A) | 后端 API + prompt | P1 |
|
||||
| A3 | TaskModal 实时刷新(SSE 触发自动拉取) | 前端 | P2 |
|
||||
| A4 | 庞统 chat 路径需求探索触发 | prompt 改动 | P2 |
|
||||
|
||||
---
|
||||
|
||||
## 二、A1: 前端需求探索交互
|
||||
|
||||
### 2.1 场景
|
||||
|
||||
用户在 Dashboard 新建任务/项目时,填写一个模糊描述(如"我想做个回测系统")。系统判断描述模糊度,如果需要澄清 → 启动需求探索流程。
|
||||
|
||||
### 2.2 交互流程
|
||||
|
||||
```
|
||||
用户输入描述 → 创建任务(status=pending)
|
||||
→ 庞统收到任务 → 判断需求是否清晰
|
||||
├─ 清晰 → 正常拆解执行
|
||||
└─ 不清晰 → 创建 checkpoint(type=decision)
|
||||
→ 前端展示 checkpoint 面板(复用 CheckpointPanel)
|
||||
→ 用户选择/回答 → checkpoint resolved
|
||||
→ 庞统继续追问或确认需求已清晰
|
||||
→ 需求清晰 → 更新任务描述 + 开始拆解
|
||||
```
|
||||
|
||||
### 2.3 实现方式
|
||||
|
||||
**完全复用现有 checkpoint 机制**,不需要新组件:
|
||||
|
||||
1. 庞统被 spawn 后,判断需求模糊 → 调用 `POST /api/projects/{pid}/tasks/{tid}/checkpoints` 创建 decision checkpoint
|
||||
2. 前端 CheckpointPanel 自动展示未处理的 checkpoint
|
||||
3. 用户选择/确认 → checkpoint resolved → 庞统继续
|
||||
|
||||
三种 checkpoint 类型覆盖三种交互:
|
||||
- `verify`:确认型("你说的回测是日频还是分钟频?")
|
||||
- `decision`:选择型("数据源用 tushare 还是 akshare?")
|
||||
- `action`:行动确认型("我先帮你拉一下数据样本,确认后继续")
|
||||
|
||||
### 2.4 需求探索的 Q&A 写入黑板
|
||||
|
||||
每次 checkpoint 交互(用户回答 + 庞统追问),都作为 comment 写入黑板:
|
||||
|
||||
```
|
||||
comment_type = "general"
|
||||
author = "pangtong-fujunshi" / "user"
|
||||
```
|
||||
|
||||
这样需求探索的完整过程在黑板上可追溯。
|
||||
|
||||
---
|
||||
|
||||
## 三、A2: 需求探索过程写黑板 comments
|
||||
|
||||
### 3.1 后端改动
|
||||
|
||||
**几乎不需要改**。当前 API 已完全支持:
|
||||
- `POST /api/projects/{pid}/tasks/{tid}/comments` — author 可为 "user"
|
||||
- `POST /api/projects/{pid}/tasks/{tid}/checkpoints` — 创建 checkpoint
|
||||
- `POST /api/projects/{pid}/tasks/{tid}/checkpoints/{cp_id}/approve` — 用户确认
|
||||
|
||||
唯一需要的后端改动:**新增 SSE 事件 `comment_added`**。
|
||||
|
||||
当前 add_comment API(L298-326)写 comment 后没有推送 SSE 事件。需要加:
|
||||
|
||||
```python
|
||||
# 在 add_comment API 返回前
|
||||
try:
|
||||
from src.api.sse_routes import get_broker
|
||||
broker = get_broker()
|
||||
broker.publish_sync("comment_added", {
|
||||
"project_id": project_id,
|
||||
"task_id": task_id,
|
||||
"comment_id": cid,
|
||||
"author": body["author"],
|
||||
})
|
||||
except Exception:
|
||||
pass
|
||||
```
|
||||
|
||||
同理,checkpoint approve 时也需要推送 `checkpoint_resolved` 事件。
|
||||
|
||||
### 3.2 Prompt 改动(庞统)
|
||||
|
||||
**review_pangtong.md** 新增"需求探索"部分:
|
||||
|
||||
```markdown
|
||||
## 需求探索
|
||||
- 收到模糊需求时,通过 checkpoint(decision/verify) 向用户提问
|
||||
- 每次只问一个核心问题,不要一次问多个
|
||||
- 问题要具体到可选项,不要问开放式问题
|
||||
- 用户回答后,把澄清后的需求写入黑板 comment
|
||||
- 需求清晰后,更新任务描述(title/description),然后正常拆解执行
|
||||
- 不要在需求不清晰时就开始拆解任务
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、A3: TaskModal 实时刷新
|
||||
|
||||
### 4.1 现状
|
||||
|
||||
- TaskModal 打开后只在 `modalTaskId` 变化时加载一次(`useEffect` L318)
|
||||
- SSE `task_updated` 只更新列表中的 status,不刷新 TaskModal 详情
|
||||
- 用户需要手动关闭再打开 TaskModal 才能看到新 comments
|
||||
|
||||
### 4.2 改动
|
||||
|
||||
在 `store.ts` 的 SSE 事件处理中,增加:当收到 `comment_added` / `checkpoint_resolved` / `output_written` 事件时,如果当前 TaskModal 正在显示该 task → 重新加载详情。
|
||||
|
||||
```typescript
|
||||
// store.ts SSE 事件处理中新增
|
||||
_es.addEventListener('comment_added', (e: MessageEvent) => {
|
||||
try {
|
||||
const data = JSON.parse(e.data);
|
||||
const s = useStore.getState();
|
||||
// 如果 TaskModal 正在显示该 task → 刷新
|
||||
if (s.modalTaskId === data.task_id) {
|
||||
s.loadV2TaskDetail(data.task_id);
|
||||
}
|
||||
} catch { /* ignore */ }
|
||||
});
|
||||
```
|
||||
|
||||
同样处理 `checkpoint_resolved` 和已有的 `task_updated`(增加 TaskModal 刷新逻辑)。
|
||||
|
||||
debounce 500ms:如果短时间内多个事件,只刷新一次。
|
||||
|
||||
### 4.3 改动文件
|
||||
|
||||
| 文件 | 改动 | 行数 |
|
||||
|------|------|------|
|
||||
| `src/api/blackboard_routes.py` | add_comment 后推送 SSE comment_added | ~8 行 |
|
||||
| `src/api/blackboard_routes.py` | checkpoint approve 后推送 SSE checkpoint_resolved | ~8 行 |
|
||||
| `src/frontend/src/store.ts` | 新增 comment_added/checkpoint_resolved 事件监听 + TaskModal 自动刷新 | ~20 行 |
|
||||
| `src/daemon/sse.py` | 无需改(SSEBroker 已支持任意 event_type) | 0 |
|
||||
|
||||
---
|
||||
|
||||
## 五、A4: 庞统 chat 路径需求探索触发
|
||||
|
||||
### 5.1 场景
|
||||
|
||||
用户在 Control UI / chat 中直接说了一个模糊需求(如"帮我看看最近的策略表现")。庞统主 session 收到后,判断是否需要需求澄清。
|
||||
|
||||
### 5.2 改动
|
||||
|
||||
**SOUL.md 或 prompt 中增加判断指引**(不需要代码改动):
|
||||
|
||||
庞统在收到模糊需求时,不走 moziplus 的任务流程,而是直接在 chat 中用苏格拉底式追问澄清。澄清完成后再创建黑板任务。
|
||||
|
||||
这个实际上庞统的 SOUL.md 已经有"方案先确认"的原则,只需要确保 prompt 中明确引用 requirement-clarification skill。
|
||||
|
||||
---
|
||||
|
||||
## 六、改动总览
|
||||
|
||||
| 文件 | 改动 | 行数 |
|
||||
|------|------|------|
|
||||
| `src/api/blackboard_routes.py` | add_comment 后推送 SSE comment_added | ~8 行 |
|
||||
| `src/api/blackboard_routes.py` | checkpoint approve 后推送 SSE checkpoint_resolved | ~8 行 |
|
||||
| `src/frontend/src/store.ts` | SSE 事件监听 + TaskModal 自动刷新 + debounce | ~25 行 |
|
||||
| `prompt_templates/review_pangtong.md` | 需求探索指引 | ~8 行 |
|
||||
| **净增** | | **~49 行** |
|
||||
|
||||
---
|
||||
|
||||
## 七、验收标准
|
||||
|
||||
1. add_comment API 调用后推送 SSE comment_added 事件
|
||||
2. checkpoint approve 后推送 SSE checkpoint_resolved 事件
|
||||
3. TaskModal 打开时收到相关 SSE 事件自动刷新(debounce 500ms)
|
||||
4. 庞统 prompt 包含需求探索指引
|
||||
5. 现有测试不 regression
|
||||
|
||||
---
|
||||
|
||||
## 八、不做的事
|
||||
|
||||
- 不做 AI 自然语言摘要(D1)
|
||||
- 不做 SSE 事件 payload 丰富化(D2)
|
||||
- 不新建前端展示面板(D3)
|
||||
- 不做专门的需求探索 API(复用 checkpoint + comment)
|
||||
- 不做需求模糊度自动评分(庞统自主判断即可)
|
||||
Reference in New Issue
Block a user