docs(W18): D2.4 索引口径更正为 AUTOINDEX(v1.6)+ D2.9 手动对话测试用例成文 + 空白消息 500 修复
- D2.4 v1.3 -> v1.6:索引统一 AUTOINDEX(设计初稿 HNSW/IVF_FLAT 未落地,实库直查为据) 更正 9 处 + 新增 §4.1 索引口径落地注;语料 628 -> 675 块并补 fin_basic_collection 说明 (三集合仍是唯一默认检索面,basic 并入会使 M-1 100% -> 91.3%) - 新增 客服agent/D2.9-客服Agent手动对话测试用例-2026-09-20.md: 46 条金标逐条可问 + 11 条边界 Z 组 + 判分四问 + M-1~M-10 手动汇总 + 真 HTTP 核验配方 实测登记 3 项缺口:空白消息 500(已修)/ 语料档位口径矛盾(待裁定)/ 重复问句漂移(待裁定) - 修修复:message 纯空白 500 -> 422 AGENT_INPUT_INVALID(入口补判据 + 回归测试) - tools/chat_console.py 提示语去掉已下线产品名(季季盈) - 落档:D1.1 §27(60 -> 61 份 / 客服agent 8 -> 9 份 / 注入校验 56 -> 57)、D2.1 v6.33、D1.6 §4.46 - 门禁:check_authoritative_docs 通过、_consistency.py GATE PASS、pytest 1915 passed / 0 failed
This commit is contained in:
+39
-15
@@ -2,20 +2,20 @@
|
||||
|
||||
> **体系编号**:`D1.1` · 域:一、治理与索引 · 编号体系见 `D1.1` §4.0
|
||||
|
||||
> **编号**:CS-DOC-2026-017 | **版本**:v1.7 | **日期**:2026-09-17 | **状态**:**现行(活文档,随文档区变动同步更新)**
|
||||
> **编号**:CS-DOC-2026-017 | **版本**:v1.8 | **日期**:2026-09-20 | **状态**:**现行(活文档,随文档区变动同步更新)**
|
||||
> **性质**:本文件是 `开发文档\` 的**唯一入口**。任何人(含三个月后的自己)打开这一份,就应知道:先读什么、哪份为准、每份什么状态。
|
||||
> **盘点范围**:`开发文档\`(**52 个文件** = 51 份编号文档 + 1 份入口存根 `CLAUDE.md`,无归档子目录)+ `客服agent\`(**8 份**对外交付文档)。
|
||||
> **盘点范围**:`开发文档\`(**52 个文件** = 51 份编号文档 + 1 份入口存根 `CLAUDE.md`,无归档子目录)+ `客服agent\`(**9 份**对外交付文档)。
|
||||
|
||||
---
|
||||
|
||||
## 0. 一句话结论
|
||||
|
||||
**60 份文档(59 份编号 + 1 份不占编号的入口存根 `CLAUDE.md`)已按 8 个域统一编号为 `D<域>.<序>`(规则见 §4.0,层级见 §3)。开工只读 5 份 = `D2.1` / `D2.2` / `D2.3` / `D2.4` / `D3.3`(见 §2)。**
|
||||
**61 份文档(60 份编号 + 1 份不占编号的入口存根 `CLAUDE.md`)已按 8 个域统一编号为 `D<域>.<序>`(规则见 §4.0,层级见 §3)。开工只读 5 份 = `D2.1` / `D2.2` / `D2.3` / `D2.4` / `D3.3`(见 §2)。**
|
||||
|
||||
| 域 | 名称 | 份数 | 定位 |
|
||||
|---|---|---|---|
|
||||
| **D1** | 一、治理与索引 | 6 | 先读 `D1.1`(本文件)——编号体系、权威链、开工只读集 |
|
||||
| **D2** | 二、对外交付 | 8 | 🔴 **开工必读**(A1—A4;另含 `D2.5` 演示脚本、`D2.6` 答辩报告、`D2.7` 记忆与画像联动、`D2.8` RAG 全链路) |
|
||||
| **D2** | 二、对外交付 | 9 | 🔴 **开工必读**(A1—A4;另含 `D2.5` 演示脚本、`D2.6` 答辩报告、`D2.7` 记忆与画像联动、`D2.8` RAG 全链路、`D2.9` 手动对话测试用例) |
|
||||
| **D3** | 三、现行权威·完整版与专项 | 8 | 查证据、查 FR 推导过程(含 A5 鉴权专项 `D3.3`;检索升级 `D3.5`;架构 `D3.6`;**评测金标 `D3.7`**;**密钥轮换 `D3.8`**) |
|
||||
| **D4** | 四、清除与重建留痕 | 7 | 追溯「删了什么、怎么恢复」;`D4.1` 即**重建指南**,`D4.6` 为验收基线留痕,`D4.7` 为**投顾恢复现状** |
|
||||
| **D5** | 五、业务流程基线 | 1 | 两条业务线 / 三条红线 / 演示跑通验收 |
|
||||
@@ -26,7 +26,7 @@
|
||||
> 🔑 **编号三处必须一致**:① 索引 §4.0 总表;② 文档标题正下方(体系编号行);③ 文件名前缀(`<编号>-<描述名>`)。**唯一例外 `CLAUDE.md`**(规则见 §5 R7;迁移记录见 §11)。🔁 **2026-09-19 起**:语言规范正文已独立成文 `D8.1-项目语言规范.md`,`CLAUDE.md` 收缩为**三行入口存根**(见 §4.7 与 §20)。
|
||||
|
||||
> 🔑 **`客服agent\` 与 `开发文档\` 是「收敛版 vs 完整版」关系,不是分叉。**
|
||||
> `客服agent\` 的 8 份是**对外交付 + 唯一开工入口**;`开发文档\` 内的同名旧版是**取证底稿**(含被收敛掉的备选方案与逐条证据)。
|
||||
> `客服agent\` 的 9 份是**对外交付 + 唯一开工入口**;`开发文档\` 内的同名旧版是**取证底稿**(含被收敛掉的备选方案与逐条证据)。
|
||||
> 两者若冲突,**一律以 `客服agent\` 为准**。
|
||||
|
||||
---
|
||||
@@ -75,7 +75,7 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧
|
||||
第 0 层 唯一入口 D1.1 D1.1-文档索引与权威声明.md
|
||||
第 1 层 域(8 个) D1 ─ D8
|
||||
第 2 层 子域(仅域 6 有) D6.1 ─ D6.5
|
||||
第 3 层 文档(60 份) D<域>.<序> / D<域>.<子域>.<序>
|
||||
第 3 层 文档(61 份) D<域>.<序> / D<域>.<子域>.<序>
|
||||
```
|
||||
|
||||
### 3.2 八个域(=逻辑顺序=阅读优先级)
|
||||
@@ -83,7 +83,7 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧
|
||||
| 域 | 域名称 | 份数 | 状态 | 什么时候读 |
|
||||
|---|---|---|---|---|
|
||||
| **D1** | 一、治理与索引 | 6 | 现行 | **先读 D1.1**(唯一入口,本文件) |
|
||||
| **D2** | 二、对外交付 | 8 | 现行 | 🔴 **开工必读**(含「开工只读 5 份」的 4 份) |
|
||||
| **D2** | 二、对外交付 | 9 | 现行 | 🔴 **开工必读**(含「开工只读 5 份」的 4 份) |
|
||||
| **D3** | 三、现行权威·完整版与专项 | 8 | 现行 | 查证据、查 FR 推导过程时读 |
|
||||
| **D4** | 四、清除与重建留痕 | 7 | 已完成 | 追溯「删了什么、怎么恢复」时读(D4.1 是重建指南;D4.7 是投顾恢复现状) |
|
||||
| **D5** | 五、业务流程基线 | 1 | 现行 | 核对业务范围与三条红线时读(**冲突时以它为准**) |
|
||||
@@ -91,15 +91,15 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧
|
||||
| **D7** | 七、早期系统文档 | 5 | **待确认** | 只在追查历史口径时读;已被上游依据表引用,**不可删**(见 §10) |
|
||||
| **D8** | 八、AI 协作规则 | 8 | 现行 | 让 AI 接手时的规则文件(`D8.1`=语言规范正文;`CLAUDE.md`=入口存根,不占编号) |
|
||||
|
||||
> 合计:8 + 6 + 8 + 7 + 1 + 17 + 5 + **8** = **60 份**(其中 `客服agent\` 的 8 份不计入 `开发文档\` 的 52 个文件;域 D8 的 8 份含 1 份**不占编号**的入口存根 `CLAUDE.md`)。
|
||||
> 合计:9 + 6 + 8 + 7 + 1 + 17 + 5 + **8** = **61 份**(其中 `客服agent\` 的 9 份不计入 `开发文档\` 的 52 个文件;域 D8 的 8 份含 1 份**不占编号**的入口存根 `CLAUDE.md`)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 全量文档清单
|
||||
|
||||
> **本节结构**:**§4.0 = 编号规则 + 全量编号总表(60 份,按编号顺序)——查找入口**;§4.1—§4.8 = 按类别展开的明细表(编号见 §4.0 总表,同一逻辑顺序)。
|
||||
> **本节结构**:**§4.0 = 编号规则 + 全量编号总表(61 份,按编号顺序)——查找入口**;§4.1—§4.8 = 按类别展开的明细表(编号见 §4.0 总表,同一逻辑顺序)。
|
||||
|
||||
### 4.0 编号规则与全量编号总表(60 份)
|
||||
### 4.0 编号规则与全量编号总表(61 份)
|
||||
|
||||
**编号规则**
|
||||
|
||||
@@ -126,11 +126,12 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧
|
||||
| **D2.1** | `客服agent\D2.1-客服Agent执行Todolist.md` | **v6.32** | 现行 | 🔴 **唯一开工入口**:**57 项 / 8 批次** / 12 步关键路径 / **批次 H 智能增强** |
|
||||
| **D2.2** | `客服agent\D2.2-客服Agent需求文档.html` | **v2.6** | 现行 | 🔴 对外需求:**FR-CS-001~052** + NFR-CS-001~021 |
|
||||
| **D2.3** | `客服agent\D2.3-客服Agent开发计划.html` | **v1.1** | 现行 | 🔴 前置条件 / 批次 / 会签 / 门禁 / 交付物 |
|
||||
| **D2.4** | `客服agent\D2.4-客服Agent知识库设计方案.html` | **v1.3** | 现行 | 🔴 三集合 / 三档可见性 / **分区隔离** / 7 步入库 8 步检索 / **附录F** |
|
||||
| **D2.4** | `客服agent\D2.4-客服Agent知识库设计方案.html` | **v1.6** | 现行 | 🔴 三集合 / 三档可见性 / **分区隔离** / 7 步入库 8 步检索 / **附录F** |
|
||||
| **D2.5** | `客服agent\D2.5-客服Agent演示脚本与账号速查-2026-09-19.md` | `F-03`+`F-04`+`A-05` | 现行 | 🔴 **演示当天照着念**:五项自检 / 账号速查(实测可登录)/ 游客线 5 条 + 客服线 6 组台词(带**实测答复**)/ 排障表 / 对「不智能」的正面回答 |
|
||||
| **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 项实测缺口 |
|
||||
| **D3.1** | `开发文档\D3.1-客服Agent需求开发文档与设计方案.html` | **v2.5** | 现行 | D2.2 的**完整版**:逐条需求带证据引用与推导过程 |
|
||||
| **D3.2** | `开发文档\D3.2-知识库设计方案.html` | **v1.2** | 现行 | D2.4 的**完整版**:含被收敛掉的备选方案与否决理由 |
|
||||
| **D3.3** | `开发文档\D3.3-访客与角色分离的鉴权方案建议-2026-09-16.md` | CS-AUTH-2026-011 | 现行 | 🔴 鉴权专项(=开工只读 5 份之 A5):四方案 / 三不变量 / 甲乙时序 |
|
||||
@@ -178,20 +179,21 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧
|
||||
| **D8.6** | `开发文档\ai\D8.6-04_OUTPUT_RULES.md` | — | 现行 | 产出规则(§5 高风险变更须先确认) |
|
||||
| **D8.7** | `开发文档\ai\D8.7-05_PROJECT_CONTEXT.md` | — | 现行 | 项目背景速览 |
|
||||
|
||||
> **注入校验**:**56 份**可注入文档(**44** `开发文档\*.md` + 5 `开发文档\*.html` + 3 `客服agent\*.html` + `客服agent\D2.5-…md` + `客服agent\D2.6-…md` + `客服agent\D2.7-…md` + `客服agent\D2.8-…md`)**已全部带「体系编号」行**;3 份 `.txt` 按上表例外处理。(原表述的 49 份**未计入** `客服agent\D2.1` 的 `.md` —— 该漏计是历史口径,本轮**只补新增件、不追改历史**。)「开工只读 5 份」对应 **D2.1 / D2.2 / D2.3 / D2.4 / D3.3**。
|
||||
> **注入校验**:**57 份**可注入文档(**44** `开发文档\*.md` + 5 `开发文档\*.html` + 3 `客服agent\*.html` + `客服agent\D2.5-…md` + `客服agent\D2.6-…md` + `客服agent\D2.7-…md` + `客服agent\D2.8-…md` + `客服agent\D2.9-…md`)**已全部带「体系编号」行**;3 份 `.txt` 按上表例外处理。(原表述的 49 份**未计入** `客服agent\D2.1` 的 `.md` —— 该漏计是历史口径,本轮**只补新增件、不追改历史**。)「开工只读 5 份」对应 **D2.1 / D2.2 / D2.3 / D2.4 / D3.3**。
|
||||
|
||||
### 4.1 Ⅰ 对外交付 / 现行权威(`客服agent\`,8 份)
|
||||
### 4.1 Ⅰ 对外交付 / 现行权威(`客服agent\`,9 份)
|
||||
|
||||
| 文件名 | 版本 | 日期 | 定位 | 关联 |
|
||||
|---|---|---|---|---|
|
||||
| `D2.1-客服Agent执行Todolist.md` | **v6.32** | 2026-09-17 | 唯一开工入口 | 收敛自 `开发文档\D3.4-客服Agent重构Todolist.md` v5.1 |
|
||||
| `D2.1-客服Agent执行Todolist.md` | **v6.33** | 2026-09-17 | 唯一开工入口 | 收敛自 `开发文档\D3.4-客服Agent重构Todolist.md` v5.1 |
|
||||
| `D2.2-客服Agent需求文档.html` | **v2.6** | 2026-09-17 | 对外需求(FR **52** / NFR 21) | 完整版见 §4.2 |
|
||||
| `D2.3-客服Agent开发计划.html` | **v1.1** | 2026-09-17 | 批次 / 会签 / 门禁 | 与 A1 批次号一一对应 |
|
||||
| `D2.4-客服Agent知识库设计方案.html` | **v1.3** | 2026-09-17 | 三集合 / 三档 / 入库检索流程 | 完整版见 §4.2 |
|
||||
| `D2.4-客服Agent知识库设计方案.html` | **v1.6** | 2026-09-20 | 三集合 / 三档 / 入库检索流程;**索引统一 `AUTOINDEX`、语料 675 块** | 完整版见 §4.2 |
|
||||
| `D2.5-客服Agent演示脚本与账号速查-2026-09-19.md` | — | 2026-09-19 | 演示脚本(`F-03`/`F-04`/`A-05` 三合一) | 台词证据:`group_fqcd_jr\docs\evidence\20260919-t8-demo-lines*.json` |
|
||||
| `D2.6-客服Agent答辩报告-2026-09-19.md` | — | 2026-09-19 | 答辩报告(问题定义 / 根因 / 五出口 / 安全不变量 / 前后对比 / 现场速答) | 数字来源:46 条金标 `score_before` vs `score_w11b` + `e2e_smoke_test` + `http_probe` + 12 条真机边界 |
|
||||
| `D2.7-客服Agent中长期记忆与画像联动设计-2026-09-20.md` | — | 2026-09-20 | 中长期记忆与画像联动(读码取证 / `INV-M1`~`INV-M6` / 分期 P0—P2) | 上游依据:`开发文档\D7.3` §1.3 与 §6.2;口径:`D2.2` §1.7 第 12 / 18 / 21 项 |
|
||||
| `D2.8-客服Agent知识库RAG全链路与选型说明-2026-09-20.md` | — | 2026-09-20 | RAG 全链路(按流程逐步:解析 / 切片 / 向量化 / 入库 / 检索 / 增强 / 判定) | 上游:`D2.4` §6 / §7、`D3.2`、`D3.5`;实测:`knowledge\_chunks.jsonl` 675 块 + Milvus 四集合直查 |
|
||||
| `D2.9-客服Agent手动对话测试用例-2026-09-20.md` | — | 2026-09-20 | 手动对话测试用例(46 条金标逐条可问 + 11 条边界 + 判分四问 + 汇总表) | 同口径输入件:`_eval_harness\cases_46.json` / `score_w11b.json`;实测证据:`_cs_manual_*_20260920.json` |
|
||||
|
||||
### 4.2 Ⅱ 开发文档区内的现行权威(8 份)
|
||||
|
||||
@@ -795,6 +797,28 @@ A5 [D3.3] 访客与角色分离的鉴权方案建议(仅此一份,无新旧
|
||||
|
||||
---
|
||||
|
||||
## 27. 第二十三轮:`D2.4` 索引与语料口径更正(v1.6)+ `D2.9` 手动对话测试用例成文 + 空白消息 500 修复(2026-09-20)
|
||||
|
||||
> **本轮做什么**:三件事 —— ① 按上一轮登记的**建议 A**,把 `D2.4` 的**索引口径**改成与实库一致(`AUTOINDEX`),
|
||||
> 顺带把**语料口径**从 628 更正为 **675 块**、补上第四集合的说明;② 新增 `客服agent\D2.9`(**手动对话测试用例**,
|
||||
> 46 条金标 + 11 条边界,供人**亲自跟 Agent 对话**验收);③ 修掉一条**真实测出来的缺陷**:`message` 纯空白 → 500(现为 422)。
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| **新增文档** | `客服agent\D2.9-客服Agent手动对话测试用例-2026-09-20.md`(域 2「对外交付」,`D2.x` 续号) |
|
||||
| **`D2.4` 索引口径更正(v1.3 → v1.6)** | **直查 Milvus(2026-09-20)**:四集合索引名均为 `knowledge_autoindex`、类型 **`AUTOINDEX`**、度量 `COSINE`、`pending_index_rows = 0`、全部 `Loaded`。设计初稿的「FAQ→`HNSW` / 长文档→`IVF_FLAT`」**未落地**,且 `D2.4` 内部早已自我矛盾(§1466 按实库写了 `AUTOINDEX`)⇒ 本轮一次性更正 **9 处**(§4.1 表 / §5 schema 行 / 索引参数行 / §7.1 决策总览第 6 行 / §7.3 决策 6 全文 / 附录A / 附录D 索引行 + 规模行)并**新增「§4.1 索引口径落地注」**说明为什么不按初稿差异化(百条量级下收益不成立;`AUTOINDEX` 免调参;`IVF_FLAT` 的 `nlist` 错配反而伤召回) |
|
||||
| **`D2.4` 语料口径更正** | 628 → **675 块**;实库 `policy 288 / product 191 / faq 150 / basic 46`,与 `knowledge\_chunks.jsonl` **逐集合一致**;**新增 `fin_basic_collection` 说明**——三集合仍是唯一默认检索面,基础集合为补充语料、**不入默认面**(2026-09-19 实测并入会使金标 `M-1` 100% → 91.3%);附录F.1「现状」列改按 675 块复核(`family_id` 675/675、`param_class` 非 `none` 186 块)、F.6 复测数字更新、F.7 的四个前置标注**已全部关闭**;版本表新增 **v1.6** 行,全文版本位同步 |
|
||||
| **`D2.9` 内容** | ① §0 三条对话路径(前端挂件 / 真 HTTP / 本地控制台)+ **三条铁律**(刷新=新会话、登录限流 10 次/60 秒、先抄原文再判分)+ **界面看不到「出口」的原因与六种答复形状对照表**;② §1 判分四问 + 两条特别口径 + **`M-1`~`M-10` 门槛与实测基线**;③ §2 **46 条金标逐条可问**(问句 / 档位 / 期望出口 / 期望要点 / 禁止出现 / 实测基线 / 判分栏);④ §3 **11 条边界 `Z` 组** + 三个实测缺口;⑤ §4 安全 4 条必演话术;⑥ §5 手动汇总表;⑦ §6 可粘贴的真 HTTP 核验配方 + 会话回放;⑧ §7 排障(把环境问题与实现问题分开) |
|
||||
| **实测缺口 ①(已修)** | `POST /api/v1/agent-runs` + `message=" "` → **500 Internal Server Error**。根因:入口 schema 只有 `min_length=1`(`" "` 长度 3 能过),随后**领域层** `AgentRequest` 的 `message must not be blank` 抛 `pydantic.ValidationError`,不属于 FastAPI 请求校验异常 ⇒ 被兜底处理器变成 500。**修复**:把同一判据补到入口(`app/api/schemas/agent_runs.py` 加 `field_validator`),错误形状与其余参数错误一致(422 `AGENT_INPUT_INVALID`);新增回归测试 `tests/unit/api/test_request_validation_envelope.py::test_blank_message_is_rejected_at_the_gateway` |
|
||||
| **实测缺口 ②③(只登记、待裁定)** | ② **语料档位口径矛盾**:`public` 的 `FAQ-0014` 完整给出五档门槛(50/200/600/1000 万)、`FAQ-0050` 含「600 万元以上的钻石客户」、`PROD-017` 含四档权益摘要,而切片脚本注明「不泄露档位与门槛」⇒ 设计意图在语料层被自己推翻(**检索未越权,`M-8` 仍为 0**,已逐块核对来源);③ **同会话重复同一模糊问句会漂移**(轮1 澄清 → 轮2 改答澄清候选里的第 2 项 → 轮3 落 chitchat,**100% 可复现**,根因未定)。两项的甲/乙选项与建议见 `D2.9` §8.1 `D-1` / `D-2` |
|
||||
| **顺带修正** | `tools\chat_console.py` 的页面提示语示例含**已下线产品名**(`季季盈90天起投多少`)→ 改为 `基金申购和赎回有哪些费率`(1 行,避免给演示者错误引导) |
|
||||
| **计数同步** | §0 结论 60 → **61**(59 → **60 份编号**);§0 盘点范围 `客服agent\` 8 → **9 份**;§0 域表与 §3.2 表 D2 8 → **9**;§3.1 第 3 层 60 → **61**;「合计」行改 `9 + 6 + 8 + 7 + 1 + 17 + 5 + 8 = **61 份**`;§4.0 标题 / 说明 60 → **61**;§4.0 总表新增 `D2.9` 行 + `D2.4` 版本位 `v1.3 → v1.6`;§4.0 尾「注入校验」**56 → 57 份**;§4.1 标题 8 → **9 份** + 新增 `D2.9` 行 + `D2.1` 版本位 `v6.32 → v6.33` + `D2.4` 版本位 `v1.3 → v1.6` |
|
||||
| **版本位同步** | 本文件头部 **v1.7 → v1.8**;`客服agent\D2.1` 标题 **v6.32 → v6.33**(新增 `v6.33` 段);`客服agent\D2.4` **v1.3 → v1.6** |
|
||||
| **交叉引用** | `D1.6` 新增 §4.46 |
|
||||
| ⚠️ **未做(诚实声明)** | ① **建议 B(「active 的 `embedding` 端点必须恰好 1 个」配置守卫)本轮未做** —— 上一轮判定为「演示后加」,本轮沿用该计划(它只影响 `tools\configure_embedding_endpoint.py` 被重跑的场合);② `D2.9` §8.1 的 `D-1`/`D-2`/`D-3`/`D-4` 四项**待用户裁定**;③ `D3.1`/`D3.2`/`D2.2` 的 `HNSW` / `IVF_FLAT` 表述**本轮未改** —— 它们是**完整版 / 底稿**,按「加状态更新注而非逐处改写」的口径处理,尚未执行 |
|
||||
|
||||
---
|
||||
|
||||
> **维护责任**:本文件为活文档。**新增 / 改名 / 归档 / 改版本号后,须同步更新本文件 §3 与 §4.0 总表对应行**。
|
||||
>
|
||||
> 编制:项目文档组 | 审核:合规稽核部 | 日期:2026-09-17
|
||||
|
||||
@@ -2989,6 +2989,51 @@ pytest **2 failed / 1577 passed / 2 skipped**(= `T0` 基线同两项)、ruff
|
||||
⚠️ **一处自我更正(如实登记)**:本轮我第一版读到「实库只有 15 个字段、缺 `family_id`/`param_class`/`intent`」——**这是错的**。根因是把 `tools\probe_knowledge_collections.py` 跑在了**非仓库根目录**:该脚本把产物写到**相对路径**,于是新结果落到了别处,而我读的是仓库里**尚未更新的旧 JSON**。改为直接查 Milvus 后确认:**18 个字段齐全、`visibility` 是真分区键、四集合 `count(*)` = 150/191/288/46**。**结论以直接查询为准**;该踩坑也已写进 `D2.8` §13 的复现命令注意事项与 §14 的诚实声明。
|
||||
|
||||
⚠️ **诚实声明**:本轮**未改任何代码**、**未跑金标评测**。`D2.8` §11 的数字是**语料与库的实测**,**不是效果指标**(效果指标见 `D2.6` / `D3.7`)。
|
||||
### 4.46 2026-09-20 第四十二轮会话记录(`W18`:`D2.4` 索引口径更正 + `D2.9` 手动对话测试用例成文 + 空白消息 500 修复)
|
||||
|
||||
> **用户原话**:「现在 按照你建议的来 然后再帮我写一份测试用例 我需要自己手动跟agent对话 看看返回信息是否准确」
|
||||
> **本轮性质**:执行轮。三件事:① 按上轮登记的**建议 A** 改 `D2.4` 口径;② 交付 `D2.9`(手动对话测试用例);③ 边做边测,**测出并修掉 1 条真缺陷**、**登记 2 条待裁定缺口**。
|
||||
|
||||
#### 一、建议 A 执行:`D2.4` 索引与语料口径以实库为准(`v1.3` → `v1.6`)
|
||||
|
||||
| 项 | 实测 / 动作 |
|
||||
|---|---|
|
||||
| **实库直查(2026-09-20)** | 四集合索引名均 `knowledge_autoindex`、类型 **`AUTOINDEX`**、度量 `COSINE`、`pending_index_rows = 0`、`Loaded`;`fin_faq 150 / fin_product 191 / fin_policy 288 / fin_basic 46` |
|
||||
| **更正 9 处** | §4.1 表 3 行 · §5 schema `embedding` 行 · 索引参数行 · §7.1 决策总览第 6 行 · §7.3 决策 6 全文 · 附录A · 附录D 索引行 · 附录D 规模行 |
|
||||
| **新增** | 「§4.1 索引口径落地注」(为什么不按初稿差异化:百条量级收益不成立 / `AUTOINDEX` 免调参 / `IVF_FLAT` 的 `nlist` 错配反而伤召回)+ 版本表 **v1.6** 行 + 全文版本位(侧栏 / 顶栏 / `doc-meta` / 文末) |
|
||||
| **语料口径同步** | 628 → **675 块**;补第四集合说明:**三集合仍是唯一默认检索面**,`fin_basic_collection` 为补充语料、**不入默认面**(2026-09-19 实测并入会使 `M-1` 100% → 91.3%);附录F.1「现状」列与 F.6 复测数字按 675 块更新;F.7 四个前置标注**已全部关闭** |
|
||||
| **设计初稿的索引为什么没落地** | 「FAQ→`HNSW` / 长文档→`IVF_FLAT`」是**设计态**;落地统一 `AUTOINDEX`。**登记录入 `D2.4`**,不再只留在 `D1.6` |
|
||||
|
||||
#### 二、交付 `D2.9`:手动对话测试用例(46 条金标 + 11 条边界)
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| **文档** | `客服agent\D2.9-客服Agent手动对话测试用例-2026-09-20.md`(444 行;`D1.1` §4.0 / §4.1 已登记,`客服agent\` 8 → **9 份**) |
|
||||
| **46 条如何"逐条可问"** | 直接由 `_eval_harness/cases_46.json` + `score_w11b.json` 生成:**问句 / 档位 / 期望出口 / 期望要点(`+` 分组,每组至少命中一个)/ 禁止出现(命中即判负)/ 2026-09-19 实测基线(实际出口 · top1)/ 判分栏**——不手抄,避免转录漂移 |
|
||||
| **§0 三条铁律** | ① 刷新=开新会话(`widget.js:119-122`);② 登录限流 **10 次 / 60 秒**、访客令牌 30 次 / 60 秒 ⇒ 重登录隔 ~75 秒;③ 先抄原文再判分 |
|
||||
| **§0.3 界面看不到「出口」** | 本期**不向客户展示来源引用**(`C-10` 乙·降级)⇒ 给出**六种答复形状对照表**(澄清 / 计算型 / 知识直返 / 证据约束生成 / 部分答+引导 / 转人工),让"出口对不对"不靠内部信息也能判 |
|
||||
| **§3 边界 `Z` 组(11 条)** | 空白消息 / 超长 / emoji / 英文 / 提示词注入 / 越权探针 / 跨主体 `session_id` / 同会话重复模糊问句 / 可复现性 / 画像分层 / 人工诉求不搅乱上下文 —— **每条都有 2026-09-20 真 HTTP 实测列** |
|
||||
| **§6 核验配方** | 可直接粘贴的 PowerShell + Python 片段:一条命令问一句并打印 `intent` / `transfer_required` / 工具名 / 答复全文;另有「回放某个会话都聊了什么」的 SQL 片段 |
|
||||
|
||||
#### 三、本轮测出来并处理掉的问题
|
||||
|
||||
| # | 问题 | 定因 | 处置 |
|
||||
|---|---|---|---|
|
||||
| 1 | 🔴 `POST /api/v1/agent-runs` + `message=" "` → **500**(无 `code`、无 `trace_id`) | **已定因(非猜测)**:入口 `AgentRunCreateRequest` 只校 `min_length=1`,`" "` 长度 3 **能过**;随后**领域层** `AgentRequest.message_must_not_be_blank`(`app/core/contracts.py:54-59`)抛 `pydantic.ValidationError` —— 它**不是** FastAPI 的请求校验异常 ⇒ 被兜底处理器变成 500。对照组:`message` 超长 → 正常 422 信封(说明入口校验本身没坏,只是**判据漏了一条**) | ✅ **已修**:判据补到入口(`app/api/schemas/agent_runs.py` 加 `field_validator`)→ 422 `AGENT_INPUT_INVALID`、`field_errors[0].field = body.message`;新增回归测试 `tests/unit/api/test_request_validation_envelope.py::test_blank_message_is_rejected_at_the_gateway`(3 passed) |
|
||||
| 2 | 🟡 **语料档位口径矛盾**:`public` 的 `FAQ-0014` **完整给出五档门槛**(50/200/600/1000 万)、`FAQ-0050` 含「600 万元以上的钻石客户」、`PROD-017` 含四档权益摘要 —— 而切片脚本 `build_knowledge_chunks.py` 注明「不泄露档位与门槛」 | 逐块核对:访客拿到的四档权益**摘要来自 `PROD-017`(`public`)与 `FAQ-0014`(`public`)**,**不是** `HNW-004~007`(`registered`)⇒ **检索未越权**(`M-8` 仍 0),是**标注口径**问题 | ⏸ **只登记、待裁定**(`D2.9` §8.1 `D-1`,建议「乙:承认门槛属公开宣传口径、权益明细属 `registered`」,并同步删掉脚本里那句自相矛盾的注释)。**⚠️ 我最初把它误记为「档位越权」,逐条比对 `doc_id` 后更正** |
|
||||
| 3 | 🟡 **同会话重复同一模糊问句 → 答复漂移**(轮1 `E1` 澄清 → 轮2 直接作答、答的是候选第 2 项 → 轮3 落 chitchat;两个会话各跑一遍,**100% 可复现**) | **根因未定,不下结论**。旁证:消息表里轮1 `tool_calls.topic = null`、**轮2 变 `""`** ⇒ 澄清提示词确实作为 assistant 轮进了下一轮上下文推导(`_search_query` 从最后一条 assistant 轮取主语,而澄清提示词首行含「,」会被 `_turn_topic` 判空 ⇒ **查询串没变但分支结果变了**) | ⏸ **只登记、待裁定**(`D2.9` §8.1 `D-2`,建议**演示后再修**:它不影响 46 条金标(每条都是新会话),而那段代码的注释记着两次返工教训,属回归风险区)。**已写进 `D2.9` 的演示者操作建议**(不要在同会话重复同一句模糊问句) |
|
||||
| 4 | 🟢 `tools\chat_console.py` 页面提示语示例含**已下线产品名**(`季季盈90天起投多少`) | 读码发现(该产品名在 `I-02` 属「禁止出现」项) | ✅ **已改**为 `基金申购和赎回有哪些费率`(1 行) |
|
||||
|
||||
#### 四、门禁与落档
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 定向测试 | `tests/unit/api/test_request_validation_envelope.py` **3 passed** |
|
||||
| 全量回归 | 见会话末尾汇报(跑前停常驻 Worker、跑后重启 API + Worker),与 `T0` 基线对比 |
|
||||
| 计数同步 | `D1.1`:60 → **61 份**(59 → **60 编号**)、`客服agent\` 8 → **9 份**、§3.1 第 3 层、§3.2 合计行、§4.0 标题与总表、§4.1 标题与明细、注入校验 56 → **57 份**;头部 **v1.7 → v1.8** |
|
||||
| 版本位 | `D2.1` **v6.32 → v6.33**(新增 `v6.33` 段);`D2.4` **v1.3 → v1.6** |
|
||||
| 未做(诚实声明) | ① **建议 B(`embedding` 端点唯一性守卫)本轮未做** —— 沿用上轮「演示后加」的判定;② `D3.1`/`D3.2`/`D2.2` 的 `HNSW`/`IVF_FLAT` 表述**未改**(完整版/底稿,口径为「加状态更新注」,尚未执行) |
|
||||
|
||||
## 5. 建议的开工顺序(在 `DEC-11` 拍板后)
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user