docs(W21): 四项待决按建议口径定案 + D2.9 手动用例全量复跑回填(v1.0 → v1.1)

用户 2026-09-21「按照你建议的来」⇒ DEC-W20-6 / -7 / -8 / -9 全部按最优建议
定案(人设维持语气层 / 资料变更类维持 P2 / 收益过滤只留展示层 / 金标暂不扩到
49 条),本轮无代码变更。

D2.9 手动测试用例全量复跑(路径 B · 真 HTTP):
- 46 条金标 + 11 条边界 + 安全 4 条一次跑完
- 出口 46/46、事实 46/46、禁忌 0、转人工 5 条(F-05/G-01/G-03/G-04/G-05,全在
  白名单内)
- 结果直接回填 §2 的 46 个「你判」与 §5 的 11 项指标

顺带修正与登记:
- 校准 D2.9 里两处因本轮改模板而过时的出口话术(澄清 / E5b)
- 登记一处判据更正:首版跑批脚本把出口形状判成「首个期望命中即返回」,造成
  13 条假阴性(事实 46/46 全中),改为「任意命中」后 46/46
- 更正 D2.9 §8 一处路径错误:_eval_harness\ 与仓库同级、不入库,旧文写成
  group_fqcd_jr/_eval_harness/ 换机器会找不到
- Z-08 同会话重复模糊问句:形状已稳(三轮全落 E1 澄清,不再跳答别的题目、
  不再落 chitchat),残余仅为「候选漂移」⇒ D-2 降级
- 本轮验证脚本 56 个已归档到 _w20_evidence\(逐个移动,非通配)

落档:D1.6 §4.49 六(裁定回填)/ D2.1 v6.36(+2 行)/ D1.1 §30(头部 v1.12)/
D2.9 v1.1
This commit is contained in:
张胜宇
2026-09-21 09:50:14 +08:00
parent 35effab70f
commit fc3aa67451
4 changed files with 133 additions and 79 deletions
@@ -2,7 +2,7 @@
> **体系编号**:`D1.1` · 域:一、治理与索引 · 编号体系见 `D1.1` §4.0
> **编号**:CS-DOC-2026-017 | **版本**:v1.11 | **日期**:2026-09-20 | **状态**:**现行(活文档,随文档区变动同步更新)**
> **编号**:CS-DOC-2026-017 | **版本**:v1.12 | **日期**:2026-09-20 | **状态**:**现行(活文档,随文档区变动同步更新)**
> **性质**:本文件是 `开发文档\` 的**唯一入口**。任何人(含三个月后的自己)打开这一份,就应知道:先读什么、哪份为准、每份什么状态。
> **盘点范围**:`开发文档\`(**52 个文件** = 51 份编号文档 + 1 份入口存根 `CLAUDE.md`,无归档子目录)+ `客服agent\`(**9 份**对外交付文档)。
@@ -131,7 +131,7 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧
| **D2.6** | `客服agent\D2.6-客服Agent答辩报告-2026-09-19.md` | 2026-09-19 | 现行 | 🔴 **答辩主文档**:批评 → 根因(2 个出口 / 10 处失败方向全指向转人工)→ 五出口 `E1`—`E5` → `INV-1`~`INV-5` → 金标 11 项**修复前 → 修复后**对比 → 零容忍词挂载点口径 → 坑与教训 → 诚实未做项 → 现场速答 |
| **D2.7** | `客服agent\D2.7-客服Agent中长期记忆与画像联动设计-2026-09-20.md` | 2026-09-20 | 现行 | 🔴 **记忆与画像专项**:三问直答 / 客服侧五道闸门取证 / 字段分域(`investor_type` 红线)/ **主设计主张:记忆改「行为」不改「输入」** / `INV-M1`~`INV-M6` / 两处过期理由更正 / 分期 P0—P2 / 待决 4 项 |
| **D2.8** | `客服agent\D2.8-客服Agent知识库RAG全链路与选型说明-2026-09-20.md` | 2026-09-20 | 现行 | 🔴 **RAG 全链路**:解析 → 切片(叶子标题 + 表格行级子块)→ 向量化(`text-embedding-v3` / 1024 维)→ 入库七步 → 在线八步 → **检索增强 7 个动作** → 阈值与五出口 / 选型 8 项决策 26 备选 / **已知不一致与风险 5 项** |
| **D2.9** | `客服agent\D2.9-客服Agent手动对话测试用例-2026-09-20.md` | 2026-09-20 | 现行 | 🔴 **动手验收件**:46 条金标**逐条可问**(问句 / 期望出口 / 期望要点 / 禁止出现 / 实测基线)+ 11 条边界 `Z` 组 / 判分四问 / `M-1`~`M-10` 手动汇总 / 真 HTTP 核验配方 / 3 项实测缺口 |
| **D2.9** | `客服agent\D2.9-客服Agent手动对话测试用例-2026-09-20.md` | 2026-09-20(**v1.1**,2026-09-21 全链路复跑回填) | 现行 | 🔴 **动手验收件**:46 条金标**逐条可问**(问句 / 期望出口 / 期望要点 / 禁止出现 / 实测基线)+ 11 条边界 `Z` 组 / 判分四问 / `M-1`~`M-10` 手动汇总 / 真 HTTP 核验配方 / 3 项实测缺口 |
| **D3.1** | `开发文档\D3.1-客服Agent需求开发文档与设计方案.html` | **v2.6** | 现行 | D2.2 的**完整版**:逐条需求带证据引用与推导过程 |
| **D3.2** | `开发文档\D3.2-知识库设计方案.html` | **v1.6** | 现行 | D2.4 的**完整版**:含被收敛掉的备选方案与否决理由 |
| **D3.3** | `开发文档\D3.3-访客与角色分离的鉴权方案建议-2026-09-16.md` | CS-AUTH-2026-011 | 现行 | 🔴 鉴权专项(=开工只读 5 份之 A5):四方案 / 三不变量 / 甲乙时序 |
@@ -873,10 +873,12 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧
| **金标 46 条** | `M-1` **46/46 = 100%** / `M-4` **100%** / `M-6` **5/46 = 10.9%** / `M-7`·`M-8`·`M-9`·`M-10` **全 0**;与上一轮 `score_w11b` **逐项一致 ⇒ 零回归** |
| **真机场景扫描** | 25 条客户问法 + 3 条访客问法 ⇒ 转人工 **3/25**,全部为**应转**(投诉 / 销户 / 代办写操作) |
| **顺带修掉一处测试隐患** | 旧测试用 `Class.attr` 存取 `staticmethod` 再赋回,会把静态方法**静默变成普通方法**(后置测试全部少传 `self`)⇒ 改存取 `__dict__` 里的描述符 |
| **待决** | `DEC-W20-6`…`-9`(人设外显度 / 资料变更类口径 / 收益过滤层次 / 金标是否扩到 49 条),详见 `D1.6` §4.49 六 |
| **四项待决已裁定(2026-09-21)** | 用户「**按照你建议的来**」⇒ `DEC-W20-6` / `-7` / `-8` / `-9` 按建议口径定案(**全部为"维持现状 / 演示后再做"**),本轮**无代码变更**;详见 `D1.6` §4.49 六 |
| **`D2.9` 手动测试用例全量复跑(v1.0 → v1.1)** | 46 条金标 + 11 条边界 + 安全 4 条走**真 HTTP(路径 B)**:出口 **46/46**、事实 **46/46**、禁忌 **0**、转人工 **5 条**;同时**校准 `D2.9` 里因本轮改模板而过时的出口话术**(澄清「您想了解的是下面哪一项呢?」/ `E5b`「我先帮您把找到的公开资料放上来」)并回填 §2 的 46 个判定与 §5 的 11 项指标。⚠️ 另登记一处**判据更正**:首版跑批脚本的出口形状判定写成"首个期望命中即返回",造成 13 条假阴性,改为"任意命中"后 46/46 |
| **版本位** | 本文件头部 **v1.11 → v1.12**;`客服agent\D2.9` **v1.0 → v1.1** |
| **版本位** | 本文件头部 **v1.10 → v1.11**;`客服agent\D2.1` 标题 **v6.35 → v6.36**;§2 开工只读表 / §4.0 总表 / §4.2 明细**三处 `D2.1` 版本位一并同步**(此前长期分别停在 `v6.30` / `v6.32` / `v6.33`) |
| **交叉引用** | `D1.6` 新增 §4.49;`D2.1` 新增 `v6.36` 段 |
| ⚠️ **未做(诚实声明)** | ① 人设只做"语气层",未做更外显的人设;② 收益过滤只在**展示层**,未推回语料层;③ 金标仍为 **46 条**;④ `D2.9` §8.1 的 `D-2` / `D-4` 两个已知边界仍只登记不修 |
| ⚠️ **未做(诚实声明)** | ① 人设只做"语气层",未做更外显的人设;② 收益过滤只在**展示层**,未推回语料层;③ 金标仍为 **46 条**;④ `D2.9` §8.1 的 `D-2` **残余**(同句重问**候选**仍会变,形状已稳)与 `D-4`(英文问句落 `E5b`)仍只登记不修 |
---
@@ -3206,7 +3206,7 @@ pytest **2 failed / 1577 passed / 2 skipped**(= `T0` 基线同两项)、ruff
| 全量回归(**先停 Worker**,避免抢 MySQL outbox 造成假红) | **1969 passed / 3 skipped / 0 failed**(本轮基线 1946 passed) |
| 46 条金标(真实链路 `_eval_harness\probe.py`) | `M-1` 出口准确率 **46/46 = 100%**;`M-2` 90.3%;`M-3` 4/4;`M-4` 事实正确率 **46/46 = 100%**;`M-5` 0;`M-6` 转人工率 **5/46 = 10.9%**;`M-7` / `M-8` / `M-9` / `M-10` **全 0** |
| 与上一轮基线对比 | 与 `_eval_harness\score_w11b.json` **逐项一致** ⇒ **零回归** |
| 真机场景扫描(`_probe_scan.py`) | 25 条客户问法 + 3 条访客问法 ⇒ 转人工 **3/25**,且全部**应转**(投诉 / 销户 / 代办写操作) |
| 真机场景扫描(`_w20_evidence\_probe_scan.py`) | 25 条客户问法 + 3 条访客问法 ⇒ 转人工 **3/25**,且全部**应转**(投诉 / 销户 / 代办写操作) |
#### 五、诚实留痕(含我自己的失误,如实登记)
@@ -3215,9 +3215,9 @@ pytest **2 failed / 1577 passed / 2 skipped**(= `T0` 基线同两项)、ruff
3. 我最初给出的 `DEC-W20-3` 建议(「默认只答等级、要清单得再问一次」)**是错的** —— 把「陈述可买范围」与「引导购买」混为一谈,用户已纠正。**这条判断更正必须如实登记**,本轮按"直接列清单"落地。
4. **旧测试的还原写法有隐患**(本轮踩到):`test_eligible_exit_degrades_to_scope_only_if_the_template_ever_turns_promotional` 用 `Class.attr` 取出 `staticmethod` 再赋回,拿到的是"解绑后的函数",赋回类属性会**静默变成普通方法** ⇒ 此后每个测试都少传一个 `self` 而 `TypeError`,且**只在后置测试里炸**。已改为存取 `__dict__` 里的 `staticmethod` 描述符。
5. `drop_yield_claims` 的**空结果**是本轮新发现:语料里 **15 个切片整个块只写一个收益数字**(如 `PROD-001-08`「七日年化收益率 约 1.92%」),直接返回会出现**空气泡**(前端一条空白消息)。已加护栏,并让 `_exit_partial` **跳过被清空的块**去挑下一个有内容的块。
6. 探针脚本两处**口径缺陷**(非产品缺陷)同样登记:① `_eval_harness\probe.py` 的 `TERMINALS` 缺 `E2c-my` 标签 ⇒ 清单里的产品代码(6 位数字)会被 `M-9` 误判成"无出处数字";② `_probe_scan.py` 访客复用固定 `session_id` ⇒ 撞上上一轮的匿名主体(`SESSION_NOT_ACCESSIBLE`)。
6. 探针脚本两处**口径缺陷**(非产品缺陷)同样登记:① `_eval_harness\probe.py` 的 `TERMINALS` 缺 `E2c-my` 标签 ⇒ 清单里的产品代码(6 位数字)会被 `M-9` 误判成"无出处数字";② `_w20_evidence\_probe_scan.py` 访客复用固定 `session_id` ⇒ 撞上上一轮的匿名主体(`SESSION_NOT_ACCESSIBLE`)。
#### 六、待决项(等你裁定)
#### 六、待决项(✅ 已于 2026-09-21 按建议口径裁定)
| 编号 | 待决 | 我的最优建议 |
|---|---|---|
@@ -3226,9 +3226,12 @@ pytest **2 failed / 1577 passed / 2 skipped**(= `T0` 基线同两项)、ruff
| `DEC-W20-8` | 收益数字过滤是否从**展示层**再往**语料层**推 | **建议只留展示层**。往语料推要重建集合、代价大,且知识块作为"公司已发布资料"保留原样更可审计;展示层已证明挡得住(15 个纯收益块全部被拦) |
| `DEC-W20-9` | 金标是否扩到 49 条(补:①「我现在可以买什么等级的产品」②「我适合买什么产品」③回归钉子「帮我推荐一只基金」) | **建议演示后加**。46 条是 `D2.6` / `D3.7` 已发布指标的**冻结基线**,中途加减会让转人工率 / 出口准确率 / 事实正确率全部失效;本轮已把等价覆盖落在单元 / 集成守卫(成本为零) |
> ✅ **2026-09-21 裁定**:用户「**按照你建议的来**」⇒ `DEC-W20-6` / `-7` / `-8` / `-9` **全部按上表「我的最优建议」执行**(即:人设维持语气层、资料变更类维持 `P2`、收益过滤只留展示层、金标暂不扩到 49 条)。四项均为「**维持现状 / 演示后再做**」,**本轮无代码变更**。
> **同时完成**:① 按 `D2.9` 的 46 条 + 11 条边界用例走**真 HTTP(路径 B)**全量复跑 —— 出口 **46/46**、事实 **46/46**、禁忌 **0**、转人工 **5 条**;② 修正 `D2.9` 里因本轮改模板而过时的两处出口话术(澄清 / `E5b`)并回填复跑结果(`D2.9` **v1.0 → v1.1**);③ 顺带登记一处**判据更正**:首版跑批脚本把"期望出口"判成"首个命中即返回",造成 13 条假阴性(事实 46/46 全中),已改为"任意命中"。
> ⚠️ **仍未做(如实声明)**:`D-2` 的**残余**(同句重问**候选漂移**)—— 形状已稳(三轮全落 `E1`),但候选内容仍会变;按建议**演示后单独修**。
#### 七、版本位
`D1.6` 新增 §4.49;`D2.1` 新增 `v6.36` 段(标题 v6.35 → v6.36);`D1.1` 新增 §30(头部 v1.10 → v1.11,`D2.1` 版本位在 §2 / §4.0 / §4.2 三处同步)。
`D1.6` 新增 §4.49;`D2.9` **v1.0 → v1.1**(复跑回填 + 话术校准);`D2.1` 新增 `v6.36` 段(标题 v6.35 → v6.36);`D1.1` 新增 §30(头部 v1.10 → v1.11,`D2.1` 版本位在 §2 / §4.0 / §4.2 三处同步)。
## 5. 建议的开工顺序(在 `DEC-11` 拍板后)