Skip to content

RMA-MUN/LangChain-RAG-FastAPI-Service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

237 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAG NoteBook— 智能笔记助手

AI 驱动的个人知识管理工具,融合 笔记管理 + RAG 知识库 + AI 写作辅助,解决"笔记写了从不回看、知识散落成孤岛"的问题。


项目变迁

本项目最初是一个基础 RAG 对话系统,我们做了一次重要转型,从基础的 RAG,转型为解决实际问题的 RAG NoteBook:

阶段一(base-rag 分支) 阶段二(master 分支)
定位 纯 RAG 对话服务,开箱即用 智能笔记助手,以 RAG 为核心的 NoteBook 工具
能力 文档上传 → 向量检索 → AI 问答 笔记管理 + RAG + 间隔重复 + AI 写作
适合谁 想快速集成 RAG 能力的开发者或希望学习RAG技术的个人 需要AI管理笔记和知识库的个人以及简历需要RAG项目的求职者

RAG 始终是整个系统的核心引擎。 基础 RAG 代码已永久保留在 base-rag 分支供学习使用,如果只需要纯 RAG 服务,切换到base-rag即可开箱使用。

📄 查看完整项目变迁 →

📋 目录

项目简介

基于 FastAPI + LangChain 构建的智能笔记助手,核心能力包括:

  • 笔记管理:Markdown 编辑器、智能标签(LLM 自动分类)、语义搜索、Markdown 导出
  • RAG 知识库:多格式文档上传(txt/pdf/md/pptx/docx),基于向量检索的精准问答
  • 间隔重复回顾:艾宾浩斯遗忘曲线算法,对抗遗忘
  • AI 写作辅助:联机补全、续写/扩写/摘要、关联笔记推荐

系统支持会话持久化(MySQL)、向量检索(ChromaDB)、JWT 用户隔离,前端采用 Vue 3 + Vant 4 移动端友好的界面。

核心特性

  • 📝 笔记管理:Markdown 编辑器(bytemd),支持新建、编辑、删除、分类筛选、分页列表
  • 🏷️ 智能标签:保存笔记后 LLM 异步生成标签和分类(工作/学习/生活/项目),无需手动归类
  • 🔍 语义搜索:基于向量嵌入的笔记全文搜索,告别关键词匹配
  • 🔄 间隔重复回顾:艾宾浩斯遗忘曲线(1/2/4/7/15/30 天)
  • ✍️ AI 联机补全:打字停顿后模型实时补全,Tab 键快速采纳
  • 🤖 AI 写作助手:续写、扩写、摘要生成,SSE 流式输出
  • 🔗 跨源关联推荐:编辑笔记时,从笔记库和知识库双向检索 Top k 相关文档
  • 💬 智能问答:基于 RAG 技术的 Agent 对话,支持文档引用来源展示
  • 💾 会话持久化:MySQL 存储对话历史,随时回溯
  • 📄 文档管理:支持 TXT / PDF / MD / PPTX / DOCX 上传,可视化切片详情
  • 🌐 多语言支持:前端 i18n,中英文界面切换
  • ⛑️ 安全隔离:用户级知识库隔离,RAG 检索只能访问本人数据

项目演示

功能模块 界面展示 功能说明
📒编辑 笔记编辑 在线markdown编辑器,支持行内AI补全、相关笔记推荐
📝 笔记 笔记列表 笔记列表,自动分类、打标签
🔄 每日回顾 回顾 艾宾浩斯遗忘曲线算法 ,每日提醒需要回顾的内容
💬 AI 聊天 AI聊天 RAG 智能问答,支持上下文对话和文档引用
📚 知识库 知识库 多格式文档上传和管理
✂️ 文档切片 切片 可视化文档切片详情

快速开始

环境要求

环境 版本推荐
Python 3.12+
uv 0.11.9
Node.js 16+

克隆项目

git clone https://github.com/RMA-MUN/LangChain-RAG-FastAPI-Service.git
cd LangChain-RAG-FastAPI-Service

安装依赖

后端依赖

cd backend
uv sync

前端依赖

cd front
npm install
# 或使用 pnpm
pnpm install

环境配置

创建后端环境变量文件

backend 目录下创建 .env 文件,参考 .env.example 文件填写配置:

# ==================== LLM 大模型配置 ====================
# LLM类型:ALIYUN | OLLAMA
LLM_TYPE=ALIYUN

# ==================== Ollama 配置 (LLM_TYPE=OLLAMA) ====================
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL_NAME=qwen3.5:0.8b

