这是一个基于 FastAPI + LangChain 构建的企业级智能对话系统,集成了先进的 RAG(检索增强生成)技术,能够基于文档内容提供高精度的智能问答服务。系统采用微服务架构,具备会话持久化、多语言支持和模块化设计等特性。
- 智能问答 💬:基于 RAG 技术,结合文档检索和大语言模型,提供精准的问答体验
- 会话持久化 💾:使用 MySQL 存储会话历史,支持长期保存和回溯
- 多语言支持 🌐:前端集成 i18n,支持中英文界面切换
- 文档管理 📄:支持文档上传、处理和智能检索
- 微服务架构 🏗️:分离的用户服务和对话服务,易于扩展和维护
- 高性能 ⚡:基于 FastAPI 和 ChromaDB,提供卓越的性能表现
flowchart TD
subgraph "前端层"
A["用户界面
(Vue 3)"] -->|发送查询| B["API请求
(Axios)"]
C["会话管理
(Pinia)"] -->|状态管理| B
D["用户认证
(Vue Router)"] -->|路由守卫| B
end
subgraph "API路由层"
B -->|REST API| E["聊天路由
(FastAPI)"]
E -->|认证| F["认证中间件
(JWT)"]
E -->|限流| G["限流控制
(Redis)"]
end
subgraph "业务服务层"
E -->|代理查询| H["ChatService
(Python)"]
H -->|会话管理| I["SessionManager
(MySQL)"]
H -->|RAG检索| J["RagService
(LangChain)"]
H -->|向量存储| K["VectorStoreService
(ChromaDB)"]
H -->|智能代理| L["Agent
(LangChain)"]
H -->|文档重排序| M["ReorderService
(Hugging Face)"]
end
subgraph "数据存储层"
I -->|存储会话| N["MySQL数据库"]
K -->|向量存储| O["ChromaDB向量库"]
K -->|文件存储| P["文件系统"]
G -->|缓存| Q["Redis缓存"]
end
subgraph "AI模型服务"
L -->|LLM调用| R["DashScope API
(Qwen3-Max)"]
J -->|嵌入模型| S["文本嵌入
(text-embedding-v4)"]
M -->|重排序模型| T["Qwen3-Reranker-0.6B
(PyTorch/Sentence-Transformers)"]
end
subgraph "用户服务"
U["Django用户服务"] -->|认证授权| F
U -->|用户管理| V["MySQL用户数据库"]
end
- Python 3.12+
- uv
- Node.js 16+
- npm 或 pnpm
git clone https://github.com/RMA-MUN/LangChain-RAG-FastAPI-Service.git
cd LangChain-RAG-FastAPI-Service# 进入后端目录
cd backend
# 使用 uv 安装依赖
uv sync# 进入前端目录
cd front
# 安装依赖
npm install
# 或使用 pnpm
pnpm install在 backend 目录下创建 .env 文件,参考.env.example文件填写个人配置:
# DashScope API Key (必填)
DASHSCOPE_API_KEY=your_dashscope_api_key
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=chatbot
# 安全配置
SECRET_KEY=your_secret_key
# 重排序模型配置(可选)
RERANKER_MODEL_PATH=D:\Hugging_Face\models\Qwen3-Reranker-0.6B
# LangSmith_API_KEY,自行前往 https://smith.langchain.com/ 官网注册获取api key
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=your_langsmith_api_key
LANGCHAIN_PROJECT=my-fastapi-langchain-project详细的模型下载和配置说明请参考:Hugging Face 模型配置
修改 backend/app/config/rag.yaml 文件:
# 聊天模型配置
chat_model_name: qwen3-max
# 文本嵌入模型配置
text_embedding_model_name: text-embedding-v4修改 backend/app/config/chroma.yaml 文件:
# 向量数据库配置
collection_name: rag_collection
persist_directory: data/chromadb
k: 3
# 文件处理配置
data_path: data
md5_hex_store: data/md5_hex_store/md5_hex_store.txt
allow_knowledge_file_types: ["txt", "pdf"]
# 文档切分配置
chunk_size: 200
chunk_overlap: 20
separators: ["\n\n", "\n", "。", "!", "?", "!", "?", " ", ""]cd backend
uvicorn main:app --reload服务将在 http://localhost:8000 运行。
cd front
npm run dev
# 或使用 pnpm
pnpm run dev前端将在 http://localhost:3000 运行。
# 进入 Django 用户服务目录
cd DjangoUserService
# 使用 uv 安装依赖
uv sync
# 启动 Django 服务
uv run python manage.py runserver 8001用户服务将在 http://localhost:8001 运行。
# 管理员运行cmd或powershell
net start mysql# 如果你是直接解压安装的redis
redis-server
# 如果是服务版的redis,管理员打开终端
net start redis# 如果使用ollama本地的模型,需要启动ollama服务
ollama serve- FastAPI ⚡:高性能异步 Web 框架
- LangChain 🦜:大语言模型应用开发框架
- ChromaDB 📚:轻量级向量数据库,用于高效文档检索
- Django 🎯:用户认证和管理系统
- MySQL 🗄️:关系型数据库,用于存储用户数据和会话历史
- Redis ⚡:缓存数据库,用于提高系统性能
- DashScope API 🔑:提供大语言模型和嵌入模型服务
- Hugging Face 🤗:提供预训练模型和模型下载服务
- PyTorch 🧠:深度学习框架,用于模型推理
- Sentence-Transformers 📝:句子嵌入和语义匹配库
- Vue 3 🖼️:现代化前端框架
- Vite ⚡:极速构建工具
- Vue Router 🛣️:路由管理
- Pinia 📦:状态管理
- i18n 🌍:国际化支持
├── backend/ # FastAPI 后端服务
│ ├── app/ # 应用代码
│ │ ├── agent/ # 智能代理模块
│ │ ├── config/ # 配置文件目录
│ │ ├── model/ # 数据模型定义
│ │ ├── prompt/ # 提示词模板
│ │ ├── rag/ # RAG 核心功能
│ │ ├── router/ # API 路由定义
│ │ ├── services/ # 业务服务层
│ │ └── utils/ # 工具函数
│ ├── data/ # 数据存储目录
│ ├── main.py # 应用入口文件
│ └── requirements.txt # 后端依赖列表
├── front/ # Vue 前端项目
│ ├── src/ # 源代码
│ ├── public/ # 静态资源
│ └── package.json # 前端依赖配置
├── DjangoUserService/ # Django 用户服务
└── README.md # 项目说明文档
在 backend/app/config/db_config.py 中配置 MySQL 连接:
# MySQL 配置
DB_CONFIG = {
"host": os.getenv("DB_HOST", "localhost"),
"port": int(os.getenv("DB_PORT", "3306")),
"user": os.getenv("DB_USER", "root"),
"password": os.getenv("DB_PASSWORD", ""),
"database": os.getenv("DB_NAME", "chatbot"),
}在 .env 文件中设置 DashScope API Key:
DASHSCOPE_API_KEY=your_dashscope_api_key在 backend/app/config/rag.yaml 中配置模型参数:
# 聊天模型名称
chat_model_name: qwen3-max
# 文本嵌入模型名称
text_embedding_model_name: text-embedding-v4在 backend/app/config/chroma.yaml 中配置向量数据库参数:
# 向量数据库配置
collection_name: rag_collection
persist_directory: data/chromadb
k: 3
# 文件处理配置
data_path: data
md5_hex_store: data/md5_hex_store/md5_hex_store.txt
allow_knowledge_file_types: ["txt", "pdf"]
# 文档切分配置
chunk_size: 200
chunk_overlap: 20
separators: ["\n\n", "\n", "。", "!", "?", "!", "?", " ", ""]详细的部署说明请参考:部署指南
- backend/app/rag/:RAG 核心功能,包括向量存储和检索
- backend/app/agent/:智能代理,处理用户请求和对话逻辑
- backend/app/services/:业务服务层,提供会话管理等功能
- backend/app/utils/:工具函数,包括配置加载、文件处理等
- front/src/views/:前端页面组件
- front/src/components/:可复用的前端组件
- 添加新功能
- 在对应的模块中添加代码
- 运行测试确保功能正常
- 更新相关文档
- 调试技巧
- 使用 FastAPI 的自动重载功能:
uvicorn main:app --reload - 使用 Vue 的热更新功能:
npm run dev
- 使用 FastAPI 的自动重载功能:
详细的故障排除指南请参考:故障排除
项目文档位于 docs/ 目录:
- Hugging Face 模型配置:详细的模型下载和配置说明
- 部署指南:生产环境部署详细步骤
- 故障排除:常见问题和解决方案
- API 文档:后端 API 接口文档
- 用户服务 API:用户服务 API 文档
如有任何问题或建议,请随时联系我们。😊


