一个“让证据可点击“的面试评估沙盘

📅 2026/7/10 17:05:27
一个“让证据可点击“的面试评估沙盘
【开源实战】纯前端 6000 行代码我做了一个让证据可点击的面试评估沙盘附 4 张截图在线 Demohttps://mathsionyang.github.io/offerAgent/GitHubhttps://github.com/MathsionYang/offerAgent已实现产品经理 / 开发 / 技术支持 / 销售 4 类岗位评估候选人 面试官双模式一、先看效果截图 1工作台 —— 模型配置 简历 JD 三区合一页面上半部分是Step 1 临时配置模型支持 OpenAI / DeepSeek / 通义千问 / Kimi / 自定义代理 6 种右侧是Offer 沙盘目标岗位 / 阶段 / 职级 / 谈薪约束。下半部分是简历和 JD 的左右对照输入区。截图 2面试官视角库 —— 5 个 Skill 视角可勾选内置 5 个虚拟面试官角色HR、业务负责人、项目推进、谈薪顾问、决策层压力官。勾选不同的组合会直接影响追问角度、风险判断、虚拟委员会角色和证据图谱中的 Skill 贡献。截图 3报告页 —— 评估报告 证据关系图谱报告分块流式输出左侧按项目匹配闸口 → 简历证据 → Offer 沙盘 → 风险校准等模块逐步渲染。右侧是 EvidenceGraph 证据关系图谱节点按job_requirement / JD / 客户需求分析与方案设计 / 证据等列分组连线带 confidence / weight / source点击节点可跳转回报告对应段落。截图 4虚拟面试委员会 —— 微信群聊式气泡流报告页下方以聊天气泡流式逐条展示虚拟角色发言seed_extraction → panel_simulation生成完成后保留完整讨论记录。共识 / 分歧 / 主导角色 / 最终建议都会写入主持人总结。二、为什么做这个我自己求职和招人两端都待过遇到过两类高频痛点求职端背了一周的项目细节面试官问的全是八股题简历上写的主导 X 项目面试官一句话就证伪了。招人端简历初筛感觉不错业务面试凭印象打分入职发现完全不对版想追问一些深度问题但又怕候选人答不上来太尴尬。OfferAgent 的目标只有一个让感觉和经验变成可点击、可审计、可回填的结构化证据。三、产品定位沙盘不是打分器维度传统面试辅助OfferAgent形态文档 / 表格 / 微信语音浏览器内可交互工作台结论录用 / 淘汰项目匹配闸口匹配进入 / 条件进入 / 缺证不匹配追问临时想Skill 视角库 × 虚拟面试委员会生成Offer谈薪经验OfferSimulationRun三场景结构化推演反馈拍脑袋FeedbackDistillation升级 / 降权 / 删除 / 保留隐私简历上传Key 只在内存、刷新即清空它不是 ATS也不是打分机器人而是让每一个结论都能溯源、每一次追问都能审计、每一份反馈都能沉淀的评估沙盘。四、核心设计一项目匹配闸口面试最常见的事故是简历上写主导过 X 项目JD 上要有 Y 经验结果一拍即合——直到入职才发现完全对不上。OfferAgent 设计的第一道闸口从 JD 中抽取岗位职责 能力要求一级 / 二级 / 三级可信度从简历中找项目经历锚点同样分等级输出匹配结果匹配进入 / 条件进入 / 缺证不匹配对缺证结论强制要求补项目材料对表面高匹配内容生成反包装追问这一步不是黑盒打分而是把为什么匹配 / 为什么不匹配摆到台面上。五、核心设计二EvidenceGraph 证据关系图谱这是项目的心脏。传统报告候选人具备产品规划能力 —— 完了。OfferAgent 把这个结论逆向拆解成图谱节点job_requirement(产品规划) ← requires(0.92) ← evidence(主导 XX 项目) ↘ 风险(缺少复盘机制) ↘ skill(虚拟业务负责人视角) ↘ feedback(未反馈) ↘ offer_signal(谈判优先级提升)每个节点都能点击跳转到报告对应段落让面试官能从结论反推证据也能从证据追到结论。9 种节点类型job_requirement / evidence / validation / risk / feedback / offer_signal / skill / agent_persona / report_section7 种带权边supports / requires / raises / risks / discusses / challenges / reads_memory每条都带confidence / weight / source。当图谱出现证据缺口时会高亮提示这块没简历背书面试官需要追问验证。六、核心设计三虚拟面试委员会这个模块借鉴了 MiroFish 的“种子材料 → 图谱记忆 → Persona 生成 → 多轮模拟 → 汇总报告”思路做了一个适合静态 Web 的轻量版。6.1 五个内置 Skill 视角1. 虚拟 HR 面试官 —— 动机、岗位偏好、到岗约束 2. 虚拟业务负责人 —— 业务判断、指标口径、结果归因 3. 虚拟项目推进面试官 —— 里程碑、资源协调、复盘机制 4. 虚拟谈薪顾问 —— 机会选择、竞争 Offer、谈判策略 5. 决策层压力官 —— 预算剪裁、战略取舍、ROI 压力6.2 多轮轻量讨论流程buildVirtualPanel() // 从岗位/JD/简历/Skill 生成虚拟角色 buildPanelDiscussionRounds() // 围绕证据/风险/Offer 多轮讨论 buildModeratorSummary() // 汇总共识、分歧、主导角色、最终建议6.3 微信群聊式气泡流报告页下方会以聊天气泡流式逐条展示虚拟角色发言生成完成后保留完整讨论记录。注意这不是完整的多 Agent 仿真引擎而是基于规则和结构化上下文的轻量推理。但作为 MVP已经能帮助面试官看到不同视角如何看同一份简历。七、核心设计四OfferSimulationRun 状态机以前 Offer 推演在报告里只是一段文字。OfferAgent 把它升级为结构化状态机{scenario:base | optimistic | conservative,stage:draft | negotiating | accepted | rejected,history:[...],version:v1.2.0,status_backfill:可回填到下一轮问题生成、风险判断、谈判策略}跑完三个场景对比后Offer 结果可以反向回填到下一轮追问问题生成风险判断的优先级虚拟谈薪顾问的策略建议Offer 决策不再是孤立的段落而是影响后续整个流程的状态。八、核心设计五一致性模式解决 LLM 报告漂移用 LLM 生成报告的人都知道同样的输入今天和昨天的结论可能差 30%。OfferAgent 加了一致性模式输入指纹input_fingerprint对 role resume jd constraints skills 做哈希结构化中间层structured_evaluation先把评估结果结构化再渲染报告本地缓存复用相同指纹命中缓存时直接复用基础报告真实模型请求temperature: 0seed隐私保护缓存不存 API Key不存人工反馈缓存大小限制为 12 条避免 localStorage 膨胀。九、双模式工作台候选人模式 → 隐藏人工反馈 → 只显示候选人报告 面试官模式 → 显示人工反馈 → 只显示面试官报告输入信息不丢——切换模式只切视图不清空数据。报告分块流式输出体验类似 ChatGPT 打字机效果。十、隐私设计这是我在设计时最在意的点不需要注册或登录不上传简历到任何服务器不保存 API Key只在当前页面内存不保存简历、JD、报告或反馈刷新即清空不写 cookie / 不写后端数据库如果浏览器直连模型服务商报 CORS 错项目自带Cloudflare Worker 代理示例serverless/cloudflare-worker.js。把 Key 放服务端前端通过 Worker 转发Key 不再暴露给浏览器。十一、技术实现纯前端 6000 行的取舍整个 Web 端只有 4 个文件apps/web/ ├── index.html (236 行) ├── styles.css (3363 行) ├── app.js (6826 行) └── img/ (截图资源)没有 React / Vue / 任何框架。理由可移植纯 HTML 原生 JS 可直接丢 GitHub Pages无需构建可读所有人打开 DevTools 就能看到全部逻辑零依赖没有 npm install / node_modules / 供应链风险可审计6800 行 JS 跑一个面试评估逻辑密度高但完全可读代价业务逻辑耦合在单文件已在开发路线 P4 列入模块化计划没有虚拟 DOM长列表性能需要手动优化状态管理靠全局变量和 DOM 联动但作为 MVP这种返璞归真反而是优势——fork 之后改一个app.js就能自定义自己的报告模板。十二、四类岗位支持岗位评估维度产品经理场景理解 / 产品规划 / 客户需求 / 研发协同 / 创新探索 / 交付质量开发人员技术栈 / 系统设计 / 编码能力 / 项目推进 / 故障排查 / 工程素养技术支持问题分诊 / 故障定位 / 客户沟通 / SLA / 升级协作 / 知识沉淀销售客户开发 / 商机推进 / 谈判能力 / 客户管理 / 业绩达成 / 行业理解每类岗位都有专属关键词、验证重点、报告生成逻辑。十三、3 分钟跑起来gitclone https://github.com/MathsionYang/offerAgent.gitcdofferAgent/apps/web python-mhttp.server5173# 浏览器打开 http://localhost:5173默认进Mock Demo模式不调用任何模型跑完整套流程。接真实模型页面上 6 个常用服务商下拉选择OpenAI / DeepSeek / 通义千问 / Kimi / 豆包 / 智谱 / 硅基流动等都兼容临时输入 Key 即可。担心 CORS用 Cloudflare Worker 代理。GitHub Pages 一键部署项目自带.github/workflows/pages.yml推main自动部署到https://your-name.github.io/offerAgent/。十四、当前边界 后续规划明确不做用户账号 / 团队协作 / 云端报告保存ATS / HRIS 集成真实样本评测数据集完整的多 Agent 仿真引擎持久化知识图谱数据库后续优先级来自开发路线P0稳定当前体验清理文案、Playwright 截图回归、smoke test 拆分P1让虚拟委员会更可审计展示 stance、influence_weight、focusP2让图谱成为决策工具节点搜索、风险等级过滤、feedback diffP3把反馈闭环做实结构化反馈、SkillDefinition 更新候选P4模块化工程结构i18n.js / roles.js / skills.js / graph.js / reports.js …十五、写在最后它不能解决求职和招聘的所有问题但能做一件事把感觉和经验变成可点击、可审计、可回填的结构化证据。如果它能在你和候选人 / 面试官之间省下一次失败的面试或多抓住一个被低估的候选人那这个项目就值了。链接Demohttps://mathsionyang.github.io/offerAgent/GitHubhttps://github.com/MathsionYang/offerAgentIssue 反馈直接提 GitHub Issue如果觉得有帮助欢迎 Star一下给作者一点继续迭代的动力 本文工具完全开源MIT 协议无后端、无追踪、无注册。