跳转至

基于RAG的金融问答平台

约 4081 个字 预计阅读时间 13 分钟

金融领域的知识检索效率低、回答准确性不足,是 LLM 落地时常见的痛点。检索增强生成(RAG) 通过在生成前从外部知识库检索相关上下文,将大模型的推理能力与领域知识绑定,是缓解幻觉、提升可解释性的主流路线之一。

本项目从 RAGAS 源码阅读出发,逐步搭建起一套面向金融场景的前后端分离 RAG 应用平台,并集成基于 RAGAS 的自动化评估与多轮优化能力。


1. 背景与目标

1.1 问题背景

金融领域知识来源分散——教材、研报、财经新闻、监管公告、行情数据等格式各异,且对时效性与事实准确性要求高。单纯依赖大模型参数记忆,容易出现过时信息、张冠李戴或无法溯源等问题。

RAG 的标准流程可概括为:

  1. 索引:采集文档 → 清洗分块 → 向量化 → 写入向量库;

  2. 检索:将用户问题编码,在向量库中召回 Top-K 相关片段;

  3. 生成:将检索结果与用户问题一并送入 LLM,生成有据可查的回答。

本项目要求在理解 RAG 评估方法论的基础上,完成一个可交互、可评估、可迭代的完整工程系统。

1.2 核心目标

  • 搭建面向金融场景的多源知识库与 RAG 问答应用;

  • 实现前后端分离的 RESTful 服务,支持多轮对话与参考来源展示;

  • 集成 RAGAS 评估框架,支持多轮评估任务管理与指标可视化;

  • 完成检索链路与数据工程的系统性优化,提升问答准确率与可解释性。

1.3 迭代概览

迭代 主题 主要产出
迭代一 RAGAS 源码阅读与指标复现 模块阅读报告、UML 类图、非 LLM 指标复现代码
迭代二 平台搭建与金融 RAG 应用 RAG 问答应用、RAG 评估平台、Prompt 评估平台
迭代三 产品化与 RAG 优化 知识库可视化管理、检索优化、报告生成、测试基准集

2. 系统架构

2.1 总体架构

系统采用前后端分离架构,后端以 Flask 为统一入口,注册四个 Blueprint 模块;前端以 Vue 3 单页应用承载四大功能板块。

┌─────────────────────────────────────────────────────────┐
│                    Vue 3 + Vite 前端                    │
│  ┌──────────┬──────────────┬───────────┬──────────────┐ │
│  │ RAG 问答 │ 知识库管理    │ RAG 评估  │ Prompt 评估  │ │
│  └────┬─────┴──────┬───────┴─────┬─────┴──────┬───────┘ │
└───────┼────────────┼─────────────┼────────────┼─────────┘
        │      RESTful API (Flask + CORS)       │
┌───────┼────────────┼─────────────┼────────────┼─────────┐
│       ▼            ▼             ▼            ▼         │
│  rag_app      rag_visualization  rag_eval   prompt_eval │
│  (问答/报告)   (知识库管理)       (RAGAS)    (Prompt)    │
└───────┬────────────┬─────────────┬────────────┬─────────┘
        │            │             │            │
        ▼            ▼             ▼            ▼
      SQLite          FAISS      SQLite       SQLite
    (对话记录)    (向量知识库)   (评估任务)   (Prompt任务)
        │            │             │             │
        └────────────┼─────────────┴─────────────┘
              LangChain Pipeline                            
         检索 → 重排序 → GLM-4-Flash 生成                    

2.2 技术栈

层次 技术选型 说明
前端 Vue 3、Vite、Element Plus、Pinia、ECharts、Axios 对话 UI、知识库浏览、评估结果可视化
后端 Flask、Flask-SQLAlchemy、Flask-CORS RESTful API,多库 SQLite 持久化
RAG 框架 LangChain 文档加载、文本分割、检索器、LLM 调用
向量库 FAISS 本地向量索引,支持多库并行检索
嵌入模型 BGE-large-zh-v1.5 中文语义向量,检索与建库一致
重排序 BGE-reranker-large(CrossEncoder) 检索后精排,提升上下文相关性
大模型 智谱 GLM-4-Flash(API) 问答生成、查询改写、报告撰写、RAGAS 评估
评估 RAGAS 0.2.14 上下文召回、忠实度、事实准确性等指标

3. 迭代一:RAGAS 源码阅读与指标复现

3.1 源码阅读

