news 2026/10/17 2:27:07

AlphaFin的RAG是如何工作的?三步拆解三库向量检索、日期补全到Prompt组装全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AlphaFin的RAG是如何工作的?三步拆解三库向量检索、日期补全到Prompt组装全流程

【免费下载链接】AlphaFin

项目地址:https://gitcode.com/gh_mirrors/alp/AlphaFin
点击查看免费下载

AlphaFin 是一款面向金融分析的大模型开源项目,其核心是用 RAG(检索增强生成)解决大模型「幻觉」与「数据不实时」两大痛点。本文带你三步拆解 AlphaFin 的 RAG 全流程:三库向量检索(研报、市场数据、新闻)、查询日期自动补全,到最终 Prompt 组装,看懂金融问答系统是如何把「检索到的真实数据」安全地喂给大模型的。

一、为什么金融问答必须上 RAG?

大模型直接回答金融问题时,有两个致命短板 🚧:

  • 幻觉:模型会编造研报结论、虚构股价数据;
  • 不实时:模型训练数据有截止日期,无法感知「今天」的行情和新闻。

AlphaFin 提出的Stock-Chain 框架通过 RAG 让模型「先查资料、再作答」,覆盖两个金融任务:股票趋势预测(Stage 1)和金融问答(Stage 2)。RAG 流程主要集中在 Stage 2 的问答模块 run.py。

下面的图直观展示了 RAG 的价值:直接让 LLM 基于研报+行情做分析,模型往往给出「我无法提供投资建议」的敷衍回答;而注入检索内容后,才能得到结构化的基本面+技术面分析 📊

二、第一步:日期补全——让问题「自带时间戳」

金融数据的价值高度依赖时间。如果用户只问「中青花股价怎么样?」而不带日期,检索出的行情可能是几个月前的。

AlphaFin 在 checkDate 函数中做了两层设计:

  1. 检测:尝试解析用户问题里是否已有日期;
  2. 补全:若无日期,则自动追加「(今天的日期是: 最新数据日期)」。这里有个贴心的细节——18:00 之前自动回退到前一日,因为当日行情数据尚未更新,避免检索到「空窗数据」。

这一步让后续向量检索天然带有时间锚点,是金融场景 RAG 区别于通用 RAG 的关键细节 📅

三、第二步:三库向量检索——FAISS + BGE 中文向量模型

AlphaFin 将金融语料拆成三个独立知识库,全部基于 FAISS 向量索引构建,配置见 faiss_config:

| 库 | 索引目录 | 内容示例 | 对应中文选项 | | - | - | - | - | | 研报 reports | src/data/database_sample/reports/ | 券商研报标题、摘要、评级 | 研报 | | 市场数据 prices | src/data/database_sample/prices/ | 每日收盘价、换手率、市盈率等 | 市场数据 | | 新闻 news | src/data/database_sample/news/ | 财经新闻联播摘要 | 新闻 |

每个库里都有三类文件:*.json存原文、*_index.faiss存向量索引、*_index.pkl存元数据。你可以打开 news.json 看看每条新闻的结构——summary字段内嵌了「股票名称+代码+发布日期」,这正是向量检索能精准命中的原因。

检索链路非常干净,核心在 process 函数:

  • 向量化:查询文本用 BGE-Large-zh 中文向量模型(HuggingFaceEmbeddings)转成向量;
  • 加载:通过自定义的 myFAISS 类 用load_local加载三个本地索引;
  • 召回:similarity_search_with_score(query, k=topk)按相似度召回 Top-K 条文档,K 值可通过 WebUI 的滑块在 1~50 间调节(默认 5)。

三库的数据从哪里来?下图展示了 AlphaFin 数据集的构建流程:研报、新闻、行情数据经清洗、人工标注与改写后,形成覆盖 NLI、金融问答、股票趋势预测等任务的多语言数据集 🧱

四、第三步:Prompt 组装——把检索结果装进「防幻觉模板」

检索到的文档不会原样丢给模型,AlphaFin 分两步「加工」:

1️⃣ 文档拼接—— concat_docs 将召回结果编号排布成[Doc 1]…[Doc N];若一条都没检索到,则明确提示「未检索到相关文档」,让模型知道「无据可查」。

2️⃣ 模板填充—— get_prompt 将文档与问题填入固定模板,其中两条指令是防幻觉的关键:

「你的数据都应该来自上述的参考内容,答案中不允许包含编造内容」 「根据相关数据举例论证你的观点」

最后调用model.chat生成回答。这里的模型是 ChatGLM2-6B 基座 + StockGPT-Stage2 LoRA 微调权重(见 getModel),在金融语料上专门训练过,与 RAG 检索「双保险」。

WebUI 还提供三种知识库使用模式(method_map),方便对比 RAG 策略:

| 模式 | 行为 | 适用场景 | | - | - | - | | 仅通过一条知识进行分析 | 只用 Top-1 文档作答 | 看单条证据的推理 | | 整合知识库进行分析 | 拼接全部 Top-K 文档 | 默认的多源交叉验证 | | 仅检索知识文档 | 不生成回答,直接返回检索结果 | 调试召回质量 |

下面是一个真实问答案例:用户问「国庆黄金周对旅游股有什么影响?」,系统检索节假日客流与个股表现数据后,给出了带具体数字的论证型回答 🧩

五、快速上手:5 分钟跑起金融问答 RAG

1. 克隆仓库并安装依赖

git clone https://gitcode.com/gh_mirrors/alp/AlphaFin cd AlphaFin pip install -r requirements.txt

2. 填入模型路径并启动

在 stage2_financial_qa.sh 中填入本地路径:base_model_path(ChatGLM2-6B)、lora_ckpt_path(StockGPT-Stage2)、embedding_model_path(BGE-Large-zh),然后执行:

bash scripts/stage2_financial_qa.sh

3. 打开 WebUI 玩起来:拖动Top-K 滑块调召回数量、在数据库单选里切换研报/市场数据/新闻、在知识库使用方法里切换三种模式——右侧会同步展示「检索到的知识」,让你完整看见 RAG 的中间过程 🔍

六、效果如何?一张图看懂 RAG 的实战价值

在股票多空策略回测中,基于 Stock-Chain(RAG + 金融大模型)的策略在 2023 年起持续跑赢 FinGPT、ChatGPT 及 LSTM、Bert、SCSI 等基线,年化收益约 30.8%,累计收益曲线长期居于首位 📈

总结:AlphaFin RAG 全流程一图流

回顾整个链路,AlphaFin 的 RAG 本质是一条「时间感知 → 向量召回 → 约束生成」的流水线:

  1. 日期补全:查询无日期时自动锚定最新数据日期(18:00 前回退一日);
  2. 三库向量检索:BGE 中文向量模型 + FAISS 索引,在研报/行情/新闻中召回 Top-K 事实;
  3. Prompt 组装:编号拼接文档 + 防幻觉指令模板,交由金融微调大模型生成「有据可查」的回答。

⚠️ 免责声明:AlphaFin 仅用于学术研究与教育目的,其输出不构成任何投资建议。

想深入源码?从入口 run.py 读起,配合样例数据 src/data/database_sample/ 和说明文档 README.md,一个下午就能把整个 RAG 链路读透。

【免费下载链接】AlphaFin

项目地址:https://gitcode.com/gh_mirrors/alp/AlphaFin
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 2:27:07

PHP装修报价器源码解析:从表单校验到报价引擎的完整实现

简介:这套源码以PHP开发,模拟土巴兔装修报价流程,面向需要搭建报价系统的开发者和家装从业者。源码涵盖PHP语法、MVC结构、数据库交互、前端表单处理与报价算法,适合有PHP基础且想了解完整项目实现的人学习。压缩包共2000个文件&a…

作者头像 李华
网站建设 2026/10/17 2:26:32

PTA找鞍点算法详解:C语言与Python实现,避开常见坑

PTA 实验7-2-8 找鞍点:一个二维数组题,到底藏了多少坑看到“找鞍点”这三个字,很多初学C语言的同学第一反应是:这题简单,不就是遍历一下矩阵找最大最小值嘛。可真要动手写,十个里有五六个会踩坑——不是输出…

作者头像 李华
网站建设 2026/10/17 2:26:20

FAB工程师转IC设计:技能迁移避坑指南

一、痛点背景:从一次真实的生产事故说起FAB工程师转IC设计:技能迁移避坑指南这个问题,在FAB里不是一天两天了。我见过太多工程师踩坑:要么是方法用错导致数据误判,要么是工具选型失误导致项目延期,要么是流…

作者头像 李华
网站建设 2026/10/17 2:24:19

Focal Loss原理与实现:解决目标检测类别不平衡与难样本加权

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华