AI File Hub
面向个人用户的私有云文件空间 — 上传文件后由 AI 自动生成摘要、要点、标签,并支持基于 RAG 的单文件 / 跨文件智能问答。
React Vite Tailwind CSS shadcn/ui Supabase PostgreSQL pgvector Edge Functions DeepSeek API RAG Vercel
功能概览
| 模块 | 能力 |
|---|---|
| 认证 | GitHub OAuth 2.0 登录、JWT 会话、路由守卫 |
| 上传 | 拖拽 / 点击上传,支持 PDF / Markdown / TXT / PNG / JPG / WEBP,单文件 50 MB 上限,进度条 |
| 文件管理 | 列表展示、文件名实时过滤、图片内嵌预览、二次确认删除(同步清理 Storage 与 DB) |
| AI 分析 | 上传后自动异步分析:文本生成「一句话摘要 + 3-5 条要点 + 类型标签」;图片生成「描述 + 类别标签」 |
| 全文搜索 | PostgreSQL tsvector + tsquery,覆盖文件名 + AI 摘要 + 要点,结果高亮 |
| 单文件问答 | 基于 RAG(top-5 chunks 注入 Prompt)的流式问答,多轮会话 |
| 跨文件问答 | Dashboard「问所有文件」入口,对当前用户全部 chunks 做 top-8 检索,回答带来源跳转 |
| 实时更新 | Supabase Realtime 订阅 documents 表,上传 / 状态变化 / 删除自动反映到列表 |
技术栈
前端
- React 19 + Vite 5
- React Router 7
- Tailwind CSS 3 + shadcn/ui(Radix UI)
@supabase/supabase-jsv2
后端(BaaS)
- Supabase Auth(GitHub OAuth 2.0)
- Supabase PostgreSQL(启用
pgvector+ RLS) - Supabase Storage(私有 bucket
user-files) - Supabase Realtime(WebSocket)
- Supabase Edge Functions(Deno + TypeScript)
AI 服务
- DeepSeek
deepseek-chat(文件分析、问答、流式输出) - DeepSeek Embedding API(OpenAI 兼容,文本向量化)
基础设施
- Vercel(前端托管 + GitHub push 自动部署)
- GitHub(代码 + OAuth 身份提供商)
目录结构
ai-file-hub/
├── frontend/ # React 前端(Vite)
│ ├── src/
│ │ ├── components/ # ai / file / layout / ui
│ │ ├── contexts/ # 认证等全局 context
│ │ ├── guards/ # 路由守卫
│ │ ├── hooks/ # useDocuments / useUpload / useChat
│ │ ├── lib/ # supabase 客户端等
│ │ ├── pages/ # Login / Dashboard / File / Search
│ │ └── App.jsx, main.jsx
│ ├── .env.local # VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY
│ └── package.json
│
├── supabase/ # Supabase 后端工程
│ ├── functions/
│ │ ├── _shared/ # embed / chunk / 公共逻辑
│ │ ├── analyze-file/ # 上传后自动分析入口
│ │ ├── chat-with-file/ # 单文件 RAG 流式问答
│ │ ├── chat-global/ # 跨文件 RAG 流式问答
│ │ └── search-documents/ # 全文搜索
│ ├── migrations/ # SQL 迁移(含 pgvector / chunks 表)
│ ├── config.toml
│ └── ENV_SETUP.md # DeepSeek key 配置说明
│
├── local/ # 本地工具与凭据(已 gitignore 自检)
├── aiInfo/ # PRD、todo、进度、技术笔记
└── README.md
数据模型
-- 启用向量扩展
create extension if not exists vector;
-- 文件元数据
documents (
id, user_id, name, size, mime_type,
storage_path, status, created_at
)
-- AI 分析结果
ai_results (
id, document_id, summary, key_points,
tags, full_text, created_at
)
-- 文档分块向量(RAG)
document_chunks (
id, document_id, content, chunk_index,
embedding vector(1536), created_at
)
- 全部表启用 RLS,用户只能读写自己的数据
document_chunks仅 Service Role(Edge Function)可写,前端只读- 索引:
ivfflat (embedding vector_cosine_ops)+gin(to_tsvector(...))
快速开始
1. 准备账号与密钥
- Supabase:在 Supabase Dashboard 创建项目,记下
Project URL/anon key/service_role key - GitHub OAuth App:在 GitHub Settings → Developer settings 创建 OAuth App,回调 URL 设置为
<SUPABASE_URL>/auth/v1/callback - DeepSeek API Key:在 DeepSeek Platform 申请
2. 前端启动
cd frontend
npm install
cp .env.local.example .env.local # 若不存在,手动创建
# 填入 VITE_SUPABASE_URL 与 VITE_SUPABASE_ANON_KEY
npm run dev
# → http://localhost:5173/
.env.local 示例:
VITE_SUPABASE_URL=https://<your-project>.supabase.co
VITE_SUPABASE_ANON_KEY=<your-anon-key>
3. 后端(Supabase)部署
# 安装 Supabase CLI(macOS)
brew install supabase/tap/supabase
# 登录并关联项目
supabase login
supabase link --project-ref <your-project-ref>
# 推送数据库迁移(创建表 / RLS / pgvector / 索引)
supabase db push
# 配置 Edge Function 密钥
supabase secrets set DEEPSEEK_API_KEY=sk-...
# 部署 Edge Functions
supabase functions deploy analyze-file
supabase functions deploy chat-with-file
supabase functions deploy chat-global
supabase functions deploy search-documents
详见 supabase/ENV_SETUP.md。
4. Storage 配置
在 Supabase Dashboard → Storage 中创建 bucket:
- 名称:
user-files - 访问:Private
- 文件大小上限:50 MB
- 允许的 MIME:
image/png, image/jpeg, image/webp, application/pdf, text/plain, text/markdown
部署
前端(Vercel)
- 在 Vercel 导入 GitHub 仓库,Root Directory 设为
frontend/ - 环境变量添加
VITE_SUPABASE_URL与VITE_SUPABASE_ANON_KEY - 推送 main 分支即可自动部署
后端
后端组件全部托管在 Supabase,无需独立部署。Edge Functions 通过 supabase functions deploy 推送。
关键流程
文件上传 → AI 分析
浏览器拖拽
→ supabase.storage 上传至 user-files
→ INSERT documents (status=pending)
→ Realtime 推送给前端,列表追加
→ Edge Function analyze-file 拉取文件 → DeepSeek → 写入 ai_results
→ 文本切块(500 字 / 重叠 50)→ DeepSeek Embedding → 写入 document_chunks
→ UPDATE documents SET status=done → Realtime 更新状态标签
RAG 问答
用户提问
→ Embedding 问题
→ pgvector 余弦检索 top-K chunks(单文件 K=5 / 全局 K=8)
→ 拼装 Prompt(系统指令 + chunks + 历史对话 + 当前问题)
→ DeepSeek chat 流式输出
→ 前端 ChatOutput 逐字渲染
开发命令
# 前端
npm run dev # 开发服务器(默认 5173)
npm run build # 生产构建
npm run preview # 预览生产构建
npm run lint # ESLint
# 后端
supabase start # 本地完整 Supabase 栈(需要 Docker)
supabase db push # 应用迁移到云端
supabase functions deploy <name> # 部署 Edge Function
supabase functions logs <name> # 查看运行日志
supabase secrets list # 列出已配置 secrets
进度
- 阶段一 ~ 阶段四:认证、上传、AI 分析、全文搜索、流式问答 — 已完成
- 阶段五:UI 优化与生产部署 — 已完成
- 阶段六:RAG 升级(chunking / embedding / 跨文件问答) — 已完成
详细任务清单与设计笔记见 aiInfo/PRD.md / aiInfo/todo.md / aiInfo/progress.md。
License
仅用于个人学习用途。