保时捷金融问答机器人 · 需求文档

保时捷金融问答机器人 · 需求文档

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

一、需求概述

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

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

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

输出要求

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

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

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

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

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

2.1 两条路径

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

2.2 两段代码的分工

三、全流程交互时序

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

微信小程序问答机器人 — 交互时序图用户用户微信小程序微信小程序类Coze平台(titan)类Coze平台(titan)知识库知识库代码节点代码节点路径一:列表点选(主路径,100% 精确)点选问题卡片POST 问答接口 { question_id: "Q03" }第一段代码节点(字典查表)answer 原文{ answer: "……原文……" }展示答案路径二:自由输入(兜底路径,语义检索 + 阈值)输入文字「怎么申请退款?」POST 问答接口 { free_text: "怎么申请退款?" }语义检索(只匹配 Q 字段,top1){ q: "如何申请退款", a: "……原文……", score: 0.82 }条件分支:score ≥ 阈值(0.7或0.8)?第二段代码节点(映射命中条目 → answer){ answer: "……原文……" } (命中)展示答案路径三:未命中 → 固定话术输入文字「今天天气如何?」POST 问答接口 { free_text: "今天天气如何?" }语义检索{ 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)
            ├─ 相似度 ≥ 阈值 → 第二段代码节点:映射答案 → 输出 answer 原文
            └─ 相似度 < 阈值 → 输出固定话术

5.2 配置步骤(照做)

  1. 开始节点:接收小程序传入的 user_input(点选时 = question_id,自由输入时 = 文本)
  2. 第一段代码节点:粘贴「八、两段匹配代码」的第一段;输入 user_input,输出 answer / __NO_MATCH__
  3. 条件分支:判断第一段输出是否为 __NO_MATCH__;不是则直接返回 answer
  4. 知识库节点:配置 QA 知识库(仅索引 Q 字段),语义检索 top1,阈值按「七」节设置
  5. 第二段代码节点:粘贴第二段;输入知识库命中条目的 question 字段,输出 answer / __NO_MATCH__
  6. 固定话术节点:输出「抱歉,暂时没有找到您问题的答案,请咨询客服」
  7. 发布:按平台要求配置机器人并发量(见 4 点确认第 2 条)

六、知识库设计

七、阈值设置与扩写测试集

7.1 阈值设置(titan 限制)

7.2 固定话术

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

7.3 扩写测试集(上线前必做)

正样本:75 组(每组 1 条标准 Q + 2 条改写问法,共 225 条输入),期望命中对应 QA:

