保时捷金融问答机器人 · 需求文档与评估计划

保时捷金融问答机器人 · 需求文档与评估计划

微信小程序问答服务 · 类 Coze 平台(titan)搭建 · 当前版本 V1.0(QA 数据 2026-07)
当前版本 V1.0 75 条 QA 点选精确匹配 知识库映射 答案原样输出 · 不润色

一、需求概述

场景:为保时捷融资租赁项目搭建微信小程序问答机器人,用户在小程序内咨询还款、变更银行卡、车辆登记证、电子发票、结清寄送、提前结清、忠诚客户权益、车辆返还等业务问题。

问答数据:QA 问答对(当前版本 75 条,8 个业务场景),由业务方提供 Excel 维护。

提问方式:① 列表点选为主(页面预置问题,用户点选)② 自由输入兜底(用户输入文字)

输出要求

  • 只输出匹配到的 answer 原文,不使用大模型润色/改写
  • 无匹配时返回固定话术:「抱歉,暂时没有找到您问题的答案,请咨询客服」
  • 未匹配需显式返回 __NO_MATCH__ 标识,便于节点路由

承载平台:公司自研类 Coze 平台(titan),暂不脱离平台实现(刚接手求稳)。

方案一句话:这是一个「检索/匹配」机器人,不是「生成」机器人——节点链路只负责把最匹配的那条答案原样捞出来,大模型全程不参与,从机制上保证答案与 QA 原文逐字一致。

二、方案总览:双路径架构

机器人按提问方式分两条路径处理,整体工作流程如下:

微信小程序问答机器人 — 双路径工作流程用户进入小程序问答页提问方式?列表点选 · 主路径自由输入 · 兜底路径携带 question_id条件分支:question_id 非空 → 第一段代码节点第一段代码节点:字典查表 {question_id → answer}命中?否 · 防御输出 answer 原文(不润色)输出固定话术携带 free_text知识库节点:语义检索 top1(只匹配 Q 字段,A 不参与匹配)→ 输出 Array[Object] 检索结果数组相似度 ≥ 阈值?(取 top1 条目 knowMeta.score,阈值 0.7 或 0.8 实测二选一)第二段代码节点:取最高分条目→ 解析 content → answer 原文输出 answer 原文(不润色)输出固定话术「抱歉,暂时没有找到您问题的答案,请咨询客服」

2.1 两条路径

路径触发方式实现机制精确度
路径一:点选(主)用户点选问题卡片第一段代码节点字典查表 {question_id → answer}100% 精确
路径二:自由输入(兜底)用户输入文字知识库语义检索 top1 + 相似度阈值 → 第二段代码节点映射答案阈值内可靠

2.2 两段代码的分工

  • 第一段代码节点(点选路径):维护 {question_id → answer} 字典,命中即输出 answer 原文;未命中(防御)输出固定话术
  • 第二段代码节点(自由输入路径):接收知识库检索结果数组(Array[Object]),取相似度最高条目(top1)并按阈值过滤,解析命中条目 content 输出 answer 原文;无匹配输出固定话术
  • 两段代码由同一份 qa_data.json 自动生成,字典同源,保证两条路径的答案完全一致

三、全流程交互时序

三种典型请求(点选 / 自由输入命中 / 未命中)的完整交互过程:

微信小程序问答机器人 — 交互时序图用户用户微信小程序微信小程序类Coze平台(titan)类Coze平台(titan)知识库知识库代码节点代码节点路径一:列表点选(主路径,100% 精确)点选问题卡片POST 问答接口 { question_id: "Q03" }第一段代码节点(字典查表)answer 原文{ answer: "……原文……" }展示答案路径二:自由输入(兜底路径,语义检索 + 阈值)输入文字「怎么申请退款?」POST 问答接口 { free_text: "怎么申请退款?" }语义检索(只匹配 Q 字段,top1)Array[Object]: [{ content: "{\"问题\":\"如何申请退款\"}", knowMeta: { score: 0.82 } }]第二段代码节点(取 top1 → 阈值过滤 → 解析 content){ answer: "……原文……" } (命中)展示答案路径三:未命中 → 固定话术输入文字「今天天气如何?」POST 问答接口 { free_text: "今天天气如何?" }语义检索Array[Object]: [{ content: "...", knowMeta: { score: 0.41 } }] (低于阈值)第二段代码节点(score < 阈值 → 固定话术){ answer: "抱歉,暂时没有找到您问题的答案,请咨询客服" }展示固定话术

四、平台能力确认(2026-08-04 与业务方确认 4 点)

#确认项结论对方案的影响
1知识库匹配相似度在哪儿设置?titan 平台知识库节点的设置中配置,最小以 0.1 为单位增加阈值只能设 0.7 / 0.8 等 0.1 步进值;原「0.75 起步」不可配置,改为 0.7 或 0.8 实测二选一
2机器人被调用的并发量?按机器人设置的并发量走——配置的并发几,瞬时能起的会话就是几并发上限由平台机器人配置决定;上线前按预估峰值设置并发,注意平台配额
3上线后每次请求输入输出导出?已有功能:运营管理-执行日志;日志记录时间为 T+1QA 扩写迭代依赖此日志(未命中 query 采集);注意 T+1 延迟,复盘按天粒度
4模型名称?待确认:需向杨林凤询问对应市场上的模型名称和版本,交由商务过审后,再答复保时捷本方案默认不使用大模型节点(纯规则匹配);若平台强制要求挂载模型节点,需等模型名称确认后配置「透传」

五、节点配置步骤

5.1 节点链路

开始节点(接收 user_input)
  └─ 第一段代码节点:精确匹配(归一化查表)
       ├─ 命中 → 输出 answer 原文
       └─ 未命中(__NO_MATCH__)→ 知识库节点:语义检索 top1(只匹配 Q)
            ├─ 相似度 ≥ 阈值 → 第二段代码节点:取最高分条目 + 解析 content → 输出 answer 原文
            └─ 相似度 < 阈值 → 输出固定话术

5.2 配置步骤(照做)

  1. 开始节点:接收小程序传入的 user_input(点选时 = question_id,自由输入时 = 文本)
  2. 第一段代码节点:粘贴「八、两段匹配代码」的第一段;输入 user_input,输出 answer / __NO_MATCH__
  3. 条件分支:判断第一段输出是否为 __NO_MATCH__;不是则直接返回 answer
  4. 知识库节点:配置 QA 知识库(仅索引 Q 字段),语义检索 top1,阈值按「七」节设置;输出为检索结果数组 Array[Object](每条含 knowMeta.score 相似度、content JSON 字符串)
  5. 第二段代码节点:粘贴第二段;输入为知识库节点输出的检索结果数组(Array[Object]),代码内部取最高分条目 + 解析 content 输出答案原文 / __NO_MATCH__
  6. 固定话术节点:输出「抱歉,暂时没有找到您问题的答案,请咨询客服」
  7. 发布:按平台要求配置机器人并发量(见 4 点确认第 2 条)

六、知识库设计

  • 匹配 Q 不匹配 A:检索只对问题文本做语义匹配,答案作为「负载」随命中条目输出,不参与匹配(防止「客服/电话」类词撞车导致答非所问)
  • 不切片:一条 QA = 一个知识库条目,答案保持完整(切片只适用于长文档,QA 答案是一段完整的话)
  • 标签筛选:不做:当前量级(75 条)直接全量 top1 匹配即可,标签是纯维护负担;条目数增长到数百条再考虑
  • 条目结构{ Q: 标准问题文本, A: 答案原文 },向量化仅对 Q 字段

七、阈值设置

  • 知识库节点阈值 只能设 0.1 步进值:0.7 / 0.8 二选一(0.75 无法设置)
  • 用「② 扩写测试集」分别扫 0.7 和 0.8,选误命中为 0 且命中率最高的
  • 原则:宁可答不上来(漏命中)也不能答错(误命中)——错误答案比固定话术伤害大

7.2 固定话术

「抱歉,暂时没有找到您问题的答案,请咨询客服」(纯文本,不转人工、不引导重问)

八、两段匹配代码(当前版本 V1.0)

两段代码由 qa_data.json(当前版本 QA)自动生成,字典同源,保证点选答案与知识库答案完全一致。

第一段:点选精确匹配(qa_match_part1.py)— 输入 user_input,输出 answer / __NO_MATCH__
# -*- coding: utf-8 -*-
# ⚠️ 本文件由 generate_code.py 从 qa_data.json 自动生成,请勿手改。
# 更新 QA 后:替换 qa_data.json 重新运行生成脚本(或联系 Hermes 处理)。