迭代一的核心任务是通读 RAGAS 源码并输出模块分析报告。我负责 embeddings 与 integrations 两个模块。

embeddings 模块 定义了 BaseRagasEmbeddings 抽象基类,并通过 LangchainEmbeddingsWrapperHuggingfaceEmbeddingsLlamaIndexEmbeddingsWrapper 等适配器,将 LangChain、HuggingFace、LlamaIndex 等生态的嵌入模型统一接入 RAGAS 评估管线。模块还依赖 cache(避免冗余计算)和 run_config(超时、重试、种子控制),体现了框架对生产可靠性的考量。

integrations 模块 是 RAGAS 与外部工具集成的 API 层,覆盖 LangChain(EvaluatorChain 包装指标供 LangSmith 使用)、LlamaIndex(evaluate 对接查询引擎)、Haystack、R2R、Swarm、Opik 等。我对评估框架如何以统一指标接口横向接入不同 RAG 编排栈有了更具体的认识。

3.2 指标复现

metricsForNonLLM.py 等脚本中,我们复现了 RAGAS 中不依赖 LLM 的指标:

  • BLEU Score:基于 n-gram 匹配评估翻译质量;

  • NonLLMStringSimilarity:Levenshtein、Jaro-Winkler 等字符串距离;

  • NonLLMContextRecall:基于 TF-IDF 的上下文召回。

这些指标计算成本低、结果确定,适合作为 LLM-as-Judge 指标的对照基线,也帮助我们理解 RAGAS 指标设计的分层思路。


4. 迭代二:平台搭建与金融 RAG 应用

4.1 分工

迭代二的关键分工:

  • RAG 评估平台:后端 RAGAS 集成、任务/轮次 CRUD、前端评估看板;

  • 知识库搭建:数据采集、清洗、FAISS 建库;

  • RAG 应用检索与生成:召回策略、LLM 生成、对话 API;

  • Prompt 评估平台:多指标 Prompt 评测与多轮优化。

4.2 RAG 评估平台

后端 rag_eval/rageval.py 封装 RAGAS 的 evaluate 接口,默认使用三个 LLM 指标:

指标 含义
LLMContextRecall 参考答案中的主张有多少能被检索上下文支撑
Faithfulness 生成回答中的主张有多少能被检索上下文推断
FactualCorrectness 生成回答与参考答案之间的事实重叠度

评估数据通过 CSV/Excel 上传,字段为 user_inputretrieved_contextsresponsereference。平台支持任务(Task)— 评估轮(Turn) 两级管理:同一任务下可上传多轮测试集,对比不同优化策略的指标变化。

前端 RAGevalDetail.vue 用 ECharts 折线图展示多轮指标趋势,表格展示逐条样本的得分,便于团队根据数据决策是否调整分块策略、检索参数或 Prompt。

4.3 Prompt 评估平台

prompt_eval/prompteval.py 在 RAG 评估基础上扩展了更完整的指标集,包括 ResponseRelevancyAnswerCorrectnessContextPrecisionContextRecallContextEntityRecall 等,用于对用户自定义 Prompt 模板进行多维度评测与迭代优化。


5. 数据工程与知识库建设

5.1 数据来源

知识库按主题拆分为三个 FAISS 向量库,对应不同金融信息类型:

向量库 数据类型 来源说明
finance_book 金融教材 / 参考书 结构化金融基础知识,支撑概念性问答
eastmoney_report 东方财富研报 行业研究、公司分析、宏观策略等研报文本
webnews 财经新闻 CnOpenData 等开放数据集及东方财富财经新闻

此外,resource/ 目录还包含通过 AKShare 采集的 A 股日线行情数据(stock/),为后续数据分析与可视化扩展预留了接口。

5.2 文档处理流水线

原始数据经三道预处理脚本完成标准化:

  1. convert_documents.py:将 PDF、HTML、Markdown 等格式统一转为 TXT;PDF 表格通过 pdfplumber 抽取为 Markdown 表格块([TABLE] 标记),保留结构信息。

  2. clean_texts.py:黑名单过滤免责声明、风险提示、广告等无关内容;滑动窗口分块后基于 MD5 哈希去重。

  3. create_vector_db.py:LangChain 文档加载器读入清洗后的文本,执行三级分块后写入 FAISS。

5.3 三级分块策略

早期系统仅做简单文本切分,导致标题层级丢失、检索片段语义不完整。优化后采用标题 → 特殊字符 → Token 三级分块:

阶段 策略 作用
标题分割 Markdown # 标题、HTML h1–h3、正则识别章节编号 保留文档结构,避免跨章节混切
特殊字符分割 列表符号、箭头、分隔符等 在逻辑单元边界二次切分
Token 分割 BGE tokenizer,chunk_size=500,overlap=100 控制片段长度,兼顾嵌入模型上限与上下文连贯

每个文档块附带 sourcecontent_lengthcontent_hash 等元数据,支持检索结果溯源与重复检测。

5.4 嵌入与索引

向量嵌入统一使用 BGE-large-zh-v1.5,normalize_embeddings=True 以余弦相似度检索。建库与在线检索共用同一模型路径,避免训练—推理不一致导致的召回偏差。


6. RAG 核心链路

6.1 多库并行检索

RAGRetriever 在初始化时加载三个 FAISS 库,检索时按库并行执行 similarity_search_with_score,合并结果后按加权分数排序取 Top-K。每个结果保留 sourcedatabase 字段,前端以折叠面板展示参考来源,增强可解释性。

除基础相似度检索外,还支持:

  • MMR(最大边际相关性):在相关性与多样性之间折中,减少重复片段;
  • 上下文压缩检索:用 LLMChainExtractor 对长文本检索结果做 query-aware 压缩,缓解上下文窗口压力。

6.2 重排序

初排基于向量相似度,对专业术语密集的金融文本可能不够精准。RAGGenerator._rerank_documents 引入 BGE-reranker-large CrossEncoder,对 (query, document) 对打分重排,将最相关的片段优先送入生成阶段。

6.3 多轮对话与查询改写

早期系统每次请求独立处理,无法理解它、上述、第三个特点等指代。优化后增加“查询改写”步骤:将完整对话历史与当前问题送入 GLM-4-Flash,生成一条独立、无指代、可直接用于向量检索的查询语句,再执行检索与生成。

生成 Prompt 同时注入知识库上下文与历史对话,使模型在引用检索证据的同时兼顾多轮语境。

6.4 报告生成

迭代三的亮点功能之一。用户开启“报告生成”开关后,系统扩大检索范围(Top-K=20),由 LLM 按 Markdown 结构撰写 3000 字以上的深度报告,标注引用来源,并通过 PyMuPDF 转为 PDF 供下载。适用于行业综述、政策解读等需要系统性输出的场景。


7. 迭代三:RAG 优化

7.1 优化动机

初版系统存在七类突出问题:仅支持 TXT 格式、分块策略单一、元数据不足、检索效果欠佳、无效信息干扰、单库检索、缺乏多轮对话能力。针对这些问题,我们从数据工程与检索生成两条线同步改进。

7.2 主要优化项

方向 优化内容 效果
知识源扩展 支持 PDF / HTML / Markdown / TXT,表格转 Markdown 数据源覆盖常见办公与研报格式
分块策略 三级分块 + 黑名单过滤 + 哈希去重 检索相关性提升约 35%
多库检索 三库并行 + 可配置权重 + MMR / 压缩检索 覆盖教材、研报、新闻多种知识形态
历史对话 LLM 查询改写,消解指代 多轮追问场景可用性显著提升
处理效率 多格式流水线 + 多库并行 整体处理速度提升约 20%

结合 RAGAS 多轮评估与人工抽检,问答准确率相较初版提升约 20%,回答可溯源性明显增强。

7.3 知识库可视化管理

KnowledgeBase.vue 提供三库切换、文本块分页浏览、单块详情查看与在线追加文件等能力。后端 rag_visualization 模块暴露索引总量查询、按索引读取文档、上传新文件增量写入向量库等 API,使知识库从黑盒变为可运维、可扩展的资产管理界面。


8. 测试基准集

课程要求提供 RAG 系统评测用的测试基准。我们整理了 FinanceIQ 数据集作为金融领域权威评测参考——涵盖 10 个金融大类、36 个小类、7173 道单项选择题,覆盖 CPA、证券/基金/期货从业资格、经济师、精算师等考试题型。

RAG 评估平台的测试集格式与 RAGAS EvaluationDataset 对齐,字段为:

user_input | retrieved_contexts | response | reference

团队可基于 FinanceIQ 题目构造问答对,或将系统实际输出填入评估文件,通过多轮 Turn 对比优化前后的 context_recallfaithfulnessfactual_correctness 变化。


9. 前端产品化

