news 2026/6/12 1:15:21

软件学院项目实训-智面(职导助手)个人工作(七)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
软件学院项目实训-智面(职导助手)个人工作(七)

一、目标概览

前期已完成固化题库(Java 后端 / 算法各 30 题)、八类追问模板(8×3)、面试状态机、RAG 向量检索等基础能力。本周工作重心从「配置文件里有了」转向「页面上能感到」:八类追问真正驱动多轮对话;简历解析后出首题 + 第二道定制题;结束报告改为四维分数并带观察说明;多轮注入已问题目摘要减少重复考点;RAG 默认走向量 + 关键词混合检索,并对算法类问题引导复杂度说明。语料大规模扩充等你爬虫数据到位后执行python -m rag.build_index即可,本周未改动rag_corpus目录。

涉及的主要模块:interview_session.pyfollowup_router.pyresume_parse.pyprompts.pyscore_v2)、rag/hybrid.pyrag/pipeline.pyscoring.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_router=True, rng=s["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_llm=True) 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, difficulty=difficulty, )

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_SEARCH=1;无索引时仍关键词兜底。问题含「算法、复杂度、实现」等词时,system 追加要求附 Python 伪代码与时间/空间复杂度。

if use_hybrid and (index_ready() or get_api_key()): hits = hybrid_search(q, _CORPUS, k=k, category=category, use_vector=index_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, *, source="text"): out = llm_score(question, answer_text) out["answerSource"] = source return out

三、开发中的问题与改动优点

3.1 遇到的问题

(1)追问模板「写了但没接上」
followup_templates.jsonfollowup_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 转写共用一套评分,后端接语音时不必重写 Prompt

3.3 小结

本周改动不大包大揽,而是把前期「骨架」里用户最能感知的几块补齐:追问策略真正进对话、简历真正驱动两道题、报告真正可读、RAG 引用真正更准。后续语料规模上来后,混合检索和向量索引的收益还会更明显。

四、总结与后续计划

总结: 本周将模拟面试从「能对话」推进到「追问有类型、简历有两题、报告有四维、多轮少重复」;八股侧检索更准,算法回答更完整;评分侧完成 Prompt v2 与 ASR 文本统一入口。能力挂在现有/api/v1与前端页面上。

后续: 爬虫语料入库后重建索引;微调RAG_HYBRID_ALPHA;与后端对齐报告 JSON;补充追问与简历的标注评测数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 1:11:25

不止于存储:用N32G0系列内部FLASH实现断电数据保存与配置管理

超越基础存储:N32G0系列内部FLASH的高阶应用实践在嵌入式系统开发中,数据持久化存储是一个永恒的话题。当我们需要保存用户配置、设备参数或运行日志时,传统做法是外接EEPROM或FRAM芯片。但你知道吗?现代MCU内置的FLASH存储器&…

作者头像 李华
网站建设 2026/6/12 1:11:02

一篇讲透 Agent:Token、Skill、RAG、MCP、SDD、Harness

上周有个朋友拿着一个 Agent 项目来问我。 他做的是代码变更助手:用户提一句“给订单模块加一个优惠券核销能力”,Agent 自动读代码、查接口文档、改代码、跑测试,最后生成 PR。 Demo 很顺。 第一轮它能找到 OrderService,第二轮…

作者头像 李华
网站建设 2026/6/12 1:07:00

AI教材编写新利器!低查重AI写教材工具,快速产出高质量教材书稿!

编写教材痛点与AI工具解决方案 编写教材时,繁琐的格式要求常常让作者们感到困扰。比如,标题该采用什么字体大小、层级又该设置为几级?参考文献是要按照GB/T7714还是特定出版机构的标准来处理?习题的排版是选择单栏还是双栏呢&…

作者头像 李华