← 返回项目
AI File Hub

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-js v2

后端(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)

  1. 在 Vercel 导入 GitHub 仓库,Root Directory 设为 frontend/
  2. 环境变量添加 VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
  3. 推送 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

仅用于个人学习用途。