🌟 项目亮点
🎯 解决核心痛点
- 告别翻文档找答案的痛苦 – 一问一答,秒速获取精准信息
- 支持多种文档格式 – PDF、图片、Office文档、文本,想上传什么传什么
- 智能理解图片内容 – 连图片中的文字信息都能提取和问答
🏆 技术架构优势
- FastAPI + LangChain – 现代化后端架构,性能卓越
- Pinecone向量数据库 – 毫秒级检索,准确度惊人
- OpenAI GPT模型 – 基于最新AI技术,回答专业可靠
- 双前端设计 – 既有简洁的Python界面,也有炫酷的企业级HTML5界面
🎨 用户体验突出
- Bento Grid设计语言 – 参考阿里巴巴官网,现代简约
- 拖拽上传文件 – 就像把文件丢到桌子上一样自然
- 实时状态反馈 – 系统状态一目了然,处理进度实时显示
- 响应式设计 – 手机、平板、电脑都能完美使用
🚀 快速开始
🔧 环境准备
- 克隆项目
git clone <repository-url>
cd rag_system_fastapi
- 创建虚拟环境
python -m venv venv
source venv/bin/activate # Mac/Linux
# 或者 Windows 用户使用:
# venv\Scripts\activate
- 安装依赖
pip install -r requirements.txt
- 配置API密钥
# 复制环境变量模板
cp .env.example .env
# 编辑 .env 文件,填入你的API密钥:
# OPENAI_API_KEY=your-openai-api-key
# PINECONE_API_KEY=your-pinecone-api-key
# UNSTRUCTURED_API_KEY=your-unstructured-api-key # 可选,用于Office文档
🎬 启动系统
方式一:标准启动
# 启动后端API服务
bash run.sh
# 新开一个终端,启动前端
bash start_frontend.sh
方式二:企业级前端
# 启动后端API服务
bash run.sh
# 新开一个终端,启动企业级HTML5前端
bash start_premium_frontend.sh
🌐 访问地址
- 🎨 企业级前端: http://localhost:8080 (推荐)
- 🔧 开发者前端: http://localhost:8505
- 📚 API文档: http://localhost:8000/docs
- 🔗 后端API: http://localhost:8000
💡 功能特色
📚 智能文档处理
文档类型 | 支持格式 | 最大大小 | 处理方式 |
---|---|---|---|
PDF文档 | .pdf |
15MB | 直接文本提取 |
图片文件 | .jpg .png .webp .gif .bmp |
5MB | AI视觉识别 |
Office文档 | .doc .docx .xls .xlsx .ppt .pptx |
10MB | 专业解析器 |
纯文本 | .txt |
2MB | 直接处理 |
🧠 核心工作流程
graph TD
A[📁 上传文档] --> B[🔍 智能解析]
B --> C[✂️ 智能分块]
C --> D[🧮 向量化]
D --> E[💾 存储到Pinecone]
F[❓ 用户提问] --> G[🔍 向量检索]
G --> H[📋 找到相关文档]
H --> I[🤖 AI生成回答]
I --> J[✅ 返回答案 + 来源]
🎨 双前端体验
🏢 企业级前端 (HTML5)
- ✨ 现代化界面 – Bento Grid布局,阿里巴巴配色
- 🎭 流畅动画 – 仿苹果官网动效,丝滑体验
- 📊 数据可视化 – Chart.js图表,数据一目了然
- 📱 响应式设计 – 完美适配各种设备
- 🎯 专业图标 – Font Awesome图标库
🔧 开发者前端 (Streamlit)
- 🚀 快速原型 – 适合开发调试
- 📈 数据分析 – Plotly图表支持
- 🌙 深色模式 – 保护开发者眼睛
- ⚡ 实时更新 – 代码改动立即生效
📖 使用指南
🎯 基本使用
-
📤 上传文档
- 点击上传区域或拖拽文件
- 支持批量上传
- 自动识别文件类型
-
💬 开始问答
- 在聊天框输入问题
- AI会基于上传的文档回答
- 每个回答都会显示信息来源
-
📊 查看统计
- 实时查看文档数量
- 向量存储状态
- 系统运行状态
🔥 高级功能
📋 快速问题模板
- "这份文档的主要内容是什么?"
- "请总结关键要点"
- "有哪些重要的数据或结论?"
🎛️ 系统管理
- 文档管理 – 查看、删除已上传文档
- 状态监控 – 实时查看系统健康状态
- 数据统计 – 文档类型分布,使用趋势分析
🛠️ API 接口文档
📤 文档管理接口
POST /api/documents/upload
Content-Type: multipart/form-data
上传文档文件
GET /api/documents
获取文档列表
DELETE /api/documents/{doc_id}
删除指定文档
GET /api/documents/stats
获取文档统计信息
💬 问答接口
POST /api/qa/ask
Content-Type: application/x-www-form-urlencoded
question=你的问题内容
📋 完整API文档
启动服务后访问:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
📁 项目结构
rag_system_fastapi/
├── 📁 app/ # 后端应用
│ ├── 📄 main.py # FastAPI应用入口
│ ├── 📁 routers/ # API路由
│ │ ├── 📄 documents.py # 文档处理接口
│ │ └── 📄 qa.py # 问答接口
│ ├── 📁 services/ # 业务逻辑
│ │ ├── 📄 document_processor.py # 文档处理服务
│ │ └── 📄 qa_service.py # 问答服务
│ └── 📁 utils/ # 工具类
│ └── 📄 config.py # 配置管理
├── 📄 frontend_pro.py # Streamlit前端
├── 📄 frontend_premium.html # 企业级HTML5前端
├── 📄 requirements.txt # Python依赖
├── 📄 .env.example # 环境变量模板
├── 🚀 run.sh # 后端启动脚本
├── 🚀 start_frontend.sh # Streamlit前端启动脚本
└── 🚀 start_premium_frontend.sh # 企业级前端启动脚本
🛠️ 技术栈
🔧 后端技术
- FastAPI – 高性能异步API框架
- LangChain – 大语言模型应用开发框架
- Pinecone – 向量数据库
- OpenAI API – GPT模型和Embeddings
- Unstructured – 文档解析工具
🎨 前端技术
- Streamlit – 快速数据应用开发
- HTML5 + TailwindCSS – 现代化Web界面
- Chart.js – 数据可视化
- Font Awesome – 专业图标库
- Plotly – 交互式图表
🎯 适用场景
🏢 企业应用
- 📚 企业知识库 – 员工手册、规章制度、技术文档
- 🎧 智能客服 – 基于产品文档的自动问答
- 📈 商业智能 – 报告分析、数据挖掘
🎓 教育科研
- 📖 学习助手 – 教材、论文、研究资料问答
- 🔬 研究辅助 – 文献检索、知识发现
- 👨🏫 教学工具 – 智能答疑、课程辅导
⚖️ 专业服务
- 📋 法律文档 – 合同分析、法规查询
- 🏥 医疗知识 – 医学文献、诊疗指南
- 💰 金融分析 – 政策解读、市场研究
❗ 故障排除
🔧 常见问题
Q: 启动后端时报错 "ModuleNotFoundError"
# 确保在虚拟环境中
source venv/bin/activate
pip install -r requirements.txt
Q: 上传文档失败
- 检查文件大小是否超出限制
- 确保API密钥配置正确
- 查看控制台错误信息
Q: 问答功能不工作
# 检查后端服务状态
curl http://localhost:8000/api/health
# 检查Pinecone连接
# 查看 .env 文件中的 PINECONE_API_KEY 配置
Q: 企业级前端访问不了
# 确保后端服务已启动
curl http://localhost:8000/
# 确保没有端口冲突
lsof -i :8080
🆘 获取帮助
遇到问题?
- 查看控制台输出日志
- 检查
.env
文件配置 - 确认网络连接正常
- 参考项目文档:
项目分享 - 我是怎么做出这个RAG智能问答系统的.md
🎁 项目文档
🚧 未来规划
🎯 短期目标
- 支持更多文档格式 (Markdown, HTML)
- 添加用户认证系统
- 优化移动端体验
- 支持批量文档处理
🌟 长期愿景
- 多语言支持
- 知识图谱构建
- 协作功能
- 企业级部署方案
👥 贡献指南
欢迎贡献代码!请遵循以下步骤:
- Fork 这个仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature
) - 提交更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 开启 Pull Request
📞 联系方式
📄 开源协议
本项目基于 MIT License 开源协议。
⭐ 如果这个项目对你有帮助,请给个星标支持一下!
让知识检索变得更智能,让问答体验更自然 🚀