"""
微信小程序问答机器人 · 第一段:点选精确匹配
================================================
用途:用户输入/点选的问题文本,先在预置问题里精确匹配。
  命中   -> 返回对应答案原文(原样输出,不做任何润色)
  未命中 -> 返回 __NO_MATCH__ 标识,由后续知识库节点接管

平台接入:
  1. 输入变量: user_input (str)
  2. 输出变量: answer (str)   # 命中=答案原文 / 未命中="__NO_MATCH__"
"""
import unicodedata

# ================== QA 字典(自动生成) ==================
QA_MAP = {
    "有哪些还款方式": "我们为您提供了灵活的还款方式,您可通过自动扣款或手动汇款方式进行还款。",
    "自动扣款支持哪些银行": "我们的自动扣款支持多家主流银行的一类借记卡:\n•工商银行、招商银行 (适用于金额<100万的月还款、尾款、提前结清款、罚息)\n•交通银行、中信银行、平安银行、民生银行、广发银行、上海银行 (适用于金额<5万的月还款、罚息)",
    "最晚可以几点还款": "还款日当天我们将进行多轮款项处理:\n•如您通过扣款还款,我们将分别于9:30、15:30进行扣款处理,我们推荐您在还款日前一天将资金存入您的扣款银行卡/账户。如当天还款失败,我们将于次日再次尝试扣款。\n•如您通过汇款还款,我们将分别是9:00、15:00和20:30进行汇款款项处理,我们推荐您在还款日前一天操作汇款。",
    "可以通过汇款还款吗": "您可以通过手动汇款方式进行还款。我们为您配置了专属汇款账户,您汇款时无需备注,足额汇款即可自动入账。专属汇款账户信息可通过本小程序“服务”中的“还款账户查询”查看。",
    "我会收到提醒短信吗": "每期还款前我们都会提醒您还款日和还款金额,还款后我们也会通知您还款结果,方便您及时了解还款状态。另外,您也可通过本小程序中的“合同”-“查看详情”-“账单详情”查看。",
    "收到了余额不足还款失败短信": "请您尽快将足额资金存入您的扣款银行卡,我们将于15:30或次日9:30再次扣款。",
    "扣款银行卡发生限额、冻结、锁定": "考虑到银行卡状态恢复不便,我们推荐您先通过汇款方式完成当月还款,再联系银行恢复卡片状态。",
    "周末和节假日可以还款吗": "我们在周末和法定节假日均支持自动扣款和足额汇款的自动入账。",
    "如何查看还款计划": "您可通过本小程序“合同”中的“账单详情”查看您的还款计划,包括每期还款日,还款金额和还款状态等。",
    "如何查看汇款结余": "您可以在汇款到账提醒短信里找到结余金额。您也可以通过本小程序“服务”中的“还款账户查询”查看。",
    "个人客户,可以选择哪些银行卡": "我们支持多家主流银行一类借记卡变更:\n•工商银行、招商银行 (适用于金额<100万的月还款、尾款、提前结清款、罚息)\n•交通银行、中信银行、平安银行、民生银行、广发银行、上海银行 (适用于金额<5万的月还款、罚息)",
    "企业客户,可以选择哪些银行账户": "您可以选择企业工行账户进行变更(适用于金额<100万的月还款、尾款、提前结清款、罚息)。如企业没有工行账户,担保人可以操作银行卡变更。",
    "能自助办理吗": "合同激活后,您可通过本小程序 “服务”中的“变更银行卡”进行变更操作。",
    "承租人操作变更注意事项": "如是个人账户,请持卡人通过本小程序进行变更操作。如是企业工行账户,请先在网银中完成扣款绑定,再通过小程序进行变更操作。",
    "担保人操作变更注意事项": "请担保人通过本小程序进行变更操作。",
    "扣款过程变更了银行卡": "如完成变更时仍有待支付的款项且扣款尚未完成,本次仍旧通过变更前的银行卡进行扣款。",
    "如何查看变更后的银行卡信息": "您可以通过本小程序“服务”中的“还款账户查询”查看。",
    "银行卡挂失补办了,需要变更吗": "为保证扣款顺利,请您在补办后通过本小程序 “服务”中的“变更银行卡”进行变更操作。",
    "旧的银行卡如何解绑": "变更成功后,我们会协助您发起旧银行卡的解绑。如果是招行个人卡,工行企业账户,请您通过手机银行app或企业网银进行解绑。",
    "能再次发起变更吗": "变更成功后,您可以再次发起变更。为保证扣款顺利,如仍有待支付的款项且扣款尚未完成,请在本次扣款结束后再发起变更。",
    "我的车辆登记证保存在哪里": "办理完抵押登记后,您的机动车登记证由保时捷融资租赁公司保管。这期间,如您需要临时借阅,可向您的购车保时捷中心提出申请。",
    "哪些情况可以申请原件借阅": "在不涉及车辆抵押状态变更的情况下,您可借阅机动车登记证用于以下业务办理:\n•\t变更车身颜色(非同色系)\n•\t变更为市区号牌\n•\t变更发动机/车身/车架",
    "需要提供哪些材料申请原件借阅": "您无需向保时捷融资租赁提供证件或填写相关材料,保时捷中心会协助您提交借阅申请。",
    "最长能借阅多久": "您可以借阅的期限最长为30个自然日,如您因尚未完成相关事项办理需要延期,请向您的购车保时捷中心提出续借申请。",
    "是否需要支付费用": "您无需向保时捷融资租赁支付相关费用,机动车登记证借阅事宜由您的购车保时捷中心协助办理。",
    "可以委托其他人办理吗": "为保障您的财产安全,我们仅接受您本人向保时捷中心提出的借阅申请:\n•\t企业客户:由企业法定代表人提出申请\n•\t个人客户:由承租人提出申请",
    "借阅的原件,寄到哪里": "我们会将登记证寄送至您的购车保时捷中心,保时捷中心收到后会协助您办理相应手续。",
    "使用完毕后如何归还": "登记证使用完毕后,可直接归还至您的保时捷中心,保时捷中心会重新邮寄给保时捷融资租赁保管。",
    "扫描件自助下载": "为保障您的财产安全,您本人可通过本小程序“服务”中的“车辆登记证”查看和下载:\n•企业客户:可企业法人查看和下载\n•\t个人客户:可承租人查看和下载",
    "扫描件无法查看": "如您的车辆登记证还未寄给保时捷融资租赁有限公司归档,无法通过本小程序查看,请您及时配合完成归档。",
    "哪些费用可以开票": "目前支持开具电子发票的项目包括:\n•\t利息\n•\t违约金\n•\t提前结清手续费\n我们会为您开具增值税(普通)电子发票",
    "会在什么时候开具": "电子发票会在每月中旬及月底进行开具。若您的还款日未赶上当月发票开具批次,将自动纳入下一批次处理。如您有加急需求,请联系保时捷融资租赁客户中心,我们预计会在5个工作日内为您开具出相应发票。",
    "利息发票为什么来自两方": "您的利息发票会由我们和联合出租方上海畅途融资租赁有限公司分别开具,发票合计金额等于实际支付利息,均是有效票据。保时捷融资租赁会开具99%利息金额发票,剩余1%利息由上海畅途融资租赁开具。",
    "企业客户,能自助下载吗": "保时捷融资租赁开具的发票可通过本小程序“服务”中的“电子发票”查看和下载,我们也会将通过短信发送给您。联合出租方上海畅途融资租赁开具的发票会通过邮件发送给您。",
    "个人客户,能自助下载码": "保时捷融资租赁开具的发票可通过本小程序“服务”中的“电子发票”查看和下载。联合出租方上海畅途融资租赁开具的发票,您可联系保时捷融资租赁客户中心申请(400-820-5911,按提示选择“3”)",
    "发票信息有误怎么办": "如发票抬头、税号等信息有误,您可联系保时捷融资租赁客户中心400-820-5911,按提示选择“3”提交更正申请,我们将尽快为您处理。",
    "可以补开吗": "对于过往已支付但未开具发票的款项,您可联系保时捷融资租赁客户中心00-820-5911,按提示选择“3”提交补开申请,我们将在核实后为您尽快补开。",
    "小程序上能批量下载吗": "您可勾选单条、多条、点击“全选”,或通过右上角“筛选”选择指定年月的发票。点击“票据接收”,核对或编辑邮箱地址后,电子发票将发送至该邮箱。",
    "企业更名了,如何变更开票信息": "您可联系保时捷融资租赁客户中心400-820-5911,按提示选择“3”提交更名申请。更名成功后,会按照新的名称为您开具发票。",
    "企业更名了,已开具的发票能重开吗": "您可联系保时捷融资租赁客户中心400-820-5911,按提示选择“3”提交补开申请,我们将协助您进行处理。",
    "结清后需要做什么": "我们会协助您办理解除抵押,包括:\n1. 准备并寄出结清资料\n2. 联系您预约办理时间\n3. 协助您办理解除抵押\n4. 归还车辆登记证",
    "哪些材料会寄出": "寄出的结清材料包括您的车辆登记证,结清证明,以及其他车管所要求的办理解除抵押所需材料。",
    "材料多久会寄出": "合同结清后,我们将在7个工作日内向保时捷融资租赁指定服务商寄出结清资料。",
    "材料寄出能加急吗": "如您有加急需求,请在工作时间联系保时捷融资租赁客户中心400-820-5911,按提示选择“3”,我们将在合同结清后5个工作日内向保时捷融资租赁指定服务商寄出结清资料。",
    "多久联系我办理解除抵押": "保时捷融资租赁指定服务商收到资料后,预计三个工作日内和您联系。",
    "材料能直接寄给我吗": "目前大多数地区车管所不接受个人办理解除抵押业务。为了避免您白跑一趟,我们会将材料寄给保时捷融资租赁指定服务商,协助您办理解除抵押。",
    "办理解除抵押,需要我准备什么": "如您是个人客户,需提供身份证。如您是企业客户,需提供营业执照副本原件。",
    "办理解除抵押,需要我到场吗": "您可以和保时捷融资租赁指定服务商的员工共同前往办理。如时间不便,您也可以委托给保时捷中心或指定服务商的员工完成办理。",
    "车辆登记证如何给到我": "如您是共同前往办理的,机动车登记证在解除抵押完成后直接归还给您。如您是委托办理的,会在解除抵押完成后由保时捷融资租赁指定服务商通过邮寄方式归还。",
    "哪些情况无法申请提前结清": "租金还款日当天,还款期数未满1期,合同当前存在逾期或合同已违约,均无法申请提前结清。",
    "如何申请提前结清": "您首期租金成功还款后,且还款状态正常,可通过以下任一方式申请:\n•\t通过本小程序“服务”中的“提前结清”自助提交申请\n•\t联系购车保时捷中心工作人员协助提交申请\n•\t联系保时捷融资租赁客户中心协助提交申请",
    "收提前结清手续费吗": "需要您支付提前结清手续费,收取标准为:\n•\t如已支付租金未满12期,手续费为剩余未付本金的6%\n•\t如已支付租金满12期或以上,手续费为剩余未付本金的3%",
    "如何还提前结清款项": "若您绑定的扣款银行卡为:\n•\t工商银行、招商银行:如通过扣款还款。请提前在卡内预留足额资金,还款日当天将分别于9:30、15:30进行扣款处理;如通过汇款还款,请勿在卡内预留足额资金,并于当天20:00前还款至专属汇款账户\n•\t交通银行、中信银行、平安银行、民生银行、广发银行、上海银行卡:请于还款日当天20:00前还款至专属汇款账户。",
    "可以试算提前结清金额吗": "如首期租金已成功还款,且合同状态正常,您可通过本小程序“服务”中的“提前结清”试算金额。",
    "节假日可以申请吗": "周末和节假日,您可通过本小程序自助申请,或联系保时捷中心工作人员协助提交申请。工作日9:00至18:00,保时捷融资租赁客户中心可协助您提交申请。",
    "租金日可以申请吗": "租金日当天无法为您办理提前结清。",
    "当天最晚几点还款": "还款日当天我们将进行多轮款项处理:\n•\t如您通过扣款还款,请最晚于当天15:30前将金额存入扣款银行卡\n•\t如您通过汇款还款,请最晚于当天20:00前还款至专属汇款账户",
    "当天未还款,怎么办": "若当天未完成还款,提前结清申请将自动失效。您可重新提交申请,或继续按照合同原还款计划还款。",
    "只能承租人提交申请吗": "承租人和担保人均可提交申请。",
    "忠诚客户有哪些礼遇": "如您再次选择保时捷融资租赁方案,可享受全系车型额外1%的利率优惠。原保时捷融资租赁合同尚未结清,还可享受原合同提前结清费用减免、至高5000元还车账单减免优惠。礼遇详情可在本小程序的“首页”和“服务”中的“忠诚客户”查看。",
    "之前选的金融方案,也能享受吗": "如您是保时捷金融客户,在原业务尚未结清或结清时间不超过3年时,通过保时捷融资租赁方案重购,也可享受全系车型额外1%的利率优惠。",
    "保时捷金融客户介绍": "是指您曾通过保时捷金融服务提供方提供的金融方案购买保时捷 (保时捷金融服务提供方包括:中国银行、中信银行、平安银行、中国农业银行、大众汽车金融(中国)有限公司、德国大众汽车融资租赁(天津)有限公司)。",
    "如何查询我的客户身份": "您可以在本小程序“服务”中的“客户权益”通过车架号或证件号码进行查询。",
    "我有购车意向,如何提交": "保时捷融资租赁客户可通过本小程序“服务”中的“客户权益”提交期末购车意向。收到您的意向申请后,我们会通知保时捷中心联系您预约到店试驾。",
    "什么情况可以返还车辆": "如您选择的是保时捷融资租赁无忧先享产品,合同到期时可享受多种选择权,包括车辆购买、车辆返还、车辆置换。",
    "车辆返还步骤是什么": "车辆返还涉及如下步骤:\n1. 合同到期日10个工作日前,预约到店检测\n2. 合同到期日7个工作日前,完成车辆检测。如符合还车标准,将车辆进行归还\n3. 合同到期后30个工作日内,办理车辆解除抵押和车辆过户",
    "如何预约到店检测": "您可在本小程序“服务”中的“车辆返还”完成预约。预约成功后,保时捷融资租赁客户中心将与您取得联系,安排检测与还车事宜。您也可直接拨打保时捷融资租赁客服热线进行预约。",
    "预约后能改期吗": "您可在预约日期的前一天在本小程序“服务”中的“车辆返还”操作取消或改期。如您未及时取消或改期,会视为一次爽约,两次爽约后将失去还车资格,还请您提前操作。",
    "到店时需携带什么材料": "还请您一并携带好车辆相关材料,包括2把钥匙、车辆行驶证、车主身份证/营业执照原件、公章(仅企业客户)、进口单证等材料。",
    "哪些情况无法返还车辆": "需要至少满足以下情况可在期末返还车辆:\n1. 车辆无重大事故(结构性损伤)、水淹、火烧等情况,并在保时捷授权中心保养\n2. 当前还款不逾期\n3. 合同到期日7个工作日前经检测符合还车车况标准,归还车辆\n具体您可在本小程序“服务”-“车辆返还”-“还车指引”中的“还车标准”查看。",
    "对车况有什么要求": "还车车况需至少满足以下情况:\n1.车身无结构性损伤、车身外观及油漆无明显损伤、内饰无明显损坏痕迹\n2.电气可正常使用、车轮及轮胎无明显损伤、底盘和发动机无异常\n3.电池可正常充放电\n4. 车辆行驶里程不超过2万公里/年\n具体您可在本小程序“服务”-“车辆返还”-“还车指引”中的“还车标准”查看。",
    "检测结果我不满意怎么办": "车辆检测是由保时捷授权经销商或保时捷融资租赁授权的第三方检测机构完成,其检测结果专业且独立。如您对检测结果有异议,我们可安排第二次检测,这次检测需要您支付相关费用。",
    "还车账单包括哪些款项": "如车辆不符合还车车况要求,您可通过支付车辆复原维修费和超额里程费的方式继续归还车辆。您可在本小程序“服务”-“车辆返还”中的“账单支付”查看账单金额。",
    "车辆检测收费吗": "您享有一次免费的车辆到店检测服务,该服务由保时捷授权经销商或保时捷融资租赁授权的第三方检测机构完成。",
}