#场景标准 Q改写问法(测试输入)期望结果
1 常规还款 有哪些还款方式 有哪些还款方式?
请问有哪些还款方式呀?
命中该组 QA
2 常规还款 自动扣款支持哪些银行 自动扣款支持哪些银行?
请问自动扣款支持哪些银行呀?
命中该组 QA
3 常规还款 最晚可以几点还款 最晚可以几点还款怎么办?
请问最晚可以几点还款呀?
命中该组 QA
4 常规还款 可以通过汇款还款吗 可以通过汇款还款吗怎么办?
请问可以通过汇款还款吗呀?
命中该组 QA
5 常规还款 我会收到提醒短信吗 我会收到提醒短信吗怎么办?
请问我会收到提醒短信吗呀?
命中该组 QA
6 常规还款 收到了余额不足还款失败短信 收到了余额不足还款失败短信怎么办?
请问收到了余额不足还款失败短信呀?
命中该组 QA
7 常规还款 扣款银行卡发生限额、冻结、锁定 扣款银行卡发生限额、冻结、锁定怎么办?
请问扣款银行卡发生限额、冻结、锁定呀?
命中该组 QA
8 常规还款 周末和节假日可以还款吗 周末和节假日可以还款吗怎么办?
请问周末和节假日可以还款吗呀?
命中该组 QA
9 常规还款 如何查看还款计划 如何查看还款计划怎么办?
请问如何查看还款计划呀?
命中该组 QA
10 常规还款 如何查看汇款结余 如何查看汇款结余怎么办?
请问如何查看汇款结余呀?
命中该组 QA
11 变更银行卡 个人客户,可以选择哪些银行卡 个人客户,可以选择哪些银行卡?
请问个人客户,可以选择哪些银行卡呀?
命中该组 QA
12 变更银行卡 企业客户,可以选择哪些银行账户 企业客户,可以选择哪些银行账户?
请问企业客户,可以选择哪些银行账户呀?
命中该组 QA
13 变更银行卡 能自助办理吗 能自助办理吗怎么办?
请问能自助办理吗呀?
命中该组 QA
14 变更银行卡 承租人操作变更注意事项 承租人操作变更注意事项怎么办?
请问承租人操作变更注意事项呀?
命中该组 QA
15 变更银行卡 担保人操作变更注意事项 担保人操作变更注意事项怎么办?
请问担保人操作变更注意事项呀?
命中该组 QA
16 变更银行卡 扣款过程变更了银行卡 扣款过程变更了银行卡怎么办?
请问扣款过程变更了银行卡呀?
命中该组 QA
17 变更银行卡 如何查看变更后的银行卡信息 如何查看变更后的银行卡信息怎么办?
请问如何查看变更后的银行卡信息呀?
命中该组 QA
18 变更银行卡 银行卡挂失补办了,需要变更吗 银行卡挂失补办了,需要变更吗怎么办?
请问银行卡挂失补办了,需要变更吗呀?
命中该组 QA
19 变更银行卡 旧的银行卡如何解绑 旧的银行卡如何解绑怎么办?
请问旧的银行卡如何解绑呀?
命中该组 QA
20 变更银行卡 能再次发起变更吗 能再次发起变更吗怎么办?
请问能再次发起变更吗呀?
命中该组 QA
21 车辆登记证 我的车辆登记证保存在哪里 我的车辆登记证保存在哪里怎么办?
请问我的车辆登记证保存在哪里呀?
命中该组 QA
22 车辆登记证 哪些情况可以申请原件借阅 哪些情况可以申请原件借阅?
请问哪些情况可以申请原件借阅呀?
命中该组 QA
23 车辆登记证 需要提供哪些材料申请原件借阅 需要提供哪些材料申请原件借阅?
请问需要提供哪些材料申请原件借阅呀?
命中该组 QA
24 车辆登记证 最长能借阅多久 最长能借阅多久怎么办?
请问最长能借阅多久呀?
命中该组 QA
25 车辆登记证 是否需要支付费用 是否需要支付费用怎么办?
请问是否需要支付费用呀?
命中该组 QA
26 车辆登记证 可以委托其他人办理吗 可以委托其他人办理吗怎么办?
请问可以委托其他人办理吗呀?
命中该组 QA
27 车辆登记证 借阅的原件,寄到哪里 借阅的原件,寄到哪里怎么办?
请问借阅的原件,寄到哪里呀?
命中该组 QA
28 车辆登记证 使用完毕后如何归还 使用完毕后如何归还怎么办?
请问使用完毕后如何归还呀?
命中该组 QA
29 车辆登记证 扫描件自助下载 扫描件自助下载怎么办?
请问扫描件自助下载呀?
命中该组 QA
30 车辆登记证 扫描件无法查看 扫描件无法查看怎么办?
请问扫描件无法查看呀?
命中该组 QA
31 电子发票 哪些费用可以开票 哪些费用可以开票?
请问哪些费用可以开票呀?
命中该组 QA
32 电子发票 会在什么时候开具 会在什么时候开具?
请问会在什么时候开具呀?
命中该组 QA
33 电子发票 利息发票为什么来自两方 利息发票为什么来自两方?
请问利息发票为什么来自两方呀?
命中该组 QA
34 电子发票 企业客户,能自助下载吗 企业客户,能自助下载吗怎么办?
请问企业客户,能自助下载吗呀?
命中该组 QA
35 电子发票 个人客户,能自助下载码 个人客户,能自助下载码怎么办?
请问个人客户,能自助下载码呀?
命中该组 QA
36 电子发票 发票信息有误怎么办 发票信息有误要怎么办?
请问发票信息有误怎么办呀?
命中该组 QA
37 电子发票 可以补开吗 可以补开吗怎么办?
请问可以补开吗呀?
命中该组 QA
38 电子发票 小程序上能批量下载吗 小程序上能批量下载吗怎么办?
请问小程序上能批量下载吗呀?
命中该组 QA
39 电子发票 企业更名了,如何变更开票信息 企业更名了,如何变更开票信息怎么办?
请问企业更名了,如何变更开票信息呀?
命中该组 QA
40 电子发票 企业更名了,已开具的发票能重开吗 企业更名了,已开具的发票能重开吗怎么办?
请问企业更名了,已开具的发票能重开吗呀?
命中该组 QA
41 结清寄送 结清后需要做什么 结清后需要做什么?
请问结清后需要做什么呀?
命中该组 QA
42 结清寄送 哪些材料会寄出 哪些材料会寄出?
请问哪些材料会寄出呀?
命中该组 QA
43 结清寄送 材料多久会寄出 材料多久会寄出怎么办?
请问材料多久会寄出呀?
命中该组 QA
44 结清寄送 材料寄出能加急吗 材料寄出能加急吗怎么办?
请问材料寄出能加急吗呀?
命中该组 QA
45 结清寄送 多久联系我办理解除抵押 多久联系我办理解除抵押怎么办?
请问多久联系我办理解除抵押呀?
命中该组 QA
46 结清寄送 材料能直接寄给我吗 材料能直接寄给我吗怎么办?
请问材料能直接寄给我吗呀?
命中该组 QA
47 结清寄送 办理解除抵押,需要我准备什么 办理解除抵押,需要我准备什么?
请问办理解除抵押,需要我准备什么呀?
命中该组 QA
48 结清寄送 办理解除抵押,需要我到场吗 办理解除抵押,需要我到场吗怎么办?
请问办理解除抵押,需要我到场吗呀?
命中该组 QA
49 结清寄送 是否需要支付费用 是否需要支付费用怎么办?
请问是否需要支付费用呀?
命中该组 QA
50 结清寄送 车辆登记证如何给到我 车辆登记证如何给到我怎么办?
请问车辆登记证如何给到我呀?
命中该组 QA
51 提前结清 哪些情况无法申请提前结清 哪些情况无法申请提前结清?
请问哪些情况无法申请提前结清呀?
命中该组 QA
52 提前结清 如何申请提前结清 如何申请提前结清怎么办?
请问如何申请提前结清呀?
命中该组 QA
53 提前结清 收提前结清手续费吗 收提前结清手续费吗怎么办?
请问收提前结清手续费吗呀?
命中该组 QA
54 提前结清 如何还提前结清款项 如何还提前结清款项怎么办?
请问如何还提前结清款项呀?
命中该组 QA
55 提前结清 可以试算提前结清金额吗 可以试算提前结清金额吗怎么办?
请问可以试算提前结清金额吗呀?
命中该组 QA
56 提前结清 节假日可以申请吗 节假日可以申请吗怎么办?
请问节假日可以申请吗呀?
命中该组 QA
57 提前结清 租金日可以申请吗 租金日可以申请吗怎么办?
请问租金日可以申请吗呀?
命中该组 QA
58 提前结清 当天最晚几点还款 当天最晚几点还款怎么办?
请问当天最晚几点还款呀?
命中该组 QA
59 提前结清 当天未还款,怎么办 当天未还款,要怎么办?
请问当天未还款,怎么办呀?
命中该组 QA
60 提前结清 只能承租人提交申请吗 只能承租人提交申请吗怎么办?
请问只能承租人提交申请吗呀?
命中该组 QA
61 忠诚客户权益 忠诚客户有哪些礼遇 忠诚客户有哪些礼遇?
请问忠诚客户有哪些礼遇呀?
命中该组 QA
62 忠诚客户权益 之前选的金融方案,也能享受吗 之前选的金融方案,也能享受吗怎么办?
请问之前选的金融方案,也能享受吗呀?
命中该组 QA
63 忠诚客户权益 保时捷金融客户介绍 保时捷金融客户介绍怎么办?
请问保时捷金融客户介绍呀?
命中该组 QA
64 忠诚客户权益 如何查询我的客户身份 如何查询我的客户身份怎么办?
请问如何查询我的客户身份呀?
命中该组 QA
65 忠诚客户权益 我有购车意向,如何提交 我有购车意向,如何提交怎么办?
请问我有购车意向,如何提交呀?
命中该组 QA
66 车辆返还 什么情况可以返还车辆 什么情况可以返还车辆?
请问什么情况可以返还车辆呀?
命中该组 QA
67 车辆返还 车辆返还步骤是什么 车辆返还步骤是什么?
请问车辆返还步骤是什么呀?
命中该组 QA
68 车辆返还 如何预约到店检测 如何预约到店检测怎么办?
请问如何预约到店检测呀?
命中该组 QA
69 车辆返还 预约后能改期吗 预约后能改期吗怎么办?
请问预约后能改期吗呀?
命中该组 QA
70 车辆返还 到店时需携带什么材料 到店时需携带什么材料?
请问到店时需携带什么材料呀?
命中该组 QA
71 车辆返还 哪些情况无法返还车辆 哪些情况无法返还车辆?
请问哪些情况无法返还车辆呀?
命中该组 QA
72 车辆返还 对车况有什么要求 对车况有什么要求?
请问对车况有什么要求呀?
命中该组 QA
73 车辆返还 检测结果我不满意怎么办 检测结果我不满意要怎么办?
请问检测结果我不满意怎么办呀?
命中该组 QA
74 车辆返还 还车账单包括哪些款项 还车账单包括哪些款项?
请问还车账单包括哪些款项呀?
命中该组 QA
75 车辆返还 车辆检测收费吗 车辆检测收费吗怎么办?
请问车辆检测收费吗呀?
命中该组 QA

