面向「保单结构化存储」与「条款自动归集」两个任务的系统架构。本文档给出分层架构、数据域划分、双流水线设计、条款获取策略路由与表结构骨架;业务字段的权威定义留待保险条款解读专家补充,本文档只锁定架构骨架与接口边界。
先把架构定调的三句话放在最前面,后面所有设计都是这三条的展开。
C00017930912026012844573)。链接是获取线索、会失效、会换域名;注册号才是跨保单、跨时间的稳定主键。panliku 的「SQLite 结构化 + OSS 原件 + MCP/Web 双通道」骨架,在其旁边并列挂一个新的条款域:保单流水线负责「这张单保了什么」,条款流水线负责「这条款写了什么」,中间用一张绑定表 + 一张证据链表把两边缝起来。
以下结论全部来自对 5 份真实保单的逐页解析,不是推测。原始抽取文本存于 样张实测/ 目录。
| 样张 | 保险人(出单机构) | 页数 | 条款形态 | 条款数 | 获取特征 |
|---|---|---|---|---|---|
| 公共责任险 | 中国人寿财产保险 雅安市雨城区支公司 |
4 | C 二次跳转 | 21 | econnect.chinalife-p.com.cn 取址接口,非文件直链 |
| 团体意外险 | 阳光财产保险 重庆市分公司渝中支公司 |
3 | B 直链 PDF | 7 | epolicy.sinosig.com,文件名即条款全名(URL 编码) |
| 雇主责任险 | 众安在线财产保险 | 56 | B 直链 PDF | 9 | static.zhongan.com/upload/core/term/{条款码}.pdf,条款码如 3B3 |
| 建工团意 | 中国太平洋财产保险 苏州分公司 |
25 | A 内嵌正文 | 2 | 条款全文印在 p4 起共 19 页,含注册号 |
| 建筑工程一切险 | 中国太平洋财产保险 苏州分公司 |
24 | A 内嵌正文 | 1 | 条款全文印在 p4 起共 10 页,含注册号 |
| 形态 | 原始链接 / 正文锚点示例 | 可自动化程度 |
|---|---|---|
| A 内嵌 | 中国太平洋财产保险股份有限公司 建筑工程施工人员团体人身意外伤害保险(2013 版)条款(产品注册号:H00001432312017052436981)第一部分 基本条款 / 第一条 保险合同构成 … | 100% — 纯文本抽取 + 结构化切分 |
| B 直链 | static.zhongan.com/upload/core/term/3B3.pdf epolicy.sinosig.com/digitalBill_download/resource/pdfs/阳光财产保险股份有限公司团体意外伤害保险(互联网专属)条款.pdf |
约 95% — 直接 GET,需处理 UA / 失效 |
| C 跳转 | econnect.chinalife-p.com.cn/frontendnew/getobscloudurl?file=/clausefile/clausePdf/8017658/10001632/8017658.pdf | 约 80% — 需二次请求换真实地址,且链接有效期短,必须即时落盘 |
分层负责「数据怎么流」,双域负责「数据怎么放」。
这是整个架构最关键的部分。下面的字段是骨架——圈定了有哪些实体、彼此什么关系;具体字段的权威定义留给保险条款解读专家。
两个任务不是串行依赖,而是「任务一产出引用 → 任务二消费引用」,可并行推进。
| 步骤 | 环节 | 做什么 | 产出 |
|---|---|---|---|
| 1 | 指纹去重 | 文件 SHA256 比对,重复上传直接返回已有记录 | doc_artifact |
| 2 | 保司识别 | 默认按页脚/落款/域名识别保险人;人工可选择覆盖 | insurer_id |
| 3 | 形态分类 | 判定是「保单+内嵌条款」还是「保单+外链条款」 | doc_kind |
| 4 | 分块解析 | 拆成四个逻辑块:主体信息 / 保障明细表 / 特别约定 / 条款清单 | 块级结构 |
| 5 | 字段抽取 | 按保司模板抽取,输出结构化 JSON + 每字段证据锚点 | 抽取结果 |
| 6 | 条款引用抽取 | 提取条款名称、注册号、备案号、链接/条款码 | clause 引用列表 |
| 7 | 勾稽校验 | 总保费 = 各分项之和;限额关系自洽;日期区间合法 | 校验报告 |
| 8 | 落库 + 闸门 | 高置信度直接入库;低置信度进人工复核队列 | policy 记录 |
| 步骤 | 环节 | 做什么 | 幂等键 |
|---|---|---|---|
| 1 | 引用归并 | 同一保单内按注册号/名称去重(实测众安 27 链接 → 9 条款) | policy_id + register_no |
| 2 | 主数据查重 | 查 clause 表;命中则直接建立绑定,跳过下载 | insurer_id + register_no |
| 3 | 形态判定 | 内嵌 / 直链 / 跳转 / 无来源,四选一 | — |
| 4 | 保司适配器取回 | 调用对应保司的解析插件,拿到条款 PDF 或正文 | content_hash |
| 5 | 正文快照 | PDF 落 OSS + 正文抽文本 + 内容哈希(防重复入库) | content_hash |
| 6 | 条目切分 | 按「第X条」锚点切成 clause_section,保留层级 | clause_version_id + order_no |
| 7 | 向量化 | 每个条目生成语义向量,写入 clause_embedding | section_id |
| 8 | 回写绑定 | 更新绑定表状态为 ok,把条款挂回保单 | binding_id |
这是任务二里最需要架构设计的部分。不能写死一套下载逻辑,必须做成插件式适配器。
| 形态 | 判定特征 | 适配器行为 | 实测样例 | 难度 |
|---|---|---|---|---|
| A 内嵌正文 | 文档内无条款链接,但存在「第X条」西式条目文本,且含有产品注册号 | 直接对本文档做文本抽取 → 按注册号拆出多个条款 → 按「第X条」切分条目 | 太保建工团意 太保建筑工程一切险 |
低 |
| B1 短码直链 | 链接形如 .../term/{短码}.pdf,短码为 3 位字母数字混合 |
直接 GET 下载。短码可作为备用匹配键 | 众安雇主责任险3B3 / 3E5 / 3B8 / 4T1 / 4C1 / 34Q / 4C4 / 34B / 4D8 |
低 |
| B2 长名直链 | 链接路径以 URL 编码的中文条款全名结尾,可直接反解出条款名称 | 直接 GET 下载。文件名反解可作为条款名称的独立校验来源 | 阳光财险团体意外险epolicy.sinosig.com/…/阳光财产保险股份有限公司团体意外伤害保险(互联网专属)条款.pdf |
低 |
| C 二次跳转 | 链接含 getobscloudurl / getUrl 等取址语义关键词,返回内容不是 PDF |
两步走:① GET 取址接口拿真实云存储地址 → ② 立即下载。真实地址有效期短,必须同步落盘,不能只存链接 | 国寿财险公共责任险econnect.chinalife-p.com.cn/frontendnew/getobscloudurl?file=/clausefile/clausePdf/8017658/10001632/8017658.pdf |
中 |
| D 无来源 | 只有条款名称,无链接、无内嵌正文 | 转人工队列:① 按名称在保司官网检索 ② 生成向保司/经纪公司索取条款的函件 ③ 人工回传后入库 | —(预留) | 高 |
每个保司一个适配器实现,统一接口,新增保司只加插件不改主流程:
| 接口方法 | 输入 | 输出 / 职责 |
|---|---|---|
detect() | 条款引用记录 | 返回该保司的获取形态(A/B/C/D),用于路由 |
resolve_url() | 原始链接 / 条款码 | 返回可直接下载的真实文件地址(C 形态在这里做二次请求) |
fetch() | 真实地址 | 下载文件字节流,处理 UA / Referer / 超时 / 重试 |
extract_text() | 文件字节流 | 返回纯文本 + 页级结构(供后续条目切分) |
verify() | 抽出的正文 | 校验:正文里的注册号/条款名是否与引用一致(防下错文件) |
8017658/10001632),众安的文件名是短码而保单上写的是全名。下错条款文件是这套系统里最危险的错误——它不会报错,但会让你在理赔核算时引用错误的条款。因此适配器取回正文后,必须回到正文里核对注册号,不一致就标记为待人工确认。
| 保司 | 形态 | 识别域名 | 适配器状态 |
|---|---|---|---|
| 中国人寿财产保险 | C | econnect.chinalife-p.com.cn | 待开发 |
| 阳光财产保险 | B2 | epolicy.sinosig.com | 待开发 |
| 众安在线财产保险 | B1 | static.zhongan.com | 待开发 |
| 中国太平洋财产保险 | A | —(内嵌,无需下载) | 待开发 |
| 新增保司时:先跑一份样张,判定形态,再写适配器。适配器注册表本身入库管理,便于统计各保司的成功率。 | |||
以下是可执行的建表骨架(SQLite),字段注释标注了实测来源。业务字段留白处待专家补充。
| 表名 | 域 | 职责 | 唯一键 / 幂等键 |
|---|---|---|---|
insurer | 公共 | 保司字典:全称、简称、域名特征、适配器代码 | insurer_code |
doc_artifact | 公共 | 原始文档归档:路径、SHA256、页数、有无文本层 | file_sha256 |
policy | 保单 | 保单主表 | policy_no |
policy_party | 保单 | 投保人 / 被保险人 / 受益人 | policy_id + party_role |
policy_insured_person | 保单 | 记名人员清单(团体险) | policy_id + id_no |
policy_coverage | 保单 | 责任项:责任名、保额、费率、保费、免赔、赔付比例 | policy_id + coverage_name + clause_ref |
policy_limit | 保单 | 限额体系:累计 / 每次事故 / 每人 / 分项 | policy_id + limit_type |
policy_deductible | 保单 | 免赔:绝对额 / 天数 / 比例 | policy_id + scope |
policy_endorsement | 保单 | 特别约定条目(带序号) | policy_id + seq_no |
policy_clause_binding | 跨域 | 绑定表:保单↔条款,含引用形态、原始链接、取回状态 | policy_id + clause_id |
clause | 条款 | 条款主数据 | insurer_id + register_no |
clause_version | 条款 | 条款版本(备案号、生效期) | clause_id + version_no |
clause_section | 条款 | 条款条目(章/条/款/项 层级) | clause_version_id + order_no |
clause_artifact | 条款 | 条款正文快照:OSS 路径、内容哈希、来源 URL | content_hash |
clause_fetch_task | 条款 | 取回任务与失败队列 | binding_id + attempt_no |
clause_embedding | 条款 | 条款条目的语义向量索引 | section_id |
extract_evidence | 公共 | 证据链:字段值 → 页码 / 坐标 / 原文片段 / 置信度 | target_table + target_id + field |
review_task | 公共 | 人工复核队列 | — |
field_definition_pending | 公共 | 待专家定义字段的交接清单(迁移 001 建立,已灌入第 9 节 8 项) | seq_no |
骨架共 18 张表(见 schema_skeleton.sql),加迁移 001 的交接表共 19 张。已通过 SQLite 语法校验,并在腾讯云服务器上完成初始化。
每条决策都标明了代价,方便你判断是否接受。
这一节是本文档与「保险条款解读专家」的交接面。架构层面已留好扩展位,以下内容需要专家给定权威定义后冻结。
| # | 待定义内容 | 为什么架构层不能自己定 | 架构预留落点 |
|---|---|---|---|
| 1 | 责任名标准词表 | 实测已出现「意外伤害身故 / 意外伤害残疾 / 意外伤害医疗 / 意外伤害住院津贴 / 猝死 / 火车(包括地铁、轻轨、城市铁路) / 法律费用 / 医疗费用 / 误工费 / 死亡残疾赔偿责任」等十余种写法,跨保司不统一。需要一份可归一的受控词表,否则跨保单统计无从下手。 | policy_coverage.coverage_name+ 词表映射表 |
| 2 | 免赔的语义分类 | 实测至少四种语义:「绝对免赔 100 元」(金额)、「免赔 0 天」(天数)、「损失金额的 10%,两者以高者为准」(比例 + 择高)、「赔付比例 100%」(非免赔但对赔付有影响)。需要明确分类及各自的计算语义。 | policy_deductible+ deductible_type 枚举 |
| 3 | 限额体系的关系模型 | 实测同时存在:保单累计赔偿限额、每次事故赔偿限额、每人人身伤亡责任限额、每次事故财产损失赔偿限额、分项限额。它们之间是取小关系还是叠加关系,直接决定理赔金额,必须由专家明确。 | policy_limit+ 限额层级字段 |
| 4 | 特约条款的分类体系 | 实测特约内容跨度极大:限额约定、除外约定(如「不承保任何高空作业」)、流程约定(如「48 小时内报案」)、地域除外(如「不承保新疆、西藏」)、医院范围限制(众安列出 40+ 家除外医院)。需要分类才能被规则引擎消费。 | policy_endorsement+ endorsement_category |
| 5 | 条款条目的结构化粒度 | 是否只拆到「条」,还是拆到「款」「项」?「释义」章节是否单列?实测太保条款含「第一部分 基本条款」这样的章级结构,众安条款结构不同。粒度决定检索精度与切分成本。 | clause_section.level |
| 6 | 责任免除条款的标签体系 | 条款正文里「责任免除」可能是一整条、也可能散落在释义中。需要专家定义识别规则。这直接关系「某情形是否在承保范围内」的自动判定。 | clause_section.section_tag |
| 7 | 责任 ↔ 免责的覆盖关系 | 一条免责条款可能作用于主险、也可能只作用于某个附加险。这层关系需要专家建模,架构上表现为一张关联表。 | 预留关系表 (待专家确认后建) |
| 8 | 险种分类树 | 实测险种名跨度大:公众责任险 / 团体意外险 / 雇主责任险 / 建筑工程施工人员团体人身意外伤害保险 / 建筑工程一切险。需要一份险种分类树,才能做跨保司的同类对比。 | policy.policy_type+ 险种字典表 |
| 阶段 | 目标 | 内容 | 验收标准 |
|---|---|---|---|
| P0 | 字段定义冻结 | 与保险条款解读专家对齐第 9 节的 8 项定义,冻结字段字典 | 产出字段字典文档,可直接转成建表语句 |
| P1 | 单份样张打通 | 选一份形态 A(太保建筑工程一切险,内嵌条款)跑通全链路:解析 → 入库 → 条款切分 → 检索 | 字段抽取准确率可人工核对,条款条目结构正确 |
| P2 | 四家保司适配器 | 实现国寿财险 / 阳光 / 众安 / 太保四家的条款适配器,覆盖 A、B1、B2、C 四种形态 | 5 份样张全部条款取回成功,注册号校验通过 |
| P3 | 批量回溯 | 接入历史保单批量处理,建立复核工作台 | 批量处理成功率可统计,失败项全部有明确原因 |
| P4 | 对外服务 | 挂载 MCP 工具组 + Web 检索端,复用现有鉴权与配额 | AI Agent 可检索条款、可比对同类条款 |
| 风险 | 影响 | 应对 |
|---|---|---|
| 保司条款链接改版或失效 | 中 | 正文一律落盘快照;建立链接可用性定时巡检;适配器按保司隔离,单家失效不影响其他家 |
| 部分条款需登录 / 验证码才能查看 | 高 | D 兜底通道:转人工队列 + 生成向保司/经纪公司索取条款的标准函件模板 |
| 扫描件保单无文本层,需 OCR | 中 | 已实测到纯图片页(雇主险 p1–p2);流水线内置文本层检测 + OCR 分支 |
| 明细表标签与数值在文本流中错位 | 高 | 必须先做版面分块(按坐标配对标签与值),不能按文本顺序抽取。这是准确率的胜负手 |
| 条款名称跨保司不统一,导致归并错误 | 中 | 优先用注册号归并;无注册号时降级到备案号 + 名称相似度,并强制人工确认 |
| 人工复核成为吞吐瓶颈 | 中 | 复核台要做成「字段级快速确认」而非「整单重录」;高置信度字段默认通过,只标红异常项 |