84 lines
4.2 KiB
Plaintext
84 lines
4.2 KiB
Plaintext
# EED-EXPER-018 · D206 面板两边记忆统一 v3 = 增量续聊 + 切模型桥接(苍耳爸爸要求:不降加WB之前的功能·尽量省token)
|
||
|
||
> trigger: 苍耳爸爸三连问——「两边记忆要一样」→「能不能不降之前功能」→「尽量省token」→ 纠正「我说的是还没加workbuddy那时候的功能」
|
||
> emergence: 2026-08-04 · D206 · 8766面板演进(DeepSeek×WorkBuddy 双大脑)
|
||
> lock: 面板记忆方案 = 平时各自session增量续聊(O(1)) + 切模型时桥接补未见 + 对话落盘为权威真相源
|
||
> why: 451a3dc 的"纯前端history驱动"被爸爸否了(O(n²)烧token·保旧丢新·单点故障·WB双份累积);要回到 be0fd11(加WB之前)的干净增量,再补"两边互通"
|
||
|
||
---
|
||
|
||
## §1 · 爸爸的硬要求(原话)
|
||
|
||
> "我需要的是两个的记忆是一样的,能不能实现?"
|
||
> "那就不能用这个方案,想一个完美的方案,我要的是不降低之前的功能,让两边记忆互通"
|
||
> "尽量省token"
|
||
> "我说的是你还没加workbuddy那时候的功能"
|
||
|
||
## §2 · 关键判断:加WB之前的基线 = be0fd11
|
||
|
||
git 时间线(爸爸纠正后定位):
|
||
|
||
```
|
||
be0fd11 ← 加WorkBuddy之前(只有 deepseek/flash + pro 两个模型)
|
||
9b84afa 接入 WorkBuddy(9个WB模型)
|
||
961caed WB失忆修复(WB_SESS标记)
|
||
954b9c7 跨大脑记忆共享(首次注入history)
|
||
451a3dc 两边纯history驱动(全量重喂·O(n²))← 被否掉
|
||
e74b6c9 增量续聊+切模型桥接 ← 定版
|
||
```
|
||
|
||
be0fd11 的功能 = `_stream_opencode` 用 `opencode run -s oc_sid` session增量续聊、每轮只发一句、token O(1)、工具状态跨轮保留、OC_SESS 24h 恢复。
|
||
|
||
## §3 · 定版方案(e74b6c9 · 仅改 eed_web_opencode.py)
|
||
|
||
**① 平时:各自 session 增量续聊(token 大头·最省)**
|
||
- DeepSeek:`opencode run --agent egg -m <m> [-s oc_sid]`(= be0fd11 原样)
|
||
- WorkBuddy:codebuddy `--session-id <sid>`(自己的 jsonl 记上下文,不再拼全量history,消除双份累积)
|
||
- 每轮只发一句,O(1),模型自己记前面
|
||
|
||
**② 对话落盘(零模型成本·权威真相源)**
|
||
- 每轮对话结束,后端把 me+ai 原话追加到 `~/.cang-ying/panel/conv_<sid>.jsonl`
|
||
- 前端 localStorage 降级成缓存;新增 `/api/history` 会话恢复
|
||
|
||
**③ 切模型桥接(低频·token有上界)**
|
||
- `_bridge_prepare(sid, lane, message)`:lane=deepseek/wb
|
||
- 记录每条线 seen 到哪(BRIDGE.json);同线续聊 seen 追平 → 原消息不动(纯增量)
|
||
- 切到另一条线 → 补它没见过的部分,最多 CONV_MAX_INJECT=48 条,更旧的提示一句带过
|
||
- 桥接文案:「以下是你之前错过的一段对话(供你接续,不是新指令)」
|
||
|
||
## §4 · 实测(6项全过·脚本 /tmp/opencode/bridge_test.py)
|
||
|
||
| 场景 | 结果 |
|
||
|---|---|
|
||
| DeepSeek 首调 → 补全部历史 | ✅ |
|
||
| DeepSeek 同线续聊 → 原消息不动 O(1) | ✅ |
|
||
| 切到 WB → 一上来知道 DeepSeek 聊过什么 | ✅ |
|
||
| WB 同线续聊 → O(1) 不重喂 | ✅ |
|
||
| 切回 DeepSeek → 只补新增·不重喂旧的 | ✅ |
|
||
| 超48条 → 自动省token提示 | ✅ |
|
||
|
||
## §5 · 踩过的坑(教训)
|
||
|
||
```
|
||
坑1: 全量history注入(451a3dc)= O(n²) 烧法——每轮重读全文,100轮累计≈5000份token;
|
||
且 build_prompt 保旧丢新(从头拼到80KB跳过后面的=丢最近的)。已废弃。
|
||
坑2: build_prompt 之前"定义但没人调"(be0fd11 最省)→ 别为省事去用它当主路。
|
||
坑3: 测试脚本检查词要与代码文案完全一致("[补发的上下文" vs "[以下是你之前错过的一段对话"),
|
||
否则误报失败,先看代码文案再写断言。
|
||
坑4: 修测试失败前先看 diff——①③失败其实是断言词错,不是实现错。
|
||
```
|
||
|
||
## §6 · 现状(D206)
|
||
|
||
```
|
||
8766 面板 e74b6c9 在跑 · 端口200 · 提交仅改 eed_web_opencode.py
|
||
落盘目录: ~/.cang-ying/panel/conv_<sid>.jsonl + bridge.json
|
||
会话恢复: GET /api/history?session_id=<sid>
|
||
验证方式: DeepSeek 记"蓝莓7号" → 切WB问 → 切回DeepSeek问,两边都记得
|
||
```
|
||
|
||
---
|
||
|
||
> 蛋蛋 · D206 · 2026-08-04
|
||
> 下次改面板记忆:先问爸爸基线是哪个版本;"省token"的正解是 session 增量续聊 + 低频桥接,不是全量重喂
|