# Fin-Bot金融知识问答系统 **Repository Path**: leke_code/finbot ## Basic Information - **Project Name**: Fin-Bot金融知识问答系统 - **Description**: Fin-Bot 是一款基于 RAG 技术的金融智能问答系统,专为解析复杂金融文档而生。它融合了 BGE-M3 混合检索与智能重排序技术,能精准处理 PDF、Excel 等多格式数据,并由 DeepSeek 大模型提供专业、可溯源的回答。前端采用独特的 Kuromi 主题风格,配合流式响应体验,让严肃的金融研报分析变得高效、精准且赏心悦目。颜值与实力并存,是您得力的金融 AI 助手。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-03-18 - **Last Updated**: 2026-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Fin-Bot 金融智能问答系统 Fin-Bot 是一个基于 RAG(Retrieval-Augmented Generation,检索增强生成)技术的金融领域智能问答系统。该系统整合了多种格式的金融文档解析、混合检索(Dense + Sparse)、智能重排序以及大模型生成能力,旨在提供准确、专业且可溯源的金融问答服务。 ![UI Preview](./assets/Initial.png) > 💡 **开发者的小吐槽**:为了缓解金融问答的枯燥感,前端界面特意采用了 **Kuromi (库洛米)** 主题风格!虽然紫色调的“恶魔系”少女风和严肃的金融数据看起来格格不入,但颜值即正义,好看就完事了!😈💜 1. 通过输入框输入提示词。(如下图所示) ![UI Preview](./assets/Prompt_Input.png) 2. 小助手正在思考中!(如下图所示) ![UI Preview](./assets/Prompt_Input_Thinking.png) 3. 小助手利用投喂的知识(主要来自主人投喂的金融PDF、Word文档)思考并且借助DeepSeek大模型接口整理、总结了自己的回答。此外还在回答的末尾以卡片的形式展示了经检索后相关性排名前三的金融文档。(如下图所示) ![UI Preview](./assets/FinBot_Answer.png) 4. 小助手已经实现了多任务会话功能;(如下图所示) ![UI Preview](./assets/multi-task_window.png)   如果想要删除某一个历史会话时,点击左侧侧边栏的“❌️”,并在二次确认中点击“删除”,即可成功删除特定历史会话。 ![UI Preview](./assets/click_delete1.png) ![UI Preview](./assets/click_delete2.png) ![UI Preview](./assets/click_delete_result.png) ## 🌟 核心功能 - **多格式文档解析**:支持 PDF、Word、Excel、PPT 等多种格式的金融文档解析与语义化处理。 - **混合检索策略**:结合 BGE-M3 的向量检索(Dense)和 BM25 的关键词检索(Sparse),兼顾语义理解与精确匹配。 - **智能重排序**:引入 BGE-Reranker-v2-m3 对检索结果进行精细排序,显著提升回答准确性。 - **流式响应体验**:前端采用模拟流式输出(Stream Markdown),提供类似 ChatGPT 的流畅交互体验。 - **来源可追溯**:每个回答均附带精确的文档来源与相关性评分,增强可信度。 ## 🏗️ 系统架构 系统采用前后端分离架构: - **Frontend**: Vue 3 + TypeScript + Tailwind CSS - **Backend**: FastAPI + Python - **RAG Pipeline**: BGE-M3 (Embedding) + FAISS (Vector DB) + BM25 + DeepSeek LLM ```mermaid graph TD User[用户查询] --> API[FastAPI 后端] API --> Dense[向量检索 (BGE-M3 + FAISS)] API --> Sparse[关键词检索 (BM25)] Dense --> Merge[合并去重] Sparse --> Merge Merge --> Rerank[重排序 (BGE-Reranker)] Rerank --> LLM[DeepSeek LLM] LLM --> Response[流式响应] ``` ## 🚀 快速开始 (Quick Start) ### 1. 环境准备 推荐使用 Conda 管理 Python 环境: ```bash conda create -n finbot python=3.10 conda activate finbot ``` 安装后端依赖: ```bash pip install -r requirements.txt ``` ### 2. 模型下载 由于在服务器上运行本项目具有 Hugging Face 网络问题,本项目提供了 `download.py` 脚本,配置了 `hf-mirror.com` 镜像加速下载。 **注意**:请在运行前检查 `download.py` 中的 `base_dir` 路径,确保其指向你希望存储模型的本地目录(例如 `./models`)。 ```bash python download.py ``` 该脚本将自动下载以下模型: - `BAAI/bge-m3` - `BAAI/bge-reranker-v2-m3` ### 3. 数据处理与索引构建 如果你有新的数据需要处理,请按顺序执行以下脚本: 1. **文档解析与分块**: ```bash python parse_and_chunk.py ``` 该步骤会读取 `data/` 目录下的文档,生成 `chunks.jsonl`。 2. **构建索引**: ```bash python build_index.py ``` 该步骤会生成 `faiss.index` (向量索引) 和 `bm25.index` (关键词索引)。 3. **初始化数据库**: ```bash python run_retrieval.py ``` 该步骤会将文本数据导入 SQLite 数据库 `docs.db`。 ### 4. 启动服务 #### 开发模式 1. **启动后端**: ```bash python api_server.py ``` 后端服务将运行在 `http://localhost:8000`。 2. **启动前端**: 确保已安装 Node.js (建议 v18+)。 ```bash cd frontend npm install npm run dev ``` 前端服务将运行在 `http://localhost:5173`。 #### 生产模式 构建前端静态资源并由后端统一托管: ```bash cd frontend npm run build cd .. python api_server.py ``` 访问 `http://localhost:8000` 即可使用完整系统。 ## 🛠️ 技术栈详解 ### 后端 (Backend) - **Web 框架**: FastAPI, Uvicorn - **文档处理**: pdfplumber (PDF), python-docx (Word), openpyxl (Excel), python-pptx (PPT) - **NLP & 检索**: - **Embedding**: BAAI/bge-m3 - **Rerank**: BAAI/bge-reranker-v2-m3 - **Vector DB**: FAISS - **Keyword Search**: Rank_BM25 + Jieba (中文分词) - **LLM**: DeepSeek API (兼容 OpenAI 接口) ### 前端 (Frontend) - **核心框架**: Vue 3, TypeScript, Vite - **UI 组件**: Tailwind CSS, Lucide Icons - **Markdown 渲染**: markstream-vue (支持流式渲染) ## 📂 目录结构 ``` Fin-Bot/ ├── api_server.py # 后端入口 ├── download.py # 模型下载脚本 ├── parse_and_chunk.py # 文档解析脚本 ├── build_index.py # 索引构建脚本 ├── run_retrieval.py # 检索逻辑测试与DB初始化 ├── requirements.txt # Python 依赖 ├── models/ # 模型存放目录 (需通过python download.py自行下载) ├── data/ # 投喂文件存放目录(需自行构建,即把想投喂给FinBot用于构建知识库的PDF文件\Word文件存放在此目录) ├── frontend/ # 前端项目 │ ├── src/ │ ├── package.json │ └── ... └── README.md # 项目文档 ``` ## ⚙️ 配置说明 在 `api_server.py` 中可以配置以下关键参数: - `api_key`: LLM API Key (默认使用 DeepSeek) - `base_url`: LLM API Base URL - `TOP_K_RETRIEVAL`: 初筛文档数量 (默认 15) - `TOP_K_RERANK`: 重排序保留数量 (默认 3) ## 📝 许可证 MIT License