# ==================== 阿里云百炼配置 (LLM_TYPE=ALIYUN) ====================
ALIYUN_ACCESS_KEY=your_api_key
ALIYUN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
CHAT_MODEL_NAME=qwen3-max

# ==================== 向量嵌入模型配置 ====================
EMBED_MODEL_TYPE=OLLAMA
TEXT_EMBEDDING_MODEL_NAME=qwen3-embedding:0.6b
ALIYUN_EMBED_MODEL_NAME=qwen3-embedding

# ==================== 数据库配置 ====================
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_DATABASE=chat_history

REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DB=0

# ==================== 服务配置 ====================
DJANGO_API_URL=http://127.0.0.1:8001

# ==================== LangSmith 调试追踪 ====================
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=your_langsmith_api_key
LANGCHAIN_PROJECT=my-fastapi-langchain-project

# ==================== 重排序模型配置 ====================
RERANKER_MODEL_PATH=D:\Hugging_Face\models\Qwen3-Reranker-0.6B

# ==================== JWT 身份验证配置 ====================
SECRET_KEY=MY_JWT_SECRET_KEY
ALGORITHM=HS256

创建用户服务环境变量文件

DjangoUserService 目录下创建 .env 文件:

# JWT 配置
JWT_SECRET_KEY=YOUR_JWT_SECRET_KEY

# 数据库配置
DB_PORT=3306
DB_NAME=user_service
DB_USER=root
DB_PASSWORD=root
DB_HOST=localhost

# Celery 配置
CELERY_BROKER_URL=redis://localhost:6379/0
CELERY_RESULT_BACKEND=redis://localhost:6379/0
CELERY_TASK_TIME_LIMIT=300
CELERY_TASK_SOFT_TIME_LIMIT=250
CELERY_RESULT_EXPIRES=3600

# Redis 配置
REDIS_CACHE_URL=redis://localhost:6379/1

配置好 env 文件后,执行 Django ORM 迁移:

python manage.py makemigrations
python manage.py migrate

向量数据库配置

修改 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", "md", "pptx", "docx"]

chunk_size: 200
chunk_overlap: 20
separators: ["\n\n", "\n", "。", "!", "?", "!", "?", " ", ""]

启动服务

服务 命令 端口
后端服务 cd backend && uvicorn main:app --reload 8000
前端服务 cd front && npm run dev 3000
用户服务 cd DjangoUserService && uv run python manage.py runserver 8001 8001
MySQL net start mysql 3306
Redis redis-servernet start redis 6379
Ollama ollama serve 11434

技术栈

后端技术

技术 说明
FastAPI 高性能异步 Web 框架
LangChain 大语言模型应用开发框架(AgentExecutor + Tools)
ChromaDB 轻量级向量数据库(rag_collection + notes_collection)
SQLAlchemy 异步 ORM,管理 MySQL
Django 用户认证和管理系统
MySQL 关系型数据库(chat_history / notes / reviews)
Redis 缓存
DashScope API 大语言模型服务(Qwen3-Max)
Ollama 本地模型部署(qwen3.5:0.8b 联机补全)
Hugging Face 重排序模型(Qwen3-Reranker-0.6B)
Sentence-Transformers 句子嵌入模型

前端技术

技术 说明
Vue 3 现代化前端框架(Composition API)
Vite 极速构建工具
Vant 4 移动端 UI 组件库
bytemd Markdown 编辑器(Web Component)
Vue Router 路由管理(路由守卫 + JWT 校验)
Pinia 状态管理
Vue i18n 国际化(中/英)
Axios HTTP 客户端
highlight.js 代码语法高亮
dompurify HTML 安全过滤

项目结构

