# AI 大模型 · 模板匹配严格测试用例(2026-10-26) > 被测对象:上传清洗流程中的 **AI 大模型模板匹配**(智能清洗 → AI 判定 → 模型裁决模板 + 列绑定 → 出口 A/B 入库)。 > 目标:以生产环境思路造多行业、多方言、多表头变体文件,重点覆盖**账单(银行流水)**与**话单(通信记录)**,并对 `table_info` 全量模板做覆盖。 > 本轮只记录问题,不修改代码;发现项留给使用方确认后再决定是否修复。 ## 1. 环境与入口 | 项 | 值 | |---|---| | 后端 | `ai-server`,`http://127.0.0.1:8980/js/a`,仓库根为工作目录 | | 前端 | `ai-electron/frontend`,`http://localhost:3100` | | 数据库 | PostgreSQL `192.168.0.106:5432/zsjz-ai`(平台库) | | 案件库 | DuckDB,按案件落在 `QingJian/workspace/{caseId}/...` | | 模型 | `agent_model` 默认对话模型:Ollama `qwen` @ `http://10.66.66.66:8080/v1`(Qwen3.8-27B);`AI判定并发=3`,单次匹配超时 180s,失败重试 3 次封顶 | | 嵌入 | 本地 bge-m3(`E:/workspace/zsjz-ai/bge-m3`),向量索引已就绪 | | 测试案件 | `AI大模型匹配严格测试-1026`(案件 id=19,owner=admin) | | 账号 | `admin / admin123` | | 入口 | 登录 → 案件管理 → 打开案件 → 案件数据 → **清洗数据** → 文件上传 → **智能清洗** → 进度页 → 结果/导入文件 | ### 1.1 界面可观测点 - 上传页:解析结果树、工作表状态(模板匹配成功/失败)、「智能清洗」按钮。 - 进度页:读取数据 → 清洗入库 → 数据治理;处理日志中 AI 阶段里程碑、逐表无法清洗原因。 - 导入文件页:sheet 行「清洗方式」(系统清洗/AI清洗)、「备注」(AI 匹配模板 / AI 新建表 / 失败原因)、导入成功/失败数。 - 导入数据页:既有业务表 / AI 动态表的数据与列。 - 后端证据:`ai_clean_job`(`status/exit_code/matched_by/match_tier/ref_template_id/ai_template_id/llm_calls/token/row_*`)、`ai_clean_template/ai_clean_field/ai_clean_rule`、服务日志中的「AI 匹配第三腿」「可列打分明细」「出口 A 交既有链路」。 ### 1.2 判定口径 | 途径 | 含义 | 预期 | |---|---|---| | `HEADER_CACHE` | 表头指纹直通 AI 模板库,零模型 | 复用存档绑定;同表头 | | `SCORE` | 归一化打分命中既有模板且强壮 | 直接出口 A;零模型 | | `LLM` | 模型在 top-12 候选中裁决 | 模型返回序号 + 列绑定;按置信度分档 | | `SELF_HEADER` | 无候选,按文件表头自建表 | 出口 B,全 TEXT | | `A` | 写既有业务表 | 必须具备 `ref_template_id`,抽样 verify 通过 | | `B` | 写 AI 动态表 `ai_t*` | 具备 `ai_template_id`,数据落 AI 表 | | `NEED_REVIEW` | 结构归一/必填错误率/置信度不过线/无绑定 | 不写业务表,需人工 | ## 2. 测试数据设计 ### 2.1 目录与保留策略 所有可复现文件保留在 `docs/testing/fixtures/ai-llm-match-20261026/`: ```text fixtures/ai-llm-match-20261026/ ├── bills/ # 账单/银行流水(xlsx/csv/xls) ├── calls/ # 话单/短信(xlsx/csv/xls) ├── cross-industry/ # 车辆/开户/企业/轨迹/酒店/航班等 ├── edge/ # 异常与边界 ├── full-template/ # table_info 全量模板同表头文件 ├── full-template-variants/# table_info 全量模板改写文件(模型判定) ├── manifest.json # 测试编号、文件、预期模板、变异方式 └── results/ # 执行结果 JSON、关键日志、截图 ``` ### 2.2 文件生成原则 - **生产风格数据**:姓名、身份证、手机号、银行卡、开户行、商户、摘要、基站、通话时长均按真实形态生成;金额/日期/时间故意混入常见脏值。 - **表头变异**: - 同义词(同义词典命中):交易金额↔发生额、借贷标志↔借贷方向、查询卡号↔查询账号、本机号码↔本机电话号码。 - 相似词/换词:号码↔号、帐号↔账号、类型↔类别、标识↔标志、时间↔时点/日期。 - 列多/列少:额外业务列、删除可选列、只保留必填列、超宽表。 - 列序:完全倒序/随机打乱(既有匹配器对列序不敏感,需配合改词才进入 AI)。 - 噪音:标题行、说明行、空行、合并表头、全角空格/括号、重复列名、空列。 - 格式:xlsx / xls / csv(UTF-8、UTF-8 BOM、GBK)、双 sheet、仅表头、损坏文件。 - **数据唯一性**:每个文件的数据/行数/姓名/卡号不同,避免上传 MD5 去重把用例吞掉。 - **强制进入 AI 途径**:对模板的 `matched=1` 字段做同义/换词改写,使既有匹配器在**上传阶段**无法精确命中,从而触发智能清洗的 AI 判定。 ## 3. 用例清单 > 结果列在每轮执行后回填。状态:`PASS` / `FAIL` / `BLOCKED` / `N/A`。 > 「预期模板」为 `table_info.id`;「出口」为 A=既有业务表、B=AI 动态表。 ### A. UI 主链路 | 编号 | 场景 | 步骤 | 预期 | 结果 | |---|---|---|---|---| | UI-01 | 新建案件并进入上传页 | 案件管理→新建→打开→清洗数据 | 进入文件上传,上传/智能清洗按钮可用状态正确 | 待执行 | | UI-02 | 上传 1 个标准账单 | 选择文件→上传→解析 | 工作表「模板匹配成功」;智能清洗可用 | 待执行 | | UI-03 | 上传 1 个账单变体(同义) | 选择文件→上传→智能清洗 | 进入进度页;AI 判定推进;日志出现 AI 阶段;完成后统计正确 | 待执行 | | UI-04 | 上传 1 个话单变体(同义) | 同上 | 同上,且落库行列正确 | 待执行 | | UI-05 | 进度页/结果页 | 观察进度环、步骤条、处理日志、完成态 | 无卡死;失败/无法清洗口径正确;可查看结果 | 待执行 | | UI-06 | 导入文件页回显 | 查看 sheet 行 | 清洗方式=AI清洗;备注=匹配模板/新建表;成功失败数正确 | 待执行 | | UI-07 | 导入数据页核验 | 打开 AI/既有表 | 行数、列名、日期/金额类型展示正确 | 待执行 | | UI-08 | 手动清洗回归 | 上传页→手动清洗 | 进入清洗页,模板/列映射可操作(不受 AI 链路影响) | 待执行 | ### B. 账单/银行流水矩阵(重点) | 编号 | 文件 | 场景 | 预期模板/行为 | 结果 | |---|---|---|---|---| | BILL-01 | BILL-01_通用流水_标准.xlsx | 与模板 2 逐字同表头(30 列) | 上传阶段既有直中 → 系统清洗;不产生 AI job | 待执行 | | BILL-02 | BILL-02_通用流水_同义词.xlsx | 查询卡号→查询账号、借贷标志→借贷方向、交易金额→发生额、交易时间→交易时点 | 既有失败→LLM;预期 2 或同族;出口 A | 待执行 | | BILL-03 | BILL-03_通用流水_相似词.xlsx | 查询卡号码、借贷标识、交易金额(元)、交易日期时间 | LLM;预期 2/26;置信度与列映射正确 | 待执行 | | BILL-04 | BILL-04_通用流水_乱序增列.xlsx | 列序倒置 + 额外 3 列(网点电话/经办人/复核人) | LLM;模板 2 族;多余列不丢数据 | 待执行 | | BILL-05 | BILL-05_通用流水_缺必填.xlsx | 删除「借贷标志」;其余同表头 | 不得写既有业务表;出口 B 或 NEED_REVIEW | 待执行 | | BILL-06 | BILL-06_通用流水_表头多.xlsx | 表头多于模板(+8 列) | LLM;模板 2 族;额外列按原样保留 | 待执行 | | BILL-07 | BILL-07_通用流水_表头少.xlsx | 仅保留必填 + 4 个可选列 | LLM;模板 2 族;出口 A | 待执行 | | BILL-08 | BILL-08_交通银行_标准.xlsx | 模板 34 逐字表头 | 既有直中;不产生 AI job | 待执行 | | BILL-09 | BILL-09_交通银行_同义.xlsx | 交易卡号→银行卡号、借贷方标志→借贷方向、金额→发生额 | LLM;预期 34;出口 A | 待执行 | | BILL-10 | BILL-10_光大银行_同义乱序.xlsx | 本方卡号→本方账号、借贷标志→借贷方向、业务摘要→摘要;列序打乱 | LLM;预期 35;出口 A | 待执行 | | BILL-11 | BILL-11_工商银行_同义.xlsx | 发生额→交易金额、记账时间→交易时间、卡号→银行卡号 | LLM;预期 36;借贷方向/金额列不串 | 待执行 | | BILL-12 | BILL-12_招商银行_同义.xlsx | 交易方向→借贷标志、对手帐号→对方账号、联机余额→余额 | LLM;预期 38;出口 A | 待执行 | | BILL-13 | BILL-13_长沙银行_同义.xlsx | 卡(帐)号→账号、调查户名→户名、资金用途→摘要 | LLM;预期 39;出口 A | 待执行 | | BILL-14 | BILL-14_DC银行_同义.xlsx | D/C→借贷标志、交易对手名称→对方户名、可用余额→余额 | LLM;预期 40;出口 A | 待执行 | | BILL-15 | BILL-15_邮储银行_同义.xlsx | 借贷区分→借贷标志、交易对手名称→对方户名、交易名称→交易类型 | LLM;预期 41;出口 A | 待执行 | | BILL-16 | BILL-16_渤海银行_同义.xlsx | 客户名称→户名、账号余额→余额、交易摘要→摘要 | LLM;预期 43;出口 A | 待执行 | | BILL-17 | BILL-17_微信支付账单.csv | 微信风格:交易时间/交易类型/交易对方/商品/收/支/金额(元)/支付方式/当前状态/交易单号/商户单号/备注 | LLM 或自建表;不得错写既有表;金额符号正确 | 待执行 | | BILL-18 | BILL-18_支付宝账单.csv | 支付宝风格:交易号/商家订单号/交易创建时间/付款时间/最近修改时间/交易来源地/类型/交易对方/商品名称/金额(元)/收/支/交易状态/服务费(元)/成功退款(元)/备注/资金状态 | LLM 或自建表;收/支方向正确 | 待执行 | | BILL-19 | BILL-19_银行流水_英文表头.xlsx | 全英文:Bank Name/Customer Name/Card No/Debit Credit/Amount/Transaction Time/Balance | LLM 不误判;无法匹配则自建表 | 待执行 | | BILL-20 | BILL-20_银行流水_标题说明行.xlsx | 第 1 行标题、第 2 行说明、第 3 行空行、第 4 行表头 | 表头定位正确;行号从表头后开始 | 待执行 | | BILL-21 | BILL-21_金额脏值.xlsx | 1,234.50 / -100.00 / (200.50) / ¥2,300.5 / 100元 / 1.2万 | 金额列解析正确;坏值置空或拒绝符合字段约束 | 待执行 | | BILL-22 | BILL-22_日期脏值.xlsx | 2026/1/6、2026年1月7日、2026-02-30、45000(Excel 序列号)、20260108 | 合法日期入库、非法置空;不得错日 | 待执行 | | BILL-23 | BILL-23_流水_UTF8BOM.csv | UTF-8 BOM,逗号分隔 | 探测/解析正常,表头无 BOM 残留 | 待执行 | | BILL-24 | BILL-24_流水_GBK.csv | GBK 编码 | 中文表头不乱码 | 待执行 | | BILL-25 | BILL-25_流水_双sheet.xlsx | Sheet1 流水、Sheet2 汇总 | 各自判定;互不污染;统计正确 | 待执行 | | BILL-26 | BILL-26_流水_合并表头.xlsx | 两行合并表头(借方/贷方金额) | 结构归一不可用 → NEED_REVIEW,不硬洗 | 待执行 | | BILL-27 | BILL-27_流水_空表头.xlsx | 表头全空/仅一列 | 不崩溃;自建表或 NEED_REVIEW | 待执行 | | BILL-28 | BILL-28_流水_超宽表.xlsx | 40 列,含 10 个额外列 | 不崩溃;模型列绑定不越界 | 待执行 | | BILL-29 | BILL-29_流水_重复列名.xlsx | 「交易金额」出现两次 | 不串列;重复列处理有明确行为 | 待执行 | | BILL-30 | BILL-30_流水_同名重复上传.xlsx | 与 BILL-02 内容相同的副本 | 按 MD5 去重或重新清洗;不得产生重复数据 | 待执行 | ### C. 话单/通信记录矩阵(重点) | 编号 | 文件 | 场景 | 预期模板/行为 | 结果 | |---|---|---|---|---| | CALL-01 | CALL-01_通信记录_标准.xlsx | 模板 1 逐字表头(17 列) | 既有直中;不产生 AI job | 待执行 | | CALL-02 | CALL-02_通信记录_同义词.xlsx | 本机号码→本机电话号码、话单类型→通话类型、呼叫开始时间→通话开始时间 | LLM;预期 1;出口 A | 待执行 | | CALL-03 | CALL-03_通信记录_相似词.xlsx | 被叫号码、主叫号码、通话起始时点 | LLM;预期 1/42;方向列不串 | 待执行 | | CALL-04 | CALL-04_通信记录_乱序.xlsx | 列序完全倒置 | LLM;预期 1;出口 A | 待执行 | | CALL-05 | CALL-05_通信记录_缺必填.xlsx | 删除「话单类型」 | 不写既有业务表;B 或 NEED_REVIEW | 待执行 | | CALL-06 | CALL-06_通信记录_多列.xlsx | +基站名称/经纬度/IMEI/备注 | LLM;预期 1;额外列保留 | 待执行 | | CALL-07 | CALL-07_通信记录_少列.xlsx | 仅本机号码/对方号码/话单类型/呼叫开始时间 | LLM;预期 1;出口 A | 待执行 | | CALL-08 | CALL-08_导出话单_标准.xlsx | 模板 42 逐字表头 | 既有直中 | 待执行 | | CALL-09 | CALL-09_导出话单_同义.xlsx | 本方号码→本机号码、主被叫标识→通话类型、本方姓名→使用人姓名 | LLM;预期 42;出口 A | 待执行 | | CALL-10 | CALL-10_移动语音话单.xlsx | 模板 1557528396 表头 + 基站号/小区代码 | LLM;预期 1557528396;出口 A | 待执行 | | CALL-11 | CALL-11_移动调单.xlsx | 模板 2022049432:呼叫类型/通话起始时间/基站号/小区号 | LLM;预期 2022049432;出口 A | 待执行 | | CALL-12 | CALL-12_联通语音.xlsx | 模板 401794643:billing_nbr计费号码 等中英混合 | LLM;预期 401794643;出口 A | 待执行 | | CALL-13 | CALL-13_联通短信.xlsx | 模板 584544982:收费用户号码/开始时间/通话类型/对端号码 | LLM;预期 584544982/1318768623;出口 A | 待执行 | | CALL-14 | CALL-14_央地协查短信.xlsx | 模板 2041091612:源地址/目的地址/短信分类/发送时间 | LLM;预期 2041091612;短信内容保留 | 待执行 | | CALL-15 | CALL-15_电信话单.xlsx | 模板 830256311 中英混合表头 | LLM;预期 830256311;出口 A | 待执行 | | CALL-16 | CALL-16_电信通联话单.xlsx | 模板 1940093260:计费号码/主叫/开始时间/通话时长/被叫 | LLM;预期 1940093260;出口 A | 待执行 | | CALL-17 | CALL-17_通信记录_日期时间分列.xlsx | 模板 64:通话日期 + 通话时间 | LLM;预期 64;日期/时间均入库 | 待执行 | | CALL-18 | CALL-18_主被叫方向.xlsx | 话单类型列值为「主叫/被叫/呼入/呼出」 | 方向映射正确;不得反转 | 待执行 | | CALL-19 | CALL-19_时长格式.xlsx | 1:23、83秒、0分45秒、2分 | 时长数值正确;坏值置空 | 待执行 | | CALL-20 | CALL-20_基站信息.xlsx | LAC/CellID/小区名/经纬度混合 | 基站列保留;不误绑对方归属地 | 待执行 | | CALL-21 | CALL-21_话单_CSV标题行.csv | 标题行 + 空行 + 表头 + 数据 | 表头定位正确;CSV 不 Skip | 待执行 | | CALL-22 | CALL-22_话单_损坏.xlsx | 伪造 xlsx 内容 | 解析失败记录,不拖垮批次 | 待执行 | | CALL-23 | CALL-23_话单_双sheet.xlsx | 移动 + 联通两个 sheet | 各自命中;统计合计正确 | 待执行 | | CALL-24 | CALL-24_话单_重复上传.xlsx | CALL-02 副本 | 去重/重清洗不重复 | 待执行 | ### D. 跨行业矩阵 | 编号 | 文件 | 场景 | 预期 | 结果 | |---|---|---|---|---| | IND-01 | IND-01_车辆登记_标准.xlsx | 已有 AI 模板「机动车信息」逐字表头 | HEADER_CACHE 直通,零模型,出口 B | 待执行 | | IND-02 | IND-02_车辆登记_同义词.xlsx | 号牌号码→牌照号码、车辆类型→车辆种类、车身颜色→颜色 | LLM/SCORE;复用车辆 AI 模板;出口 B | 待执行 | | IND-03 | IND-03_银行开户信息.xlsx | 模板 4 同义改写(客户名称→户名、证照号码→证件号码) | LLM;预期 4;出口 A/B 合理 | 待执行 | | IND-04 | IND-04_通信登记信息.xlsx | 模板 3 同义改写(本机号码→号码) | LLM;预期 3/23;不误判话单 | 待执行 | | IND-05 | IND-05_企业基本信息.xlsx | 复用 AI 模板「企业-基本信息查询」 | HEADER_CACHE/LLM;出口 B | 待执行 | | IND-06 | IND-06_企业主要人员.xlsx | 复用 AI 模板「企业-主要人员信息」 | 出口 B | 待执行 | | IND-07 | IND-07_个体经营者.xlsx | 复用 AI 模板「个体-经营者信息」 | 出口 B | 待执行 | | IND-08 | IND-08_航班记录.xlsx | 航班号/出发地/到达地/起飞时间/座位 | LLM 或自建;不误判账单 | 待执行 | | IND-09 | IND-09_酒店入住.xlsx | 入住时间/离店时间/房号/酒店名称 | LLM 或自建;日期正确 | 待执行 | | IND-10 | IND-10_快递物流.xlsx | 运单号/寄件人/收件人/揽收时间/轨迹 | LLM 或自建;长数字不丢精度 | 待执行 | | IND-11 | IND-11_社保公积金.xlsx | 单位名称/缴费基数/缴费月份/个人账户 | LLM 或自建;月份/金额正确 | 待执行 | | IND-12 | IND-12_不动产登记.xlsx | 不动产权证号/坐落/面积/权利人 | LLM 或自建;面积数值正确 | 待执行 | | IND-13 | IND-13_出入境记录.xlsx | 证件号码/出入境日期/口岸/航班 | LLM 或自建;日期正确 | 待执行 | | IND-14 | IND-14_车辆轨迹.xlsx | 车牌/过车时间/卡口/方向 | LLM 或自建;时间/车牌正确 | 待执行 | | IND-15 | IND-15_人员轨迹.xlsx | 身份证号/时间/地点/经度/纬度 | LLM 或自建;经纬度不丢精度 | 待执行 | | IND-16 | IND-16_铁路购票.xlsx | 订单号/车次/乘车日期/出发到达站/席别 | LLM 或自建;订单号保留 | 待执行 | | IND-17 | IND-17_电商订单.xlsx | 订单号/下单时间/商品/金额/收货地址 | LLM 或自建;金额正确 | 待执行 | | IND-18 | IND-18_保险保单.xlsx | 保单号/投保人/被保险人/保费/生效日期 | LLM 或自建;金额/日期正确 | 待执行 | | IND-19 | IND-19_证券交易.xlsx | 股东账号/证券代码/买卖方向/成交价格/成交数量 | LLM 或自建;方向/金额正确 | 待执行 | | IND-20 | IND-20_支付账户.xlsx | 支付账号/绑定卡/交易时间/金额/对手 | LLM 或自建;卡号保留 | 待执行 | ### E. 异常与边界 | 编号 | 场景 | 预期 | 结果 | |---|---|---|---| | EDGE-01 | 仅表头无数据行 | 任务结束,0 行,不报错 | 待执行 | | EDGE-02 | 空 xlsx(无 sheet 内容) | 解析失败/跳过,不拖垮批次 | 待执行 | | EDGE-03 | 伪造 xlsx | SKIP/FAIL,llm=0 | 待执行 | | EDGE-04 | 非表格 txt | 文件登记/不支持解析,不进入模板匹配 | 待执行 | | EDGE-05 | 5000 行流水 | 流式入库,进度/统计正确,耗时可控 | 待执行 | | EDGE-06 | 合并单元格表头 | NEED_REVIEW,不硬洗 | 待执行 | | EDGE-07 | 三 sheet 混合(账单/话单/无关) | 各自结论正确,互不污染 | 待执行 | | EDGE-08 | 表头在第 10 行 | 表头定位正确 | 待执行 | | EDGE-09 | 含空列/重复列/全角空格 | 归一化正确,不串列 | 待执行 | | EDGE-10 | 同名文件重复上传 | MD5 去重或重清洗,不重复写 | 待执行 | | EDGE-11 | 跨案件同文件 | 数据隔离;既有模板可命中;AI 模板复用符合设计 | 待执行 | | EDGE-12 | 模型不可用(临时切断) | fail-open:按未命中/自建表,不挂起批次 | 待执行 | | EDGE-13 | 判定中途重启后端 | 批次被标记 FAILED,可重新发起 | 待执行 | | EDGE-14 | 两批次并发提交 | 案件数据互不覆盖;job 不串 | 待执行 | | EDGE-15 | 表头含提示词注入/SQL 注入 | 模型不执行指令;不影响匹配;SQL 不执行 | 待执行 | ### F. table_info 全量模板覆盖 | 编号 | 场景 | 预期 | 结果 | |---|---|---|---| | ALL-01 | 364 个模板按各自表头生成同构文件,逐个上传 | 每个 sheet 均被既有匹配器命中;命中模板 id 正确;无解析异常 | 待执行 | | ALL-02 | 364 个模板各生成 1 个「改一个匹配字段」变体,走 AI | 正确模板在候选 top-12;模型命中/合理自建;无错写业务表 | 待执行 | | ALL-03 | 10 组重复表头模板族 | 记录先到先得/歧义;不崩溃 | 待执行 | | ALL-04 | AI 模板库同表头二次上传 | HEADER_CACHE 零模型复用;数据并入/可撤销 | 待执行 | ### G. 安全与一致性 | 编号 | 场景 | 预期 | 结果 | |---|---|---|---| | SEC-01 | 模型返回不存在的候选序号 | 按未命中处理,不越界、不落库 | 待执行 | | SEC-02 | 模型编造字段名 | 被 filterBinds 丢弃;不静默吞列 | 待执行 | | SEC-03 | 表头含「忽略以上指令」 | 不改变模型行为;匹配仍按结构 | 待执行 | | SEC-04 | 跨案件读取 job/数据 | 拒绝或只返回当前案件 | 待执行 | | SEC-05 | 出口 A 必填列错误率高 | verify 拦截 → NEED_REVIEW,不写业务表 | 待执行 | ## 4. 记录规则 每个用例记录: 1. 测试编号、文件、上传时间、批次号; 2. 上传阶段状态:`SHEET_TEMPLATE_MATCHED_SUCCESS/FAIL`、命中的既有模板; 3. AI job:`status / exit_code / matched_by / match_tier / ref_template_id / ai_template_id / llm_calls / token_in / token_out / confidence / row_total / row_loaded / row_rejected / fail_reason`; 4. 数据核验:落库表名、行数、列映射(重点检查金额/日期/方向/本方对方是否串列); 5. 界面证据:进度页、导入文件页、导入数据页截图; 6. 若失败:复现步骤、实际现象、服务日志片段、期望结果、严重级别(P0 错写业务表 / P1 无法入库 / P2 可用性问题)。 ## 5. 预期风险点(用于定向观察) - 模型把 A 银行流水判成 B 银行模板,且因 `passesStrong` 通过而写入错误业务表(P0)。 - 模型置信度 ≥0.6 但列绑定错误,抽样 verify 未覆盖到脏列,导致金额/借贷方向错误入库(P0)。 - 同义词/相似词改写过强,正确模板未进 top-12 候选,AI 自建表而非命中模板(P1)。 - 缺必填列时模型硬凑模板,出口 A verify 拦截转 NEED_REVIEW 而非合理自建(P2)。 - 账单/话单方向字段(借贷、主被叫)映射反转(P0)。 - 金额单位(元/万元)、日期格式、Excel 序列号处理错误(P1)。 - 表头重复/空列导致列索引偏移(P1)。 - 多 sheet / 大文件导致 SSE 进度卡死或统计口径不一致(P2)。 - 重复上传/跨案件复用产生重复行或串案(P1)。 ## 6. 执行结果(本轮已跑部分) > 详细问题、复现文件与日志见 [ai-llm-template-match-bug-report-20261026.md](ai-llm-template-match-bug-report-20261026.md)。 > 2026-10-26 修复后的复测记录见该报告第 7 节(F-01/F-01B/F-03B/F-05/F-06/F-07)。 > 本地 27B 模型只支持单并发,单次判定约 40–120s;为保证覆盖优先执行了高价值场景,未跑条目见 §7。 | 组 | 用例 | 结果 | |---|---|---| | UI | UI-01~UI-07(案件 19) | 上传→智能清洗→进度页→结果页全链路可用;标准账单直中,账单/话单同义变体模型判定 0.95;完成统计存在多报(见 Bug F-02) | | 账单 | BILL-01(标准) | 既有直中模板 2;金额格式化值被清洗为 0.00(Bug F-03) | | 账单 | BILL-02(同义) | LLM 0.95 选中模板 2,出口 B 10 行;第二次跨案 HEADER_CACHE 零模型复用 | | 账单 | BILL-03(相似词) | SCORE 出口 A,模板 2,置信 0.9320 | | 账单 | BILL-04(乱序+增列+换词) | SCORE 出口 A,模板 2,置信 0.9275 | | 账单 | BILL-05(缺必填) | 批次被停止前处于 MATCHING;未收口 | | 账单 | BILL-08(交行标准) | 既有直中模板 34 | | 账单 | BILL-09(交行同义) | **P0 错配模板 48「农商行交易流水」;8 行数据全部被拒,业务表 0 行**(Bug F-01) | | 账单 | BILL-10/11(光大/工行同义) | SCORE 出口 A,模板 35/36,置信 0.9320/0.9291 | | 账单 | BILL-12(招行同义) | 主模型完成,批次停止前未收口 | | 话单 | CALL-01(标准)、CALL-08(导出话单标准) | 既有直中模板 1/42,零模型 | | 话单 | CALL-02(同义) | HEADER_CACHE 出口 B 12 行,零模型(跨案 AI 模板复用) | | 话单 | CALL-03(相似词) | LLM 出口 B 12 行,置信 0.95 | | 话单 | CALL-10(移动话单同义) | LLM 出口 B 10 行,置信 0.95 | | 话单 | CALL-18(主被叫方向) | LLM 出口 B 12 行;方向列落库为整串别名(Bug F-03B) | | 话单 | CALL-09/17/19 | **上传阶段被既有模糊匹配误判为模板 3「通信登记信息」,未进入 AI;CALL-09 数据写入 call_opening_info 仅剩姓名/号码**(Bug F-01B) | | 跨行业 | IND-01(车辆标准) | HEADER_CACHE 零模型,出口 B 8 行 | | 跨行业 | IND-02(车辆同义) | LLM 0.97,出口 B 8 行 | | 跨行业 | IND-04(通信登记同义) | LLM 出口 B 8 行 | | 跨行业 | IND-05/06/07(企业类标准) | HEADER_CACHE 零模型,出口 B 6 行/6 行/6 行 | | 跨行业 | IND-08(民航订票同义) | 模型返回 templateNo=0 → SELF_HEADER 自建表 7 行 | | 跨行业 | IND-20(支付账户同义) | 模型返回 templateNo=0 → SELF_HEADER 自建表 7 行 | | 跨行业 | IND-03(银行开户同义) | 上传直中被 6 列子模板 2084276161 吞掉;14 列不映射(Bug F-01B) | | 跨行业 | IND-13(出入境同义) | 上传直中被 5 列子模板 596849484 吞掉;姓名写入 certType,11 列丢失(Bug F-01B) | | 异常 | EDGE-01(仅表头) | 既有直中,0 行,批次 DONE | | 异常 | EDGE-02/EDGE-04(空 workbook / txt) | 不产生可清洗 sheet;txt 触发文件 AI 识别,与单会话模型争用导致同批 AI 清洗失败(Bug F-04B) | | 异常 | EDGE-03(损坏 xlsx) | job=SKIP「结构探测不可用」,不拖垮批次 | | 异常 | EDGE-06(表头第 10 行) | 模型调用受争用断流 → FAIL「模型未返回可解析的规则草稿」 | | 异常 | EDGE-07(合并单元格) | NEED_REVIEW「需要结构归一」,不硬洗 | | 异常 | EDGE-08(三 sheet) | 银行流水直中;通信记录被模板 3 吞掉;通讯录 SELF_HEADER 5 行 | | 异常 | EDGE-09(空列/重复列) | 上传直中模板 2(AI 被绕过);列处理未验证到 AI 列映射 | | 异常 | EDGE-10(表头注入) | 模型未选模板 → SELF_HEADER 自建表 6 行,无注入执行 | | 全量 | ALL-01(364 模板同表头上传) | 361/364 上传直中;345 命中正确模板、16 错配、3 失败(元数据不一致),详见 Bug 报告 F-01C | | 全量 | ALL-02(364 模板 AI 变体) | 未全量执行;生成器与文件已保留,可补跑 | ## 7. 未执行/受限说明 - 本地模型单并发下单次 40–120s;为在合理时间内覆盖账单/话单/跨行业/异常,以下条目未执行或未收口: - BILL-06/07/12~16、BILL-17~30 大部; - CALL-04~07、CALL-11~16、CALL-20~24; - IND-09~12、IND-14~19; - ALL-02 全量变体、EDGE-05(5000 行)。 - 相关样本、生成器和 manifest 均在 `docs/testing/fixtures/ai-llm-match-20261026/`,可按 `run_tests.py --ids ...` 补跑。 - 内置浏览器截图受可见性限制;关键证据均保留为 API 返回 JSON、`ai_clean_job`/`clean_error_log` 记录与服务日志。 ## 8. 执行记录 | 日期 | 范围 | 结果 | 备注 | |---|---|---|---| | 2026-10-26 | 用例文档 | 已编写 | 按本文件执行 | | 2026-10-26 | 账单/话单/跨行业/异常精选 | 已执行 | 发现 2 个 P0、4 个 P1、3 个 P2,详见 Bug 报告 | | 2026-10-26 | table_info 364 模板同表头 | 执行中 | `results/` 与报告回填 |