主界面 MainPage.vue 以 Tab 切换四大模块。

RAG 问答(RAG.vue):左侧对话列表管理,右侧聊天区展示问答与参考来源;底部输入框支持报告生成开关。

知识库管理(KnowledgeBase.vue):数据库列表、文件上传、文本块文件夹式浏览与分页。

RAG 评估(RAG_eval.vue + RAGevalDetail.vue):任务卡片列表 → 评估轮管理 → 指标仪表盘 + 趋势折线图 + 明细表格。

Prompt 评估(Prompt_eval.vue):与 RAG 评估共享 TaskList / TaskCard 组件,支持更丰富的 Prompt 指标对比。

前后端通过 Axios 调用 http://127.0.0.1:5000 下的 REST 接口通信,对话记录与评估结果均持久化至 SQLite,支持跨会话回溯。


10. 个人工作与收获

10.1 主要负责

  • 迭代一:RAGAS 源码阅读与文档撰写;

  • 迭代二:RAG 评估平台后端(RAGAS 集成、任务/轮次 API)、RAG 应用检索链路(多库召回、重排序、查询改写、生成 API);

  • 迭代三:RAG 优化中的检索策略与多库架构、数据库检索模块,参与优化文档编写与测试基准集整理。

10.2 技术收获

  1. 从评估反推工程:先读懂 RAGAS 指标定义与计算逻辑,再据此设计测试集格式和优化方向,形成指标驱动迭代的闭环;

  2. 检索链路全貌:从文档清洗、分块、嵌入、多库召回、CrossEncoder 重排,到 LLM 生成与来源标注,完整走通 RAG 工程链路;

  3. 框架生态理解:RAGAS 的适配器模式与 LangChain 编排。


11. 总结与展望

本项目从 RAGAS 源码阅读出发,历经平台搭建、金融知识库建设、评估系统集成三轮迭代,最终交付了一套功能完整的金融 RAG 问答平台:支持多源知识检索、多轮对话、参考来源展示、PDF 报告生成,以及基于 RAGAS 的多轮评估与可视化分析。

后续可继续探索的方向包括:引入稀疏检索(BM25)与稠密检索的混合索引、对 FinanceIQ 等基准做端到端自动化评测、将行情数据与文本知识库联合检索以支持量化分析类问答,以及在生产环境中替换本地 FAISS 为可水平扩展的向量数据库服务。


写入简历

项目名称:基于 RAG 的金融问答平台

角色:后端开发工程师

技术栈:Python / Flask / LangChain / FAISS / BGE / GLM-4-Flash / RAGAS / Vue 3

S(情境)

金融知识分散在教材、研报、新闻等多种格式中,初版系统存在检索相关性低、回答缺乏依据、无法支撑多轮追问等问题,难以满足课程对工程完整性与可量化评估的要求。

T(任务)

作为后端核心开发,负责 RAG 检索与生成链路、RAGAS 评估平台后端,以及迭代三中的检索优化与多库架构改造;需在前后端分离架构下交付 RESTful API,并建立可复现的评估闭环以驱动系统迭代。

A(行动)

  • 基于 LangChain + FAISS 搭建 RAG 管线:完成多源金融数据采集、清洗、三级分块与 BGE-large-zh 向量化,按主题拆分为教材、研报、新闻三个向量库并支持并行检索;

  • 设计混合检索与重排序策略:实现相似度检索、MMR 多样性检索及 CrossEncoder(BGE-reranker-large)精排,引入 LLM 查询改写以支持多轮对话中的指代消解;

  • 集成 RAGAS 评估框架:封装上下文召回、忠实度、事实准确性等指标,实现评估任务/多轮评测的 CRUD、CSV 数据集解析与结果持久化,支撑前端 ECharts 趋势可视化;

  • 参与 RAG 系统性优化:扩展 PDF/HTML/Markdown 文档支持,完善黑名单过滤与去重流水线,落地上下文压缩检索与知识库可视化管理 API。

R(结果)

  • 问答准确率较初版提升约 20%,检索相关性优化后提升约 35%,整体数据处理效率提升约 20%;

  • 交付含 RAG 问答、知识库管理、RAG 评估、Prompt 评估四大模块的完整平台,回答附带可展开参考来源,支持 PDF 深度报告生成;

  • 建立基于 RAGAS 的多轮评估机制,团队可上传测试集对比各轮指标变化,形成评估—优化—再评估的迭代闭环。