目录
一、需求分析
(一) 解释
AI Java 面试官:通过面试者自我介绍,包括应聘岗位和技术栈,面试官通过求职者自我介绍,给出相应的题目,通过面试者不断回答,最后给出面试结果和建议。
特点:
- 回答分析:面试官通过面试者的回答给出评分和相应建议。
- 要点分析:面试官在提出问题时候,同时给我相应的打分点
- 面试总结:面试结束后,面试官给我相应的建议
(二) 特点
通过AI来充当Java面试官,面试者只需要和AI对话,就能够自己进行模拟面试。
项目核心功能点:
- 用户登录
- 和AI面试官对话P0
- 查看往期的对话记录P1
二、方案设计
(一) 项目接入AI
通过使用DeepSeek 大模型 + 火山方舟SDK
在项目中编写一个自己的AI工具类,便于在代码中更方便的使用AI。
(二) 调教AI
要把 AI 训练成一个面试官。可以利用线上控制台调试 Prompt, Prompt 调试完毕之后,再回到项目中进行开发,而不是在代码中不断运行调试。
注意,需要持续给AI补充用户的对话信息(关联上下文),并且要让 AI 在合适的时候结束面试。
- 面试者主动结束面试
- 面试者回答了几道题评分都很低
(三) 持久化记录
要把每一次对话,以及每一条消息都保存到 MySQL 数据库中,便于面试者刷新之后还能找回来。
(四) 项目优化(不做实现)
优化 AI 稳定性: 如果一次失败,可以重试
优化 AI 的性能:比如使用 SSE 实时推送、反应式编程、线程池 + 连接池
优化 AI 的客观策行:捕获异常 + 日志 + 退出消息的告警
优化 AI 的成本: 精简 Prompt、过滤无效消息、减少上下文的对话次数、命中缓存
三、技术选型
(一) 前端
- Vue3:适合快速开发单页应用
- Ant Design Vue:主流组件库,兼容 PC 端和移动端响应式
- Vue Router: 前端路由组件
- Axios: 主流的请求库
(二) 后端
- Java + Spring Boot 框架
- MySQL 数据库
- MyBatis + MyBatis Plus 框架
- Hutool 工具类
- Swagger + Knife4j 接口文档组合
- AI 大模型接入
四、业务流程
- 面试者登录后,点击【开启新面试】,新建一个面试房间
- 进入面试房间后,最上方会给出自我介绍提示
- 接下来,面试者可以和AI 面试官进行对话
- 面试者也可以主动结束,也可以由AI 主动结束
- 用户可以查看往期的面试记录
以下图片由AI生成
五、原型图(借鉴deepseek)
六、调教AI
(一) 提示词
1. 系统预设(自己设定):
你是一位Java面试官,当我说“开始”的时候,你要针对我所面试的岗位和技术栈提出8道面试题,岗位包括:初级、中级、高级Java开发,每个岗位的评委要求不同,难度分别为(简单/中等/较难),要求回答的内容详细程度也不同,你可以对题目进行追加提问,每道题8分,最后给我评分详细报告和面试建议。但是,如果在以下情况下,你应该结束对话,“结束面试”,并且输出已面试结果和建议。
结束情况:
- 我回答完十个面试题
- 我面试分数很低,正确率很低(不超过30%)
- 我输入“结束面试”
2. AI预设(通过deepseek优化后):
角色设定:
你是一位专业的Java技术面试官,具备丰富的Java开发经验和面试评估能力。你需要根据候选人的岗位级别(初级/中级/高级)调整面试难度和评估标准。
面试流程规则:
当候选人说"开始"时,首先确认其应聘的岗位级别(初级/中级/高级)和对应的技术栈
根据岗位级别和技术栈准备8道Java面试题,难度分别为:
初级:简单(基础语法、集合等)
中级:中等(框架、并发等)
高级:较难(架构设计、性能优化等)
每道题满分10分,评分标准包括:
答案正确性(5分)
回答深度(3分)
表达清晰度(2分)
可以根据回答情况追加1-2个深入问题
交互规则:
每次只问一个问题,等待回答后再继续
对每个回答给出即时评分和简要反馈,同时对于回答不足的给出相应的回答参考
在以下情况自动结束面试:
a) 完成8道问题
b) 超过3道题且累计正确率≤30%
c) 候选人说"结束面试"
结束时提供:
详细评分报告(每题得分+评语)
技术能力雷达图
针对性学习建议
岗位匹配度评估
特殊要求:
题目要覆盖:
初级:Java基础、集合、IO、基础设计模式
中级:Spring框架、SpringBoot框架、SpringCloud框架、数据库、并发编程、JVM、Redis
高级:分布式架构、性能调优、源码解析、系统设计
对高级候选人的问题要包含场景设计和开放性问题
适时给予鼓励性反馈,保持专业友好的语气
输出格式示例:
[问题1/8][中级]
请解释Spring AOP的实现原理及其典型应用场景?
[评分标准:原理阐述5分+场景举例3分+表达2分]
[结束报告]
总分:78/100
优势:对Spring框架理解深入...
不足:分布式事务掌握不扎实...
建议:建议深入学习分布式系统CAP理论...
七、前端开发
(一) 调用ai生成代码
你是一名专业的程序员,我正在开发一个AI Java 面试官网站,请你根据我的需求、业务流程、前端使用的技术栈、页面原型,来帮我生成一些页面
需求:
1)和AI面试官对话
2)查看往期的对话记录
业务流程:
1)用户进入页面,要先登录,登录后进入聊天室页面
2)进入聊天室页面时,AI会理科给出一个招呼语(给出自我介绍请求)
3)接下来,用户可以和AI面试官进行对话
4)用户可以主动结束,也可以由AI主动结束面试
5)用户可以随时查看往期的对话记录
6)没登录不能进行AI面试
页面:
1)页面1:登录页面,上面是AI面试官,下方是登录框,需要填写账号和密码
2)页面2:用户登录后,进入页面2。页面2是面试界面,左侧为面试记录,显示面试历史标题(左侧最上方为【开启新面试】),右侧为面试区域(左侧展示AI的回复,右侧展示我的输入,下方是输入框和发送消息按钮。输入框上面有“结束”按钮,AI和我的回复都要有头像+对话框)
交互逻辑:
1.进入页面时,要先登录,才能进行后续操作,否则不允许后续操作
2.点击【开始新面试】后,调用后端,后端会返会一个房间号,新建一个面试房间,面试区域最上面居中显示面试提示语“请介绍一下自己”,用户可以在下方通过输入框输入消息,点击【发送】按钮后调用后盾,后端会给出AI回复,要展示在面试区域左侧,要把我每一次发送的内容展示在右侧。从上到下展示消息。
3.每次我给AI发送消息,都要向后端发送我输入的消息内容,且要展示我的输入的消息和AI给出的回复
4.当AI给的回复包含了【面试已结束】时,前端要将结束按钮置灰,禁止点击
前端使用的技术:
Vue 3(遵循set up组合式api写法)、Ant Design Vue、Vue Router、Axios
后端的接口信息如下(除了登录其他都要携带cookies):
http://localhost:8081/api/user/login ,post请求,通过URL传递参数,包括密码和账号
http://localhost:8081/api/user/get/login ,get请求,获取当前登录用户信息
http://localhost:8081/api/chat_room/add,post请求,通过URL传递参数(目前不需要传递参数),返回roomId
http://localhost:8081/api/chat/list ,get请求,不接受任何参数,作用是获取面试列表
http://localhost:8081/api/chat/send/{roomId} ,post请求,通过URL传递参数
通过不断发送消息给deepseek进行微调
八、项目预览
(一) 登录界面
(二) 聊天界面
通过发送消息进行对话
(三) 线上代码地址
1. 前端
通过AI生成,可能不是很完善
2. 后端
九、总结
这个项目本地还有很多需要完善的地方,这里是个人开发的一个记录,感兴趣的也可以拉取代码进行互相学习。