技术面试模拟:面试官、观察员与结构化复盘
官方 cookbook 示例
- 行业
- 企业服务 · 技术面试
- 来源
- open-multi-agent 官方 cookbook
- 当前阶段
- 可运行示例
这是 open-multi-agent 官方 cookbook 示例,由元定义维护。它在终端里跑一场技术面试:面试官 Agent 读简历、项目笔记、代码样例和岗位要求,每轮只问一个问题;观察员 Agent 每轮读共享记忆里的问答摘要写追问提示;人在终端作答,结束后由第三个 Agent 输出按 Zod schema 校验的 JSON 复盘。
场景
典型场景:技术面试官拿到一份简历、一段候选人写的代码和岗位 JD,要在有限时间里问出真实水平。常见的问题是题目和候选人材料对不上,追问全凭临场记忆,面完再回想哪些点答得虚、哪些维度没覆盖;复盘结论写成一段散文,不同面试官之间没法对照。
这个示例演示的是在 runTeam() / runTasks() 之外手动编排三个 Agent:面试官用 Agent.prompt() 保留多轮会话,观察员每轮用 Agent.run() 无状态地重读共享记忆摘要,两者通过一份手动写入的 SharedMemory 交换信息;人的回答由应用层的 readline 接入,框架只负责模型调用和结构化输出。
方案
| 角色 | 任务 DAG | 工具 | 模型 | 部署形态 |
|---|---|---|---|---|
| interviewer | 每轮第 1 步:Agent.prompt() 出下一个问题,保留多轮会话历史(maxTurns 2,temperature 0.3) | 未注册工具(空 ToolRegistry) | claude-sonnet-4-6 / anthropic | npx tsx 本地交互脚本,候选人经 readline 在终端作答 |
| observer | 每轮第 2 步:候选人作答后 Agent.run() 读共享记忆,写 3–6 条追问提示(maxTurns 1,temperature 0.2) | 未注册工具(空 ToolRegistry) | claude-sonnet-4-6 / anthropic | 同上 |
| reporter | 循环结束后运行一次,按 DebriefSchema 输出 JSON 复盘(maxTurns 2,temperature 0.1) | 未注册工具(空 ToolRegistry) | claude-sonnet-4-6 / anthropic | 同上 |
表中模型为示例仓库的默认配置;实际选型在方案阶段按场景确定。
三个 Agent 由脚本里的 buildAgent() 各配一个空的 ToolRegistry,流程只做模型调用。开场前脚本把 resume.md、project-notes.md、code.ts、job-description.md 四份材料写进 SharedMemory;每轮问答以 turn-N 写入,观察员提示以 observer/flags 写入并在下一轮覆盖。
面试官和观察员的输入都来自 SharedMemory.getSummary():它按 Agent 分组列出每条记忆,单条超过 200 字符时截断为前 197 字符加省略号。面试官的 prompt() 另外把本轮之前的所有问答留在自己的会话历史里,复盘 Agent 只看到这份摘要。
复盘 Agent 配了 outputSchema(DebriefSchema):questions_asked、weak_spots、strong_spots,以及 strong-hire 到 no-hire 五档的 recommendation。框架先从输出里抽取 JSON 做 Zod 校验,第一次不通过会带上错误信息重试一次(src/agent/agent.ts 的 validateStructuredOutput)。
结果
可运行产物与验证方式:
需要 API key。脚本头部写明前置条件是 ANTHROPIC_API_KEY,缺失时打印 [skip] 并以退出码 0 结束;运行命令 npx tsx packages/core/examples/cookbook/personalized-interview-simulator.ts。设置 INTERVIEW_CANDIDATE_DIR 可换成自己的一套材料,目录里放同名的四个文件。
每轮终端先打印 INTERVIEWER 下的问题,再出现 Candidate > 等待输入;输入 exit 或 quit 提前结束,否则问满 10 轮。结束后打印 DEBRIEF 下的 JSON 复盘和 Turns completed 计数,最后打印 Done.。
面试官或观察员调用失败、复盘没有产出通过校验的结构化结果时,脚本打印对应的 failed 信息并以退出码 1 结束。
2026-09-23 在 commit 2f1d0ff 上实测:用驱动脚本在每个 Candidate > 后依次写入 3 条预设英文回答,第 4 轮输入 exit。面试官开场即围绕 fixtures 里 approveExpense 的并发审批与重试追问,后续问题接住回答里提到的 Postgres 唯一约束和 SELECT ... FOR UPDATE;复盘 JSON 通过校验,recommendation 为 lean-no-hire,打印 Turns completed: 3,退出码 0。这一轮每条问答记录都超过 200 字符,摘要里的回答部分被截掉,复盘的 summary 写明未捕获到候选人回答。这次实测把示例里提交的 anthropic / claude-sonnet-4-6 换成 DeepSeek 的 deepseek-flash 运行,其余逻辑照原样。
示例用的是虚构候选人材料(fixtures/interview-candidate 里的简历、项目笔记、报销审批接口代码和后端岗位 JD),产出是模型生成的文本,供演示与验证流程使用。
出处
与元定义的关系
本页素材是 open-multi-agent 官方仓库里的 cookbook 示例,由元定义维护。
如果你手上有一条真实的面试或评估流程,要让提问贴合候选人材料和岗位要求,把追问提示和复盘结论写成结构化记录,并接进你自己的招聘系统,元定义对应的服务是 AI Agent 定制开发 →
相关服务
最后更新
想知道类似的流程在你这边怎么落地?