From 82968429d39c813f57ad46bcd75f00e00570d897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=83=9C=E5=AE=87?= <17412268+zzzzz11122222@user.noreply.gitee.com> Date: Mon, 21 Sep 2026 22:53:52 +0800 Subject: [PATCH] =?UTF-8?q?docs(W27-4):=20D1.6=20=E8=A1=A5=20=C2=A713?= =?UTF-8?q?=EF=BC=88`W26`=20=E8=BD=AE=EF=BC=89=E4=B8=8E=20=C2=A714?= =?UTF-8?q?=EF=BC=88`W27`=20=E8=BD=AE=EF=BC=89=E9=80=90=E8=BD=AE=E7=95=99?= =?UTF-8?q?=E7=97=95=20=C2=B7=20=E7=99=BB=E8=AE=B0=E6=A1=8C=E9=9D=A2?= =?UTF-8?q?=E5=8D=95=E6=96=87=E4=BB=B6=E7=89=88=E5=AF=B9=E8=AF=9D=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - §13 `W26` 轮:甲方三项异议原话逐字留痕 + 本轮实测诊断 5 条(阈值区间重叠 / `FALLBACK_COLLECTIONS` 死代码 / 走势数据源缺失 / 闲聊兜底未接路由 / 收益过滤黑名单可绕过)+ 已拍板 12 项决策表 + 下一轮先读项。 - §14 `W27` 轮:甲方原话 11 条(含中途插入的 `G-01`/`G-02`/`G-03` 裁定原文)+ 落地清单与验收 + 金标 46→55 + 修掉的 7 处真缺陷(3 处甲方点名、4 处实施中发现)+ 交付面口径统一 + 提交与推送表 + 诚实未做项 6 条 + 答辩口径速记。 - §14 顶部登记「桌面单文件版」:`D:\桌面\客服Agent-对话记录与上下文提取-2026-09-21.md`(`W21`→`W27` 全程留痕),并声明**冲突时以仓库文档为准**。 - 行尾符归一:`D1.6` 追加段统一 CRLF(全文 3634 行纯 CRLF、无 BOM);`D2.6` 5 处游离 LF 归一为 CRLF(内容与 `HEAD` 逐字节一致,无内容变更)。 --- ...话上下文提取与开工前补充决策-2026-09-17.md | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/开发文档/D1.6-对话上下文提取与开工前补充决策-2026-09-17.md b/开发文档/D1.6-对话上下文提取与开工前补充决策-2026-09-17.md index 3a66001..bff3877 100644 --- a/开发文档/D1.6-对话上下文提取与开工前补充决策-2026-09-17.md +++ b/开发文档/D1.6-对话上下文提取与开工前补充决策-2026-09-17.md @@ -3480,3 +3480,154 @@ pytest **2 failed / 1577 passed / 2 skipped**(= `T0` 基线同两项)、ruff 2. `客服agent\D2.5-客服Agent演示脚本与账号速查-2026-09-19.md` §4.7(出口口径已更正)。 3. 本轮**两处未做**(§8.1 仍待决):`D-2`(同句重问**候选会变**)、`DEC-W20-9`(金标是否扩到 49 条)。 4. 本轮**刻意没做**:把 `E-02` / `H-01`(「那风险高吗?」)的 28 字单行答复做厚 —— 内容对但偏短,属**可选优化**。 + +--- + +## 13. `W26` 轮对话上下文(2026-09-21 · 甲方三项异议 → 设计专册 `D3.9`) + +> **性质**:本节是本轮**对话与决策的上下文提取件**,与 §9—§12 同构,供下一轮开工快速恢复语境。 +> **上游**:`客服agent\D2.1` `v6.41`;**本轮产物**:`开发文档\D3.9-客服Agent智能路由与行情出口设计-2026-09-21.md`(`CS-ARCH-2026-024` **v1.0**);**被更正的旧口径**:`D2.2` / `D3.1` / `D2.4` 的 `FR-CS-008`。 + +### 13.1 甲方本轮原话(逐字留痕) + +> 我现在答辩遇到问题了 我现在的意图识别做的很不清晰,比如用户问某个基金的走势怎么样 回答的不是我想要的结果 而且分级的回退那个规则怎么去确定他那个阈值就一定能精确的检索出那个答案,然后回退之后到第一层那个降低阈值的话 答案不是就不精准了吗 这个规则我觉得是不合理的 我希望在做意图识别之前 再加一层规则 或者把意图识别做得更精准 用户闲聊的时候总是触发知识库检索这种问题 请你跟我讨论修改的方案 + +同轮附图为 `D2.2` `FR-CS-008` 截图(等级 `P0`),期望口径写着「检索为空或最高分低于阈值 → ① 跨集合回退(阈值 `0.65`)→ ② 部分答 + 引导(`E5b`)→ ③ 白名单命中才转人工(`E5c`)」。 + +> 这一条是**整轮的起点**:甲方对「阈值能否保证精确」与「降阈值回退」两条提的是**质疑**,不是需求 —— 因此本轮交付物是**先说清哪条站不住**,再给可实施的设计。 + +### 13.2 本轮实测诊断(`W26` 轮新跑,非文档转述) + +| # | 甲方异议 | 实测根因 | +|---|---|---| +| 1 | 「阈值凭什么保证精确检索」 | **不能,且前提不成立**。自研阈值标定件实测:「应当直答」的 26 条 `score ∈ [0.6115, 1.0]`,「**明确不该直答**」的 20 条 `∈ [0.5049, 0.8226]` —— **两段区间大幅重叠** ⇒ **不存在**能把两组分开的单点阈值 | +| 2 | 「回退降阈值岂不就不精准」 | **顾虑正确,但实现里没有这条**:`knowledge_search_service.FALLBACK_COLLECTIONS` 是**死代码**;`FR-CS-008` ①「跨集合回退(阈值 0.65)」**只存在于文档** ⇒ 裁定**不实现**、改文档口径 | +| 3 | 「走势答不对」 | 根因是**数据源缺失**而非判定不准:`fin_product` **20 条全是场内 ETF/LOF**(每只 122—160 个净值日),手册示例产品(`南方稳健增利债券A` 等)**不在库**;`走势` 在金标里出现 **0 次** —— 这是一个**从未被建模、也从未被测试**的能力 | +| 4 | 「闲聊总触发检索」 | 分类器其实**判对了**(9/9 条判为 `chitchat`);隐患在**兜底**:确定性判据 `is_chitchat_message()` 只被用来算 `chitchat_streak`,**没接进路由** ⇒ 一旦分类失手就落进 `faq` 检索 | +| 5 | (顺带挖出,优先级最高) | **合规泄漏**:收益过滤 `drop_yield_claims()` 是**关键词黑名单**(只认 `收益率 / 年化 / 回报率 / 涨幅 / 业绩`),实测答复漏出「近一年表现(虚构)|约 4.12%」;同一句写成"近一年收益率 4.12%"会被整行删掉 ⇒ **黑名单可被改写绕过**,必须升级为**槽位白名单** | + +### 13.3 本轮已拍板的 12 项决策(登记见 `D3.9` §8) + +| 编号 | 事项 | 裁定 | +|---|---|---| +| `DEC-W27-1` | 是否新增 `L0` 表层判定层(出口码 `E0`) | **做** | +| `DEC-W27-2` | 意图分类降级为「增益 + 兜底」、改能力路由 | **做** | +| `DEC-W27-3` | `FR-CS-008` 改文档 vs 补实现跨集合回退 | **改文档**(不实现降阈值回退) | +| `DEC-W27-4` | 阈值是否继续作主判据 | **迁到实体锚点 + 证据结构**;阈值只作安全下限 | +| `DEC-W27-5` | 金标是否从 46 扩到 ≥ 80 | **扩**(补走势 / 闲聊 / 行情) | +| `DEC-W27-6` | 是否新增 `E6` 行情出口 | **做** | +| `DEC-W27-7` | 行情数字是否可对客输出 | **可**(限来源 + 带日期;禁止跨产品比高低) | +| `DEC-W27-8` | 示例产品问走势怎么答 | **如实说无公开净值序列** + 给出手册可答项 | +| `DEC-W27-9` | 最大回撤 / 夏普比率是否属可放行槽位 | **放行**(风险指标,非收益承诺),但须带口径标注 | +| `DEC-W27-10` | 免责声明是否分两档(门禁 `F5` 口径变更) | **批准分两档** | +| `DEC-W27-11` | 访客档是否开放 `E6` | **开放**(行情是公开事实,不需要画像) | +| `DEC-W27-12` | 是否先立专册再动代码 | **是**(本件即专册) | + +### 13.4 下一轮开工先读项 + +1. `开发文档\D3.9-…-2026-09-21.md`:§2 实测诊断 → §3 目标架构(`L0` / 能力路由 / 判据迁移 / 阈值标定 / `FR-CS-008` 更正)→ §4 `E6` 行情 → §5 槽位白名单 → §6 闲聊与免责分档 → §9 实施与验收。 +2. `FR-CS-008` 的新口径以 `D3.9` §3.5 为准(`D2.2` / `D3.1` / `D2.4` 三份已同步改)。 +3. 本轮**只出设计与依据**,代码实施留给 `W27` —— 见 §14。 + +--- + +## 14. `W27` 轮对话上下文(2026-09-21 · `L0` 表层判定层 + 出口 `E6` 代码实施 · 金标 46 → 55 · 交付面口径统一) + +> **性质**:本节是本轮**对话与决策的上下文提取件**,与 §9—§13 同构。 +> **上游**:`客服agent\D2.1` `v6.41`、`开发文档\D3.9`(设计依据);**完整实绩**:`D3.9` §12、`D3.7` §6.4;**验收侧口径**:`客服agent\D2.6` §3 / §6。 +> **📄 桌面单文件版**:本轮起另有一份**独立、可单独阅读**的全程留痕件放在桌面 —— `D:\桌面\客服Agent-对话记录与上下文提取-2026-09-21.md`(覆盖 `W21`→`W27` 全程,含决策登记与证据件清单)。它以本文件与仓库文档为准,**冲突时以仓库为准**。 + +### 14.1 甲方本轮原话(逐字留痕,按时间序) + +1. 「按照你建议的来」(批准 `W26` 的 12 项决策与 `D3.9` 专册) +2. **中途插入的一次实测裁定**:「**本步实测三项安全路由缺口(在 `route_message()` 层,需你裁定)** —— `G-01`「我的验证码被人要走了怎么办?」**未走 `P0` 反诈** → 落进检索…`G-02`「我账户现在有多少钱?收益多少?」**未走 `P1`**(缺「我+账户+多少钱」模式,且「?」截断了 2 字窗口)→ 落进澄清…`G-03`「帮我把绑定银行卡换一下」**未走 `P2`**(`P2_PATTERNS` 只覆盖「动词在前」语序)…**请给出你的建议 我需要全部都达标**」 +3. 「充分汲取对话记录作为上下文 然后按照你建议的来 一定要认真严谨」 +4. 「我们要提升效率 尽可能的把两个步骤变成一步去执行 并且你在这一个步骤中发现的错误要立即按照你的建议去修复」 +5. 「按照你的建议来,必要时可以跑单元测试与回归测试」 +6. 「全部一起做一起测试 我时间有限 我需要你认真严谨的去把这个模块全部完成,遇到错误就自己去推理然后选择最优解」 +7. 「我现在要回去休息了 你自己推理 遇到问题按照你的建议选择最优方案,然后跑一边回归测试 以及前端所有问题的测试,包括边界问题 另外 最后帮我生成一份详细的答辩报告 一定要认真严谨」 +8. 「按照你的建议来 然后全部做一遍前端测试 并提交到我的分支 我下午要演示」 +9. 「你现在帮我做一个演示的前端一键启动的一个脚本 然后再跑一遍回归测试,把 `客服agent/` + `开发文档/` 一并入库并再推一次」 +10. 「现在就带你走一遍,然后你再检查一遍我这两个文件夹里的文档 看看还有什么需要完善和补充的 我需要你仔细的去推理以及补充」 +11. 「把我们的对话做成一个文档」→「做一个单独的文档 放到桌面上」 + +> 第 2 条是**甲方亲自发现**的缺口,性质与本轮其余项不同:它不是"不智能",而是**安全红线漏判** —— 因此优先级排在所有智能项之前。 + +### 14.2 落地清单与验收(`D3.9` §12.1 / §12.2) + +| 项 | 落地物 | +|---|---| +| `L0` 表层判定层 | `_route_surface()`(`L0-a` 闲聊 / `L0-b` 行情 / `L0-e` 无信息量)+ `app/core/exit_codes.py` 出口码注册表 | +| 出口 `E6` 行情 | `app/service/fund_trend_service.py`(`summarize_trend()` 纯函数 + 工具)+ `query_fund_trend` 注册(`fund:quote:read`,含 `visitor`) | +| 收益过滤升级 | `drop_yield_claims()` 重写为**入口闸 × 槽位白名单**、fail-closed | +| 免责声明分档 | `governance.review_output()` 按 `exit_code` 分档;模板 `TPL_DISCLAIMER_LIGHT` 已入库 | +| 访客权限面 | `VISITOR_PERMISSIONS` 补 `fund:quote:read`;`query_fund_quote` 的 `allowed_roles` **不含 visitor**(逆向守卫单测) | +| 发布配置 | 版本 **`244`**(`cs-tools-75813de45421`)已激活 | + +DoD 六条全过:`M-1 55/55`、`M-4 55/55`、`M-5` 与四项零容忍 `M-7`/`M-8`/`M-9`/`M-10` **全 0**;全量 `pytest` **2094 passed / 3 skipped**;`ruff` 余 5 条与 `HEAD` 逐条对应(**仅行号平移**)。 + +### 14.3 金标从 46 扩到 55(`D3.7` §6.4) + +| 组 | 条数 | 说明 | +|---|---|---| +| `Q` 组 · 行情走势(`E6`) | +5(`Q-01`—`Q-05`) | `Q-01`/`Q-03` 走**访客档**;`Q-05` 是**反向守卫**(定义题不得被行情出口抢走) | +| `C` 组 · 闲聊收口(`L0-a`) | +4(`C-10`—`C-13`) | `C-13` 是**反向守卫**(含产品名 ⇒ 永不判闲聊) | + +**两个分母都报**:55 条下 `M-1` **55/55 = 100%**;46 条可比基线仍 **46/46 = 100%**(避免"扩容后看起来变好 / 变差"的误读)。`M-2` 90.9%(30/33)、`M-2b` 85.0%(17/20)、`M-6` **5/55 = 9.1%**,转人工 5 条**全在白名单内**(`F-05` / `G-01` / `G-03` / `G-04` / `G-05`)。 + +### 14.4 本轮修掉的真缺陷(7 处) + +**甲方点名的三处安全路由缺口(`route_message()` 层)** + +| 编号 | 现象 | 根因 | 裁定 | +|---|---|---|---| +| `G-01` | 「我的验证码**被人要走了**怎么办?」**未走 `P0` 反诈** | `CREDENTIAL_HELP_PATTERNS` 第 2 条正则的 **6 字窗口**把「验证码被人要走了怎么办」判成**自助求助**;而 `CREDENTIAL_INCIDENT_KEYWORDS` 不含「被人」 | **优先修**(安全红线) | +| `G-02` | 「我账户现在有多少钱?收益多少?」**未走 `P1`** | 缺「我 + 账户 + 多少钱」模式,且「?」截断了 2 字窗口 | 修 | +| `G-03` | 「帮我把绑定银行卡换一下」**未走 `P2`** | `P2_PATTERNS` 只覆盖**动词在前**的语序 | 修 | + +**实施中自己发现并修掉的四处**(`D3.9` §12.4):① `fund_trend_service` 原写 `int(product.risk_level)`,而库里存的是字符串 `'R4'` ⇒ 冒烟当场抛 `ValueError`;② 发布被**代码上限**挡住(`422 AGENT_INPUT_INVALID`)—— 根因是 `admin_service` 做的是**子集校验**而非数量上限,`query_fund_trend` 漏进 `definition.allowed_tools`;③ 评分器 `M-9` 取证面偏窄,会把行情答复里的 26 个净值数字整片误判成「无出处数字」(**评分器口径**问题,非产品缺陷);④ 进程内探针的合成上下文漏了 `fund:quote:read`,会让 `E6` fail-closed(表现成「行情功能坏了」)。 + +### 14.5 交付面口径统一(`W27-2` / `W27-3` 两轮文档改动) + +`W27` 代码入库后,**交付面文档仍留「五出口 / 六出口」旧口径** —— 这是评委最容易当场戳到的自相矛盾点,因此补做两轮**只改文档**的收尾: + +- **口径统一为「七出口 + `L0` 表层判定层」**,写法是**加横幅、不改历史**:`D3.6` 的「五出口」保留为**起步定义**并加更新横幅 + 新增 §3.0;`D1.1` 7 处索引行 + **新增 §35 留痕**;`D2.6` 配套行 + **新增 `W27` 状态更新段** + §11 新增 3 条追问;`D3.7` 计数 + **§4 增补 `W27` 扩容后的分母口径**;`D2.9` 判分输入件 `cases_46` → **`cases_55`**;`D2.10` 徽标 / meta / Mermaid / S8 表 / 时间分配 / 文档关系 + §3.8 新增 `E6` 行与 `L0` 段 + §4.1 阈值口径块 + §6.1 + §8.1 + §7.3 / §7.4 台词;`D2.5` **新增 §4.8** 行情与闲聊实测台词。 +- **四份 HTML 规格文档**(`D3.1` / `D3.2` / `D2.2` / `D2.4`)各在 `§0.1` 前加一段 `callout-warn` 口径横幅 —— **不重跑生成器**(`客服agent\_build` 已标注「已过期 · 请勿重新生成」),只声明口径。 +- `D2.6` §11 补 **3 条与甲方原话一一对应的追问**:① 阈值凭什么保证精确 → **区间重叠、单点阈值不存在**;② 回退降阈值岂不就不精准 → **该规则在代码中不存在**,真接上 `M-1` 100% → 91.3%;③ 意图识别为何不准 → 意图分类已**降级为「增益 + 兜底」**。 + +### 14.6 提交与推送 + +| 分支 | HEAD | 内容 | +|---|---|---| +| `qyqy_develop` | `3e24033` | `W27` **代码 + 设计同轮完成**(27 files,`+3543/−1042`) | +| | `279a632` | `W27-2` 交付面口径统一(12 files,`+172/−39`,**全是 `.md` / `.html`**) | +| | `be085c5` | `W27-3` `D2.6` §11 + `D2.10` §8.1/§7.3/§7.4 + `D1.1` §35(4 files,`+32/−4`) | +| `zsy_developcc` | `da1d14c` → `a810f46` → `8d6e4b7` | 覆盖式同步,与 `qyqy_develop` **树完全一致**(`git diff` 为空) | + +远程:`http://47.106.207.27:3000/AI260626/group_fqcd_jr.git`。 + +### 14.7 诚实未做项(答辩时要自己先说) + +1. 知识出口(`E3`/`E4`)侧的**实体锚点闸门未做** ⇒ 金标扩容 **9 条而非 12 条**(`A-11`—`A-13` 未成集); +2. **阈值未重标定**(方法只在 `D3.9` §3.4 文档里,未落到代码); +3. `M-3` 分母未改,只明示口径为「考检索的 `C` 组条目」; +4. `D1.1` §0 与 §4.0 的**历史计数偏移(差 1)**仍沿用不追改; +5. 仍挂账:`K-06` FAQ 阈值 0.75 偏高、第 4 集合(`fin_basic_collection`)不在默认检索面、同义词表未接检索、`_exit_partial` 按分数挑块、`D-2` 同句重问候选会变、`E5b` 展示层净化不覆盖「收益 + 数字%」形态; +6. 历史段落的「五出口」**有意保留**(本文件 §9—§12 / `D4.7` / `D2.1` 批次历史 / `D3.6` 原文)—— 全文替换会把「当时的决策」改成「现在的结论」,反而失真。 + +### 14.8 答辩口径速记(别吹) + +- **出口数**:起步 `E1`—`E5`;`W20` 细分 `E2c-my`(六个);`W27` 新增 `E6` ⇒ 答「**七个**(`E1` / `E2`(含 `E2a`—`E2e`)/ `E2c-my` / `E3` / `E4` / `E5` / `E6`),另有**不产出事实**的 `L0` 表层判定层(出口码 `E0`);**转人工仍只是 `E5c` 那一档**」。 +- **别说「零回归」**:46/46 是**三条期望登记修订之后**的结果(`B-01` 补 `ETF`、`B-05` 补 `E4`、自检 `BAS-CON-006` → `ETF-005`)。 +- **出口只在进程内 harness 判**(HTTP 响应里没有 `Top1` 与可解析引用)。 +- **记忆口径**:记忆**改变系统行为、不改变模型输入**;`investor_type` **只来自问卷**。 +- **零容忍词规则一条没删**,改的是**挂载点**(从"输出侧字面黑名单"搬到"检索层档位隔离 + 判定层合规词表 + 输出守护")。 +- **`E6` 的数据边界要主动讲**:库里只有**场内 20 只**能给出走势 —— **知道自己的边界是加分项**。 + +### 14.9 下一轮开工先读项 + +1. `开发文档\D3.9-…-2026-09-21.md`:§0 → §2 → §3 → §4 → §9 → **§12(实绩)**。 +2. `客服agent\D2.6-…-2026-09-19.md`:**§3(出口决策链)→ §6(金标对比)→ §11(现场速答)**。 +3. `客服agent\D2.5-…-2026-09-19.md` **§4.8**(行情与闲聊台词,答辩当天照着念)。 +4. `开发文档\D3.7` §2 的 `Q` / `C` 组 + §4 分母补注 + §6.4;`客服agent\D2.9` §2.11。 +5. 本轮证据件(**答辩后勿删**):`D:\桌面\金融\_eval_harness\` 下的 `cases_55.json` / `result_w27c.json` / `score_w27d_55.json` / `score_w27d_46.json`,以及 `_w27_probe_trend.txt` / `_w27_probe_chat.txt` / `_w27_probe_guard.txt` / `_w27_probe_visitor.txt`。