一、客服 Agent 智能增强(正面回应"不智能、动不动就转人工")
- 决策链由 2 个出口扩到 5 个:E1 澄清 / E2 计算型 / E3 知识直返 / E4 证据约束生成 / E5 分级回退
- 转人工从"默认动作"降为最后一档 E5c,只保留 4 类白名单:
P0 反诈 / P1 账户与个人数据 / P2 写操作与争议 / 用户明确要求人工
- 46 条金标实测(修复前 → 修复后):
转人工率 43.5% → 10.9%;出口准确率 45.7% → 100%;事实正确率 69.6% → 100%
禁忌违反 1 → 0;档位越权 / 无出处数字 / 误拒 四项零容忍全 0
- 安全不变量 INV-1~INV-5;零容忍规则未删,改的是挂载点
(输出侧字面黑名单 → 检索层档位隔离 + 判定层合规词表 + 输出守护)
二、知识库:档位单点化与物理隔离
- 新增 app/core/knowledge_tier.py 作为档位规则唯一落点(G-03),
knowledge_contracts.py 原定义块改为显式再导出(X as X,非副本)
- 档位过滤由 bool 默认值(fail-open)改为 tiers 必填集合(缺参即 TypeError)
- Milvus 侧四集合按 visibility 分区键物理隔离;双 schema 收敛为一套
- 新增 app/core/actor.py:访客三元组与匿名判定的唯一构造/判定点(G-01/G-01b)
- 新增 app/core/fund_fee_rules.py:费率计算纯函数
三、前端入参边界对齐(本轮 W11 新修,4 处"校验宽于存储")
- message 加 max_length=8000(与浮窗 widget.js 的 maxlength 一致)
- session_id 加 1—64;idempotency_key 上限 128 → 64(对齐列宽 String(64))
- feedback_type 加 max_length=32(对齐列宽 String(32))
- 8 条路径参数补 min_length=1 + max_length=64 + 字符集正则
({session_id} / {run_id} / {handover_id})
- 改前超限值会落到 MySQL 才失败(500);改后一律 422 AGENT_INPUT_INVALID + 字段级定位
- 新增 tests/unit/api/test_frontend_boundaries.py(33 例),含"端点表 ↔ OpenAPI 全量对照"
四、投顾模块整体清除(D4.4 / D4.5)
- 删除投顾相关 controller / schema / model / repository / service 及门户页面
- tools/portal_api_check.py 同步作废 AD003/AD005/AD011/A047 四条用例与 advisor_t 登录
(端点与账号均已不存在,此前稳定报 3 条假红)
五、验证(提交前实测)
- pytest -q:1856 passed / 2 skipped / 0 failed
- ruff check app tools tests:19(= 基线);mypy app:2(= 基线)
- 前端接口契约体检 portal_api_check.py:38 项,通过 34,失败 0,跳过 4
- 全链路冒烟 e2e_smoke_test.py --read-only:31/31
- HTTP 全链路探针 http_probe.py:11/11 succeeded
- 跨文档一致性 _consistency.py:GATE PASS
- 真机边界复验 12 条:12/12 符合预期
六、纪律与文档
- 可改文件白名单 A-09(docs/46)与底座会签申请单 A-10(docs/47,组 1—组 4 全部受理)
- 零 DDL:未新增/修改任何表结构,89 张业务表与基线一致
- 证据留痕:docs/evidence/**(含 46 条金标 score、快照、清除与重建记录)
- 未提交(刻意排除,见提交说明):仓库内 客服agent/ 与 开发文档/ 是 2026-09-16 前的
过期副本(Todolist 440 行 vs 权威 D2.1 1167 行),权威正本在仓库外;
_chunks_report.txt 是 tools/build_knowledge_chunks.py 生成的本地产物
112 lines
5.5 KiB
JSON
112 lines
5.5 KiB
JSON
{
|
||
"evidence_id": "20260919-t4c-f3-subject-gate",
|
||
"generated_at": "2026-09-19T15:32:00.307942+08:00",
|
||
"session": "D1.6 §4.28 / D2.1 v6.15",
|
||
"what": "F-3「E3/E4 主体相关性闸门」落地后的真实复验:问句点名受控主题词、而命中的块一块都没提到它时,不再直返原文 / 不再合并生成,改为 E5b 如实说明(不建单、零模型调用)。",
|
||
"how": "进程内真实链路(get_agent_factory → resolve_config → classify_intent → handle;真实 Milvus 三集合 + 嵌入端点 + DeepSeek);用例来自 D3.7 §2。",
|
||
"code_points": [
|
||
"app/service/agent/implementations/customer_service.py: EVIDENCE_SUBJECT_TERMS(27 个受控主题词)",
|
||
"同文件 _subject_terms_in / _subject_covered_by / _exit_subject_miss(SUBJECT_MISS_TEMPLATE,不建单)",
|
||
"同文件 _answer_from_knowledge:闸门插在 _evidence_pack 与置信判定之前"
|
||
],
|
||
"verification": {
|
||
"B-04": {
|
||
"message": "南方基金投顾服务起点是多少?",
|
||
"before": {
|
||
"exits": [
|
||
"E3"
|
||
],
|
||
"text": "### 1.1 南方现金添利货币市场基金〔示例〕\n\n| 项目 | 详情 |\n|------|------|\n| 产品代码 | 900501(示例代码) |\n| 基金类型 | 货币市场基金 |\n| 风险等级 | R1(低风险) |\n| 成立日期 | 2016-04-18 |\n| 起投金额 | 1 元 |\n| 基金经理 | 沈明(虚构) |\n| 基金规模 | 约 1,280 亿元(截至 2026-06"
|
||
},
|
||
"after": {
|
||
"exits": [
|
||
"E5b-subject"
|
||
],
|
||
"model_calls": 0,
|
||
"text": "关于「投顾服务」这一点,我在您当前可见的资料里没有找到对应内容,也不想用相近的条款替您作答。\n您可以换个说法再问我一次;如果这项内容需要登录后才能查询,登录后我再为您核对,也可以拨打客服热线 400-889-8899(每日 7:00—22:00)咨询。"
|
||
},
|
||
"verdict": "修复前 E4 按同章节合并接管,答成某只混合基金的整段产品参数;修复后闸门拦下 → E5b 引导登录,模型零调用,未泄露 registered 数值。"
|
||
},
|
||
"regressions": {
|
||
"B-01": {
|
||
"expected_exits": [
|
||
"E3",
|
||
"E4"
|
||
],
|
||
"after_exits": [
|
||
"E3"
|
||
],
|
||
"after_text": "南方现金添利货币市场基金〔示例〕:起投金额 1 元"
|
||
},
|
||
"B-02": {
|
||
"expected_exits": [
|
||
"E3",
|
||
"E4"
|
||
],
|
||
"after_exits": [
|
||
"E5b"
|
||
],
|
||
"after_text": "这个问题我暂时只能提供以下公开资料供您参考:\n\n### 6.1 公募基金费率总表\n\n| 费用类型 | 货币基金 | 纯债基金 | 混合基金 | 股票基金 | QDII 基金 |\n|----------|----------|----------|----------|----------|----------|\n| 申购费率(原费率) | 0 | 0.80% | 1.50% | 1.50% | 1"
|
||
},
|
||
"C-01": {
|
||
"expected_exits": [
|
||
"E4"
|
||
],
|
||
"after_exits": [
|
||
"E4"
|
||
],
|
||
"after_text": "南方基金高净值客户按资产层级分为四档,各层级权益如下:\n\n【金卡客户(50万+)】\n金融服务:专属客户经理服务;每月1次资产配置报告;优先参与新发基金认购;基金转换费优惠(同一管理人旗下基金转换仅补差);「南方基金·智能服务系统」客户端资产视图。\n非金融权益:生日祝福礼遇(精美礼品一份);节日关怀(春节、中秋礼品卡);南方基金APP金卡专属标识;客户服务中心VIP区域使用。\n\n【白金客户(200万"
|
||
},
|
||
"C-02": {
|
||
"expected_exits": [
|
||
"E4"
|
||
],
|
||
"after_exits": [
|
||
"E4"
|
||
],
|
||
"after_text": "升级规则为:连续 3 个月日均资产达到上一层级标准,自动升级。各层级可投资资产门槛为:金卡(财富客户)50 万—200 万元;白金(高端财富客户)200 万—600 万元;钻石(超高净值客户)600 万—1,000 万元;尊享(尊享客户)1,000 万元以上。"
|
||
},
|
||
"C-04": {
|
||
"expected_exits": [
|
||
"E4"
|
||
],
|
||
"after_exits": [
|
||
"E4"
|
||
],
|
||
"after_text": "根据适当性匹配规则:C1 保守型客户可购买 R1—R2,不得推荐 R3 及以上;C5 激进型客户可购买 R1—R5。"
|
||
},
|
||
"D-01": {
|
||
"expected_exits": [
|
||
"E2"
|
||
],
|
||
"after_exits": [
|
||
"E2a"
|
||
],
|
||
"after_text": "股票基金:公开申购费率区间为 0.15%—1.5%。\n申购费算法:申购费 = 申购金额 × 申购费率(各销售渠道的费率优惠不同,最终以产品说明书与销售机构公示为准)。\n按您提到的 100,000 元估算,申购费大致在 150 元—1,500 元之间。"
|
||
},
|
||
"D-02": {
|
||
"expected_exits": [
|
||
"E2"
|
||
],
|
||
"after_exits": [
|
||
"E2a"
|
||
],
|
||
"after_text": "混合基金:按您提到的持有 20 天,对应档位「7—30 天」,赎回费率为 0.75%。\n\n公开档位如下:\n- 持有<7 天:1.5%\n- 持有 7—30 天:0.75%\n- 持有 30—365 天:0.5%\n- 持有 1—2 年:0.25%\n- 持有>2 年:0%\n赎回费算法:赎回费 = 赎回金额 × 赎回费率。"
|
||
},
|
||
"D-05": {
|
||
"expected_exits": [
|
||
"E3"
|
||
],
|
||
"after_exits": [
|
||
"E4"
|
||
],
|
||
"after_text": "根据【证据】,南方基金客服热线为 400-889-8899,服务时间为每日 7:00—22:00,您可在该时段内拨打联系。"
|
||
}
|
||
},
|
||
"gate_not_enabled_cases": [
|
||
"C-02「资产到多少能升级?」:主题词为空 → 闸门不启用,行为与改造前一致(单测钉死)",
|
||
"C-04「C1 客户能买什么?C5 呢?」:主题词为空 → 闸门不启用(单测钉死)"
|
||
]
|
||
},
|
||
"unit_tests": "tests/unit/service/test_customer_service_agent.py 75 passed(F-3 新增 4 条)"
|
||
} |