基于检索增强生成(RAG)的中文 AI 岗位信息问答系统。用户可以用自然语言询问岗位信息,系统从岗位知识库中检索相关内容,并通过大模型以“朋友式聊天”的方式回答和推荐岗位。
- 读取并清洗 1000 条中文 AI 岗位数据
- 使用
RecursiveCharacterTextSplitter切分岗位 JD - 使用
sentence-transformers中文 Embedding 模型生成向量 - 使用 Chroma 持久化向量库
- 通过
VectorStoreRetriever检索 Top-K 相关岗位 - 支持多轮对话,记住用户上下文
- 使用 Flask + 原生 HTML/CSS/JS 构建 DeepSeek Harness 风格网页界面,可查看每次检索到的真实岗位信息
- 大模型支持 OpenAI 兼容接口 / 国内大模型 API / Ollama 本地模型
- 左侧会话列表支持三点菜单删除单个会话
- 设置弹窗内可直接配置 API 并“测试连接”,保存后写入
.env
job-rag/
├── data/
│ └── res.csv
├── src/
│ ├── __init__.py
│ ├── load_data.py # 读取数据
│ ├── clean_data.py # 清洗数据
│ ├── build_vectorstore.py # 构建向量库
│ ├── retrieve.py # 检索相关岗位
│ ├── prompt.py # System Prompt 和 Prompt 模板
│ ├── llm.py # 大模型调用
│ └── chat.py # 多轮对话逻辑
├── app.py # Flask 入口
├── static/
│ ├── index.html # 前端页面
│ ├── style.css # 前端样式
│ └── app.js # 前端交互
├── requirements.txt
├── .env.example
└── README.md
建议使用 Python 3.10+ 和虚拟环境。
cd job-rag
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate
pip install -r requirements.txt复制 .env.example 为 .env,然后按需修改:
cp .env.example .env主要配置项:
| 变量 | 说明 | 示例 |
|---|---|---|
OPENAI_API_KEY |
大模型 API Key | sk-xxx |
OPENAI_BASE_URL |
OpenAI 兼容接口地址 | https://api.openai.com/v1 |
OPENAI_MODEL_NAME |
大模型名称 | gpt-4o-mini |
EMBEDDING_MODEL_NAME |
Embedding 模型名称 | BAAI/bge-small-zh-v1.5 |
EMBEDDING_CACHE_DIR |
Embedding 模型下载缓存目录,默认 models/,放在项目内 |
models |
CHROMA_DIR |
Chroma 向量库目录 | data/chroma_db |
如果使用 Ollama 本地模型,可以配置为:
OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_MODEL_NAME=qwen2.5 OPENAI_API_KEY=ollama如果使用 Anthropic 兼容接口(例如第三方路由),可以配置为:
ANTHROPIC_BASE_URL=https://routifyapi.com/v1 ANTHROPIC_AUTH_TOKEN=your-token ANTHROPIC_MODEL_NAME=deepseek-v4-flash系统会优先使用 Anthropic 配置。
首次构建向量库会自动下载
BAAI/bge-small-zh-v1.5Embedding 模型,需要联网;如果已有本地模型,可以通过EMBEDDING_MODEL_NAME指定。 模型默认下载到项目目录下的models/,不会放到 C 盘用户目录;可通过EMBEDDING_CACHE_DIR修改。
首次运行时,如果 data/chroma_db 不存在,系统会自动读取 data/res.csv 并构建向量库。也可以先手动构建:
cd job-rag
python -m src.build_vectorstore然后启动 Web 界面:
cd job-rag
python app.py浏览器打开 http://127.0.0.1:5000 。
- 用户:
有没有自动驾驶相关的算法岗? - 系统:检索自动驾驶/SLAM/感知/规划等相关岗位,并基于真实岗位信息给出推荐和理由。
- 用户:
这个岗位需要什么技能? - 系统:结合上一轮推荐的岗位,继续回答技能要求。
页面中会展示“检索到的岗位”展开区,方便调试和演示 RAG 效果。
在页面左侧的“设置”区域可以直接配置大模型 API(Anthropic 兼容或 OpenAI 兼容)、API Key、Base URL 和模型名称,并可以点击“测试连接”验证配置是否可用;保存后会写入 .env,重启后仍然生效。
- 当前数据只有岗位名称和 JD,没有公司、城市、薪资、发布时间等字段,因此系统不会生成这些信息。
- 推荐岗位时,系统 Prompt 明确要求只能引用检索到的真实岗位,避免编造。
- 如果未配置大模型 API,系统会使用一个简单的本地兜底回答,便于先验证数据读取、向量库构建和检索流程;配置 API 后即可获得完整的朋友式聊天体验。
MIT License