Commit Graph
2 Commits
Author SHA1 Message Date
张胜宇 36d9ba9b9f feat(W21-D1~D4): 四项待决按建议全部落地 + 1 条金标期望登记修订
按甲方 2026-09-21「按照你建议的改」批准 `D4.8` §6 四项,全部落地:

- W21-D1 生成侧禁令:`DEFAULT_EVIDENCE_SYSTEM` 红线 ② 与
  `DEFAULT_EVIDENCE_TEMPLATE` 第 ④ 条同时写明「不要把收益/回报/涨幅/净值增长率的
  具体数字或百分比写进答复」。红线门槛代码(`ZERO_TOLERANCE_WORDS` /
  `hits_zero_tolerance` / `YIELD_METRIC_TERMS` / `drop_yield_claims`)零改动;
  实测该 `prompt_code` 从未发布,改代码默认值即刻生效、无需发布流程。
  3 条问句 × 3 次 = 9/9 走 `E4` 真实作答(修复前 0/9)。
- W21-D2 指代依据:`_answer_suitability` 在主语由形状反解(`inferred=True`)时
  开场即「您上一轮提到的是「X」,我就按它帮您核对:」。
- W21-D3 答非所问闸门:新增产品名两种写法识别 + 前缀噪声剥离
  (`_strip_product_name_lead`) + `_names_other_product`,接入 `E5b` 相关性闸门。
- W21-D4 作答语气:`PARTIAL_TEMPLATE` 改「关于这一点,公开资料里的口径是:」;
  新增 `PARTIAL_FAQ_TEMPLATE`,命中块是 FAQ 问答对时直接以答案正文开场。

判据变更(知情项):`I-01`「南方科技是什么公司?」的金标期望出口由 [E5b, E3]
补入 `E4` —— 这正是提示词红线 ②(专为「名称查不到」设计)首次真正生效,
考点两条(禁忌字面不出现 / 关键事实命中)不变,见 `D4.8` §9.3。

新发现(未擅自执行,登记待决):`docs/43-场内基金产品手册(知识库入库版).md`
从未进入 `tools/build_knowledge_chunks.py` 的 `SOURCES`(702 块里「科创债」0 处),
这是「问在库的产品却答另一只」的根本原因;`W21-D3` 只是止损。

验收:金标 M-1 46/46、M-4 46/46、M-6 5/46、M-7/M-8/M-9/M-10=0、M-2 28/31、
M-2b 15/18、M-3 4/4;全量 1994 passed / 3 skipped;ruff 零新增;真 HTTP 11 条对照见 `D4.8` §9.4。

文档:`D4.8` v1.0→v1.1(新增 §9)、`D3.7` v1.0→v1.1(I-01 注)、
`D1.6` v1.0→v1.1(新增 §10 本轮对话上下文)、`D2.1` v6.37→v6.38、
`D2.9` v1.1→v1.2、`D1.1` v1.13→v1.14。
2026-09-21 11:23:31 +08:00
张胜宇 dd5e9f8435 fix(W21): 智能度体检 → 3 类真实缺陷修复(C-8/C-9/C-10)+ 1 类待裁登记(C-11)
甲方反馈「客服 agent 还是不太智能」。本轮不新增出口、不改需求,
把"不智能"拆成可复现的实测条目:81 条真实口语问法 + 8 组多轮追问链
(真 HTTP:API → 队列 → Worker → 治理层),逐条定位根因并修复。

已修复(每条都有真机 HTML 证据,见 开发文档/D4.8 §3)

- C-8 账户盈亏问法落"误导性澄清"
  「我的基金赚了多少钱」→ E1 澄清,三个候选(万份收益/起投金额/收益率差别)
  全是公开知识,而客户问的是自己账户的盈亏金额。
  修法:P1_PATTERNS 补「第一人称 + 盈亏动词 + 金额疑问词」骨架,
  金额疑问词是必要条件 —— 「我买的基金亏了怎么办」照旧走知识检索(库里有解)。

- C-9 多轮指代断链,把"已经说过的"又问一遍
  「我想买个债基」→「它适合我吗」落 E2d「请告诉我具体的基金名称或代码」,
  而客户刚刚才被告知是那只产品;「赎回费怎么算」→「持有 8 个月呢」同因。
  两个根因:① _topic_of 只在答复前 4 行的固定形状里取主语,FAQ 型答复
  (首行「问:…」)反解为空;② 意图分类把短追问标成 suitability_check,
  绕开了知识出口里已做好的追问继承逻辑。
  修法:_answer_suitability 建成四级降级链(严格主语 → 形状反解
  _product_name_in_history → 有上文交回检索 → 首轮才澄清)+ 纯参数追问前置闸门。
  安全边界三条不放宽:不给访客"能不能买"结论;推测出的名字查不到风险等级时
  回落检索而非回"给不出结论";首轮指代保留澄清(金标 E-01 口径)。

- C-10 「你们投诉电话是多少」被强制转人工
  根因:P2_WRITE_DISPUTE_KEYWORDS 里的裸词「投诉」子串命中,把"问投诉渠道"
  和"提交投诉"撞在同一判据上;而答案就在库里(POL-SPM-036-01 / FAQ-0054)。
  修法:新增 _is_p2_contact_inquiry() 作为第二类 P2 豁免(渠道词 + 疑问词,
  且不带明确投诉意图)。「我要投诉,让你们经理来找我」照旧建单。

定位但未修(需甲方裁定合规口径)

- C-11 E4 证据约束生成的答复被"收益数值"闸门整条拦回 E5b
  「南方现金添利怎么样」(top1 1.0000) / 「买基金要手续费吗」(0.7328) /
  「债基和货基哪个收益高」(0.5457) 三条同因:生成稿出现 YIELD_METRIC_TERMS
  → hits_zero_tolerance → _exit_partial → E5b 兜底。
  试过"先净化再判合规",实测更差(drop_yield_claims 整行丢弃 + 生成稿常是
  单行长段 ⇒ 整条被删空),已回退并把原因写进代码注释留痕。
  建议方案:改 E4 提示词禁止输出收益数值(源头消除,不动红线代码)。

待判物

- _chunks_report.txt 判定可删:无代码引用 / 内容可从 knowledge/_chunks.jsonl
  复算 / 从未入库 / 统计口径已写进 D2.4 §6 与 D2.8 §2。已删 + 加 .gitignore。

验收

- 金标 46 条:M-1 46/46、M-4 46/46、M-6 5/46(白名单 F-05/G-01/G-03/G-04/G-05,
  零越界)、M-7/M-8/M-9/M-10 = 0、M-2 28/31、M-2b 15/18、M-3 4/4
  —— 与 W20 基线逐项一致,零回归。
- 全量回归 1985 passed / 3 skipped(W20 基线 1969 passed / 3 skipped)。
- 新增守卫单测 16 条(含 C-8 两条 / C-9 四条 / C-10 两条)。
- ruff 仅剩 4 条既有告警,未顺手改,避免混入无关 diff。

文档

- 新增 开发文档/D4.8-客服Agent智能度体检与整改报告-W21-2026-09-21.md
- 客服agent/D2.1 升 v6.37;开发文档/D1.1 升 v1.13;D1.6 增 §9 上下文提取
2026-09-21 10:55:16 +08:00