NO_MATCH = "__NO_MATCH__"

# 全半角/空白/标点/大小写归一化,保证用户带问号、空格、全角字符也能命中
def _normalize(s):
    if not s:
        return ""
    s = unicodedata.normalize("NFKC", s)   # 全角 -> 半角(含全角标点、空格)
    s = s.lower()                          # 大小写统一
    # 只保留中英文/数字(isalnum 对中文返回 True),标点/空格/符号全部丢弃
    return "".join(ch for ch in s if ch.isalnum())

# 归一化后的映射表(构建一次,查询 O(1))
_NORM_MAP = {_normalize(q): a for q, a in QA_MAP.items()}

def match_question(user_input):
    """点选/输入精确匹配。命中返回答案原文;未命中返回 NO_MATCH 标识。"""
    key = _normalize(user_input)
    if not key:
        return NO_MATCH
    return _NORM_MAP.get(key, NO_MATCH)

# ================== 平台入口(按需取消注释) ==================
# answer = match_question(user_input)
第二段:知识库检索结果数组映射(qa_match_part2.py)— 输入 kb_results(Array[Object]),输出 answer / __NO_MATCH__
# -*- coding: utf-8 -*-
# ⚠️ 本文件由 generate_code.py 从 qa_data.json 自动生成,请勿手改。
# 更新 QA 后:替换 qa_data.json 重新运行生成脚本(或联系 Hermes 处理)。

