基于 RAG (Retrieval-Augmented Generation) 的智能文档问答系统,支持文档上传、向量检索和智能问答。
┌─────────────────────────────────────────────────────────┐
│ NextRAG 架构图 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 前端 │───▶│ FastAPI │───▶│ LLM API │ │
│ │ (Vue3) │ │ Backend │ │(DeepSeek)│ │
│ └─────────┘ └────┬────┘ └─────────┘ │
│ │ │
│ ┌─────────────┼─────────────┐ │
│ │ │ │ │
│ ┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐ │
│ │ VectorDB │ │ Redis │ │ SQLite │ │
│ │ (Chroma) │ │ (History) │ │ (Meta) │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
- 框架: Vue 3 + TypeScript
- 构建工具: Vite
- 状态管理: Pinia
- HTTP 客户端: Axios
- 样式: SCSS + CSS Variables
- 框架: FastAPI
- 语言: Python 3.11+
- 向量数据库: ChromaDB
- 缓存: Redis
- 数据库: SQLite
- LLM: DeepSeek API
智能问答系统/
├── backend/ # 后端项目
│ ├── app/
│ │ ├── api/ # API 路由
│ │ │ ├── chat.py # 对话 API
│ │ │ ├── chat_session.py # 会话管理 API
│ │ │ ├── document.py # 文档 API
│ │ │ ├── knowledge.py # 知识库 API
│ │ │ └── system.py # 系统 API
│ │ ├── core/ # 核心模块
│ │ │ ├── rag_chain.py # RAG 链
│ │ │ ├── embeddings.py # 向量化
│ │ │ ├── vectorstore.py # 向量存储
│ │ │ └── document_loader.py
│ │ ├── models/ # 数据模型
│ │ ├── services/ # 业务服务
│ │ ├── config.py # 配置管理
│ │ └── main.py # 应用入口
│ ├── tests/ # 测试用例
│ ├── data/ # 数据目录
│ ├── requirements.txt
│ └── README.md
│
├── frontend/ # 前端项目
│ ├── src/
│ │ ├── api/ # API 调用
│ │ │ ├── chat.ts # 对话 API
│ │ │ ├── chat-session.ts # 会话管理 API
│ │ ├── components/ # 公共组件
│ │ │ ├── ChatSidebar.vue # 聊天侧边栏
│ │ ├── layouts/ # 布局组件
│ │ ├── router/ # 路由配置
│ │ ├── store/ # 状态管理
│ │ ├── views/ # 页面视图
│ │ │ ├── ChatView.vue # 对话页面
│ │ │ ├── DocumentsView.vue # 文档管理
│ │ │ └── KnowledgeBasesView.vue
│ │ ├── App.vue
│ │ └── main.ts
│ └── package.json
│
└── README.md # 项目总览
- Node.js >= 18
- Python >= 3.11
- Redis (可选,用于对话历史)
git clone https://github.com/Jackson-da/nextrag.git
cd nextragcd backend
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# or
.\venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入你的配置# DeepSeek API 配置
DEEPSEEK_API_KEY=your_api_key_here
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-chat
# 向量数据库配置
EMBEDDING_MODEL=text-embedding-3-small
VECTORSTORE_PERSIST_DIR=./data/chroma_db
# Redis 配置 (可选)
REDIS_URL=redis://localhost:6379/0
# CORS 配置
CORS_ORIGINS=["http://localhost:5173","http://localhost:5174"]
# RAG 配置
RETRIEVAL_TOP_K=5
TEMPERATURE=0.4
MAX_TOKENS=2000cd frontend
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env# 终端 1 - 启动后端
cd backend
uvicorn app.main:app --reload --port 8000
# 终端 2 - 启动前端
cd frontend
npm run dev访问:
- 前端: http://localhost:5173
- 后端 API: http://localhost:8000
- API 文档: http://localhost:8000/docs
# 构建前端
cd frontend
npm run build
# 后端使用 uvicorn
cd backend
uvicorn app.main:app --host 0.0.0.0 --port 8000- 文档上传 (支持 PDF, TXT, Markdown)
- 文档列表查看
- 文档删除
- 文件类型识别
- 创建知识库
- 知识库列表
- 关联文档管理
- 知识库删除
- 基于 RAG 的问答
- 流式输出
- 多轮对话支持
- 历史对话记忆
- 创建/删除会话
- 会话列表查看
- 会话重命名
- 消息历史管理
- 用户会话隔离
- 关联知识库
POST /api/v1/chat/stream
请求体:
{
"message": "问题内容",
"session_id": "会话ID" // 可选
}
响应: SSE 流式输出
GET /api/v1/documents # 获取文档列表
POST /api/v1/documents/upload # 上传文档
DELETE /api/v1/documents/{id} # 删除文档
GET /api/v1/knowledge-bases # 获取知识库列表
POST /api/v1/knowledge-bases # 创建知识库
DELETE /api/v1/knowledge-bases/{id} # 删除知识库
GET /api/v1/chat/sessions # 获取会话列表
POST /api/v1/chat/sessions # 创建会话
GET /api/v1/chat/sessions/{id} # 获取会话详情
PATCH /api/v1/chat/sessions/{id} # 更新会话
DELETE /api/v1/chat/sessions/{id} # 删除会话
GET /api/v1/chat/sessions/{id}/messages # 获取会话消息
DELETE /api/v1/chat/sessions/{id}/messages # 清空会话消息
| 对话页面 | 文档管理 | 知识库 |
|---|---|---|
| ![Chat] | ![Docs] | ![KB] |
- 在
backend/app/api/创建新的路由文件 - 注册到
app/main.py的app.include_router()
# backend/app/api/new_route.py
from fastapi import APIRouter
router = APIRouter(prefix="/api/v1/new", tags=["new"])
@router.get("/items")
async def get_items():
return {"items": []}- 在
frontend/src/views/创建 Vue 组件 - 在
frontend/src/router/index.ts添加路由
// frontend/src/router/index.ts
{
path: '/new-page',
name: 'NewPage',
component: () => import('@/views/NewPage.vue')
}cd backend
# 运行所有测试
pytest
# 运行指定测试
pytest tests/test_api.py
# 运行会话管理测试
pytest tests/test_chat_session.py -v
# 查看覆盖率
pytest --cov=app tests/可在 .env 中自定义 RAG 提示词:
RAG_SYSTEM_PROMPT=你是一个专业的文档问答助手...
RAG_CONTEXTUALIZE_PROMPT=根据对话历史重写问题...TEMPERATURE=0.4 # 创造性程度 (0-2)
MAX_TOKENS=2000 # 最大输出token数
RETRIEVAL_TOP_K=5 # 检索返回数量A: 确保 ChromaDB 数据目录存在且有写入权限。
A: 检查 .env 中的 DEEPSEEK_API_KEY 是否正确配置。
A: 检查 CORS 配置是否包含前端地址。
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
本项目采用 MIT License - 详见 LICENSE 文件
- GitHub Issues: Issues
- 作者: Jackson
如果这个项目对你有帮助,请给个 Star ⭐