2. 金融RAG基础
在金融场景中,大模型“张口就来”的代价远高于一般行业:一个编造的财务指标、一条不存在的监管条款,都可能直接触发合规风险或投资误判。检索增强生成(Retrieval-Augmented Generation,RAG)正是为缓解这一问题而生的工程范式。本节先建立RAG的整体认知框架,再聚焦金融文本的特殊性,最后定位幻觉的主要来源,为后续的检测与评测打下基础。
一、核心原理:RAG如何把“记忆”变成“查证”
纯生成式模型依赖参数中压缩的知识,本质是概率续写,无法保证事实准确,也无法给出可追溯的依据。RAG的核心思想是:在生成之前,先从外部知识库中检索出与问题相关的证据,再让模型基于这些证据作答。这样,模型的角色从“凭记忆回答”转变为“阅读理解后作答”。
一个完整的RAG链路包含三个关键阶段:索引、检索、生成。索引阶段将金融文档切分为片段(chunk),通过嵌入模型转为向量并存入向量库;检索阶段将用户问题同样向量化,通过相似度计算召回Top-K片段;生成阶段把问题与召回片段拼接为提示词,交由大模型生成答案。其数据流可概括为下图。
理解这条链路的关键在于:RAG并不能“消灭”幻觉,它只是把幻觉的产生位置从模型参数转移到了索引、检索和生成三个环节。检测与评测工作,本质上就是在这三个环节上分别布点。
二、金融文本特点:为什么通用RAG方案不够用
金融语料与通用网页文本差异显著,直接套用通用RAG方案往往效果不佳。其特殊性主要体现在以下方面:
- 高度结构化与半结构化并存:财报包含大量三线表、合并报表附注,PDF解析后表格结构极易错乱,数字与表头错位会直接导致检索到错误证据。
- 术语密集且同义表达多:“净利润”与“归属于母公司股东的净利润”含义不同,“营收”与“营业总收入”口径有别,嵌入模型若不能区分,召回结果就会张冠李戴。
- 时效性与版本敏感:监管规则、评级结论、财务数据都有明确有效期,旧版本条款被召回会生成过时甚至违规的答案。
- 数字与单位精度要求极高:亿元与万元、同比与环比、单季与累计,任何一处口径混淆都会造成事实性错误。
- 合规与免责约束强:答案不能构成投资建议,引用需可溯源,这对生成阶段的提示词设计和后处理提出额外要求。
三、典型应用场景与幻觉风险来源
金融RAG的落地场景大致可分为四类,每类场景对幻觉的容忍度和检测重点各不相同:
| 应用场景 | 典型任务 | 主要幻觉风险 | 检测重点 |
|---|---|---|---|
| 智能投研问答 | 财报指标查询、业绩归因 | 数字编造、口径混淆 | 数值与原文比对 |
| 合规与监管咨询 | 条款检索、合规判断 | 引用失效条款、张冠李戴 | 条款编号与版本核验 |
| 客服与产品解释 | 费率、规则、流程说明 | 遗漏限制条件、过度承诺 | 条件完整性检查 |
| 风控与信贷辅助 | 企业画像、风险摘要 | 证据不足仍下结论 | 结论与证据一致性 |
结合前述链路,金融RAG的幻觉风险可归纳为三个来源层:
- 数据层:PDF解析错误、表格结构丢失、OCR识别偏差、元数据(时间、来源、版本)缺失,导致“证据本身就不对”。
- 检索层:切分粒度过粗或过细、嵌入模型不匹配金融语义、Top-K设置不当,导致“对的证据没被找到”或“错的证据被召回”。
- 生成层:模型忽略召回内容、对多片段进行错误拼接、在证据不足时强行作答,导致“有证据却答错”或“无证据也敢答”。
四、复盘:一个典型的幻觉案例
某投研问答系统被问及“某公司2023年第三季度归母净利润同比增速”。系统召回了三份片段:一份是半年报的累计数据,一份是单季度数据但单位为万元,一份是券商研报的预测值。生成模型将半年报累计增速与单季数据混用,给出了一个看似合理却错误的百分比。
复盘该案例,问题并非出在模型能力,而是:切分时未保留“报告期”和“单位”元数据,检索时未按时间与口径过滤,生成时未要求标注数据来源。对应的改进配置示例如下:
# 检索过滤条件示例(伪代码)
filter = {
"report_period": "2023Q3", # 锁定报告期
"metric": "归母净利润", # 锁定指标口径
"unit": "元", # 统一单位
"source_type": ["定期报告"] # 排除研报预测
}
top_k = 5
rerank = True # 启用重排序
require_citation = True # 强制标注来源片段