软件学院项目实训-智面(职导助手)个人工作(七)
一、目标概览前期已完成固化题库Java 后端 / 算法各 30 题、八类追问模板8×3、面试状态机、RAG 向量检索等基础能力。本周工作重心从「配置文件里有了」转向「页面上能感到」八类追问真正驱动多轮对话简历解析后出首题 第二道定制题结束报告改为四维分数并带观察说明多轮注入已问题目摘要减少重复考点RAG 默认走向量 关键词混合检索并对算法类问题引导复杂度说明。语料大规模扩充等你爬虫数据到位后执行python -m rag.build_index即可本周未改动rag_corpus目录。涉及的主要模块interview_session.py、followup_router.py、resume_parse.py、prompts.pyscore_v2、rag/hybrid.py、rag/pipeline.py、scoring.py。二、开发成果详述2.1 八类追问接入 HTTP 多轮面试原先followup_templates.json里虽有澄清、边界、权衡、异常、压力、细节、场景、收尾等八类、每类三条 directive但 HTTP 多轮里仍主要靠「答得长 / 答得短」两套话术gap/thin用户体感上追问风格变化不大。本周 每轮有效作答后调用resolve_followup选类型在开启 LLM 路由时由轻量模型从八类中选一类失败或无 Key 时从八类随机。选定后从该类三条模板抽一条与题面、上段回答拼入 system再llm_chat输出「短评 一个追问」。会话记录last_followup_type接口响应可带followupType。体感变化 回答含糊 → 更常澄清术语只讲方案 → 更常问边界或权衡没谈故障 → 更常问异常与降级。def _compose_followup_system(s, current_q, user_answer, min_sub): memory build_questions_memory_block(s.get(all_questions) or []) spec resolve_followup(user_answer, s[role], use_llm_routerTrue, rngs[rng]) s[last_followup_type] spec.id body ( f当前题面\n{current_q}\n\n f候选人上段回答\n{user_answer}\n\n f本轮追问类型{spec.label_zh}{spec.id}。\n f当轮追问要求{spec.directive} ) if memory: body memory \n\n body return compose_interviewer_system(body)可调环境变量INTERVIEW_FOLLOWUP_STRATEGY总开关、INTERVIEW_FOLLOWUP_LLM_ROUTER设为0则只随机选类便于无 Key 联调。2.2 简历结构化与双题定制原先 简历多作为整段原文传入 Prompt第二题虽有触发但与技能、项目绑定不紧换简历后题目差异不明显。本周parse_resume得到 skills、projects、years、summary经build_resume_prompt_block整理成结构化块再出题。创建会话时用该块调用pick_first_question解析成功时开场可能提示「已读取技能要点Java、Spring…」。第一题有效答完后触发「结合你的简历我再问一题」build_resume_second_question_hint要求与第一题考点错开云端失败则从固化题库抽题并排除已问。resume_parsed parse_resume(rt, prefer_llmTrue) if rt else None resume_for_question build_resume_prompt_block(resume_parsed, rt) if rt else None question, qsrc, qpv pick_first_question( role, resume_for_question or None, difficultydifficulty, )2.3 面试报告四维分数与说明字段评分 Prompt 升级为score_v2SCORE_PROMPT_VERSION模型输出 logic、term专业深度、fluency、stability、overall 及 reasons、suggestions。_map_score_report将展示字段对齐为逻辑清晰、专业深度、表达流畅、情绪稳定、综合评价新增dimensionReasons写关键维度观察与suggestions改进建议配合便于报告页雷达图与复盘说明。return { reportId: report_id, score: { 逻辑清晰: logic, 专业深度: depth, 表达流畅: fluency, 情绪稳定: stability, 综合评价: overall, }, dimensionReasons: { 逻辑清晰: reasons[0][:300], 专业深度: reasons[1][:300], }, suggestions: suggestions[:12], }2.4 多轮记忆已问题目摘要在prompts.py增加build_questions_memory_block把本场all_questions压缩为最多 12 条摘要在每轮追问 system 前注入面试官 base Prompt 升级为interviewer_v4要求勿重复相同考点。连续多轮时更少「又问一遍 HashMap / 又问项目介绍」追问更多落在当前题与上一轮薄弱处。def build_questions_memory_block(all_questions: list[str]) - str: lines [f{i 1}. {q[:200]} for i, q in enumerate(all_questions[:12])] return 【已问题目摘要勿重复相同考点或换汤不换药再问】\n \n.join(lines)2.5 RAG混合检索与算法题增强纯向量检索在语料不多时可能出现「问 Kafka 却命中 Vue」等错配。本周新增rag/hybrid.py对同一 chunk 计算向量分与keyword_score按RAG_HYBRID_ALPHA默认 0.65加权融合后取 Top-K。pipeline.py默认RAG_HYBRID_SEARCH1无索引时仍关键词兜底。问题含「算法、复杂度、实现」等词时system 追加要求附 Python 伪代码与时间/空间复杂度。if use_hybrid and (index_ready() or get_api_key()): hits hybrid_search(q, _CORPUS, kk, categorycategory, use_vectorindex_ready())八股页表现references的 title、snippet 更贴题算法类回答更可能带思路与 O(n) 说明依赖模型与语料非在线执行代码。2.6 评分统一入口新增score_answer_from_text文字作答与 ASR 转写共用llm_score输出结构一致并标记answerSource。本地兜底local_score同步包含stabilityScore。说明已写入docs/SKILL_API.md后端接「上传音频 → 转写 → 评分」时可直接调用。def score_answer_from_text(question, answer_text, *, sourcetext): out llm_score(question, answer_text) out[answerSource] source return out三、开发中的问题与改动优点3.1 遇到的问题1追问模板「写了但没接上」followup_templates.json和followup_router早已存在但 HTTP 多轮仍走gap/thin两套话术八类策略在页面上几乎体现不出来。本质是「配置层」和「会话层」脱节。2简历第二题不稳定第二题虽有触发逻辑但 Prompt 里简历信息格式不统一有时更像通用题换皮换简历后差异不明显。3纯向量 RAG 偶发错配语料规模有限时仅按向量相似度检索会出现问 Kafka、MySQL 却命中前端类片段的情况引用列表看着「能返回」但贴题度不够。4报告字段与展示意图不一致原先「术语准确」等字段与雷达图想表达的「专业深度」「情绪稳定」不完全对齐复盘时维度含义不够直观。5长对话容易重复考点只靠最近几轮 history模型仍可能重复已问题目或换汤不换药多轮体验下降。3.2 改动带来的优点改动优点八类追问接入interview_session追问有类型、有模板随机对话更像真实面试官「顺着回答往下挖」而不是固定两种口吻resolve_followup 模板抽取路由与文案分离改模板不必改路由逻辑扩类只需改 JSON简历结构化块出题首题、第二题更贴技能与项目开场可提示已读技能用户感知「简历被用上了」第二题强制错开考点一场面试里更容易形成「两道定制题」而不是一道简历题 一道泛题报告四维 dimensionReasons分数与观察、建议对应更清晰适合报告页和答辩演示已问题目摘要多轮连贯性更好减少重复考点带来的「面试官失忆」感RAG 混合检索关键词兜底向量盲区引用 title、snippet 更贴用户问题算法题 system 提示八股回答更可能带思路与复杂度而不只是概念复述score_answer_from_text文字面试与后续 ASR 转写共用一套评分后端接语音时不必重写 Prompt3.3 小结本周改动不大包大揽而是把前期「骨架」里用户最能感知的几块补齐追问策略真正进对话、简历真正驱动两道题、报告真正可读、RAG 引用真正更准。后续语料规模上来后混合检索和向量索引的收益还会更明显。四、总结与后续计划总结 本周将模拟面试从「能对话」推进到「追问有类型、简历有两题、报告有四维、多轮少重复」八股侧检索更准算法回答更完整评分侧完成 Prompt v2 与 ASR 文本统一入口。能力挂在现有/api/v1与前端页面上。后续 爬虫语料入库后重建索引微调RAG_HYBRID_ALPHA与后端对齐报告 JSON补充追问与简历的标注评测数据。