4. 金融法规数据获取

在金融法规RAG系统中,数据获取不是“把网页抓下来”这么简单。法规文本具有强时效性、多版本并存、发布主体分散、格式高度不统一等特点。如果数据层没有做好来源管理、采集控制、清洗规范与版本追踪,后续的向量化、检索和合规问答都会建立在不可靠的基础上。本节围绕“从哪里来、怎么采、怎么洗、怎么管版本”四个环节展开。

一、核心原理:法规数据的四个特殊属性

金融法规数据与普通网页语料最大的区别在于:权威性、时效性、版本性、结构性。权威性要求来源必须是官方发布渠道;时效性要求能识别“现行有效、已修订、已废止”等状态;版本性要求同一法规的多个修订版本可追溯、可对比;结构性要求把标题、章节、条款、附件、发文号等字段拆解出来,而不是整篇纯文本。

关键判断:RAG检索的答案质量,上限由数据层决定。法规数据如果混入失效版本或非官方解读,模型会“自信地引用错误依据”,这比检索不到更危险。

二、法规数据来源:分层采集策略

建议将来源分为三层,按权威性和采集难度分别处理:

  • 第一层:官方权威源。如中国人民银行、国家金融监督管理总局、证监会、外汇局、沪深交易所、中国证券业协会等官网的“法律法规/规章/规范性文件”栏目。这是合规问答的最终依据。
  • 第二层:聚合与标准源。如国家法律法规数据库、地方政府数据开放平台、北大法宝/威科先行等商业数据库(需授权)。适合做交叉校验和补全。
  • 第三层:辅助解释源。官方答记者问、政策解读、监管处罚案例。可用于增强问答上下文,但必须与法规正文严格区分标签,避免模型混淆“法条”与“解读”。

三、爬虫与API采集:可控、可审计、可重放

采集层要解决三个问题:发现新法规、抓取正文与附件、记录采集元数据。对无API的官网,使用爬虫;对有开放接口或RSS的站点,优先走API。无论哪种方式,都要保留source_url、fetch_time、http_status、content_hash等字段,保证可审计与可重放。

# 采集任务配置示例(YAML)
source:
  name: "监管总局-规章"
  base_url: "https://www.example.gov.cn"
  list_selector: "ul.rule-list li a"
  detail_selector: "div.article-content"
  encoding: "utf-8"
  rate_limit: 1.5          # 每秒请求数
  retry: 3
  headers:
    User-Agent: "ComplianceRAG-Bot/1.0"
    Accept-Language: "zh-CN,zh;q=0.9"
storage:
  raw_dir: "data/raw/regulator"
  meta_file: "data/meta/fetch_log.jsonl"

采集时需注意:遵守robots协议与网站条款,控制频率,避免对目标站点造成压力;对PDF附件单独走解析管道;对分页列表做增量判断,优先按“发布日期+发文号”去重,而不是仅按URL。

四、数据清洗:从网页噪声到结构化条款

清洗的目标是产出可检索、可引用、可定位的条款级数据。典型流程如下:

  1. 正文抽取:去除导航、页脚、广告、相关推荐等噪声,保留标题、发文号、发布日期、正文、附件。
  2. 格式归一:统一全角/半角、去除多余空白与软换行、修复PDF断行导致的词语断裂。
  3. 条款切分:按“第X条”“第X章”“(一)(二)”等层级切分为条款块,并保留父级路径。
  4. 字段补全:抽取发文机关、文号、效力状态、生效日期、失效日期、修订记录。
  5. 质量校验:检查条款是否为空、标题是否缺失、日期是否合法、正文长度是否异常。

实践建议:条款切分不要只按正则“第.*条”。金融法规中常出现“第X条之一”“第X条第二款”“附则”等变体,建议用“层级解析器+人工抽检”结合,先保证切分边界正确,再谈向量化。

五、去重与版本管理:同一法规的多版本共存

去重要区分两类:完全重复(同一页面被多次抓取)和版本重复(同一法规的修订版)。前者用内容哈希即可;后者必须保留,因为合规问答可能需要回答“修订前后差异”。

维度完全重复版本重复
识别方式content_hash 相同法规ID相同,版本号/发布日期不同
处理策略保留最新抓取记录,旧记录归档全部保留,标记效力状态与生效区间
检索影响避免同一内容多次召回默认只召回“现行有效”版本,历史版本按需召回
元数据重点fetch_time、source_urlversion、effective_date、status、supersedes

版本管理建议采用“法规主表+版本子表”的结构:主表存法规唯一标识与当前状态,子表存每个版本的正文、发布日期、生效日期、修订说明。检索时通过status=effective过滤,必要时再开放历史版本。

# 版本记录示例(JSONL)
{"law_id":"LAW-2024-001","version":"2024-06","status":"effective",
 "publish_date":"2024-06-01","effective_date":"2024-07-01",
 "supersedes":"2023-12","content_hash":"a1b2c3..."}
{"law_id":"LAW-2024-001","version":"2023-12","status":"superseded",
 "publish_date":"2023-12-15","effective_date":"2024-01-01",
 "supersedes":null,"content_hash":"d4e5f6..."}

六、案例场景:一次“失效法规误召回”的复盘

某合规问答系统上线后,用户询问“某业务是否需要事前审批”,模型引用了一条已被修订的旧条款,给出了过时结论。复盘发现:采集时旧版本和新版本都被抓取,但清洗阶段未标记效力状态,向量库中两个版本同时参与检索,且旧版本语义更接近问题,导致误召回。

修复方案包括:在元数据中强制增加status与effective_date字段;检索前按当前日期过滤失效版本;对“修订前后差异”类问题单独走版本对比检索通道;在答案中附带法规版本与生效日期,提示用户核对。

常见误区:只做文本去重,不做版本治理;只存正文,不存发文号与生效日期;把政策解读当法条入库;采集不做增量,重复抓取导致元数据混乱。这些问题在RAG中会直接表现为“答非所问”或“引用失效依据”。

金融法规数据获取与版本治理链路 官方权威源 央行 / 监管总局 证监会 / 交易所 行业协会 聚合标准源 国家法律法规库 地方数据开放平台 授权商业数据库 辅助解释源 答记者问 / 解读 监管处罚案例 政策问答 采集控制 爬虫 / API / RSS 限速 / 重试 / 增量 元数据留痕 数据清洗与结构化 正文抽取 → 格式归一 → 条款切分 → 字段补全 → 质量校验 输出:条款级 JSON,含 law_id / article_no / content / status 去重 content_hash 完全重复 保留最新抓取记录 旧记录归档不删除 版本管理 法规主表 + 版本子表 status / effective_date 默认只召回现行有效版本 → 进入向量化与RAG检索层

综上,金融法规数据获取的核心不是“抓得多”,而是“抓得准、洗得净、管得住版本”。只有把来源分层、采集留痕、清洗结构化、去重与版本治理做到位,RAG系统才能在合规问答中给出可追溯、可验证、可更新的答案。