From e1223fdee559ad0d94db4abf7620acc395e476a4 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Mon, 5 Oct 2026 10:23:54 +0800 Subject: [PATCH] =?UTF-8?q?docs(05):=20=E9=94=9A=E7=82=B9=E8=A1=A5?= =?UTF-8?q?=E8=AE=B0=E4=BA=94=E2=80=94=E2=80=94=E5=BF=99=E6=97=B6=E5=B9=B6?= =?UTF-8?q?=E8=A1=8C=E6=95=B4=E6=89=B9=EF=BC=88W28-W33=20+=20FB2=EF=BC=89+?= =?UTF-8?q?=20=E6=80=9D=E8=80=83=E6=B5=81=E6=8E=92=E6=9F=A5=E7=BB=93?= =?UTF-8?q?=E8=AE=BA=EF=BC=88reasoning=20=E9=94=AE=E5=9C=A8=20anthropic=20?= =?UTF-8?q?=E7=BB=84=E4=B8=8A=E9=9D=9E=E6=B3=95=EF=BC=8C=E5=BC=80=E5=85=B3?= =?UTF-8?q?=E5=9C=A8=E5=8D=8F=E8=AE=AE=E5=8E=9F=E7=94=9F=20thinking=20?= =?UTF-8?q?=E5=BD=A2=E7=8A=B6=E9=87=8C=EF=BC=8C=E5=BE=85=E6=9F=A5=EF=BC=89?= =?UTF-8?q?+=20=E7=8E=AF=E5=A2=83=E4=B8=8E=E6=95=99=E8=AE=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devdocs/05-开发进度与交接.md | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/devdocs/05-开发进度与交接.md b/devdocs/05-开发进度与交接.md index 8e80df1..ab2aea9 100644 --- a/devdocs/05-开发进度与交接.md +++ b/devdocs/05-开发进度与交接.md @@ -968,3 +968,49 @@ PDF · 563 B · 24 字 · 已读入 > 3. **用假后端补三条设备验收**:`after` 补洞 / 打断帧 / `stream_chunk`(等 W29 合完)。 > 4. 子会话流程(主人说搁置);图片/工具卡实机验证(后端未配工具)。 > 5. **已结案(别再返工)**:登录页输入框被 IME 遮挡 —— **不成立**,2026-10-05 装机实测(密码框聚焦、键盘弹出时完整可见,截图 `app/build/e2e-shots/y3-ime.png`)。 + +> **★ 锚点补记五(2026-10-05 上午 · 忙时并行批次 + 思考流排查)** +> +> ### 状态 +> - **`android` = `origin/android` = `c3cfef7`,工作区干净,1033 测试 / 0 失败 / 0 错误**。 +> +> ### 本批落地(一行一个) +> | # | 内容 | 提交 | +> |---|---|---| +> | W28 | **进程内共享一条 `ChatSocket`**(连接数 N+2 → 1;`SessionsViewModel` 是唯一 owner);装机验过「连第二个会话连接数不涨」 | `7b97440` | +> | FB | **可编程假后端**(`devtools/fake-backend/`,纯 Python 标准库) | `27d5680` | +> | W29 | `stream_chunk` 改**整段**语义 / 空壳消息如实说一句 / 分享超长走文件 / 图片 URL 兜 host | `ac3f63f` | +> | W30 | **忙时并行 UI 半边**:六态 + 灰态 + `(sessionId, turnId)` 两级分桶,**帧侧全部可降级** | `0057205` | +> | W31 | 设置栏「她忙时发消息」**追加第三档「并行」**(忙时上行 `chat.parallel=true`,绝不发 interrupt) | `4847d74` | +> | W32 | 忙时被拒那条横幅**调柔和**(只那一档,真错误仍红)+ 并行额度落回排队如实说一句 | `79fcd80` | +> | W33 | `parallel_limit` 提示加「**本端确在并行档**」的闸 + 查证横幅(结论:代码无缺) | `1f6c16c` | +> | FB2 | 假后端加 **`--hold-replies`**(收到消息不自动落库)⇒「待发气泡还挂着」可稳定复现 | `c3cfef7` | +> +> ### 装机验过的(有设备证据) +> - **`after` 正向增量补洞**:重连后她自己发出 `messages?limit=50&after=…`(这是之前两天判定「验不了」的那条 —— **错在我想窄了,该用假后端**) +> - **打断帧**:上行帧原文 `{"type":"interrupt","data":{"sessionId":"web","scope":"current"}}`,**先于** `chat` 帧 +> - **`stream_chunk`**:假后端发**一帧整段** → 渲染 `CHUNKONE` **一次**,无重影 +> - **W28 连接数**、**错误横幅关闭叉**、**登录页 IME(不成立)** +> +> ### ⚠️ 思考流(主人 2026-10-05 报的)—— **根因在后端/模型侧,已查到一半** +> 1. **证据**:真后端最近 5 条 assistant 消息**全都没有 `thinking` 键**(`GET /messages` 是 owner 可见的唯一历史思维链来源)⇒ **后端手里根本没有思考内容**,不是客户端不显示。 +> 2. **配置**(`Cyrene_v2/data/models.json`):`provider: "anthropic"`、`baseUrl: https://api.deepseek.com/anthropic`、`model: deepseek-flash`、**没有 `reasoning` 键**。 +> 3. **`reasoning` 键加不了**(**别再试**):`models.go:180-191` 的 `validateReasoning` 明确规定 —— **anthropic 组上除 `auto`/空之外任何 kind 都非法**,写了会让后端**下次启动校验失败**。 +> 4. **原因在代码里写着**:`anthropic.go:195-201`「**anthropic 协议自带思考形状**,因此这里声明 openai 形状是无效的」⇒ `reasoning.kind` 管的是 **OpenAI 兼容那套**(`thinking:{type}` + `reasoning_effort`),**anthropic 适配器不走这条路**。 +> 5. **所以开关在别处**:在 **anthropic 适配器自己的请求构造**里(协议原生的 `thinking` 块)。 +> **⚠️ 待查(我读到 `anthropic.go:195` 就停了)**:它到底发不发 `thinking`、什么条件下发; +> 以及 **DeepSeek 的 anthropic 兼容端点支不支持 anthropic 的 `thinking` 形状**。 +> ⇒ 最省的办法:**直接问后端会话**(他们写的,一句话就够)。 +> +> ### 待办(按优先级) +> 1. **用假后端把「忙时被拒」那条横幅端到端验一次**(上次没验成:当时待发气泡是 0 条 ⇒ 落 `Ignore` ⇒ **刻意什么都不写**,那是设计不是 bug)。 +> 做法已在 `devtools/fake-backend/README.md` **第 6 节**(`--hold-replies` → 发 chat 挂住 → `persist` 补落库 → 注入 `pending_full`),**逐条实跑过**。 +> 2. **思考流那条的后续**(见上):问后端 anthropic 适配器的 thinking 下发条件。 +> 3. **等后端 v0.65**:`chat.parallel` / `turn_begin` / `turn_id` 的**精确位置**登记后接帧(我们形状已备好,全可降级)。 +> 4. 旧的:子会话流程(主人说搁置)、图片/工具卡实机验证(后端未配工具)。 +> 5. **作废的说法**(别再引用):曾记「假后端 `--stream-chunk` 建模与契约不符」——**错**,它的 `chunks=1` 就是契约的「一帧整段」。 +> +> ### 环境与纪律(这次踩到的) +> - **模拟器今天很脆**:连 launcher 都 ANR 过,App 进程被系统重建。**新会话开工前先重启模拟器**。 +> - **假后端进程还占着 18080 / 18081 / 18083**(`taskkill` 对它们不太好使,重启机器最干净)。 +> - **我这次又犯了「先怀疑代码、而不是先怀疑自己的测量」**:截图上没看到横幅时,我先去查代码,其实当时只是**待发气泡为 0**(设计如此)。这条纪律写在上一节,**要一直记着**。