负样本:15 条与业务无关/近似但不应命中的输入,期望返回固定话术:

⚠️ 扫描方法:把测试集逐条输入机器人,正样本看命中率(≥ 目标值),负样本看误命中数(必须为 0)。若 0.7 误命中 > 0,改扫 0.8;若 0.8 正样本命中率过低,检查是否有 QA 的 Q 字段过于抽象(可向知识库补充改写条目,见「十」的 QA 更新机制)。

八、两段匹配代码(当前版本 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_question,输出 answer / __NO_MATCH__
# -*- coding: utf-8 -*-
# ⚠️ 本文件由 generate_code.py 从 qa_data.json 自动生成,请勿手改。
# 更新 QA 后:替换 qa_data.json 重新运行生成脚本(或联系 Hermes 处理)。

"""
微信小程序问答机器人 · 第二段:知识库匹配结果 -> 答案映射
================================================
用途:知识库节点检索命中后,将"匹配到的标准问题"映射为答案原文。
  命中   -> 返回对应答案原文(原样输出,不做任何润色)
  未命中 -> 返回 __NO_MATCH__ 标识,由固定话术节点兜底

平台接入:
  1. 输入变量: kb_question (str)  # 知识库返回的标准问题文本(非用户原话)
  2. 输出变量: answer (str)       # 命中=答案原文 / 未命中="__NO_MATCH__"

说明:本字典与第一段代码同源生成(qa_data.json),保证点选答案与知识库答案一致。
"""
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()
    return "".join(ch for ch in s if ch.isalnum())

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

def kb_to_answer(kb_question):
    """知识库命中的标准问题 -> 答案原文。未命中返回 NO_MATCH。"""
    key = _normalize(kb_question)
    if not key:
        return NO_MATCH
    return _NORM_MAP.get(key, NO_MATCH)

# ================== 平台入口(按需取消注释) ==================
# answer = kb_to_answer(kb_question)

九、验收清单

#用例期望结果
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 个重复问题「是否需要支付费用」

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