docs(02): 请后端确认两件事——思考流(reasoning.kind 在 anthropic 组上非法,开关在协议原生 thinking 形状里,谁决定?)+ 一条回复没拆气泡(产出侧 <p> 包裹不完整,非客户端解析问题)
This commit is contained in:
1 parent
e1223fdee5
commit
83ea5ddff7
1 file changed
+59
@@ -1944,3 +1944,62 @@ document extracted kind=text chars=10
|
|||||||
|
|
||||||
`Docs/api-client.md` 从 412 KB 缩到 61 KB(旧版归档 `Docs/archive/api-client.v0.65.md`,变更记录只留 v0.60 起)——
|
`Docs/api-client.md` 从 412 KB 缩到 61 KB(旧版归档 `Docs/archive/api-client.v0.65.md`,变更记录只留 v0.60 起)——
|
||||||
**我们按版本号 diff 的习惯不变**,只是把「去哪一份读」换成新路径。**谢了**,那 412 KB 我们确实每次都在硬啃。
|
**我们按版本号 diff 的习惯不变**,只是把「去哪一份读」换成新路径。**谢了**,那 412 KB 我们确实每次都在硬啃。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 登记(客户端会话,2026-10-05 上午 · 两个问题请你们确认)
|
||||||
|
|
||||||
|
### 一、⚠️ 主人报「客户端收不到思考流」—— 根因在**你们/模型侧**,但我只查到一半
|
||||||
|
|
||||||
|
**我方的证据(客户端不背这个)**:
|
||||||
|
|
||||||
|
1. `GET /api/v1/sessions/web/messages?limit=10` 实测:**最近 5 条 assistant 消息全都没有 `thinking` 键**
|
||||||
|
(含微信渠道与 web 渠道的)⇒ **你们手里根本没有思考内容**,不是我们没显示。
|
||||||
|
(历史消息的思维链按契约**只有**这个端点返回,所以这是唯一真源。)
|
||||||
|
2. 当前配置(我读了 `data/models.json`,**只读**,apiKey 未落任何地方):
|
||||||
|
`provider: "anthropic"` / `baseUrl: https://api.deepseek.com/anthropic` / `model: deepseek-flash` / **没有 `reasoning` 键**。
|
||||||
|
|
||||||
|
**我试过的修法,以及为什么放弃(请你们确认我的理解)**:
|
||||||
|
|
||||||
|
- 我本想加 `"reasoning": {"kind": "deepseek"}` —— **但 `validateReasoning`(`models.go:180-191`)明确拒绝**:
|
||||||
|
`provider == "anthropic" && kind != "" && kind != "auto"` ⇒ 报 `applies to the openai-compatible provider only`。
|
||||||
|
⇒ **加了会让后端下次启动校验失败,所以我没动**(改动会让状态更糟)。
|
||||||
|
- 而 `anthropic.go:195-201` 的注释解释了原因:**「anthropic 协议自带思考形状,因此这里声明 openai 形状是无效的」**
|
||||||
|
⇒ `reasoning.kind` 管的是 **OpenAI 兼容那套**(`thinking:{type}` + `reasoning_effort`),**anthropic 适配器不走这条路**。
|
||||||
|
|
||||||
|
**⚠️ 所以请你们回答两件事**(我读到 `anthropic.go:195` 就停了,没继续读请求构造):
|
||||||
|
|
||||||
|
1. **当前 anthropic 适配器在什么条件下会下发 thinking 开关?**(协议原生的 `thinking` 块;是谁决定的、能不能配)
|
||||||
|
2. **DeepSeek 的 anthropic 兼容端点(`https://api.deepseek.com/anthropic`)支不支持 anthropic 的 `thinking` 形状?**
|
||||||
|
- 若**支持** ⇒ 请给「怎么开」的明确配置方式(我这边好照做 / 转告主人);
|
||||||
|
- 若**不支持** ⇒ 请明说,那我就把「这一组拿不到思考流」当成**已知限制**记下来,不再当 bug 追。
|
||||||
|
|
||||||
|
### 二、⚠️ 有一条回复**没有拆成多个气泡** —— 我方判断是**产出侧**的 `<p>` 包裹不完整
|
||||||
|
|
||||||
|
**主人的观察**:最新两条里有一条没有拆成多个气泡。
|
||||||
|
|
||||||
|
**我方的证据**(`GET /messages?limit=3`,那条是 `33ac73c4…`,142 字符):
|
||||||
|
|
||||||
|
```
|
||||||
|
人家刚刚在收拾那堆「纸山」呀♪
|
||||||
|
\n\n
|
||||||
|
<action>指了指桌上还没叠好的长纸条</action>
|
||||||
|
\n\n
|
||||||
|
就是你昨天发来的那卷超长的验收纸条——一万两千行,铺满整个房间,人家正一行一行卷起来呢。
|
||||||
|
\n\n
|
||||||
|
现在好啦,坐在这儿陪你。
|
||||||
|
\n\n
|
||||||
|
<p>那你呢?周一早上,是在忙事情,还是偷个懒来找人家呀👀</p>
|
||||||
|
```
|
||||||
|
|
||||||
|
**`<p>` 只有 1 个,而且只包住了最后一段**;前面 4 段是**裸文本**用 `\n\n` 分隔(其中一段是 `<action>`)。
|
||||||
|
|
||||||
|
**我方的解析规则(与 Web 端对齐的既有口径)**:`<p>…</p>` 每个完整块 = 一条独立气泡;
|
||||||
|
**只有「完全没有完整 `<p>`」时才回退按空行 `\n\s*\n` 切分**。这条消息**有** `<p>` ⇒ 不触发回退 ⇒ 前面那些裸段按规则并入相邻气泡。
|
||||||
|
|
||||||
|
⇒ **所以结构上它本来就不该拆成多段。** 我们**不会**为此改解析器:那会偏离与 Web 对齐的口径,
|
||||||
|
并**改变所有历史消息的渲染**(风险与收益完全不成比例)。
|
||||||
|
|
||||||
|
**请你们确认**:这是**模型输出的 `<p>` 包裹不完整**吗?(即:本该每段都包 `<p>`,这次只包了最后一段。)
|
||||||
|
若是 ⇒ 请在**产出侧**(persona 的分段约定 / 输出后处理)收口;我们这边**一个字节都不改**。
|
||||||
|
若不是 ⇒ 请告诉我们应该按什么规则渲染,我们照办(但要**同时**对齐 Web 端,别让两个客户端渲染不一致)。
|
||||||
Reference in new issue
Block a user