"""
微信小程序问答机器人 · 第二段:知识库检索结果数组 -> 答案映射
================================================
用途:知识库节点检索命中后,将检索结果数组(Array[Object])映射为答案原文。
  1. 取相似度最高的一条(top1)
  2. 相似度 < 阈值 -> 返回 __NO_MATCH__(由固定话术节点兜底)
  3. 解析命中条目 content(JSON 字符串):
     - 含"答案"字段 -> 直接输出答案原文(零润色)
     - 仅含"问题"字段 -> 用同源 QA 字典映射答案原文
  命中   -> 返回对应答案原文(原样输出,不做任何润色)
  未命中 -> 返回 __NO_MATCH__ 标识,由固定话术节点兜底

平台接入(真实输入格式):
  1. 输入变量: kb_results (Array[Object])  # 知识库节点检索结果数组
     每条形如:
     {
       "question": "",
       "content": "{\"问题\":\"我会收到提醒短信吗\"}",
       "file": [],
       "knowMeta": {"type":"doc","knowName":"保时捷小程序问答-问题知识库",
                    "tag":"","searchType":"mix","score":0.9728201981073603}
     }
  2. 输出变量: answer (str)  # 命中=答案原文 / 未命中="__NO_MATCH__"

阈值说明:
  - 本代码内置 SCORE_THRESHOLD 做兜底防御;平台知识库节点阈值按「七」节实测设为 0.7 或 0.8。
  - 两处阈值取更严格者生效(平台已过滤 -> 本代码二次确认)。

说明:本字典与第一段代码同源生成(qa_data.json),保证点选答案与知识库答案一致。
"""
import unicodedata, json

SCORE_THRESHOLD = 0.7  # 相似度阈值(0.7 或 0.8,用测试集实测二选一)

