前言
最近 RAG(检索增强生成)火得一塌糊涂,但翻开很多教程,动辄就是上百张显卡、复杂的 Docker 集群或者沉重的本地模型环境。对于个人开发者来说,我只想安安静静地给自己的 PDF 做个数字大脑,一定要这么重吗?
于是,我花了 48 小时,用最现代化的“轻量级”工具栈打造了 SwiftMind —— 一个定位纯个人、高性能、全异步 API 化的全栈 RAG 助手。
GitHub: [github.com/FelixBitSou…]
🚀 为什么叫 SwiftMind?(技术选型)
我的核心目标是:快、省、稳。
-
Frontend: Next.js (App Router) + Shadcn UI。为了极速交互,我直接集成了 Vercel AI SDK 处理流式对话。
-
Backend: FastAPI + LlamaIndex。抛弃了臃肿的 LangChain,选择了对数据处理更专业的 LlamaIndex。
-
Python 管理器: uv。如果你还在用
pip或poetry,建议赶紧试试uv。安装依赖快到起飞,项目隔离极其优雅。 -
数据库/鉴权: Supabase (PostgreSQL + pgvector) 。一行 SQL 开启向量检索,自带 RLS(行级安全)权限隔离。
-
模型层(重点) :
- LLM: DeepSeek-V3。不用解释,目前的性价比之王。
- Embedding: 硅基流动 (SiliconFlow) 提供的
BAAI/bge-m3。 - 原则: 全 HTTP API 化。服务器不跑任何本地推理,哪怕是 2 核 2G 的小机器也能跑得很欢。
🏗️ 架构设计:不仅仅是 Demo
很多 RAG 的 Demo 只能一个人玩,但我给 SwiftMind 设计了完整的个人多租户逻辑。
1. 数据库建模与 RLS 隔离
基于 Supabase 的 RLS(Row Level Security),我在数据库层面上就锁死了数据边界。
SQL
-- 确保用户只能看到自己的知识库
ALTER TABLE knowledge_bases ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can only access their own KBs"
ON knowledge_bases FOR ALL USING (auth.uid() = user_id);
这意味着,哪怕你是小白开发者,也不用担心 A 用户搜到了 B 用户的私密文档。
2. 纯 API 化的 Ingestion 管道
我拒绝在后台跑 torch 或 transformers。通过对接 硅基流动 的 API,我们将文档切片后的向量化过程变成了极其轻量的 HTTP 请求。
🛠️ 核心功能实现
知识库管理:不仅仅是上传
SwiftMind 支持多知识库并行管理。你可以为一个“法律知识库”上传合同,为另一个“技术知识库”上传文档。对话时,你可以自由勾选 0 到多个知识库,实现跨领域的精准检索。
优雅的流式对话
借助 Vercel AI SDK 和 FastAPI 的 StreamingResponse,对话体验像 ChatGPT 一样丝滑,支持打字机效果,且后端会实时处理 Context 注入。
📦 部署:一行命令起飞
因为使用了 uv,我的 Docker 构建过程被极度精简:
Bash
# 基于 uv 优化过的 Dockerfile
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim
# ... 安装依赖仅需几秒 ...
CMD ["uv", "run", "uvicorn", "backend.app.main:app", "--host", "0.0.0.0"]
总结与反思
这两天的开发让我深刻体会到:现代 AI 开发的重心已经从“如何跑通模型”转向了“如何高效编排 API”。
SwiftMind 目前已经实现了: ✅ 知识库 CRUD ✅ 文档自动解析与向量化(PDF/Markdown) ✅ 多知识库勾选对话 ✅ 完善的登录与权限隔离
待办事项:
- 增加对话标题自动生成
- 增加文档引用的来源展示(Source Citation)
- 移动端适配优化
如果你也想快速拥有一个属于自己的“数字大脑”,欢迎 Fork 交流!如果觉得不错,别忘了给个 Star ⭐。
写在最后
项目地址:[github.com/FelixBitSou…] 欢迎在评论区讨论:你认为对于个人开发者,RAG 系统的最优解是什么?