【导读】 金融文档问答(如10-K财报)的本质是“跨越结构化证据的解谜游戏”。现有单次检索+简单生成的RAG模式,面对“去年营收增长率减去前年调整后运营成本”这类问题,基本相当于让鹦鹉做微积分。FinAgent-RAG用三层创新破解困局:一个能区分“4.5亿”和“4.8亿”的对比检索器、一个直接写Python算数的代码思维模块、以及一个能判断“这题需要3次检索还是1次”的智能路由调度器。实验数据证明,这个框架不仅是技术上优雅,部署成本上也比竞品更贴近金融机构的预算底线。
【核心突破】
| 维度 | 传统RAG | FinAgent-RAG | 关键提升 |
|---|---|---|---|
| 检索机制 | 基于向量相似度单次命中 | 硬负例对比训练 + 迭代精化 | 数值区分力↑27% |
| 推理引擎 | LLM“心算”多步逻辑 | Program-of-Thought | 算术准确率↑19.3% |
| 资源调度 | 固定检索-生成流程 | 自适应策略路由器 | API成本↓41.3% |
| 最佳基准 | 最大执行准确率~67.3% | 76.81% | +9.5% |
【深度解析】 1. 对比检索器:如何让模型读懂“近似实体”的差异?
金融文本中“营业收入同比增长5%”和“营业收入同比增长3%”在语义空间里几乎重合,传统检索器会误判。FinAgent-RAG构建硬负例训练集,强制模型对数值敏感的片段施加更高注意力权重。具体来说,对每段正样本,选出与其语义最接近但数值不同的片段作为负例(如从“净利润12亿美元”中找到“净利润11.8亿美元”),训练对比损失使得表征向量在数值维度上拉开距离。
点击展开原理
训练时,使用InfoNCE损失函数,其中正样本对为(查询,正确段落),负样本为(查询,数值近似但错误段落)。查询编码器和段落编码器共享Transformer权重,并在顶端接入一个**数值差异感知头**,对数字token的embedding增加位置编码扰动。推理时,检索到的前K个段落按数值相关度重排序,确保“毛利21.4亿”不会被“毛利21.9亿”挤压掉。2. 代码思维:为什么不让LLM写代码而非心智算?
这是最精巧的设计。当问题需要多步运算(例如“从2019年总资产中减去2020年递延收益后再除以流通股数”),LLM直接输出思维链的失败率高达34%。FinAgent-RAG将数学推理完全外包给Python:LLM仅负责将自然语言问题分解为若干原子计算步骤,并生成合法Python代码串。随后在沙箱环境中执行,返回精确数值,再作为最终答案引用的证据。
| 推理方法 | 两步运算正确率 | 四步运算正确率 |
|---|---|---|
| 思维链(CoT) | 72.4% | 51.3% |
| 代码思维(PoT) | 91.1% | 84.6% |
3. 自适应路由:如何避免“杀鸡用屠龙刀”?
策略路由器是一个轻量级分类器,输入问题嵌入,输出三个动作之一:简单检索(一步提取)、多步推理(启动PoT循环)、全局检索+交叉验证(先检索大量片段再筛选)。这不仅使简单问题(如“公司CEO是谁”)的处理延迟降低至原来的1/3,更重要的是,在FinQA上节省了41.3%的LLM API调用次数——对预算敏感的金融机构来说,这是商业落地的生死线。
【未来展望】 FinAgent-RAG目前在单文档、单轮问答上表现惊艳,但金融分析师的实际工作是多文档、多轮、动态修正的。未来方向包括:1)跨多个10-K报告的全局实体链接,支持“比较苹果与谷歌的运营利润率”;2)引入交互式纠错:当用户指出“你算的毛利率跟我看到的数对不上”时,系统能自动回溯检索-推理链,定位错误源头并修正;3)更极致的推理效率:将路由器决策与检索器打分融合为一个端到端神经网络,消除人工设计的路由阈值。