# ================== QA 字典(自动生成) ==================
QA_MAP = {
    "有哪些还款方式": "我们为您提供了灵活的还款方式,您可通过自动扣款或手动汇款方式进行还款。",
    "自动扣款支持哪些银行": "我们的自动扣款支持多家主流银行的一类借记卡:\n•工商银行、招商银行 (适用于金额<100万的月还款、尾款、提前结清款、罚息)\n•交通银行、中信银行、平安银行、民生银行、广发银行、上海银行 (适用于金额<5万的月还款、罚息)",
    "最晚可以几点还款": "还款日当天我们将进行多轮款项处理:\n•如您通过扣款还款,我们将分别于9:30、15:30进行扣款处理,我们推荐您在还款日前一天将资金存入您的扣款银行卡/账户。如当天还款失败,我们将于次日再次尝试扣款。\n•如您通过汇款还款,我们将分别是9:00、15:00和20:30进行汇款款项处理,我们推荐您在还款日前一天操作汇款。",
    "可以通过汇款还款吗": "您可以通过手动汇款方式进行还款。我们为您配置了专属汇款账户,您汇款时无需备注,足额汇款即可自动入账。专属汇款账户信息可通过本小程序“服务”中的“还款账户查询”查看。",
    "我会收到提醒短信吗": "每期还款前我们都会提醒您还款日和还款金额,还款后我们也会通知您还款结果,方便您及时了解还款状态。另外,您也可通过本小程序中的“合同”-“查看详情”-“账单详情”查看。",
    "收到了余额不足还款失败短信": "请您尽快将足额资金存入您的扣款银行卡,我们将于15:30或次日9:30再次扣款。",
    "扣款银行卡发生限额、冻结、锁定": "考虑到银行卡状态恢复不便,我们推荐您先通过汇款方式完成当月还款,再联系银行恢复卡片状态。",
    "周末和节假日可以还款吗": "我们在周末和法定节假日均支持自动扣款和足额汇款的自动入账。",
    "如何查看还款计划": "您可通过本小程序“合同”中的“账单详情”查看您的还款计划,包括每期还款日,还款金额和还款状态等。",
    "如何查看汇款结余": "您可以在汇款到账提醒短信里找到结余金额。您也可以通过本小程序“服务”中的“还款账户查询”查看。",
    "个人客户,可以选择哪些银行卡": "我们支持多家主流银行一类借记卡变更:\n•工商银行、招商银行 (适用于金额<100万的月还款、尾款、提前结清款、罚息)\n•交通银行、中信银行、平安银行、民生银行、广发银行、上海银行 (适用于金额<5万的月还款、罚息)",
    "企业客户,可以选择哪些银行账户": "您可以选择企业工行账户进行变更(适用于金额<100万的月还款、尾款、提前结清款、罚息)。如企业没有工行账户,担保人可以操作银行卡变更。",
    "能自助办理吗": "合同激活后,您可通过本小程序 “服务”中的“变更银行卡”进行变更操作。",
    "承租人操作变更注意事项": "如是个人账户,请持卡人通过本小程序进行变更操作。如是企业工行账户,请先在网银中完成扣款绑定,再通过小程序进行变更操作。",
    "担保人操作变更注意事项": "请担保人通过本小程序进行变更操作。",
    "扣款过程变更了银行卡": "如完成变更时仍有待支付的款项且扣款尚未完成,本次仍旧通过变更前的银行卡进行扣款。",
    "如何查看变更后的银行卡信息": "您可以通过本小程序“服务”中的“还款账户查询”查看。",
    "银行卡挂失补办了,需要变更吗": "为保证扣款顺利,请您在补办后通过本小程序 “服务”中的“变更银行卡”进行变更操作。",
    "旧的银行卡如何解绑": "变更成功后,我们会协助您发起旧银行卡的解绑。如果是招行个人卡,工行企业账户,请您通过手机银行app或企业网银进行解绑。",
    "能再次发起变更吗": "变更成功后,您可以再次发起变更。为保证扣款顺利,如仍有待支付的款项且扣款尚未完成,请在本次扣款结束后再发起变更。",
    "我的车辆登记证保存在哪里": "办理完抵押登记后,您的机动车登记证由保时捷融资租赁公司保管。这期间,如您需要临时借阅,可向您的购车保时捷中心提出申请。",
    "哪些情况可以申请原件借阅": "在不涉及车辆抵押状态变更的情况下,您可借阅机动车登记证用于以下业务办理:\n•\t变更车身颜色(非同色系)\n•\t变更为市区号牌\n•\t变更发动机/车身/车架",
    "需要提供哪些材料申请原件借阅": "您无需向保时捷融资租赁提供证件或填写相关材料,保时捷中心会协助您提交借阅申请。",
    "最长能借阅多久": "您可以借阅的期限最长为30个自然日,如您因尚未完成相关事项办理需要延期,请向您的购车保时捷中心提出续借申请。",
    "是否需要支付费用": "您无需向保时捷融资租赁支付相关费用,机动车登记证借阅事宜由您的购车保时捷中心协助办理。",
    "可以委托其他人办理吗": "为保障您的财产安全,我们仅接受您本人向保时捷中心提出的借阅申请:\n•\t企业客户:由企业法定代表人提出申请\n•\t个人客户:由承租人提出申请",
    "借阅的原件,寄到哪里": "我们会将登记证寄送至您的购车保时捷中心,保时捷中心收到后会协助您办理相应手续。",
    "使用完毕后如何归还": "登记证使用完毕后,可直接归还至您的保时捷中心,保时捷中心会重新邮寄给保时捷融资租赁保管。",
    "扫描件自助下载": "为保障您的财产安全,您本人可通过本小程序“服务”中的“车辆登记证”查看和下载:\n•企业客户:可企业法人查看和下载\n•\t个人客户:可承租人查看和下载",
    "扫描件无法查看": "如您的车辆登记证还未寄给保时捷融资租赁有限公司归档,无法通过本小程序查看,请您及时配合完成归档。",
    "哪些费用可以开票": "目前支持开具电子发票的项目包括:\n•\t利息\n•\t违约金\n•\t提前结清手续费\n我们会为您开具增值税(普通)电子发票",
    "会在什么时候开具": "电子发票会在每月中旬及月底进行开具。若您的还款日未赶上当月发票开具批次,将自动纳入下一批次处理。如您有加急需求,请联系保时捷融资租赁客户中心,我们预计会在5个工作日内为您开具出相应发票。",
    "利息发票为什么来自两方": "您的利息发票会由我们和联合出租方上海畅途融资租赁有限公司分别开具,发票合计金额等于实际支付利息,均是有效票据。保时捷融资租赁会开具99%利息金额发票,剩余1%利息由上海畅途融资租赁开具。",
    "企业客户,能自助下载吗": "保时捷融资租赁开具的发票可通过本小程序“服务”中的“电子发票”查看和下载,我们也会将通过短信发送给您。联合出租方上海畅途融资租赁开具的发票会通过邮件发送给您。",
    "个人客户,能自助下载码": "保时捷融资租赁开具的发票可通过本小程序“服务”中的“电子发票”查看和下载。联合出租方上海畅途融资租赁开具的发票,您可联系保时捷融资租赁客户中心申请(400-820-5911,按提示选择“3”)",
    "发票信息有误怎么办": "如发票抬头、税号等信息有误,您可联系保时捷融资租赁客户中心400-820-5911,按提示选择“3”提交更正申请,我们将尽快为您处理。",
    "可以补开吗": "对于过往已支付但未开具发票的款项,您可联系保时捷融资租赁客户中心00-820-5911,按提示选择“3”提交补开申请,我们将在核实后为您尽快补开。",
    "小程序上能批量下载吗": "您可勾选单条、多条、点击“全选”,或通过右上角“筛选”选择指定年月的发票。点击“票据接收”,核对或编辑邮箱地址后,电子发票将发送至该邮箱。",
    "企业更名了,如何变更开票信息": "您可联系保时捷融资租赁客户中心400-820-5911,按提示选择“3”提交更名申请。更名成功后,会按照新的名称为您开具发票。",
    "企业更名了,已开具的发票能重开吗": "您可联系保时捷融资租赁客户中心400-820-5911,按提示选择“3”提交补开申请,我们将协助您进行处理。",
    "结清后需要做什么": "我们会协助您办理解除抵押,包括:\n1. 准备并寄出结清资料\n2. 联系您预约办理时间\n3. 协助您办理解除抵押\n4. 归还车辆登记证",
    "哪些材料会寄出": "寄出的结清材料包括您的车辆登记证,结清证明,以及其他车管所要求的办理解除抵押所需材料。",
    "材料多久会寄出": "合同结清后,我们将在7个工作日内向保时捷融资租赁指定服务商寄出结清资料。",
    "材料寄出能加急吗": "如您有加急需求,请在工作时间联系保时捷融资租赁客户中心400-820-5911,按提示选择“3”,我们将在合同结清后5个工作日内向保时捷融资租赁指定服务商寄出结清资料。",
    "多久联系我办理解除抵押": "保时捷融资租赁指定服务商收到资料后,预计三个工作日内和您联系。",
    "材料能直接寄给我吗": "目前大多数地区车管所不接受个人办理解除抵押业务。为了避免您白跑一趟,我们会将材料寄给保时捷融资租赁指定服务商,协助您办理解除抵押。",
    "办理解除抵押,需要我准备什么": "如您是个人客户,需提供身份证。如您是企业客户,需提供营业执照副本原件。",
    "办理解除抵押,需要我到场吗": "您可以和保时捷融资租赁指定服务商的员工共同前往办理。如时间不便,您也可以委托给保时捷中心或指定服务商的员工完成办理。",
    "车辆登记证如何给到我": "如您是共同前往办理的,机动车登记证在解除抵押完成后直接归还给您。如您是委托办理的,会在解除抵押完成后由保时捷融资租赁指定服务商通过邮寄方式归还。",
    "哪些情况无法申请提前结清": "租金还款日当天,还款期数未满1期,合同当前存在逾期或合同已违约,均无法申请提前结清。",
    "如何申请提前结清": "您首期租金成功还款后,且还款状态正常,可通过以下任一方式申请:\n•\t通过本小程序“服务”中的“提前结清”自助提交申请\n•\t联系购车保时捷中心工作人员协助提交申请\n•\t联系保时捷融资租赁客户中心协助提交申请",
    "收提前结清手续费吗": "需要您支付提前结清手续费,收取标准为:\n•\t如已支付租金未满12期,手续费为剩余未付本金的6%\n•\t如已支付租金满12期或以上,手续费为剩余未付本金的3%",
    "如何还提前结清款项": "若您绑定的扣款银行卡为:\n•\t工商银行、招商银行:如通过扣款还款。请提前在卡内预留足额资金,还款日当天将分别于9:30、15:30进行扣款处理;如通过汇款还款,请勿在卡内预留足额资金,并于当天20:00前还款至专属汇款账户\n•\t交通银行、中信银行、平安银行、民生银行、广发银行、上海银行卡:请于还款日当天20:00前还款至专属汇款账户。",
    "可以试算提前结清金额吗": "如首期租金已成功还款,且合同状态正常,您可通过本小程序“服务”中的“提前结清”试算金额。",
    "节假日可以申请吗": "周末和节假日,您可通过本小程序自助申请,或联系保时捷中心工作人员协助提交申请。工作日9:00至18:00,保时捷融资租赁客户中心可协助您提交申请。",
    "租金日可以申请吗": "租金日当天无法为您办理提前结清。",
    "当天最晚几点还款": "还款日当天我们将进行多轮款项处理:\n•\t如您通过扣款还款,请最晚于当天15:30前将金额存入扣款银行卡\n•\t如您通过汇款还款,请最晚于当天20:00前还款至专属汇款账户",
    "当天未还款,怎么办": "若当天未完成还款,提前结清申请将自动失效。您可重新提交申请,或继续按照合同原还款计划还款。",
    "只能承租人提交申请吗": "承租人和担保人均可提交申请。",
    "忠诚客户有哪些礼遇": "如您再次选择保时捷融资租赁方案,可享受全系车型额外1%的利率优惠。原保时捷融资租赁合同尚未结清,还可享受原合同提前结清费用减免、至高5000元还车账单减免优惠。礼遇详情可在本小程序的“首页”和“服务”中的“忠诚客户”查看。",
    "之前选的金融方案,也能享受吗": "如您是保时捷金融客户,在原业务尚未结清或结清时间不超过3年时,通过保时捷融资租赁方案重购,也可享受全系车型额外1%的利率优惠。",
    "保时捷金融客户介绍": "是指您曾通过保时捷金融服务提供方提供的金融方案购买保时捷 (保时捷金融服务提供方包括:中国银行、中信银行、平安银行、中国农业银行、大众汽车金融(中国)有限公司、德国大众汽车融资租赁(天津)有限公司)。",
    "如何查询我的客户身份": "您可以在本小程序“服务”中的“客户权益”通过车架号或证件号码进行查询。",
    "我有购车意向,如何提交": "保时捷融资租赁客户可通过本小程序“服务”中的“客户权益”提交期末购车意向。收到您的意向申请后,我们会通知保时捷中心联系您预约到店试驾。",
    "什么情况可以返还车辆": "如您选择的是保时捷融资租赁无忧先享产品,合同到期时可享受多种选择权,包括车辆购买、车辆返还、车辆置换。",
    "车辆返还步骤是什么": "车辆返还涉及如下步骤:\n1. 合同到期日10个工作日前,预约到店检测\n2. 合同到期日7个工作日前,完成车辆检测。如符合还车标准,将车辆进行归还\n3. 合同到期后30个工作日内,办理车辆解除抵押和车辆过户",
    "如何预约到店检测": "您可在本小程序“服务”中的“车辆返还”完成预约。预约成功后,保时捷融资租赁客户中心将与您取得联系,安排检测与还车事宜。您也可直接拨打保时捷融资租赁客服热线进行预约。",
    "预约后能改期吗": "您可在预约日期的前一天在本小程序“服务”中的“车辆返还”操作取消或改期。如您未及时取消或改期,会视为一次爽约,两次爽约后将失去还车资格,还请您提前操作。",
    "到店时需携带什么材料": "还请您一并携带好车辆相关材料,包括2把钥匙、车辆行驶证、车主身份证/营业执照原件、公章(仅企业客户)、进口单证等材料。",
    "哪些情况无法返还车辆": "需要至少满足以下情况可在期末返还车辆:\n1. 车辆无重大事故(结构性损伤)、水淹、火烧等情况,并在保时捷授权中心保养\n2. 当前还款不逾期\n3. 合同到期日7个工作日前经检测符合还车车况标准,归还车辆\n具体您可在本小程序“服务”-“车辆返还”-“还车指引”中的“还车标准”查看。",
    "对车况有什么要求": "还车车况需至少满足以下情况:\n1.车身无结构性损伤、车身外观及油漆无明显损伤、内饰无明显损坏痕迹\n2.电气可正常使用、车轮及轮胎无明显损伤、底盘和发动机无异常\n3.电池可正常充放电\n4. 车辆行驶里程不超过2万公里/年\n具体您可在本小程序“服务”-“车辆返还”-“还车指引”中的“还车标准”查看。",
    "检测结果我不满意怎么办": "车辆检测是由保时捷授权经销商或保时捷融资租赁授权的第三方检测机构完成,其检测结果专业且独立。如您对检测结果有异议,我们可安排第二次检测,这次检测需要您支付相关费用。",
    "还车账单包括哪些款项": "如车辆不符合还车车况要求,您可通过支付车辆复原维修费和超额里程费的方式继续归还车辆。您可在本小程序“服务”-“车辆返还”中的“账单支付”查看账单金额。",
    "车辆检测收费吗": "您享有一次免费的车辆到店检测服务,该服务由保时捷授权经销商或保时捷融资租赁授权的第三方检测机构完成。",
}

