# A4 回复质量退化修复与契约冻结 ## 1. 结论与边界 本轮针对 A4 分层盲测暴露的事实编造、同义重复追问和风险场景未人工接管进行确定性修复。A4 原始评测只有 20/48 对,修复后没有再次调用付费模型,因此以下结果只表示规则门禁和冻结坏回复回归通过,不代表 48 条总体回复准确率已经提升。 唯一真源是 `QIWEI-skill`。房产业务目标、房源工具和生产数据没有进入通用运行时;业务目标继续通过 `businessGoal`、`stagePlaybook` 及业务知识覆盖层配置。 ## 2. A4 退化与修复 | 退化 | 修复 | | --- | --- | | 无关 citation/tool 为价格、库存、媒体或房况断言背书 | 事实按分句验证;外部事实只接受能定位到具体内容的 citation/tool,数字逐值匹配 | | “其他待核验”保护前面的确定性断言 | 不确定性只保护同一分句中的断言 | | 客户已给预算、目标学校、区域或房源,Agent 换说法再问 | 使用会话、画像字段和 alias 判断已答字段;识别无问号的“告诉我心理预算”等采集句 | | 学区、价格、房况、产权、融资、投诉、看房等风险场景继续自动推进 | Planner 标记风险类型;正文必须含已执行/立即执行的人工交接,JSON 同时要求 `requiresHuman=true` | | 首轮失败后修订仍失败但继续外发 | 最多修订一次;失败后 `review/auto/autopilot` 均保留人工草稿,发送方法入口再次 fail-closed | 人工 `manualSend` 和人工编辑后 `approveDraft` 不经过 Agent 质量门,仍遵守既有白名单、私聊和长度边界。 ## 3. 冻结质量契约 ### 3.1 字段 | 字段 | 类型 | 语义 | | --- | --- | --- | | `qualityScore` | `integer 0..100 \| null` | 确定性检查加权分;不可用或旧数据缺失为 `null`,不能把缺失解释为 `0` | | `qualityChecks` | `QualityCheck[] \| null` | 本次检查明细;旧数据缺失为 `null`,不是空结果 | | `qualityPassed` | `boolean \| null` | 仅表示 Agent 质量门结果;旧数据缺失为 `null` | | `rewriteCount` | `0 \| 1 \| null` | Agent 质量修订次数;旧数据缺失为 `null` | | `fallbackReason` | `string \| null` | 稳定流程 code;旧数据缺失为 `null` | `QualityCheck` 的核心 shape 固定为: ```json { "id": "fact_evidence", "passed": false, "weight": 14, "hard": true, "detail": "事实有可定位依据或在同一断言内明确待确认" } ``` 前端可通过 UI adapter 本地化 `id/detail`,不改变核心字段,也不能用总分抵消 `hard=true` 的失败项。 ### 3.2 fallbackReason | code | 含义 | | --- | --- | | `quality_gate_failed` | 首次确定性质量门未通过,尚未完成修订 | | `rewrite_limit_reached` | 已使用一次修订机会,仍未通过或修订执行失败 | | `requires_human` | 文本通过质量门,但风险/业务边界要求人工接管 | | `quality_unavailable` | 本次没有可用质量评估 | | `""` | 质量通过且无需人工 | | `null` | 旧数据没有该字段,不推断结果 | 失败的具体原因从 `qualityChecks`、`failedCheckIds` 或 `hardFailureIds` 读取,不再把检查 ID 拼到 `fallbackReason`。 ### 3.3 Delivery Delivery 只认真实 outbound 消息。草稿、质量通过、计划发送、人工接管和工具执行均不构成 Delivery;只有企微发送链实际创建 outbound 消息后才显示已发送。风险回复即使 `qualityPassed=true`,只要 `requiresHuman=true` 就必须停留在人工草稿。 ## 4. 确定性验收 命令: ```powershell npm run agent:quality-smoke node E:\企微技能包测试\testing\reply-quality\regression-review\a4-regression-gate.mjs --qiwei-root E:\workspace\QIWEI-skill ``` | 指标 | 结果 | | --- | ---: | | 固定低质量样本拦截 | 11/11 | | 固定合格样本误杀 | 0/11(0%) | | A4 去标识化冻结坏回复精确覆盖 | 10/10 | | 冻结坏回复直接放行 | 0 | | 风险模式 | `review/auto/autopilot` 均保留人工草稿,outbound=0 | | 合格普通回复 | `auto/autopilot` 可外发 | | 人工发送 | 不受 Agent 质量分阻断 | | 纯确认/致谢 | `no_reply_needed` | 这些是确定性门禁夹具,不是模型盲测胜率或线上客服准确率。 ## 5. 同步边界 通用能力同步到旧 VOC 时需要字段级同步: - `mcp/src/core/response-quality-contract.js` - `mcp/src/core/response-quality-planner.js` - `mcp/src/core/response-quality-verifier.js` - `mcp/src/core/agent-runtime.js` 的质量评估、一次修订和结构化返回区域 - `mcp/src/core/agent-workbench-service.js` 的 Agent 内容二次门禁及 autopilot 入口校验 - `scripts/response-quality-regression-fixtures.js` - `scripts/agent-response-quality-smoke-test.js` - `package.json` 的质量专项与语法检查入口 业务项目后续手工 merge 时保留自己的房源 Provider、业务知识、Session 预创建、消息归档和 autopilot 配置,只接入公共质量字段与发送前闸门。`ClaudeCodeSessionStore`、`sessionKey`、`rotate/resume/reset` 均不在本轮变更范围。 ## 6. 发布状态 本轮没有提交、推送、发布 npm,也没有访问或写入业务远端数据。完成旧 VOC 字段级同步和两仓完整 `release:check` 前,不进入业务副本同步。