【免费下载链接】AlphaFin
AlphaFin 是一款面向金融分析的大模型开源项目,其核心是用 RAG(检索增强生成)解决大模型「幻觉」与「数据不实时」两大痛点。本文带你三步拆解 AlphaFin 的 RAG 全流程:三库向量检索(研报、市场数据、新闻)、查询日期自动补全,到最终 Prompt 组装,看懂金融问答系统是如何把「检索到的真实数据」安全地喂给大模型的。
一、为什么金融问答必须上 RAG?
大模型直接回答金融问题时,有两个致命短板 🚧:
- 幻觉:模型会编造研报结论、虚构股价数据;
- 不实时:模型训练数据有截止日期,无法感知「今天」的行情和新闻。
AlphaFin 提出的Stock-Chain 框架通过 RAG 让模型「先查资料、再作答」,覆盖两个金融任务:股票趋势预测(Stage 1)和金融问答(Stage 2)。RAG 流程主要集中在 Stage 2 的问答模块 run.py。
下面的图直观展示了 RAG 的价值:直接让 LLM 基于研报+行情做分析,模型往往给出「我无法提供投资建议」的敷衍回答;而注入检索内容后,才能得到结构化的基本面+技术面分析 📊
二、第一步:日期补全——让问题「自带时间戳」
金融数据的价值高度依赖时间。如果用户只问「中青花股价怎么样?」而不带日期,检索出的行情可能是几个月前的。
AlphaFin 在 checkDate 函数中做了两层设计:
- 检测:尝试解析用户问题里是否已有日期;
- 补全:若无日期,则自动追加「(今天的日期是: 最新数据日期)」。这里有个贴心的细节——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.txt2. 填入模型路径并启动
在 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.sh3. 打开 WebUI 玩起来:拖动Top-K 滑块调召回数量、在数据库单选里切换研报/市场数据/新闻、在知识库使用方法里切换三种模式——右侧会同步展示「检索到的知识」,让你完整看见 RAG 的中间过程 🔍
六、效果如何?一张图看懂 RAG 的实战价值
在股票多空策略回测中,基于 Stock-Chain(RAG + 金融大模型)的策略在 2023 年起持续跑赢 FinGPT、ChatGPT 及 LSTM、Bert、SCSI 等基线,年化收益约 30.8%,累计收益曲线长期居于首位 📈
总结:AlphaFin RAG 全流程一图流
回顾整个链路,AlphaFin 的 RAG 本质是一条「时间感知 → 向量召回 → 约束生成」的流水线:
- 日期补全:查询无日期时自动锚定最新数据日期(18:00 前回退一日);
- 三库向量检索:BGE 中文向量模型 + FAISS 索引,在研报/行情/新闻中召回 Top-K 事实;
- Prompt 组装:编号拼接文档 + 防幻觉指令模板,交由金融微调大模型生成「有据可查」的回答。
⚠️ 免责声明:AlphaFin 仅用于学术研究与教育目的,其输出不构成任何投资建议。
想深入源码?从入口 run.py 读起,配合样例数据 src/data/database_sample/ 和说明文档 README.md,一个下午就能把整个 RAG 链路读透。
【免费下载链接】AlphaFin
相关推荐
搭建向量知识库:从 Embedding 原理到 Chroma 检索的 RAG 实战(llm-universe 第三章)
搭建向量知识库:从 Embedding 原理到 Chroma 检索的 RAG 实战(llm universe 第三章) 本章是 Datawhale《面向开发者的
教程大模型RAG人工智能AI 应用文档GenRecon 三阶段流水线全拆解:Sparse Structure → Shape SLat → Texture SLat 如何协同工作
GenRecon 三阶段流水线全拆解:Sparse Structure → Shape SLat → Texture SLat 如何协同工作 GenRecon
Ollama+RAG实现本地知识库:PDF解析与向量检索全流程指南
Ollama+RAG实现本地知识库:PDF解析与向量检索全流程指南 想要在本地构建智能知识库系统吗?Ollama结合RAG技术让你轻松实现PDF文档的智能解析与
人工智能大模型模型推理服务本地部署
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考