手把手教你用 FastAPI 搭建 RAG 文档问答系统(附完整源码)

0 阅读2分钟

前言

在企业知识库、个人文档管理等场景中,我们经常需要从大量文档中快速找到答案。传统搜索只能返回文档列表,而 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 即可使用。


核心代码解析

文档上传与索引

文档上传后,系统会:

  1. 根据文件类型选择解析器(PyPDF/python-docx 等)
  2. 将文本切分成合适大小的片段
  3. 调用 Embedding 模型生成向量
  4. 存入 Chroma 向量库

检索与回答

用户提问时,系统会:

  1. 将问题生成向量
  2. 在 Chroma 中检索相似片段
  3. 可选 rerank 重排提升精度
  4. 将片段 + 问题交给大模型生成回答
  5. 前端展示回答并标注来源

项目亮点

特性说明
🔒 本地优先文档存在本地,不上传云端,隐私安全
📑 多格式支持PDF、Word、Markdown、TXT、CSV 一键解析
🎯 证据溯源每个回答都标注来源片段,方便核对
⚡ 流式输出回答逐字显示,不用干等
🔄 多模型切换支持通义千问、Kimi、LongCat 等

总结

本项目完整实现了 RAG 文档问答的核心流程,适合:

  • 📖 学习 RAG 技术的学习者
  • 🎓 需要做课程设计/毕业设计的学生
  • 📁 想搭建个人知识库的开发者
  • 🛠️ 想基于 FastAPI + React 二次开发的开发者

📦 完整源码: github.com/LB623/gener…

欢迎 ⭐ Star、Issue 和 PR!


如果觉得本文有帮助,欢迎点赞、收藏、转发!