feat(W27): L0 表层判定层 + 出口 E6 行情 + 收益过滤槽位白名单 + 免责声明分档(设计与代码同轮完成)
设计与依据:新增 D3.9-客服Agent智能路由与行情出口设计-2026-09-21.md(CS-ARCH-2026-024)
DEC-W27-1~12 全部批准并落地。
## 新增(3 个源文件 + 3 个测试文件)
- app/core/exit_codes.py:出口码注册表(E0/E1/E2a~E2e/E3/E4/E5a~E5c/E6/E8/CHAT/LOGIN/CONTACT)
+ NON_BUSINESS_EXIT_CODES 白名单(免责分档的判据面)
- app/service/fund_trend_service.py(E6):summarize_trend() 纯函数 + query_fund_trend 工具
读 fin_nav_history;按净值日个数(5/20/60/120)给区间涨跌 / 区间高低 / 来源与区间
- tests/unit/{service,tools} 新增 45 条守卫单测(E6 出口 / L0 表层判定 / 工具配置)
## 改动(重点)
- customer_service.py:
· _route_surface()(L0-a 闲聊 / L0-b 行情 / L0-e 无信息量),位置在安全路由之后
· drop_yield_claims() 重写为「入口闸 × 槽位白名单」+ fail-closed
(旧黑名单会误删权重:A-06 业绩基准公式整行消失)
· allowed_tools 补 query_fund_trend —— 修掉发布被拒 422「配置超出 Agent 工具上限」
(该 422 是**子集**校验而非数量上限,根因即此项漏配)
· 25 处 CoreResult 全部补 exit_code(AST 守卫保证零遗漏)
- customer_service_rules.py:闲聊判定重写(业务实体边界 + 词表 + 特征串 + 语气词)
+ is_low_information_message() + is_contact_inquiry()
- governance.py:免责声明按 exit_code 分档(业务档完整 / 非业务档轻型)
- actor.py:VISITOR_PERMISSIONS 补 fund:quote:read(E6 对访客开放,DEC-W27-11)
- tools/:seed_compliance_baseline 新增 TPL_DISCLAIMER_LIGHT;publish 工具改为
「从生效版本派生原列表再追加」(_inherit_tools 取不到返回 None,防静默改窄)
## 实测
- 金标扩容 46 → 55(新增 Q 组行情 5 条 + C 组闲聊 4 条)
- M-1 55/55、M-4 55/55;M-5 与四项零容忍(M-7/M-8/M-9/M-10)全 0
- 原 46 条可比基线逐项不变(46/46);M-6 9.1%(5 条全在转人工白名单内)
- 全量 pytest 2094 passed / 3 skipped;ruff 零新增(余 5 条与 HEAD 逐条对应)
- 配置版本 244(cs-tools-75813de45421)已发布并激活
## 文档
- 新增 D3.9(设计专册);D1.1 §34 补「代码实施已同轮完成」并把旧表述作废
- D3.7:新增 Q 组判据表 + §6.4 第四次实测 + M-3/M-9 口径澄清
- D2.9:新增 §2.11(9 条新增用例的实测答复原文)+ 汇总表改双列口径
- D2.1:新增 v6.41 执行条目
- 权威副本(D:\桌面\金融\)→ 仓库镜像 全量比对一致(0 缺失 / 0 不一致)
## 诚实未做项
- 知识出口(E3/E4)侧的实体锚点闸门未做(故金标扩容 9 条而非 12 条,A-11~A-13 未成集)
- 阈值未重标(D3.9 §3.4 只给方法);M-3 分母未改(仅明示口径);
D1.1 §0 与 §4.0 历史计数偏移(差 1)仍沿用
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
> **体系编号**:`D3.6` · 域:三、现行权威·完整版与专项 · 编号体系见 `D1.1` §4.0
|
||||
|
||||
> **编号**:CS-ARCH-2026-021 | **版本**:v1.1 | **日期**:2026-09-17 | **状态**:**现行(专项建议;§9 八项已于 2026-09-17 拍板,裁定见 §9)**
|
||||
> **编号**:CS-ARCH-2026-021 | **版本**:v1.2 | **日期**:2026-09-21 | **状态**:**现行(专项建议;§9 八项已于 2026-09-17 拍板,裁定见 §9)**
|
||||
> **性质**:**建议件**,**不是**需求来源、**不是**任务来源。任何一项要落地,必须先按 `D1.1` §1 的顺序修订上游(`D2.2` 需求 → `D2.4` 设计 → `D2.1` 任务),再回填 `D1.5` / `D1.6` 的决策登记表。
|
||||
> **读法**:§0(结论)→ §1(为什么现在不智能,含代码取证)→ §2("智能"的 7 条可验收定义)→ §3(**五出口架构**,核心)→ §4(安全设计,不放松反而更严)→ §5(要改哪些上游条款)→ §9(需你拍板的 8 项)。
|
||||
> **配套**:知识库侧的检索升级见 `D3.5`;前提风险 `K-01`~`K-08` 见 `D3.5` §2;**验收依据见 `D3.7`**(46 条金标 / 10 项指标 / 4 项零容忍)。
|
||||
@@ -104,7 +104,10 @@
|
||||
```
|
||||
① 确定性安全路由(P0-P3:反诈 / 注入 / 合规 / 账户 / 写操作)
|
||||
└─ 不查库、不调模型 ← 保留旧实现(这是对的),只加「概念题豁免」
|
||||
② 身份与档位边界(visitor / customer)
|
||||
② L0 表层判定层(`W27` 新增,见 `D3.9` §3.1)
|
||||
│ 闲聊 / 行情走势 / 本人数据 / 计算参数位 / 无信息量短句
|
||||
└─ 确定性判定(不问模型、不看分数)命中即转对应出口 ──► 闲聊 / E2* / E6 / E5
|
||||
②b 身份与档位边界(visitor / customer)
|
||||
└─ 由「整题拒绝 + 引导登录」改为「可见部分照答 + 不可见部分引导」
|
||||
③ 意图与槽位解析(含澄清判定)
|
||||
│
|
||||
@@ -117,6 +120,8 @@
|
||||
E5a 澄清
|
||||
└► E5b 部分答 + 引导
|
||||
└► E5c 转人工(带上下文摘要)
|
||||
④ 出口 E6 行情(`W27` 新增,见 `D3.9` §4)
|
||||
└─ 走势 / 净值 / 涨跌:数据源 = 行情接口 + 库内净值序列;不调模型、不猜数
|
||||
```
|
||||
|
||||
**核心变化**:转人工从「默认动作」降为**最后一档 E5c**,且只有 §4.3 的 4 类场景允许**直接**进入。
|
||||
@@ -169,6 +174,7 @@
|
||||
### 3.4 出口 E5 分级回退
|
||||
|
||||
- `E5a` 澄清 → `E5b` **部分答 + 引导**(「您问的 X 我可以答:…;Y 需要人工核实:…」)→ `E5c` 转人工。
|
||||
- 🆕 **`W27` 口径更正(2026-09-21)**:`FR-CS-008` 原文的「**跨集合回退(阈值 `0.65`)**」**作废** —— 实现侧从未存在该分支(`FALLBACK_COLLECTIONS` 为死代码),且跨集合余弦**分数量纲不可比**(实测 `M-1` 100% → 91.3%)。**回退不得跨集合、不得改判据**;精确性由「**实体锚点 + 证据结构**」承担,阈值只作**安全下限**。详见 `D3.9` §3.3—§3.5。
|
||||
- `E5c` 必须带**上下文摘要**(客户问了什么 / 已试过哪些检索 / 为什么不足)。现在 `_guide_to_human(reason)` 只留一个内部 `reason` 字符串,**客户看不到任何有用信息**,人工也不知情。
|
||||
|
||||
---
|
||||
@@ -317,3 +323,5 @@
|
||||
> **维护责任**:本文件为**建议件**,随上游修订同步更新。任何一项落地后,须在本表标注「已采纳 / 已否决 + 日期」,并回填 `D1.5` §7 与 `D1.6` §4.3。
|
||||
>
|
||||
> 编制:项目文档组 | 审核:合规稽核部 | 日期:2026-09-17
|
||||
>
|
||||
> **版本**:v1.2(2026-09-21)—— 同步 `D3.9`:架构图补 `L0` 表层判定层与出口 `E6`;`E5` 口径更正(跨集合回退作废)。
|
||||
|
||||
Reference in New Issue
Block a user