NO_MATCH = "__NO_MATCH__"

def _normalize(s):
    if not s:
        return ""
    s = unicodedata.normalize("NFKC", s)
    s = s.lower()
    return "".join(ch for ch in s if ch.isalnum())

_NORM_MAP = {_normalize(q): a for q, a in QA_MAP.items()}

def _extract_qa(content):
    """从知识库条目 content 中提取 (问题, 答案)。

    content 通常为 JSON 字符串(如 {"问题":"...","答案":"..."});
    解析失败或非 JSON 时,整段文本视为问题,答案交给 QA_MAP 映射。
    """
    if not content:
        return "", ""
    text = content.strip()
    try:
        obj = json.loads(text)
        if isinstance(obj, dict):
            q = obj.get("问题") or obj.get("question") or obj.get("q") or ""
            a = obj.get("答案") or obj.get("answer") or obj.get("a") or ""
            return q, a
    except Exception:
        pass
    return text, ""

def kb_results_to_answer(kb_results):
    """知识库检索结果数组 -> 答案原文。未命中返回 NO_MATCH。

    兼容平台两种输入形态:
      - Array[Object](真实格式):取 knowMeta.score 最高条目,按阈值过滤
      - 单个字符串(旧格式/测试):直接按标准问题查表
    """
    if isinstance(kb_results, str):
        # 兼容旧格式:直接当标准问题查表
        key = _normalize(kb_results)
        return _NORM_MAP.get(key, NO_MATCH) if key else NO_MATCH
    if not isinstance(kb_results, (list, tuple)) or not kb_results:
        return NO_MATCH
    # 取相似度最高的一条(top1)
    best = None
    for item in kb_results:
        if not isinstance(item, dict):
            continue
        try:
            score = float((item.get("knowMeta") or {}).get("score") or 0)
        except (TypeError, ValueError):
            score = 0.0
        if best is None or score > best[0]:
            best = (score, item)
    if best is None:
        return NO_MATCH
    score, item = best
    if score < SCORE_THRESHOLD:
        return NO_MATCH
    content = item.get("content") or ""
    q, a = _extract_qa(content)
    if a:
        return a  # content 自带答案,零润色直接输出
    key = _normalize(q)
    if not key:
        return NO_MATCH
    return _NORM_MAP.get(key, NO_MATCH)

# 兼容旧函数名:kb_to_answer(标准问题字符串)
def kb_to_answer(kb_question):
    return kb_results_to_answer(kb_question)

# ================== 平台入口(按需取消注释) ==================
# answer = kb_results_to_answer(kb_results)

九、验收清单

#用例期望结果
T1点选问题 1返回问题 1 的答案原文,逐字一致
T2点选最后一个问题返回对应答案原文
T3自由输入与某 Q 高度相似(含问号/空格/全角)返回该 Q 对应 A 原文
T4自由输入与所有 Q 都不相似返回固定话术
T5任意输入返回内容不含润色痕迹(与 A 原文或固定话术逐字一致)
T6知识库 A 字段 vs 点选路径 answer同源一致(同 qa_data.json)
T7输入含「客服/电话」等 A 中常见词但语义不对应不误命中含该词答案的 QA(知识库只匹配 Q)
T8多结果检索场景只输出 top1,不拼接
T9点选传无效 question_id(防御)返回固定话术

注:验收前先用「② 扩写测试集」扫阈值 0.7 / 0.8,确认误命中为 0。

十、版本历史与 QA 更新机制

QA 更新机制:需求不变、只更新 QA 时,走固定流程:新 QA Excel → 提取为 qa_data.json → 重新生成两段代码 → 新增版本记录(versions.json)→ 重建本文档 → 重新部署。需求说明部分(一~九章)保持不变,仅第八章代码与第十章版本表更新。

版本QA 数据日期QA 条数Excel 下载说明
V1.0 (当前) 2026-07 75(唯一 74) ⬇ 下载 Excel 首版,8 业务场景,1 个重复问题「是否需要支付费用」

⚠️ 当前版本存在重复问题「是否需要支付费用」(车辆登记证版 / 结清寄送版,答案不同)。代码保留首条(车辆登记证版答案);如页面预置了两个相同文本问题,点选无法区分,建议改为可区分文案。

扩写测试集 · 设计方法论(对抗性把关)

本测试集用于评估机器人的问答效果,同时公开给合作方查看和使用。核心原则:没有真实用户数据时,盲目扩写会引入噪声反而影响效果——所以每条用例都带明确的「验证点」,没有验证点的扩写不进测试集。

正样本三型(验证机器人「该答的答得上」)

类型说明验证点
形式变体标准 Q 加问号/全角/空格验证输入归一化:形式变化不影响命中
语义改写换说法/口语化表达验证语义检索召回:语义等价应命中同一 QA
近义区分语义接近但必须命中指定 QA验证区分度/防串答:不能串到其他 QA

负样本三型(验证机器人「不该答的不答」)

类型说明验证点
无关输入与业务无关(天气/问候/其他业务)应返回固定话术,不编造答案
关键词陷阱含答案中常见词但语义不对应防撞车:不因「客服/电话」等词误命中(对应验收 T7)
跨场景混淆两个场景都有类似问题验证不串答:答非所问是最大伤害

⏳ 待补充:上线后从「运营管理-执行日志」(T+1)采集真实未命中 query,作为下一轮扩写的真实样本来源。

正样本:三型 75 组(300 条输入)

每组 = 标准 Q(基准)+ 3 条变体(形式/改写/近义)。每条变体标注验证点。

