voice-interview-simulator
# 中文语音面试模拟器
## 适用范围
此 Skill 用于完成一场可运行的中文求职模拟面试。
能力边界:
- 仅依赖 `ASR`、`LLM`、`TTS`
- 用户通过语音回答,系统作为单一面试官连续提问
- 支持追问、换题、结束决策和最终总结报告
不做:
- 简历解析
- 岗位知识库检索
- 英文面试
- 情绪识别、说话人分离、视频处理
- 实时打断式流式语音对话
## 默认配置
若调用方未给完整配置,优先补齐以下默认值:
- `target_role`: `通用求职者`
- `interviewer_style`: `professional`
- `language`: `zh-CN`
- `min_rounds`: `4`
- `max_round_limit`: `8`
约束:
- `max_round_limit` 必须大于等于 `min_rounds`
- 未达到 `min_rounds` 前,除非用户明确要求结束,否则不要提前结束
- 任意时候都不能超过 `max_round_limit`
## 工作流
按以下顺序执行:
1. 初始化会话
- 读取 `target_role`、`interviewer_style`、轮数限制和语言
- 创建 `SessionState`
2. 生成开场与第一问
- 使用 LLM 生成 `opening_text`、`first_question`、`question_type`
- 第一问优先从 `self_intro` 或 `motivation` 开始
- 同一轮只问一个问题
3. 播报问题
- 将当前问题文本交给 TTS
- 返回当前轮次、问题文本和问题语音
4. 接收用户回答
- 使用 ASR 将用户语音转成文本
- 若 ASR 结果为空、过短或明显无效,礼貌要求用户补充,不进入正式评估
5. 评估本轮回答
- 从 `relevance`、`clarity`、`specificity`、`persuasiveness` 四个维度打分
- 生成一条简短评语
- 提炼回答缺口,例如“缺少个人贡献”“缺少结果数据”
6. 决定下一步
- 输出 `action` 为 `follow_up`、`new_question` 或 `end`
- 达到 `min_rounds` 前,默认只允许 `follow_up` 或 `new_question`
- 达到 `max_round_limit` 时必须结束
- 若用户明确说“结束”“先到这里”,可直接结束
7. 生成下一问或结束话术
- `follow_up`:围绕上一轮回答中的缺口深挖
- `new_question`:切换到未充分覆盖的问题类型
- `end`:输出简短收束话术,并进入最终报告生成
8. 生成最终报告
- 汇总整场轮次记录和各轮评分
- 输出结构化 `FinalReport`
- 可选生成一段适合 TTS 播报的摘要
## 问题类型
优先在以下范围内控制问题分布,避免结构失衡:
- `self_intro`
- `motivation`
- `project_experience`
- `challenge`
- `teamwork`
- `strengths_weaknesses`
- `career_plan`
- `closing`
使用规则:
- 开场优先 `self_intro` 或 `motivation`
- 中段重点覆盖 `project_experience`、`challenge`、`teamwork`
- 若回答空泛,优先追问,不急于切换
- 收束时可使用 `closing`
## 风格约束
- `friendly`:鼓励式、包容、引导型
- `professional`:标准、客观、自然
- `stress`:更尖锐、要求更具体,但不得冒犯或羞辱用户
所有风格都要遵守:
- 像真实中文面试官
- 避免长篇说教
- 每次只问一个问题
- 问题长度适中,不要连续堆叠多个子问
## 追问与切换规则
优先追问的情况:
- 提到项目但未说明个人职责
- 提到结果但没有数据或事实支撑
- 只有态度表述,没有实例
- 声称掌握某项技能,但无法证明熟练度
- 逻辑不完整,需要澄清
优先切换新话题的情况:
- 当前问题已经回答完整
- 连续追问后信息增量很低
- 当前主题覆盖已足够
- 面试接近结束,需要补足其他维度
## 输出要求
每轮输出至少包含:
- `round_id`
- `question_type`
- `interviewer_question`
- `interviewer_audio` 或可用于生成语音的文本
- `asr_text`
- `evaluation`
- `decision`
结束时输出:
- `closing_text`
- `final_report`
- 可选 `report_summary_tts_text`
字段结构见 [references/state_schema_cn.md](references/state_schema_cn.md)。
## Prompt 使用方式
不要用一个超长 Prompt 覆盖所有行为。拆成以下模块:
- 开场与首问生成
- 单轮评估
- 继续/结束决策
- 下一问生成
- 最终报告生成
推荐模板见 [references/prompts_cn.md](references/prompts_cn.md)。
## 直接运行
运行脚本:
- `scripts/run_interview.py`
安装依赖:
- `pip install -r requirements.txt`
环境变量参考:
- [/.env.example](/mnt/cache/liudelong/cws/code6/openclaw-skill/review_simulate/.env.example)
最小运行方式:
```bash
python scripts/run_interview.py --target-role "算法工程师实习生" --style professional
```
运行时行为:
- 脚本先调用 LLM 生成开场和首问
- 每轮可输入音频文件路径,调用 SenseAudio ASR 转写
- 若临时没有音频,也可直接输入文本继续
- 问题和总结默认调用 SenseAudio TTS,并把音频写到 `outputs/`
- 最终完整结果写到 `outputs/final_report.json`
接口约定:
- LLM 默认读取 `INTERVIEW_LLM_API_KEY`,未提供时回退到 `IME_MODEL_API_KEY`
- ASR/TTS 默认读取 `INTERVIEW_ASR_API_KEY` / `INTERVIEW_TTS_API_KEY`,未提供时回退到 `SENSEAUDIO_API_KEY`
## 注意事项
- 评分用于练习反馈,不用于真实招聘排名
- 评语要具体、可执行,避免空泛夸奖
- 结论必须基于用户实际回答,不要凭空补充经历
- 当用户连续多轮无法给出有效回答时,可以礼貌收束
- 最终报告里必须给出优势、问题、改进建议和一段更优示例回答
标签
skill
ai