简历诊断与AI模拟面试

【标签】 学习工作

【标题】 【学习工作赛道】简历智诊 Agent — AI 简历诊断与多轮模拟面试系统


0. 先和大家打个招呼吧 :waving_hand:

大家好,我是一名主修 AI 全栈开发的大三学生,平时喜欢折腾各种从 0 到 1 的产品,也拿过 ACM-ICPC 银奖、蓝桥杯国一。

这次用 TRAE 做的是一个「简历智诊 + 模拟面试」系统。作为一个有点竞赛底子但工程经验还在积累中的学生,最怕的不是写不出代码,而是「一个人扛不住全栈的每一层」。TRAE 给我最直接的帮助是——它把我脑子里已经想清楚的架构,一句句接住、落地成可运行的代码。

我的工作流一直是「架构我自己定、实现交给 AI、AI 互审找问题、我自己跑通验收」。这次 TRAE 正好填上了「实现」这一环:LangGraph 状态机的节点编排、WebSocket 断线重连的指数退避、RAG 三级检索的融合策略,都是我先讲清楚思路,TRAE 帮我写出完整可跑的模块,最后我自己 review + 联调。原本以为「状态机 + 实时通信 + 异步任务」这套组合一个人搞不定,结果在 TRAE 的配合下真的跑起来了——那一刻会觉得「原来这么简单」。


1. Demo 简介

是什么:一个 Web 网站,上传简历后由 AI 完成结构化解析、存疑点诊断,再通过 LangGraph 状态机驱动多轮模拟面试,最后输出量化评估报告。

面向谁:核心用户是求职者(尤其是校招学生)和想快速自检简历真实度的候选人——把「面试官」搬回家,随时练、随时被追问。

主要功能

  • AI 简历诊断:支持 PDF / Word / TXT,四重校验(扩展名 + MIME + 魔数 + 大小),DeepSeek 结构化提取后自动标注高/中/低优先级存疑点(技能夸大、项目描述模糊、时间线异常等),用户可内联编辑修正。
  • LangGraph 多轮模拟面试:状态机驱动 question → collect → evaluate → (follow_up | next_point | report),根据回答动态追问,单点最多 3 轮;Agent 可自主调用 RAG 知识库 / 查简历字段 / 验证代码片段三个工具。
  • WebSocket 实时对话 + 量化报告:流式推送问题、断线自动重连(指数退避 + Redis 消息缓存补推),面试结束后输出可信度评分 + 逐点反馈 + 改进建议。


2. Demo 创作思路

灵感来源:自己是校招亲历者,身边同学(包括我)都有一个共同的焦虑——简历写得很满,但一被面试官深挖就露馅。大家缺的不是「写简历」的工具,而是「被一个聪明的面试官反复追问、然后告诉你哪里站不住脚」的机会。

想解决的问题

  1. 简历自检难——自己看不出哪里夸大、哪里描述模糊;
  2. 模拟面试贵——真人 mock 排不上、价格高,且不一定追问到点子上;
  3. 面试反馈不可量化——练完不知道自己到底在哪个点「翻车」了。

为什么做这个方向:本来想过做「简历优化生成器」,但判断那是红海(且容易做成「帮你写得更花」)。真正有价值的不是让简历更好看,而是让候选人提前知道自己哪里经不起问——所以我选了「诊断 + 追问」这条更难但更稀缺的路,把 AI 当面试官而不是当枪手。


3. Demo 体验地址

在线体验链接:

部署方式:Docker Compose 一键部署(Nginx + Backend + Celery + PostgreSQL + Redis + Elasticsearch),前端构建产物由 Nginx 直接 serve。


4. TRAE 实践过程

整个 Demo 的开发流程按「架构 → 后端 → 前端 → 联调 → 部署」五步推进,每一步都和 TRAE 配合完成。

步骤一:架构设计与 LangGraph 状态机核心

我先自己把整体架构定下来(前后端分层、LangGraph 状态机节点、WebSocket 协议、RAG 三级检索),然后让 TRAE 帮我生成项目骨架,并落地面试 Agent 核心。

状态机流转为:question → collect → evaluate,再由 evaluate 根据评估结果分支到 follow_up(继续追问)/ next_point(切换存疑点)/ report(生成报告)。TRAE 实现了 [graph.py](file:///d:/Code/ResumeAgent/backend/app/agent/graph.py) 的状态图定义、[rules.py](file:///d:/Code/ResumeAgent/backend/app/agent/rules.py) 的追问防死循环策略(单点 3 轮上限 + 用户跳过 + 连续异常 3 次熔断),以及 [tools.py](file:///d:/Code/ResumeAgent/backend/app/core/tools.py) 里 Agent 可自主调用的三个工具。

  • 对应 Session ID:eb4790a16e518a089be76a72ad9aa9b1_6a326a0f8d739c78169eeabf.6a3519498e42d9855287e6ef.6a3519498e42d9855287e6ed(2026/6/19)

步骤二:前端语音输入显示在输入框

面试页面支持语音输入,但最早的实现会直接发消息。我让 TRAE 改成:语音说完先显示在输入框里,用户确认后再发送,且支持追加说话。TRAE 修改了 [useVoiceChat.ts](file:///d:/Code/ResumeAgent/frontend/src/hooks/useVoiceChat.ts) 和 [InterviewPage.tsx](file:///d:/Code/ResumeAgent/frontend/src/pages/InterviewPage.tsx),并清晰列出了行为变更。

  • 对应 Session ID:f0923dd0733dd7d76fc16a6bc7d2428a_6a3d2fda53e08b07659caa46.6a3d34d053e08b07659caac6.6a3d34d053e08b07659caac4(2026/6/25)

步骤三:WebSocket 连接 Code Review

实时面试对话最怕断线和 400 报错。我让 TRAE 做了一次 Code Review,定位到 Sec-WebSocket-Key 长度问题,并给出 wscat 和 Python websockets 两种真实连接测试脚本,验证 Nginx 反向代理和后端 WS 路由都正常。

  • 对应 Session ID:6ed3d639e1e72b869626112eaa63bf1b_6a326a0f8d739c78169eeabf.6a3e90ff60e0d61c04c03789.6a3e90ff60e0d61c04c03787(2026/6/26)

步骤四:云服务器 Docker 部署

本地跑通后需要上云。TRAE 帮我完成了服务器初始化、SSH 密钥配置、GitHub Actions deploy.yml 编写,并验证 git push origin main 后 CI 自动触发部署,/health 返回正常即算成功。

  • 对应 Session ID:8fa997945152eb60cb6ccacb4161d9c6_6a3d2fda53e08b07659caa46.6a3d451f011e6348bace77c1.6a3d451f011e6348bace77bf(2026/6/25)

步骤五:整体优化与功能完善

项目进入收尾阶段后,TRAE 协助做了一次整体优化,把各个模块的边界和异常处理再捋顺,确保上传 → 解析 → 诊断 → 面试 → 报告全流程稳定可复现。

  • 对应 Session ID:f188e6b9d954aa756f295f9267979c62_6a461caff7da8388f9a4f1e3.6a461caff7da8388f9a4f1e6.6a461caff7da8388f9a4f1e4(2026/7/2)

5. 对应的报名审核通过的帖子链接