thiago-ximenes/recruiter-copilot

GitHub: thiago-ximenes/recruiter-copilot

基于 RAG 与多层验证的招聘 AI 助手,帮助招聘人员以事实为依据评估候选人,从架构层面杜绝幻觉和提示注入风险。

Stars: 0 | Forks: 0

# Recruiter Copilot 这是一个可供招聘人员交谈以评估候选人的 AI agent —— **仅基于已验证的事实**,在你*使用它的同时*展示候选人真正的工程差异化优势: agent 路由、防幻觉、提示注入防御以及评估驱动的工作流。 ## 功能 - **契合度分析** — 粘贴职位描述,即可获得基于证据的评分以及诚实且与角色相关的差距分析。 - **技术问答** — 针对候选人的经验给出有理有据的回答,所有信息均基于真实事实。 - **天生诚实** — 绝不捏造。如果个人资料中没有相关信息,它会如实相告。 - **双语** — 使用招聘人员的语言进行回答(EN / pt‑BR)。 ## 架构 ``` recruiter → [Guard] → [Router] → sub‑agent → [pgvector RAG] → [Verifier] → answer │ │ │ injection? unsupported? capture lead / gap blocked corrected → notify Thiago ``` - **Guard** — 将招聘人员发送的消息视为不受信任的数据;阻止提示注入和系统提示词泄露。 - **Router** — 将意图分类到固定的白名单中(契合度 / 技术 / 事实 / 联系方式)。 - **Sub‑agents + RAG** — 基于精选且带有版本控制的知识库给出回答。检索是针对嵌入块进行真正的 **pgvector** 相似性搜索(如果嵌入功能关闭,则回退到完整知识库)。 - **Verifier** — 在信息传达给招聘人员之前,将每一项陈述与完整知识库进行核对。 - **潜在客户与差距捕捉** — 抓住机会获取招聘人员的联系方式(并通过 Telegram 通知 Thiago),并记录下 agent 无法回答的问题,以便后续改进个人资料。 - **可观测性** — 每个阶段都是一个 OpenTelemetry span(在配置后通过 OTLP 导出)。 ### 知识库摄入漏斗 上传简历(PDF)或粘贴文本 → 提取文本 → LLM 将其**精炼**为干净、规范的事实库(包含诚实的差距分析部分) → 你进行审查/编辑 → 将其保存为新的**带版本号**的活动知识库。原始数据输入,经过润色的精准依据输出。 ### 评估测试工具 一个测试集(事实 / 契合度 / 销售 / 接地 / 注入)会运行完整的工作流,并对每个案例进行评分(注入测试使用确定性判定,其余部分使用 LLM 担任裁判),以便不断迭代提示词,直到工作流程完全符合要求。 ### 测试 - **单元测试** (Vitest):JSON 解析、知识库分块、管理员身份验证 (HMAC)、Telegram 通知、嵌入门控。 - **E2E 测试** (Playwright):落地页 + 语言切换 + 聊天追踪标签(使用模拟的 API,无 LLM 调用)。 ### 管理端(一切皆为数据,且带有版本控制) 所有提示词和知识库都存放在 Postgres 中,**带有完整的版本历史并可回滚**,可直接在管理 UI 中进行编辑 —— 调整行为无需重新部署。管理端受到签名 cookie 会话的保护。 ## 技术栈 - **Next.js 16** (App Router, RSC, Server Actions), **React 19**, **TypeScript**, **Tailwind CSS** - **Postgres + pgvector** + **Drizzle ORM**(使用 Docker Compose 进行本地开发) - **Vercel AI SDK**,采用与提供商无关的 LLM 层 (**DeepSeek**) 和嵌入层 (**Gemini**) - **OpenTelemetry** (`@vercel/otel`) 用于追踪;**Vitest** + **Playwright** 用于测试 - **unpdf** 用于解析简历 ## 本地运行 ``` cp .env.example .env # set DATABASE_URL, LLM_PROVIDER, DEEPSEEK_API_KEY docker compose up -d db # Postgres npm install npm run db:migrate # schema npm run db:seed # prompts + KB npm run dev # http://localhost:3000 (admin at /admin) ``` 辅助脚本:`npm run db:backfill`(对活动知识库进行向量化),`npm run embed:smoke` (嵌入健康检查),`tsx scripts/llm-smoke.ts` (LLM),`tsx scripts/eval-run.ts` (eval), `npm test` (单元测试),`npm run test:e2e` (端到端测试)。 ## 部署 (Vercel + Neon) 1. **数据库** — 在 Vercel 项目中连接一个 Postgres 存储 → **Storage**(Neon 或 Supabase,两者都自带 `pgvector`)。该集成会自动注入连接变量(`DATABASE_URL` 或 `POSTGRES_URL`/`POSTGRES_URL_NON_POOLING`)— 应用程序会读取其中存在的那个变量。 2. **环境变量** (Project → Settings → Environment Variables): `LLM_PROVIDER`, `DEEPSEEK_API_KEY`, `EMBEDDING_PROVIDER`, `GEMINI_API_KEY`, `ADMIN_PASSWORD`, `ADMIN_SESSION_SECRET`,以及可选的 `TELEGRAM_BOT_TOKEN` / `TELEGRAM_CHAT_ID` 和 `OTEL_EXPORTER_OTLP_ENDPOINT` / `OTEL_EXPORTER_OTLP_HEADERS`。 3. **部署时自动迁移** — 构建命令(`npm run vercel-build`,定义于 `vercel.json` 中)会在 `next build` 之前运行数据库迁移、数据填充和知识库向量化,使用的是构建时的数据库环境变量。 这三个步骤都是幂等的,因此每次部署都是安全的。 4. 推送到 `main` 分支会自动部署(该仓库已与 Vercel 项目关联)。 ## 状态 已实现端到端上线:落地页、基于 pgvector RAG 的 agent 工作流、知识库漏斗、带版本号且受身份验证保护的提示词管理端、通过 Telegram 通知的潜在客户/差距捕捉、OpenTelemetry 追踪、评估测试工具,以及单元测试和端到端测试。 完整设计请参阅 [`SPEC.md`](./SPEC.md)。
标签:AI智能体, API集成, DeepSeek, DLL 劫持, 可观测性, 大语言模型, 招聘工具, 检索增强生成, 熵值分析, 版权保护, 特征检测, 用户代理, 自动化攻击