#场景标准 Q变体(类型 + 测试输入 + 验证点)期望结果
1 常规还款 有哪些还款方式
形式变体 有哪些还款方式?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 有都有哪几种还款方式
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 我该怎么还钱
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
2 常规还款 自动扣款支持哪些银行
形式变体 自动扣款支持哪些银行?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 自动扣款支持都有哪几种银行
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于自动扣款支持哪些银行的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
3 常规还款 最晚可以几点还款
形式变体 最晚可以几点还款?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 最迟可以几点还款
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 还款时间最迟是什么时候
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
4 常规还款 可以通过汇款还款吗
形式变体 可以通过汇款还款吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 可以通过汇款还款不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于可以通过汇款还款吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
5 常规还款 我会收到提醒短信吗
形式变体 我会收到提醒短信吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我会收到提醒短信不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于我会收到提醒短信吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
6 常规还款 收到了余额不足还款失败短信
形式变体 收到了余额不足还款失败短信?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问收到了余额不足还款失败短信
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于收到了余额不足还款失败短信的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
7 常规还款 扣款银行卡发生限额、冻结、锁定
形式变体 扣款银行卡发生限额、冻结、锁定?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问扣款银行卡发生限额、冻结、锁定
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 卡号换了怎么办
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
8 常规还款 周末和节假日可以还款吗
形式变体 周末和节假日可以还款吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 周末和节假日可以还款不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于周末和节假日可以还款吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
9 常规还款 如何查看还款计划
形式变体 如何查看还款计划?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问如何查看还款计划
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于如何查看还款计划的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
10 常规还款 如何查看汇款结余
形式变体 如何查看汇款结余?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问如何查看汇款结余
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于如何查看汇款结余的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
11 变更银行卡 个人客户,可以选择哪些银行卡
形式变体 个人客户,可以选择哪些银行卡?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 个人客户,可以选择都有哪几种银行卡
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 卡号换了怎么办
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
12 变更银行卡 企业客户,可以选择哪些银行账户
形式变体 企业客户,可以选择哪些银行账户?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 企业客户,可以选择都有哪几种银行账户
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于企业客户,可以选择哪些银行账户的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
13 变更银行卡 能自助办理吗
形式变体 能自助办理吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 能自助办理不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于能自助办理吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
14 变更银行卡 承租人操作变更注意事项
形式变体 承租人操作变更注意事项?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问承租人操作变更注意事项
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于承租人操作变更注意事项的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
15 变更银行卡 担保人操作变更注意事项
形式变体 担保人操作变更注意事项?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问担保人操作变更注意事项
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于担保人操作变更注意事项的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
16 变更银行卡 扣款过程变更了银行卡
形式变体 扣款过程变更了银行卡?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问扣款过程变更了银行卡
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 卡号换了怎么办
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
17 变更银行卡 如何查看变更后的银行卡信息
形式变体 如何查看变更后的银行卡信息?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问如何查看变更后的银行卡信息
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 卡号换了怎么办
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
18 变更银行卡 银行卡挂失补办了,需要变更吗
形式变体 银行卡挂失补办了,需要变更吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 银行卡挂失补办了,需要变更不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 卡号换了怎么办
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
19 变更银行卡 旧的银行卡如何解绑
形式变体 旧的银行卡如何解绑?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问旧的银行卡如何解绑
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 卡号换了怎么办
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
20 变更银行卡 能再次发起变更吗
形式变体 能再次发起变更吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 能再次发起变更不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于能再次发起变更吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
21 车辆登记证 我的车辆登记证保存在哪里
形式变体 我的车辆登记证保存在哪里?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问我的车辆登记证保存在哪里
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于我的车辆登记证保存在哪里的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
22 车辆登记证 哪些情况可以申请原件借阅
形式变体 哪些情况可以申请原件借阅?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 都有哪几种情况可以申请原件借阅
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于哪些情况可以申请原件借阅的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
23 车辆登记证 需要提供哪些材料申请原件借阅
形式变体 需要提供哪些材料申请原件借阅?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 需要提供都有哪几种材料申请原件借阅
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于需要提供哪些材料申请原件借阅的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
24 车辆登记证 最长能借阅多久
形式变体 最长能借阅多久?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问最长能借阅多久
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于最长能借阅多久的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
25 车辆登记证 是否需要支付费用
形式变体 是否需要支付费用?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问是否需要支付费用
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于是否需要支付费用的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
26 车辆登记证 可以委托其他人办理吗
形式变体 可以委托其他人办理吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 可以委托其他人办理不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于可以委托其他人办理吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
27 车辆登记证 借阅的原件,寄到哪里
形式变体 借阅的原件,寄到哪里?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问借阅的原件,寄到哪里
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于借阅的原件,寄到哪里的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
28 车辆登记证 使用完毕后如何归还
形式变体 使用完毕后如何归还?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问使用完毕后如何归还
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于使用完毕后如何归还的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
29 车辆登记证 扫描件自助下载
形式变体 扫描件自助下载?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问扫描件自助下载
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于扫描件自助下载的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
30 车辆登记证 扫描件无法查看
形式变体 扫描件无法查看?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问扫描件无法查看
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于扫描件无法查看的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
31 电子发票 哪些费用可以开票
形式变体 哪些费用可以开票?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 都有哪几种费用可以开票
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于哪些费用可以开票的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
32 电子发票 会在什么时候开具
形式变体 会在什么时候开具?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我想知道会在什么时候开具
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于会在什么时候开具的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
33 电子发票 利息发票为什么来自两方
形式变体 利息发票为什么来自两方?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我想知道利息发票为什么来自两方
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 票怎么开
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
34 电子发票 企业客户,能自助下载吗
形式变体 企业客户,能自助下载吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 企业客户,能自助下载不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于企业客户,能自助下载吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
35 电子发票 个人客户,能自助下载码
形式变体 个人客户,能自助下载码?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问个人客户,能自助下载码
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于个人客户,能自助下载码的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
36 电子发票 发票信息有误怎么办
形式变体 发票信息有误怎么办?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 发票信息有误要怎么办
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 票怎么开
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
37 电子发票 可以补开吗
形式变体 可以补开吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 可以补开不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于可以补开吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
38 电子发票 小程序上能批量下载吗
形式变体 小程序上能批量下载吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 小程序上能批量下载不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于小程序上能批量下载吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
39 电子发票 企业更名了,如何变更开票信息
形式变体 企业更名了,如何变更开票信息?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问企业更名了,如何变更开票信息
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于企业更名了,如何变更开票信息的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
40 电子发票 企业更名了,已开具的发票能重开吗
形式变体 企业更名了,已开具的发票能重开吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 企业更名了,已开具的发票能重开不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 票怎么开
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
41 结清寄送 结清后需要做什么
形式变体 结清后需要做什么?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我想知道结清后需要做什么
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于结清后需要做什么的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
42 结清寄送 哪些材料会寄出
形式变体 哪些材料会寄出?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 都有哪几种材料会寄出
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于哪些材料会寄出的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
43 结清寄送 材料多久会寄出
形式变体 材料多久会寄出?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问材料多久会寄出
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于材料多久会寄出的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
44 结清寄送 材料寄出能加急吗
形式变体 材料寄出能加急吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 材料寄出能加急不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于材料寄出能加急吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
45 结清寄送 多久联系我办理解除抵押
形式变体 多久联系我办理解除抵押?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问多久联系我办理解除抵押
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于多久联系我办理解除抵押的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
46 结清寄送 材料能直接寄给我吗
形式变体 材料能直接寄给我吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 材料能直接寄给我不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于材料能直接寄给我吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
47 结清寄送 办理解除抵押,需要我准备什么
形式变体 办理解除抵押,需要我准备什么?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我想知道办理解除抵押,需要我准备什么
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于办理解除抵押,需要我准备什么的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
48 结清寄送 办理解除抵押,需要我到场吗
形式变体 办理解除抵押,需要我到场吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 办理解除抵押,需要我到场不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于办理解除抵押,需要我到场吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
49 结清寄送 是否需要支付费用
形式变体 是否需要支付费用?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问是否需要支付费用
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于是否需要支付费用的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
50 结清寄送 车辆登记证如何给到我
形式变体 车辆登记证如何给到我?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问车辆登记证如何给到我
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于车辆登记证如何给到我的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
51 提前结清 哪些情况无法申请提前结清
形式变体 哪些情况无法申请提前结清?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 都有哪几种情况无法申请提前结清
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于哪些情况无法申请提前结清的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
52 提前结清 如何申请提前结清
形式变体 如何申请提前结清?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问如何申请提前结清
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于如何申请提前结清的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
53 提前结清 收提前结清手续费吗
形式变体 收提前结清手续费吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 收提前结清手续费不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于收提前结清手续费吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
54 提前结清 如何还提前结清款项
形式变体 如何还提前结清款项?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问如何还提前结清款项
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于如何还提前结清款项的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
55 提前结清 可以试算提前结清金额吗
形式变体 可以试算提前结清金额吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 可以试算提前结清金额不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于可以试算提前结清金额吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
56 提前结清 节假日可以申请吗
形式变体 节假日可以申请吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 节假日可以申请不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于节假日可以申请吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
57 提前结清 租金日可以申请吗
形式变体 租金日可以申请吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 租金日可以申请不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于租金日可以申请吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
58 提前结清 当天最晚几点还款
形式变体 当天最晚几点还款?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 最迟最晚几点还款
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 还款时间最迟是什么时候
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
59 提前结清 当天未还款,怎么办
形式变体 当天未还款,怎么办?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 当天未还款,要怎么办
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于当天未还款,怎么办的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
60 提前结清 只能承租人提交申请吗
形式变体 只能承租人提交申请吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 只能承租人提交申请不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于只能承租人提交申请吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
61 忠诚客户权益 忠诚客户有哪些礼遇
形式变体 忠诚客户有哪些礼遇?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 忠诚客户有都有哪几种礼遇
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于忠诚客户有哪些礼遇的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
62 忠诚客户权益 之前选的金融方案,也能享受吗
形式变体 之前选的金融方案,也能享受吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 之前选的金融方案,也能享受不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于之前选的金融方案,也能享受吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
63 忠诚客户权益 保时捷金融客户介绍
形式变体 保时捷金融客户介绍?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问保时捷金融客户介绍
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于保时捷金融客户介绍的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
64 忠诚客户权益 如何查询我的客户身份
形式变体 如何查询我的客户身份?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问如何查询我的客户身份
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于如何查询我的客户身份的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
65 忠诚客户权益 我有购车意向,如何提交
形式变体 我有购车意向,如何提交?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问我有购车意向,如何提交
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于我有购车意向,如何提交的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
66 车辆返还 什么情况可以返还车辆
形式变体 什么情况可以返还车辆?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我想知道什么情况可以返还车辆
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于什么情况可以返还车辆的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
67 车辆返还 车辆返还步骤是什么
形式变体 车辆返还步骤是什么?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我想知道车辆返还步骤是什么
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于车辆返还步骤是什么的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
68 车辆返还 如何预约到店检测
形式变体 如何预约到店检测?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 请问如何预约到店检测
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于如何预约到店检测的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
69 车辆返还 预约后能改期吗
形式变体 预约后能改期吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 预约后能改期不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于预约后能改期吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
70 车辆返还 到店时需携带什么材料
形式变体 到店时需携带什么材料?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我想知道到店时需携带什么材料
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于到店时需携带什么材料的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
71 车辆返还 哪些情况无法返还车辆
形式变体 哪些情况无法返还车辆?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 都有哪几种情况无法返还车辆
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于哪些情况无法返还车辆的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
72 车辆返还 对车况有什么要求
形式变体 对车况有什么要求?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 我想知道对车况有什么要求
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于对车况有什么要求的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
73 车辆返还 检测结果我不满意怎么办
形式变体 检测结果我不满意怎么办?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 检测结果我不满意要怎么办
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于检测结果我不满意怎么办的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
74 车辆返还 还车账单包括哪些款项
形式变体 还车账单包括哪些款项?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 还车账单包括都有哪几种款项
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于还车账单包括哪些款项的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA
75 车辆返还 车辆检测收费吗
形式变体 车辆检测收费吗?
验证输入归一化:标准 Q 后加全角问号仍应命中

语义改写 车辆检测收费不?
验证语义检索召回:换说法后语义等价,应命中同一 QA

近义区分 关于车辆检测收费吗的事,具体怎么处理
验证区分度:近义措辞不能串到其他 QA
命中该组 QA

负样本:三型 15 条

期望全部返回固定话术;任何一条被命中即为误命中(不可接受)。

#类型测试输入验证点期望结果
1 无关输入 今天天气怎么样 无关输入,应返回固定话术 返回固定话术
2 无关输入 你们老板是谁 无关输入,应返回固定话术 返回固定话术
3 无关输入 公司地址在哪里 无关输入,应返回固定话术 返回固定话术
4 无关输入 怎么投诉你们 无关输入,应返回固定话术 返回固定话术
5 无关输入 你们几点下班 无关输入,应返回固定话术 返回固定话术
6 无关输入 推荐一款手机 无关输入,应返回固定话术 返回固定话术
7 无关输入 我想买理财产品 无关输入,应返回固定话术 返回固定话术
8 无关输入 你们和银行有什么区别 无关输入,应返回固定话术 返回固定话术
9 无关输入 能帮我查一下我的征信吗 无关输入,应返回固定话术 返回固定话术
10 关键词陷阱 客服电话是多少 含A关键词「客服」但QA无此问题,验证不因关键词撞车(验收T7) 返回固定话术
11 关键词陷阱 提前结清的违约金电话咨询 关键词组合但语义不对应,验证防撞车 返回固定话术
12 跨场景混淆 还款提醒短信收不到 跨场景易混淆:提醒短信 vs 还款方式,验证不串 返回固定话术
13 跨场景混淆 发票丢了能补吗 跨场景易混淆:发票 vs 其他费用类,验证不串 返回固定话术
14 跨场景混淆 结清后车辆登记证什么时候给 跨场景易混淆:登记证 vs 结清寄送,验证不串 返回固定话术
15 跨场景混淆 逾期多久会收回车辆 跨场景易混淆:车辆返还相关,验证不串 返回固定话术

下载(公开版)

文件格式用途下载
testset-public.xlsxExcel(3 sheet:正样本/负样本/使用说明)合作方/内部人工查看与测试录入⬇ 下载 Excel
testset.jsonJSON(含 meta/类型/验证点)eval_bot.py 程序化评估⬇ 下载 JSON

⚠️ 使用方法:把「测试输入」逐条发给机器人,正样本看是否命中对应 QA 答案原文,负样本看是否返回固定话术。完整流程见「③ 评估与计划」。

评估方案

目标:机器人地址开放后,用测试集程序化评估效果,产出评估报告。

评估程序(eval_bot.py,已就绪)

  • 程序化评估(主):`python3 eval_bot.py --url <机器人API> --token --model model_a --run-dir runs/model_a`——逐条跑测试集,输出命中率/误命中数/漏报明细 + HTML 报告
  • 半自动兜底(平台无开放 API 时):`python3 eval_bot.py --gen-csv` 生成录入表(315 条),人工在平台测完录回,`--from-csv` 算分出报告
  • 双模型对比:模型 A/B 各跑一轮(--model + --run-dir),`--compare runs/model_a runs/model_b` 合并出综合对比报告

指标定义

指标定义合格线
正样本命中率正样本命中数 / 总输入数(300+)越高越好,目标 ≥ 95%
负样本误命中数负样本中被返回答案而非固定话术的条数必须为 0(错误答案比答不上来伤害大)
分型命中率形式变体 / 语义改写 / 近义区分 各自命中率定位薄弱环节(如近义区分低 → 知识库 Q 太抽象)
调用错误数接口调用失败/超时越低越好

⏳ 前置条件:① 测试集就绪 ✅ ② 机器人地址开放(待公司配置) ③ 双 embedding 模型可切换。

双模型对比

背景:知识库匹配有 2 个 embedding 模型可选。评估时在 titan 平台切换机器人使用的模型,同测试集各跑一轮,对比:

  • 总命中率:哪个模型召回更好
  • 误命中数:哪个模型更稳(都不能误命中)
  • 分型差异:近义区分能力是否不同(直接决定自由输入路径可靠性)
  • 差异行明细:同一输入在两个模型下结果不同的行,逐条人工复核

输出:综合对比报告(HTML)——逐模型指标表 + 差异行明细,供选型决策。

更新计划时间线

  • 2026-08-04
    ✅ 需求文档 v4 + 测试集 v2 就绪
    三型测试集(正 300 输入 / 负 15)+ 评估程序 eval_bot.py 完成
  • 2026-08-07(周五)
    ⏳ 合作方交付最新 QA
    最晚本周五收到最新 QA(可能含扩写,但扩写也是一行一个问答形式)→ 发来后走标准更新流程:提取 → 重新生成代码 → 新版本记录 → 重建文档
  • 待定
    ⏳ 机器人地址开放
    公司配置好机器人(含 embedding 模型选择)→ 开放访问地址
  • 地址开放后
    ⏳ 双模型评估 + 综合报告
    eval_bot.py 跑模型 A/B 各一轮 → --compare 出综合对比报告 → 定模型 + 定阈值(0.7/0.8 实测)
  • 上线后 1-2 周
    ⏳ 真实数据回灌
    从执行日志(T+1)采集真实未命中 query → 并入测试集 → 迭代扩写(保持三型把关)