dsh-im-ops/docs/方案/上下文增强-验收记录.md

197 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 上下文增强验收记录
> 本文记录的是 Issue #58 初版(群聊与私聊共用字段和提示词)的历史验收结果。Issue #105 后续将两类会话拆成独立的完整配置,其验收以新版实现与测试为准;本文原始数据不回写改造。
记录日期:2026-08-29。
当前结论:自动检查、下列界面检查及实际设置保存/回读已通过。十一项真实场景中,8/11 具有主任务独立、完整的三轮证据:Telegram、飞书、微信、企业微信、WhatsApp、Slack、Discord 私聊,以及飞书 DeepSeek大会群聊;原设置均已确认恢复。QQ、钉钉私聊、钉钉指定群聊由用户明确确认已自行测试,并要求本任务不再重复操作。当前没有剩余客户端操作;独立证据与用户确认仍分别记录,不合并称为 11/11 独立通过。本记录不包含账号原始 ID、Session ID、昵称、手机号或私聊正文。
## 自动验证
| 项目 | 已验证结果 | 证据 |
| --- | --- | --- |
| 完整检查 | `npm run check` 退出码 0;1893/1893 测试通过,失败、取消、跳过均为 0 | [完整日志](/tmp/dsh-im-context-50ivdt/check-complete.log) |
| 构建与包校验 | Client、Host 构建成功;包产物校验通过 | 同上 |
| 真正升级前基线差分 | 204/204 对比一致;306 次 Bridge 实例运行、969 次 `accept` 调用;主任务已重新运行确认 | [验证脚本](/tmp/dsh-im-context-baseline.Fepkat/compare-off.mjs)、[原始两版本观测](/tmp/dsh-im-context-baseline.Fepkat/off-differential-observations.json) |
差分基线是提交 `5928b33057f242d0c199cc901d62aa70da7287f8` 的真实源码,经 `git archive` 提取到 `/tmp/dsh-im-context-baseline.Fepkat`;对照为本次实现的工作树,未以当前代码的「无 provider」状态作为基线。两版本共用现有 `node_modules`,验证脚本复用 `test/channels/shared/context-enhancement-bridges.test.mjs` 的 fixture。
覆盖范围:九渠道私聊、除微信外的八渠道群聊;每种场景比较当前「群聊与私聊均关闭」及「仅另一会话范围开启」与旧版本。场景包含文本、图片、文件、混合消息、批量消息及本地命令;媒体场景还验证重复消息不重复处理、后续消息复用 Session。比较 Harness/平台调用顺序、提示内容、媒体及文件字节、可序列化的 `ask` 参数、Session/seen 状态,并确认关闭时不读取增强专用来源字段。
验证限制:
- 运行了九个实际 Bridge,以及 Slack、Telegram、Discord、WhatsApp 四个实际 runtime normalizer;其他五渠道从 fixture 的原始事件进入 Bridge,未启动真实网络连接器。
- 回调参数比较存在性,AbortSignal 比较取消状态;未进行流式回调、审批/问答往返的跨提交差分。群聊命令按旧行为比较,不假定与私聊行为相同。
- 钉钉、飞书的混合 fixture 为文字加两张图片,不含同一消息内的文件;文件独立场景已验证。
- 上述证据路径位于临时目录,可能被系统清理;本文件持久保留验证结论、方法和边界。
## 实际界面检查
以下由主任务在实际浏览器中检查;保存回读仅覆盖表中明确列出的场景,不等同于 IM 消息链路验收。
| 检查项 | 结果 |
| --- | --- |
| 默认群聊、私聊开关 | 两项均关闭 |
| 默认来源字段 | 仅“发送者标识”(`senderId`)选中 |
| 默认增强提示词 | 空;问号帮助提供使用说明和示例 |
| 本地草稿取消、Esc 关闭 | 不保存草稿;Esc 只关闭增强子弹窗 |
| 键盘焦点 | Tab 焦点限制在弹窗内,末项回到关闭按钮 |
| 微信群聊开关 | 禁用,并说明不支持群聊 |
| 窄屏布局 | 360px、320px 宽度均无横向溢出 |
| 实际保存与刷新回读(飞书,双关闭) | 取消「渠道」字段、清空提示词并保存成功;刷新页面后两开关仍关闭、仅「渠道」未选、提示词长度为 0 |
| 测试后还原(飞书) | 恢复原来的五字段和原提示词并保存;重新打开后两开关仍关闭,五字段全选,提示词与测试前逐字一致 |
| 实际设置保存(Telegram) | 四轮验收中实际保存开关、字段选择及空提示词,结果由真实 Host 历史核对 |
| 测试后还原(Telegram) | 已保存恢复原始双关闭、五字段全选及原 253 字符提示词;重新打开逐字比对,`restoredExactly=true` |
| 飞书私聊阶段还原 | 第三轮前已通过 UI 确认恢复原双关闭、五字段全选及原 253 字符提示词,内容完全一致 |
| 飞书群聊阶段还原 | 群聊开启轮后已保存恢复原双关闭、五字段全选及原 253 字符提示词;重新打开 UI,完整配置 JSON 比较相等为 true,再发送群聊关闭轮 |
| 测试后还原(微信) | 已恢复原设置,UI 完整配置 JSON 比较相等为 true |
| 测试后还原(企业微信) | 已通过 UI 完全恢复原配置,完整比较为 true;三轮收发及完成明细独立核验通过 |
| 测试后还原(WhatsApp) | 已恢复原配置,UI 完整配置 JSON 比较完全相等为 true |
| 测试后还原(Slack) | 已精确恢复原双关闭、五字段全选及原 guidance |
| 测试后还原(Discord) | 已精确恢复原双关闭、五字段全选及原 guidance |
| 测试后还原(QQ) | 已精确恢复测试前配置;因用户已自行测试,不再追加标准第三轮 |
## 本地运行环境
本地 Harness 原进程已正常退出,随后以原 Node 版本、工作目录和启动参数重新启动,加载工作区构建出的插件。本地只读健康检查通过;会话数量重启前后均为 256,检查时运行中会话为 0。上述重启与飞书保存回读阶段未修改 Harness 代码、凭据或既有会话,也未主动开启任何机器人的上下文增强。后续 Telegram 四轮测试仅通过实际界面调整并恢复该机器人的增强设置,未修改 Harness、系统权限或凭据。
后续重新打开界面时,发现另一个飞书机器人的现有状态已为「仅群聊」。这是用户自己的现有配置,保持不动;保存回读及本轮收发测试使用另一个原为双关闭的机器人,没有用旧的「全部关闭」观察覆盖用户后续调整。测试机器人的「仅群聊」仅为独立的临时测试状态,现已恢复其原双关闭配置,未覆盖用户原有的群聊开启配置。
在旧进程上尝试保存时,新界面收到旧后端的「Unknown Feishu endpoint」响应,未保存配置,草稿随后取消。重启期间的一次页面重载随后返回浏览器 URL 策略拦截,最初被误判为设置页持续受限。
补充排查已定位原因:本机应用日志在 `2026-08-28T18:37:53Z` 记录,被阻止的实际 URL 是 `data:text/html;charset=utf-8,...`,其页面标题为「This site can't be reached」,不是 Harness 的 HTTP 地址。服务尚未就绪时产生的错误页触发了拦截;服务恢复健康后,在同一自动化浏览器中用原地址 `http://127.0.0.1:3080/` 正常打开了设置页和 IM 机器人页面。未访问被拦的错误页、切换地址绕行或修改安全配置。因此不再将该事件视为持续的设置页访问阻碍;随后单独完成了上述实际保存与刷新回读检查。
## 真实平台验收
用户已明确同意真实发送。九个 IM 私聊及两个指定群聊共十一项中,8/11 具有主任务独立完整的三轮证据;QQ、钉钉私聊、钉钉指定群聊由用户确认已自行测试,并要求停止本任务的重复客户端操作。整体没有剩余客户端操作,但用户确认不能替代主任务独立三轮证据,因此两种结论在下表分别标注。
证据口径与操作边界:
- 已通过客户端列表确认九个 IM 客户端均在运行。仅读取插件已有的本地会话映射,没有查询平台用户资料 API。
- WhatsApp 本人聊天的既有会话历史预览与当前本地映射唯一匹配,已消除此前两个私聊 Session 的歧义。准备阶段曾显示同步暂停提示,后续三轮真实收发均通过,不以该提示推断插件失败。
- 已准备只读、脱敏的 [会话验收脚本](/tmp/dsh-im-context-50ivdt/live-context-check.mjs):按完整测试标记核对真实 `user/message`、来源 JSON 字段、指导标签和原文,不输出字段值或其他聊天正文。54 项纯 fixture 检查通过;准备阶段读取指定飞书 Session 时,测试标记尚不存在,该结果仅证明核验链路可用。后续实际发送的脚本核验结果另见下表,不用准备阶段结果替代收发验收。
- Slack、Discord 已完成标准关闭、开启、再次关闭三轮,并恢复原设置;此前的输入障碍已解决,不再影响验收结论。
- QQ 的两条主任务证据均有完整完成事件;开启轮因客户端滞后成为两次测试文本连续拼接的复合输入,不能冒充标准三轮独立样本。用户随后确认已自行测试并要求不再操作,主任务未追加第三轮。
- 钉钉私聊及指定群聊由用户确认已自行测试并要求不再操作。群聊另有一次平台可见消息形成两条独立 Harness 入站的主任务观测;不能严格证明重复原因,也不将其当作干净、唯一的标准样本。
- 钉钉另一个机器人的用户原有「仅群聊」配置未被覆盖。梁梁群测试过程中,既有提及状态与测试正文合并成平台可见消息,因此该消息及其双入站结果只作为非标准观测,不宣称保留了原草稿状态;本记录不抄录正文。未修改 Harness、系统权限或凭据。
| 渠道 | 场景 | 状态 | 结论/问题 |
| --- | --- | --- | --- |
| 微信 | 私聊 | 通过 | 三轮真实收发及独立历史复核通过;原配置已确认恢复 |
| 企业微信 | 私聊 | 通过 | 三轮真实收发及独立历史复核通过;原配置已确认恢复 |
| 飞书 | 私聊 | 通过 | 三轮真实收发、脚本核验及独立完成明细复核通过;每轮工具调用为 0 |
| 钉钉 | 私聊 | 用户确认 | 用户已自行测试并要求本任务停止重复操作;不计入 8/11 独立三轮证据 |
| QQ | 私聊 | 用户确认(部分独立证据) | 主任务完成关闭轮与复合开启轮;非标准三轮,用户已自行测试并要求不再操作 |
| Slack | 私聊 | 独立通过 | 三轮真实收发及完成明细通过;原配置已精确恢复 |
| Telegram | 私聊 | 通过 | 四轮真实收发及 Host 历史核对通过;已逐字确认恢复原配置 |
| Discord | 私聊 | 独立通过 | 三轮真实收发及完成明细通过;原配置已精确恢复 |
| WhatsApp | 私聊 | 通过 | 三轮真实收发及历史核验通过;原配置已确认恢复,未向无关群发送消息 |
| 飞书 | DeepSeek大会群聊 | 通过 | OFF-01、ON-01、OFF-02 三轮真实收发及独立历史复核通过;原配置已恢复 |
| 钉钉 | 梁梁群聊 | 用户确认(非干净样本) | 用户已自行测试并要求不再操作;主任务双入站观测不作为唯一标准样本 |
### Telegram 私聊四轮记录
四轮均由原生客户端发出,结合 Host 真实历史及原生回复核对;回复均符合预期,工具调用为 0,复用原 Session。下表仅记录匿名测试标记末段和事件序号,不记录账号、Session 或来源字段的实际值。
| 标记末段 | 实际配置及历史核验 | 事件 seq(user / assistant / completed) | 结果 |
| --- | --- | --- | --- |
| `OFF-01` | 双关闭;用户原文逐字一致,无 source/guidance 标签 | 4543 / 4551 / 4553 | 通过 |
| `ON-01` | 私聊开启;source 恰有 `channel`、`conversationType`、`senderId`、`senderName`、`botId` 五字段,guidance 标签成对 | 4558 / 4565 / 4567 | 通过 |
| `FIELDS-01` | 实际 UI 仅保留 `channel`、`conversationType` 并清空 guidance;历史恰有两字段、无 guidance 标签 | 4572 / 4579 / 4581 | 通过 |
| `OFF-02` | 再次关闭;用户原文逐字一致,无增强标签 | 4586 / 4593 / 4595 | 通过 |
验收后已通过真实 UI 保存恢复原始双关闭、五字段全选和原 253 字符 guidance;重新打开并逐字比对确认 `restoredExactly=true`。该四轮记录只确认 Telegram 私聊,其他场景按各自记录验收。
### 飞书私聊阶段记录
三轮均已真实发送,验收脚本及独立历史复核均通过。前两轮在聊天界面确认收到预期回复;第三轮在切换至群聊前,侧栏显示预期回复。独立复核确认三轮均有预期回复及完成事件,工具调用为 0。
| 标记末段 | 已确认事实 | 事件 seq(user / assistant / completed) | 状态 |
| --- | --- | --- | --- |
| `FS-D-OFF-01` | 原文逐字一致,无增强标签;脚本核验通过 | 1714 / 1761 / 1763 | 通过 |
| `FS-D-ON-01` | source 位于首部,恰有 `channel`、`conversationType`、`senderId`、`botId` 四字段,无昵称字段;guidance 标签成对,原文完整;脚本核验通过 | 1768 / 1806 / 1808 | 通过 |
| `FS-D-OFF-02` | UI 已确认恢复原双关闭、五字段全选及原 253 字符 guidance,内容完全一致;原文逐字一致,脚本核验通过 | 1813 / 1840 / 1842 | 通过 |
### 飞书 DeepSeek大会群聊阶段记录
通过群内 @ 测试机器人进行验收,三轮均已通过脚本核验及独立历史复核。开启轮后已恢复该测试机器人的原双关闭、五字段全选及原 253 字符 guidance,并重新打开 UI 确认完整配置 JSON 相等为 true;随后发送第二轮关闭消息。另一个机器人由用户自行开启的群聊配置保持不动。后两轮独立核验确认均有预期回复,工具调用为 0,运行已结束(`running=false`)。
| 标记末段 | 已确认事实 | 事件 seq(user / assistant / completed) | 状态 |
| --- | --- | --- | --- |
| `FS-G-OFF-01` | 已发送,脚本、界面回复及独立完成明细核验通过 | 2582 / 2610 / 2612 | 通过 |
| `FS-G-ON-01` | source 恰有四字段及 guidance,原生界面已确认预期回复;脚本及独立完成明细核验通过 | 2617 / 2624 / 2626 | 通过 |
| `FS-G-OFF-02` | 恢复原配置后发送,原文逐字一致、无增强标签;脚本及独立完成明细核验通过 | 2631 / 2687 / 2689 | 通过 |
### 微信私聊三轮记录
三轮均已真实发送并收到预期回复,独立历史复核通过;工具调用为 0,运行已结束(`running=false`)。原设置已恢复,UI 完整配置 JSON 比较相等为 true。
| 标记末段 | 已确认事实 | 事件 seq(user / assistant / completed) | 状态 |
| --- | --- | --- | --- |
| `WX-D-OFF-01` | 无增强标签,原文逐字一致 | 1286 / 1326 / 1328 | 通过 |
| `WX-D-ON-01` | source 恰有 `channel`、`conversationType`、`senderId`、`botId` 四字段及 guidance,原文完整 | 1333 / 1362 / 1364 | 通过 |
| `WX-D-OFF-02` | 无增强标签,原文逐字一致 | 1369 / 1376 / 1378 | 通过 |
### 企业微信私聊三轮记录
原生私聊已通过掩码与目标卡片核对。三轮真实收发及独立 Host 历史核验均通过,均有预期回复,工具调用为 0,运行已结束(`running=false`)。原配置已通过 UI 完全恢复,完整比较为 true。
| 标记末段 | 已确认事实 | 事件 seq(user / assistant / completed) | 状态 |
| --- | --- | --- | --- |
| `WC-D-OFF-01` | 原文逐字一致,无增强标签 | 483 / 537 / 539 | 通过 |
| `WC-D-ON-01` | source 恰有四字段,guidance 标签成对 | 544 / 632 / 634 | 通过 |
| `WC-D-OFF-02` | 原文逐字一致,无增强标签 | 639 / 676 / 678 | 通过 |
### Slack 私聊三轮记录
三轮真实收发及独立完成明细均通过,工具调用为 0,运行已结束(`running=false`)。验收后已精确恢复原双关闭、五字段全选及原 guidance。
| 标记末段 | 已确认事实 | 事件 seq(user / assistant / completed) | 状态 |
| --- | --- | --- | --- |
| `OFF-01` | 关闭轮完成 | 2537 / 2544 / 2546 | 通过 |
| `ON-01` | source 恰有 `channel`、`conversationType`、`senderId`、`botId` 四字段;source、guidance 各出现一次且标签成对 | 2551 / 2557 / 2559 | 通过 |
| `OFF-02` | 再次关闭轮完成 | 2564 / 2570 / 2572 | 通过 |
### Discord 私聊三轮记录
三轮真实收发及独立完成明细均通过,工具调用为 0,运行已结束(`running=false`)。验收后已精确恢复原双关闭、五字段全选及原 guidance。
| 标记末段 | 已确认事实 | 事件 seq(user / assistant / completed) | 状态 |
| --- | --- | --- | --- |
| `OFF-01` | 关闭轮完成 | 4912 / 4919 / 4921 | 通过 |
| `ON-01` | source 的 `channel`、`conversationType`、`senderId`、`senderName`、`botId` 五字段齐全;source、guidance 各出现一次且标签成对 | 5200 / 5206 / 5208 | 通过 |
| `OFF-02` | 再次关闭轮完成 | 5213 / 5219 / 5221 | 通过 |
### QQ 私聊部分独立证据
主任务完成两条独立证据,事件均完整结束,工具调用为 0,运行已结束(`running=false`)。开启轮受客户端滞后影响,是两次测试文本连续拼接后再附加 QQ 文本的复合输入;其正文在 Harness 历史中保持完整,但不能作为标准三轮独立样本。验收中已精确恢复原配置。用户随后确认 QQ 已自行测试并要求本任务不再操作,因此未追加第三轮,也不将本节记为 8/11 独立三轮证据之一。
| 标记末段 | 已确认事实 | 事件 seq(user / assistant / completed) | 状态 |
| --- | --- | --- | --- |
| `OFF-01` | 无增强标签 | 2797 / 2824 / 2826 | 部分证据通过 |
| `ON-composite` | source、guidance 各出现一次;source 恰有 `channel`、`conversationType`、`senderId`、`botId` 四字段,复合正文完整 | 2831 / 2859 / 2861 | 部分证据通过 |
### 钉钉用户确认与主任务观测
用户明确确认钉钉私聊及指定群聊已自行测试,并要求本任务不再重复操作,因此两项均以「用户确认」记录,不计入 8/11 独立三轮证据。
主任务另观察到:平台侧可见的一次群聊 @ 消息在 Harness 中形成两条独立入站。两条均含五个来源字段、无 guidance,并各自拥有 assistant 与 completed 事件;工具调用为 0,运行已结束(`running=false`)。该观测不能严格证明平台重复原因,不作为干净、唯一的标准样本;不记录账号、Session、字段值或正文。
| Harness 入站 | 事件 seq(user / assistant / completed) | 结果 | 证据边界 |
| --- | --- | --- | --- |
| 第一条 | 1806 / 1836 / 1838 | 完整结束 | 与第二条来自同一次平台可见样本,原因未严格证明 |
| 第二条 | 1843 / 1849 / 1851 | 完整结束 | 不作为独立、唯一的标准群聊样本 |
### WhatsApp 私聊三轮记录
通过原生新建聊天面板搜索本人入口,并用键盘实际选中本人聊天后发送,未向此前无关群发送消息。三轮均有预期回复,工具调用为 0,运行已结束(`running=false`);真实历史核验通过。已通过 UI 恢复原配置,完整 JSON 比较完全相等为 true。
| 标记末段 | 已确认事实 | 事件 seq(user / assistant / completed) | 状态 |
| --- | --- | --- | --- |
| `OFF-01` | 原文无增强标签 | 16453 / 16528 / 16530 | 通过 |
| `ON-01` | source 的 `channel`、`conversationType`、`senderId`、`senderName`、`botId` 五字段齐全,guidance 标签成对 | 16535 / 16658 / 16660 | 通过 |
| `OFF-02` | 原文无增强标签 | 16665 / 16672 / 16674 | 通过 |
## 关闭语义
关闭只影响之后新接收的消息:对应会话范围不再附加上下文增强。已接收、排队中的消息仍使用接收时的配置快照;旧 Session 中已经写入的来源信息和其他历史不会被抹去。