一、工作总结
(一)简历功能完善和发帖分享界面(吴尤)
简历优化助手开发
在界面设计上,简历优化助手被放置在左侧导航栏的底部特殊区域,通过分隔线和专门的“简历优化”标题进行标识,使用特殊的渐变背景色和文档图标,与普通面试官进行视觉区分。
实现了跳转功能,当接收到后端返回的action
类型为resume
时,系统会自动打开指定URL。
提供了详细的提示词,用于指导AI调用MCP工具进行简历分析、优化建议和PDF简历生成,确保AI的发言符合规范。
这篇文章是关于山东大学软件学院项目实训中基于大模型的模拟面试系统功能开发的详细总结,涵盖了简历优化助手的设计与实现、发帖界面以及文章页面集成面试官和面试记录等多个功能模块。
发帖界面
数据结构:定义了面试官和面试记录的数据模型,包括interviewerId
、name
、knowledgeBaseId
等字段。
界面实现:采用双列布局,左侧为面试官选择区域,右侧为面试记录选择区域。提供实时搜索和筛选功能,支持选择与取消机制。
数据交互:在页面加载时通过API获取面试官和面试记录数据,在发布或保存文章时将选中的数据转换为API所需格式。
文章页面集成面试官和面试记录
界面布局:文章页面采用响应式布局,分为左侧内容区域和右侧面试详情面板,通过display: flex
实现弹性布局。
动态面板切换:点击“查看详情”按钮后,动态调整布局显示面试详情,支持平滑的宽度过渡动画。
可调整分隔栏:用户可以通过拖拽分隔线调整左右面板的宽度比例,提升用户体验。
面试记录组件:右侧面试详情使用interview-modal
组件,支持多分支面试对话的管理与切换,以及Markdown格式解析显示等功能。
数据交互:通过Axios与后端API交互,实现获取面试官信息、面试记录等功能。
(二)分享功能和自动总结(李一铭)
面试官和面试记录分享
开发细节:
- 前端通过添加多选框,允许用户选择面试官和面试记录。通过
getInterviewers
和getInterviews
函数分别获取用户创建的面试官列表和面试记录列表。 - 后端提供了
getUserInterviewers
和getUserChatRecords
接口,用于获取用户创建的面试官和面试记录数据。 - 解决了前端发送的JSON结构与后端DTO期望不一致的问题,通过调整前端代码,将面试官ID和面试记录ID转换为对应的对象结构,确保数据能够正确传输和解析。
- 前端通过添加多选框,允许用户选择面试官和面试记录。通过
函数功能:
getInterviewers
:通过调用后端接口/api/share/getUserInterviewers
,获取当前用户创建的所有面试官列表,并存储到interviewersList
中。getInterviews
:通过调用后端接口/api/share/getUserChatRecords
,获取当前用户创建的所有面试记录列表,并存储到interviewsList
中。- 在创建或保存文章时,将选中的面试官ID和面试记录ID分别存储到两个列表中,以便后续提交。
对话自动总结
实现思路:每当AI回复用户后,检查当前对话是否超过三条。如果满足条件,则将用户的两条消息和AI的一条回复传递给DeepSeek API进行总结,并通过updateChatTopic
方法更新对话标题。此外,标题更新时还实现了仿打字机效果,增强用户体验。
配置文件:在.env
文件中配置DEEPSEEK_API
,并在application.yml
中添加相关配置。
主要方法:
chatCompletion
:发送聊天请求,支持完整参数和默认参数版本。
createMessage
:创建聊天消息对象。
streamingChatCompletion
:支持流式聊天请求。
控制器:DeepSeekController.java
功能:提供API接口,处理聊天请求和对话摘要生成。
主要接口:
/api/v1/deepseek/chat
:处理聊天请求。
/api/v1/deepseek/summarize
:生成对话摘要。
(三)OJ系统功能增强(吴浩明)
oj增强
功能描述:对在线判题(OJ)系统的用户体验和数据展示功能进行了优化,包括题目列表状态显示、热力图标题与内容增强、后端统计接口能力扩展等。
开发细节:
在题目列表中新增了“状态”列,根据用户的提交记录显示不同状态的图标,帮助用户直观地了解自己对每个题目的掌握情况。
优化了提交日历热力图的标题和内容,动态显示用户在过去12个月的总提交数量,提升了热力图的信息密度和用户友好性。
调整了后端统计接口,增加了返回用户已解决的题目ID列表和已尝试但未解决的题目ID列表,为前端功能的实现提供了更详细的数据支持。
后端统计接口功能扩展
用户解题详情数据提供:
修改了 getStatistics
方法,增加了返回用户已解决的题目ID列表和已尝试但未解决的题目ID列表。
这些数据使得前端能够准确地判断用户对每个题目的具体状态,从而支持了题目列表“状态”列功能的实现。
(四)MCP工具增强(孙旭)
工具增强
功能描述:开发了多个MCP工具,提升了AI在模拟面试、题目推荐和简历辅助等场景下的能力。
开发细节:
实现了query_problem
工具,根据用户输入的自然语言描述和聊天会话ID,调用外部题目选择AI获取合适的题目,并将结果存入Redis的动作栈中,供前端捕获并执行相应操作。
开发了generate_problem_selection_prompt
工具,综合面试表现、简历信息和题库统计数据,生成结构化的题目选择提示,为题目挑选AI提供高质量的输入,提升题目推荐的智能化水平。
实现了update_valuation
工具,用于更新用户在特定面试中的某方面的得分,并将操作记录存入Redis的动作栈中,以便前端实时更新界面上的评分显示。
开发了query_test_result
工具,根据聊天会话ID查询候选人的代码测试结果,包括判题机结果和AI审阅代码结果,并从Redis中删除已消费的数据。
知识库扩充
整合方法:对面经资料进行分类整理,按技术领域和难度级别进行标注,提取关键问题和解答,构建结构化的知识条目,并将整理后的资料导入系统知识库。
效果提升:AI面试官能够提供更加专业、准确的技术问题面试,问题的多样性和覆盖面显著提升,系统能够根据不同公司的面试风格调整问题策略。
(五)AI辅助简历服务工具集开发(王博凡)
面试官辅助工具集 (mcp-server)
功能描述:集成NovaCV服务,提供简历解析、优化、生成PDF等功能,辅助AI进行简历相关的操作。
开发细节:
实现了generate_resume_from_text
工具,将用户提供的简历纯文本内容转换为JSON Resume标准格式,并基于选定模板生成精美的PDF简历,同时将生成的简历URL存入Redis,供前端使用。
开发了get_templates
工具,查询并返回所有NovaCV支持的简历模板列表及其详细信息,帮助用户选择合适的简历风格。
实现了convert_resume_text
工具,将纯文本简历内容转换为标准的JSON Resume格式,方便后续编辑或进一步处理。
开发了analyze_resume_text
工具,对简历文本进行深度分析,评估其完整性、关键词使用、技能匹配度等,并给出优化建议。
题目挑选AI辅助工具集
功能:直接从数据库查询题目信息,支持按难度、标签和关键词搜索。
主要工具:
query_problem
:根据难度、标签和关键词从MySQL数据库中查询题目信息。
二、问题修复
(一)AI自问自答问题修复
- 问题描述:AI面试官在对话过程中出现自问自答的情况,影响了面试的真实性和流畅度。
- 解决方案:修改了提示词模板,明确指示AI在提问后必须等待用户回复,并添加了防止自问自答的检测逻辑,当检测到可能的自问自答模式时进行干预。
(二)重复回答问题修复
- 问题描述:AI面试官在回答中经常重复同一句话或类似内容,降低了对话质量和用户体验。
- 解决方案:优化了提示词模板,增加了避免重复的明确指令,并调整了温度参数,增加回复的多样性。
(三)跳转题目界面问题修复
- 问题描述:用户在系统推荐题目后,点击跳转按钮无法正确进入题目界面,或者跳转到错误的题目页面。
- 解决方案:修复了前端路由配置,确保正确解析题目ID和编号,并优化了题目推送机制,确保Redis中存储的题目信息完整准确。
通过本周的努力,团队在模拟面试系统的功能开发、用户体验优化和AI智能化提升等方面取得了显著成果。未来,团队将继续推进项目的完善和优化,为用户提供更加优质、高效的模拟面试服务。