← 返回案例
发布:整理:元定义科技(YuanASI)技术面试多轮对话共享记忆结构化输出open-multi-agent

技术面试模拟:面试官、观察员与结构化复盘

官方 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 / anthropicnpx 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),产出是模型生成的文本,供演示与验证流程使用。

出处

来源链接核实日期
packages/core/examples/cookbook/personalized-interview-simulator.ts(commit 2f1d0ff)https://github.com/open-multi-agent/open-multi-agent/blob/2f1d0ff/packages/core/examples/cookbook/personalized-interview-simulator.ts
packages/core/examples/fixtures/interview-candidate/resume.md(commit 2f1d0ff)https://github.com/open-multi-agent/open-multi-agent/blob/2f1d0ff/packages/core/examples/fixtures/interview-candidate/resume.md
packages/core/examples/fixtures/interview-candidate/code.ts(commit 2f1d0ff)https://github.com/open-multi-agent/open-multi-agent/blob/2f1d0ff/packages/core/examples/fixtures/interview-candidate/code.ts
packages/core/examples/README.md cookbook 条目(commit 2f1d0ff)https://github.com/open-multi-agent/open-multi-agent/blob/2f1d0ff/packages/core/examples/README.md
packages/core/src/memory/shared.ts(getSummary 分组与 200 字符截断,commit 2f1d0ff)https://github.com/open-multi-agent/open-multi-agent/blob/2f1d0ff/packages/core/src/memory/shared.ts
packages/core/src/agent/agent.ts(prompt 会话历史与结构化输出重试,commit 2f1d0ff)https://github.com/open-multi-agent/open-multi-agent/blob/2f1d0ff/packages/core/src/agent/agent.ts
本地实测(commit 2f1d0ff,模型换用 deepseek-flash),观察 3 轮问答、lean-no-hire 复盘、Turns completed: 3 与退出码 0https://github.com/open-multi-agent/open-multi-agent/blob/2f1d0ff/packages/core/examples/cookbook/personalized-interview-simulator.ts

与元定义的关系

本页素材是 open-multi-agent 官方仓库里的 cookbook 示例,由元定义维护。

如果你手上有一条真实的面试或评估流程,要让提问贴合候选人材料和岗位要求,把追问提示和复盘结论写成结构化记录,并接进你自己的招聘系统,元定义对应的服务是 AI Agent 定制开发

最后更新

想知道类似的流程在你这边怎么落地?