前言
在企业知识库、个人文档管理等场景中,我们经常需要从大量文档中快速找到答案。传统搜索只能返回文档列表,而 RAG(Retrieval-Augmented Generation)技术可以让 AI 基于文档内容直接回答问题。
本文介绍如何用 FastAPI + React + LangChain 从零搭建一个本地文档问答系统。
效果展示
- 📄 上传 PDF/Word/Markdown 文档
- ❓ 用自然语言提问
- ✅ 获得带证据的回答
技术架构
核心流程
文档上传 → 文本解析切分 → 生成向量存入 Chroma
↓
用户提问 → 检索相关片段 → 大模型生成回答 → 展示证据
技术栈
| 模块 | 技术选型 |
|---|---|
| 后端 | FastAPI + Python |
| 前端 | React + Vite |
| LLM 编排 | LangChain |
| 向量库 | Chroma |
| 文档解析 | PyPDF、python-docx |
快速开始
1. 克隆项目
git clone https://github.com/LB623/general-doc-qa-assistant.git
cd general-doc-qa-assistant
2. 安装依赖
# 后端
python3 -m venv .venv
source .venv/bin/activate
pip install -r code/requirements.txt
# 前端
cd frontend && npm install
3. 配置并启动
# 配置 API Key
cp .env.example .env
# 编辑 .env 填写你的 API Key
# 启动后端(终端 1)
python code/api.py
# 启动前端(终端 2)
cd frontend && npm run dev
访问 http://127.0.0.1:5173 即可使用。
核心代码解析
文档上传与索引
文档上传后,系统会:
- 根据文件类型选择解析器(PyPDF/python-docx 等)
- 将文本切分成合适大小的片段
- 调用 Embedding 模型生成向量
- 存入 Chroma 向量库
检索与回答
用户提问时,系统会:
- 将问题生成向量
- 在 Chroma 中检索相似片段
- 可选 rerank 重排提升精度
- 将片段 + 问题交给大模型生成回答
- 前端展示回答并标注来源
项目亮点
| 特性 | 说明 |
|---|---|
| 🔒 本地优先 | 文档存在本地,不上传云端,隐私安全 |
| 📑 多格式支持 | PDF、Word、Markdown、TXT、CSV 一键解析 |
| 🎯 证据溯源 | 每个回答都标注来源片段,方便核对 |
| ⚡ 流式输出 | 回答逐字显示,不用干等 |
| 🔄 多模型切换 | 支持通义千问、Kimi、LongCat 等 |
总结
本项目完整实现了 RAG 文档问答的核心流程,适合:
- 📖 学习 RAG 技术的学习者
- 🎓 需要做课程设计/毕业设计的学生
- 📁 想搭建个人知识库的开发者
- 🛠️ 想基于 FastAPI + React 二次开发的开发者
📦 完整源码: github.com/LB623/gener…
欢迎 ⭐ Star、Issue 和 PR!
如果觉得本文有帮助,欢迎点赞、收藏、转发!