├── backend/                     # FastAPI 后端服务
│   ├── app/
│   │   ├── agent/               # Agent 智能代理模块
│   │   │   └── agent.py         # AgentFactory + Tool 定义
│   │   ├── config/              # 配置文件(chroma.yaml 等)
│   │   ├── core/                # 核心工具(限流、响应封装、日志)
│   │   ├── db/                  # 数据库配置(MySQL + Redis)
│   │   ├── model/               # SQLAlchemy ORM 模型
│   │   │   ├── note.py          # 笔记模型
│   │   │   ├── review_record.py # 回顾记录模型
│   │   │   └── chat_history.py  # 对话历史模型
│   │   ├── prompt/              # 提示词模板(8个)
│   │   ├── rag/                 # RAG 核心功能
│   │   │   ├── rag_service.py   # RAG 服务(HyDE + 混合检索)
│   │   │   ├── reorder_service.py
│   │   │   ├── vector_store.py  # ChromaDB 封装
│   │   │   ├── text_spliter.py  # 文档切片
│   │   │   ├── document_handler/# 文档解析(txt/pdf/md/pptx/docx)
│   │   │   ├── retrievers/      # 自定义检索器
│   │   │   └── task_queue.py    # 后台处理队列
│   │   ├── router/              # API 路由
│   │   │   ├── chat.py          # 聊天 & Agent 路由
│   │   │   ├── note_router.py   # 笔记 CRUD & AI 路由
│   │   │   ├── review_router.py # 间隔重复回顾路由
│   │   │   ├── knowledge_router.py
│   │   │   ├── user.py
│   │   │   └── health.py
│   │   ├── schemas/             # Pydantic 数据模型
│   │   ├── services/            # 业务服务层
│   │   │   ├── note_service.py  # 笔记服务(CRUD + 向量化 + AI 写作)
│   │   │   └── review_service.py# 回顾服务(艾宾浩斯算法)
│   │   └── utils/               # 工具函数
│   ├── data/                    # 数据存储目录
│   ├── main.py                  # 应用入口
│   └── pyproject.toml
├── front/                       # Vue 3 前端项目
│   ├── src/
│   │   ├── components/          # 通用组件
│   │   │   ├── MarkdownEditor.vue   # bytemd 封装
│   │   │   ├── RelatedNotes.vue     # 关联笔记侧边栏
│   │   │   ├── InlineCompletion.vue # AI 联机补全
│   │   │   ├── ReviewCard.vue       # 回顾卡片
│   │   │   ├── TagBadge.vue         # 标签徽章
│   │   │   ├── TabBar.vue           # 底部导航
│   │   │   └── QuickToolbar.vue     # 快捷工具栏
│   │   ├── views/              # 页面视图
│   │   │   ├── NoteEditor.vue       # 笔记编辑器
│   │   │   ├── NoteList.vue         # 笔记列表
│   │   │   ├── DailyReview.vue      # 每日回顾
│   │   │   ├── AIChat.vue           # AI 聊天
│   │   │   ├── Sessions.vue         # 会话管理
│   │   │   ├── KnowledgeBase.vue    # 知识库管理
│   │   │   ├── Login.vue / Register.vue
│   │   │   ├── My.vue / Profile.vue / Settings.vue
│   │   │   └── AboutUs.vue
│   │   ├── router/index.js     # 路由配置
│   │   ├── store/              # Pinia 状态管理
│   │   ├── i18n/               # 国际化(中/英)
│   │   └── config/api.js       # API 地址配置
│   └── package.json
├── DjangoUserService/           # Django 用户服务
│   ├── apps/
│   │   ├── user/               # 用户注册/登录/认证
│   │   ├── file/               # 头像上传
│   │   └── utils/              # 工具函数
│   └── api.md                  # 用户服务 API 文档
├── docs/                        # 项目文档
│   ├── modelscope_model.md     # 模型下载和配置
│   └── troubleshooting.md      # 故障排除
├── images/                      # 截图资源
└── plan.md                     # 项目规划

API 文档

FastAPI 后端 API

完整的 OpenAPI 规范文件:backend/openapi.json 启动服务后访问交互式文档:http://localhost:8000/docs

Django 用户服务 API

详细文档:DjangoUserService/api.md 交互式文档(启动后):http://localhost:8001/docs/

配置说明

LLM 模型切换

系统支持 阿里云百炼(DashScope) 和 **Ollama(本地部署)**两种模式:

  • LLM_TYPE=ALIYUN:使用 Qwen3-Max 大模型 + text-embedding-v4 嵌入
  • LLM_TYPE=OLLAMA:使用本地 Ollama 模型

重排序模型

下载 Qwen3-Reranker-0.6B 模型并配置 RERANKER_MODEL_PATH 路径,参考 模型配置指南

故障排除

详细的故障排除指南请参考:故障排除

常见问题:

  • API Key 错误:检查 ALIYUN_ACCESS_KEY 是否正确配置
  • 数据库连接失败:确认 MySQL / Redis 服务已启动
  • ChromaDB 异常:检查 chroma.yaml 中的路径配置
  • 重排序模型加载失败:确认 RERANKER_MODEL_PATH 指向正确的模型路径
  • Ollama 连接失败:确认 ollama serve 已运行且模型已拉取

联系方式

如有任何问题或建议,欢迎提交 GitHub Issues 或联系作者:

Star History

Star History Chart

About

基于LangChain与FastAPI的RAG项目,主分支为基于RAG的智能笔记助手,base-rag分支为开箱即用的基础RAG项目

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors