Resume Intelligence Assistant — AI 驱动的智能简历分析与职业发展顾问
基于 DeepSeek + Streamlit + Supabase 构建的全栈 Web 应用。上传简历 PDF,AI 将从 HR 专家视角提供专业度评分、核心优势提炼、改进建议和职业规划,支持多轮追问深度分析。
- 🔐 用户系统 — 邮箱注册/登录,Supabase Auth 认证
- 📤 简历上传 — 支持 PDF 上传(自动提取文本),也内置样本简历可直接体验
- 🤖 AI 分析报告 — 基于 DeepSeek 大模型,从 4 个维度分析简历:
- 整体评估(专业度评分、结构排版、信息完整度)
- 核心优势(技能亮点、突出成就、教育背景)
- 改进建议(可优化点、缺失信息、表述建议)
- 职业建议(适合方向、技能补充、行动计划)
- 💬 多轮追问 — 分析完成后可继续向 AI 提问,深入探讨简历细节
- 📋 会话管理 — 支持多轮对话,历史会话保存,随时切换回顾
- 🎨 清爽界面 — Streamlit 宽屏布局,侧边栏导航
| 层级 | 技术 |
|---|---|
| 前端框架 | Streamlit |
| AI 模型 | DeepSeek Chat (OpenAI 兼容 API) |
| 数据库 / 认证 | Supabase (PostgreSQL + Auth) |
| PDF 解析 | pdfplumber |
ria/
├── .streamlit/
│ └── config.toml # Streamlit 主题配置
├── src/
│ ├── .streamlit/
│ │ └── secrets.toml.example # 密钥模板(真实密钥不入库)
│ ├── auth/
│ │ └── auth_service.py # Supabase 认证与会话管理
│ ├── components/
│ │ ├── auth_pages.py # 登录/注册页面
│ │ └── analysis_form.py # 简历上传与分析表单
│ ├── config/
│ │ ├── prompts.py # AI Prompt 模板
│ │ └── sample_data.py # 样本简历数据
│ ├── utils/
│ │ └── pdf_extractor.py # PDF 文本提取
│ └── main.py # 应用入口
├── .gitignore
└── README.md
git clone https://github.com/你的用户名/ria.git
cd riapython -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS / Linux
pip install streamlit openai supabase pdfplumber复制模板文件并填入真实值:
cp src/.streamlit/secrets.toml.example src/.streamlit/secrets.toml编辑 src/.streamlit/secrets.toml:
DEEPSEEK_API_KEY = "sk-xxxxxxxx" # DeepSeek API Key
SUPABASE_URL = "https://xxxx.supabase.co" # Supabase 项目 URL
SUPABASE_KEY = "sb_publishable_xxxx" # Supabase Anon Key
⚠️ 该文件已被.gitignore排除,不会被提交到 Git 仓库。
在 Supabase SQL Editor 中执行以下 SQL:
-- 创建表
CREATE TABLE IF NOT EXISTS chat_sessions (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
user_id TEXT NOT NULL,
title TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE IF NOT EXISTS chat_messages (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
session_id UUID REFERENCES chat_sessions(id) ON DELETE CASCADE,
content TEXT NOT NULL,
role TEXT NOT NULL CHECK (role IN ('user', 'assistant', 'system')),
created_at TIMESTAMPTZ DEFAULT now()
);
-- 开启 RLS + 策略
ALTER TABLE chat_sessions ENABLE ROW LEVEL SECURITY;
ALTER TABLE chat_messages ENABLE ROW LEVEL SECURITY;
CREATE POLICY "用户可创建自己的会话" ON chat_sessions
FOR INSERT WITH CHECK (auth.uid()::text = user_id);
CREATE POLICY "用户可查看自己的会话" ON chat_sessions
FOR SELECT USING (auth.uid()::text = user_id);
CREATE POLICY "用户可更新自己的会话" ON chat_sessions
FOR UPDATE USING (auth.uid()::text = user_id);
CREATE POLICY "用户可删除自己的会话" ON chat_sessions
FOR DELETE USING (auth.uid()::text = user_id);
CREATE POLICY "用户可插入消息到自己的会话" ON chat_messages
FOR INSERT WITH CHECK (
EXISTS (SELECT 1 FROM chat_sessions
WHERE id = chat_messages.session_id
AND auth.uid()::text = user_id)
);
CREATE POLICY "用户可查看自己的消息" ON chat_messages
FOR SELECT USING (
EXISTS (SELECT 1 FROM chat_sessions
WHERE id = chat_messages.session_id
AND auth.uid()::text = user_id)
);
CREATE POLICY "用户可删除自己的消息" ON chat_messages
FOR DELETE USING (
EXISTS (SELECT 1 FROM chat_sessions
WHERE id = chat_messages.session_id
AND auth.uid()::text = user_id)
);cd src
streamlit run main.py浏览器访问 http://localhost:8501 即可使用。
- 注册/登录 — 使用邮箱注册账号
- 新建会话 — 点击左侧「新建会话」
- 上传简历 — 选择 PDF 上传,或使用内置样本快速体验
- 填写信息 — 输入姓名、年龄和目标岗位
- 开始分析 — AI 生成四维度专业分析报告
- 追问深入 — 在对话框中继续提问,AI 会结合简历上下文回答
MIT License