Skip to content

231dff/ria

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

📄 RIA — 简历分析助手

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

🚀 快速开始

1. 克隆项目

git clone https://github.com/你的用户名/ria.git
cd ria

2. 安装依赖

python -m venv .venv
.venv\Scripts\activate     # Windows
# source .venv/bin/activate  # macOS / Linux

pip install streamlit openai supabase pdfplumber

3. 配置密钥

复制模板文件并填入真实值:

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 仓库。

4. 配置 Supabase 数据库

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)
    );

5. 启动应用

cd src
streamlit run main.py

浏览器访问 http://localhost:8501 即可使用。


📖 使用指南

  1. 注册/登录 — 使用邮箱注册账号
  2. 新建会话 — 点击左侧「新建会话」
  3. 上传简历 — 选择 PDF 上传,或使用内置样本快速体验
  4. 填写信息 — 输入姓名、年龄和目标岗位
  5. 开始分析 — AI 生成四维度专业分析报告
  6. 追问深入 — 在对话框中继续提问,AI 会结合简历上下文回答

📄 许可

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages