--- name: assess-interview-candidate description: >- 根据候选人简历与岗位要求生成可审计的后台评估、简明的候选人介绍、按岗位重要性排列的简历疑点、12–18 道可直接照读的面试题,以及支持重点标记和本机保存的离线 HTML。用于招聘方准备结构化面试、核验岗位能力和记录回答。不要用于求职者模拟面试、私人背景调查、心理或人格诊断、从敏感属性推断表现,或自动录用、淘汰、排序候选人。 --- # 候选人评估与面试报告 ## 目标 把简历和岗位要求整理成两层材料: 1. 后台保留完整岗位模型、证据账本、来源、假设和评分数据,便于复核。 2. 给面试官的 HTML 只保留“候选人简介、简历疑点与水分排查、面试提问”三个模块,使用通俗中文。 始终区分候选人明确提供的事实、外部佐证、推断和未知。最终招聘决定由具备权限的人作出。 ## 可移植运行约定 本 Skill 不依赖某个特定 Agent、Skill 安装根目录或命令行外壳。任何能够读取本地文件并运行 Python 3.10 及以上版本的 Agent 都可以使用;PDF 处理、联网核验和浏览器检查按当前宿主实际具备的能力执行。 - 先把 `` 解析为本 `SKILL.md` 所在目录,不猜测固定安装路径。 - `` 表示当前系统可用的 Python 3 启动方式。Windows 通常使用 `py -3` 或 `python`,macOS 与 Linux 通常使用 `python3` 或 `python`;先用版本命令确认实际可用项。 - ``、`` 等是路径占位符,不代表固定路径分隔符。通过宿主文件 API 或 `pathlib` 组合路径,并把含空格或非 ASCII 字符的路径作为一个完整参数传入。 - 命令示例使用单行、外壳无关的参数形式。不要依赖 Bash 续行符、环境变量展开、当前用户主目录结构或某个 Agent 的专用工具名。 - `agents/` 中的文件只是特定宿主可选的界面元数据;核心工作流以本文件、`references/`、`scripts/`、`assets/` 和 `evals/` 为准。 遇到能力差异时按 [agent-portability.md](references/agent-portability.md) 处理。缺少必要能力时明确报告未完成的核验,不得把未执行的步骤写成已完成。 ## 结果契约 每次完整运行在新的案件目录中生成: ```text input/ 原始简历、岗位要求和用户提供的链接 normalized/ 经文字提取与视觉核对的文本及案件清单 research/ 查询和来源记录 models/ 岗位模型、证据账本、行为假设和面试蓝图 interview/ 初始评分状态 output/ 完整后台数据、精简报告数据和离线 HTML audit/ 运行、校验和隐私排除记录 ``` 关键输出: ```text output/assessment-data.json output/interviewer-report-data.json output/<候选人姓名>-候选人评估与面试报告.html ``` HTML 文件名、浏览器标题和页面最上方标题都必须包含候选人姓名。不要覆盖既有案件或报告。 ## 开始前读取 先把 `` 解析为本文件所在目录。 1. 每次读取 [workflow-contract.md](references/workflow-contract.md)、[evidence-and-inference-policy.md](references/evidence-and-inference-policy.md) 和 [privacy-and-fairness-cn.md](references/privacy-and-fairness-cn.md)。 2. 建立岗位模型前读取 [job-modeling.md](references/job-modeling.md)。 3. 联网核验候选人职业证据前读取 [research-and-identity-policy.md](references/research-and-identity-policy.md)。 4. 生成题目时读取 [structured-interview-methods.md](references/structured-interview-methods.md) 和 [scoring-and-coverage.md](references/scoring-and-coverage.md)。 5. AI、LLM、Agent 或工程岗位读取 [role-adapter-ai-llm-engineering.md](references/role-adapter-ai-llm-engineering.md)。 6. 写 JSON 前读取对应 Schema;面试官报告必须读取 [schema-interviewer-report.json](references/schema-interviewer-report.json)。 ## 输入门 必需输入: - 可读取的候选人简历; - 岗位要求或招聘方确认的实际任务; - 输出根目录,未提供时使用当前目录下的 `candidate-cases/`。 尽可能取得: - 公司工作地点、岗位级别、现场办公和出差要求; - 候选人主动提供的职业链接; - 候选人职业信息联网核验的允许范围; - 岗位专家确认的能力权重和门槛。 缺少简历或岗位要求时以 `REQUIRED_INPUT_MISSING` 停止,不创建案件。缺少公司地点时继续生成,但写明“距离无法计算,待补充公司地址”。缺少候选人联网核验权限时关闭该分支,不影响本地简历分析。 ## 工作流 ### 1. 创建案件并完整读取材料 ```text "/scripts/create_candidate_case.py" --root "" --role-slug "" ``` 复制原始输入并记录哈希,不移动或删除用户文件。PDF 简历在案件目录中使用固定受限副本 `input/resume-original.pdf`,同时在案件清单保留原文件名和哈希。PDF 必须同时使用当前宿主可用的文字提取能力和逐页视觉检查能力,核对页数、姓名、时间线、表格、图片文字及提取遗漏。为保证完整核对,原件和逐页提取文本可能保留电话、邮箱、证件号或精确住址,因此 `input/` 与 `normalized/` 都按受限候选人资料处理;这些内容不得进入联网查询、面试官数据或 HTML。若无法完成逐页视觉检查,以 `PDF_VISUAL_CHECK_UNAVAILABLE` 停止生成最终报告,并说明缺少的能力。 逐页视觉检查时同时记录照片状态: - 页面上没有候选人个人头像时使用 `not_present`; - 有疑似头像但无法可靠确认是候选人本人时使用 `ambiguous`; - 已确认页面上有候选人头像、但当前工具无法可靠提取时使用 `extraction_unavailable`; - 只有在头像来自原始简历 PDF、已与对应页面视觉核对一致、且能记录页码和提取位置时才使用 `included`。 先检查 PDF 的嵌入图片;若头像不是独立图片,再从对应页面裁切。所有提取结果统一转换为 PNG,并在转换后再次与 PDF 页面视觉比对;JPEG、PPM 等格式不能直接嵌入。不得从公开主页或其他文件补图,不得使用人脸识别、相似度匹配、照片年龄估计或外貌分析。选定图片后运行下列脚本;脚本要求来源为案件内的 `input/resume-original.pdf`,会在解压前检查尺寸、校验 PNG 结构和像素数据、移除非显示所需元数据和文件尾随内容,再以内嵌图片输出: ```text "/scripts/prepare_candidate_photo.py" --input "" --resume-pdf "" --page --extraction-method embedded_image --image-index ``` 页面裁切时把最后两个参数改为 `--extraction-method page_crop --crop-box `。脚本只负责校验格式、尺寸、哈希和结构化来源,不能替代视觉身份确认。 ### 2. 建立当前岗位模型 按“工作产出 → 关键任务 → 能力 → 目标熟练度 → 可接受证据 → 验证方法”拆解岗位。记录重要性、频率、失败影响和是否入职即需具备。缺少招聘方确认时标为暂定,不把学历、年限或公司名气自动当作能力。 对快速变化岗位进行不含候选人身份信息的当前岗位研究;优先官方招聘页、一手技术资料、标准和职业框架。 ### 3. 建立简历证据账本 逐条拆分与岗位重要能力有关的声明,记录原文位置、情境、任务、本人行动、结果、个人贡献边界、可验证材料和剩余缺口。简历没有写某项能力只表示“当前证据不足”,不能直接写成“不具备”。 疑点使用“描述不清”“可核验缺口”等中性语言。优先检查: - 只写“参与”但没有本人分工; - 完成功能但没说明自主设计、改造开源方案还是简单调用; - 提到增长、准确率或降本,但没有基线、时间范围和计算口径; - 团队、论文或平台结果与个人贡献边界不清; - 岗位关键能力只有技能名词,没有可运行产物或验证过程。 ### 4. 可选的公开职业证据核验 仅研究获得允许、公开可访问、身份确认且与岗位直接相关的职业资料。系统发现的页面至少需要两个一致职业锚点;同名不足以确认身份。不得搜索年龄、籍贯、婚姻、家庭或私人生活。没有公开主页、论文或代码仓库不得扣分。 ### 5. 保留完整后台审计 继续生成岗位模型、证据账本、候选人视角、九类岗位行为假设、面试蓝图、评分状态、来源记录和 `output/assessment-data.json`。这些对象供审计与人工复核,不直接展示在面试官 HTML 中。 ### 6. 生成精简面试官数据 按 [schema-interviewer-report.json](references/schema-interviewer-report.json) 生成 `output/interviewer-report-data.json`。 #### 候选人简介 - 姓名必须使用候选人材料中的明确姓名。 - `personal_info` 只保存候选人主动提供的出生信息、出生地、老家或籍贯、婚姻状况、现居城市;没有就显示“未提供”,不得搜索或补写。 - 有出生日期时按报告日期计算准确周岁;有出生年月或出生年份时计算近似年龄并标“约”。同时保存原始出生信息、规范日期、换算截止日和来源位置。 - 照片放在 `candidate_overview.candidate_photo`,不得放进 `personal_info`。只有 `status=included` 时 HTML 才显示本地 `data:` 图片;其他状态不保留空白照片栏。 - 候选人未提供出生信息时,才可生成独立的 `candidate_overview.timeline_age_estimate`:优先使用简历明确写出的最早本科入学时间;没有入学时间时,只有同时明确写出本科毕业时间和学制,才可反推入学年份。毕业月份或日期不能证明入学月份或日期,因此回推锚点一律降为年份精度。以本科入学年龄 18 岁为中心,固定使用 16–20 岁区间,并把锚点精度造成的日期不确定性计入上下界。 - 研究生入学、工作开始等后续时间只能做先后关系核对,不能单独作为年龄锚点。时间线冲突或证据不足时不输出数值区间;推算结果必须标明“非候选人自述”。 - 候选人已经明确提供的学校、学历、专业、工作单位、职位、时间和城市应直接汇总;某个城市没写就显示“未提供”,不根据学校或单位地址推测。 - 照片、年龄(包括履历推算区间)、籍贯和婚姻状况不进入人岗匹配、能力评分、稳定性预测、录用决定或候选人排序。 - 人岗匹配只用“符合”“有相关基础,需面试确认”“当前证据不足”。 - 单列现居地、公司地点、实际通勤、搬迁意愿、现场办公、出差和最早到岗问题。出生地或老家不能代替现居地计算距离。 #### 简历疑点与水分排查 只列与岗位核心能力直接相关的 0–8 项,按能力重要性降序。每项写清:对应能力、简历原话、哪里说不清、为什么要核实、怎么核实。不要在可见文案中输出内部状态码、能力编号或英文评估术语。 #### 面试提问 生成 12–18 道按优先级排列的问题。问题必须能让面试官直接照读。每道岗位题提供提问目的、回答好/一般/差的具体表现、加分点和减分点。 题库必须包含: - 共同核心专业题和至少一个真实工作样本; - 与本候选人核心简历声明对应的核验题; - 表达沟通、协作责任、危机处理或压力情境题; - 现居地、通勤/搬迁、到岗和现场工作安排;这些题只记录双方条件,不评分; - 一道可选择不问的婚姻状况问题。该题只记录候选人自愿回答,不设好坏、不加分、不扣分;候选人可以不回答。 ### 7. 生成离线 HTML HTML 只嵌入 `interviewer-report-data.json`,不嵌入完整 `assessment-data.json`。页面恰好包含三个主模块: 1. 候选人简介; 2. 简历疑点与水分排查; 3. 面试提问。 头像只在 `candidate_photo.status=included` 时出现在候选人简介中,并注明来自简历 PDF、只展示、不参与评估或排序。履历年龄区间使用独立标签,明确它是推算而非候选人自述。每道题支持:单击“标记”默认设为黄色“可能要问”;下拉改为红色“一定要问”、蓝色“备选”或取消;记录“好/一般/差/未问”及备注。地点、到岗和其他自述类问题只记录“已记录/不便回答/未问”。重点标记和回答自动保存到当前浏览器本机,并可导出或清空。不得发送网络请求、加载外部资源或保存候选人资料到远程服务。 页面不显示简历证据分、综合分、权重、覆盖率、门槛、可比性、来源表、九类行为假设或内部英文状态。这些信息继续留在后台文件。 使用: ```text "/scripts/derive_timeline_age.py" --report-date "" --undergraduate-start "" --source-locator "" "/scripts/derive_timeline_age.py" --report-date "" --undergraduate-graduation "" --degree-duration-years --source-locator "" "/scripts/validate_interviewer_report_data.py" "" "/scripts/render_candidate_report.py" --data "" --output "" "/scripts/validate_candidate_report.py" "" ``` 如需核对后续时间线,可重复传入 `--consistency-check-json`。每个参数是一个含 `event`、`date` 和 `source_locator` 的 JSON 对象;脚本自动补出日期精度,并在明确矛盾时输出 `timeline_conflict`。 渲染器会拒绝文件名不含候选人姓名的输出。 ### 8. 校验和交付 继续校验后台对象: ```text "/scripts/validate_case_contract.py" --job-model "" --sources "" --evidence-ledger "" --blueprint "" --score-state "" --assessment-data "" "/scripts/validate_source_log.py" "" "/scripts/validate_evidence_ledger.py" "" "/scripts/calculate_interview_score.py" --blueprint "" --state "" ``` 将命令、时间、退出码、错误和警告写入 `audit/validation.json`。交付时说明案件目录、HTML 文件、采用与拒绝的来源数量、关键未知项、校验结果和仍需人工确认的内容。 ## 停止条件 - `REQUIRED_INPUT_MISSING`:缺少简历或岗位要求; - `PDF_VISUAL_CHECK_UNAVAILABLE`:当前宿主无法完成 PDF 逐页视觉核对; - `AUTHORITY_UNCONFIRMED`:无法确认有权处理简历; - `IDENTITY_UNRESOLVED`:候选人职业页面身份不能确认; - `PRIVATE_ACCESS_REQUIRED`:需要登录私人账号或绕过权限; - `SENSITIVE_DATA_HIT`:联网结果出现不应处理的私人或敏感内容; - `CONTACT_DETAIL_LEAK`:面试官数据或 HTML 中出现邮箱、手机号、证件号或其他不应展示的联系方式; - `JOB_RELEVANCE_MISSING`:信息无法映射到岗位任务; - `AUTOMATED_ADVERSE_ACTION`:要求自动拒绝、排序或触发不利决定; - `HUMAN_REVIEW_MISSING`:拟把未经人工确认的结果用于招聘决定。 停止一个联网分支不妨碍继续处理获准的本地材料。 ## 完成检查 - PDF 已通过文字提取和逐页视觉检查。 - 照片状态已逐页确认;显示照片时,其规范化字节、尺寸、哈希、原始 PDF 哈希、页码和提取位置可追溯,非显示元数据与尾随内容已移除,且没有使用公开头像或生物识别分析。 - 后台岗位、证据、来源、蓝图和评分对象可互相追溯。 - HTML 文件名、浏览器标题和页面主标题都包含候选人姓名。 - HTML 只有三个主模块,问题数为 12–18。 - 面试官数据和 HTML 不含邮箱、手机号、证件号或精确住址。 - 候选人已明确提供的学校、工作单位和城市已汇总;缺失项没有被推测。 - 出生信息存在时年龄已按报告日期换算,并禁用履历推算;出生信息不存在时,年龄事实显示“未提供”,履历推算对象按明确本科时间锚点生成,或透明记录证据不足/时间冲突。 - 照片、年龄(含履历推算区间)、籍贯和婚姻没有进入岗位匹配、评分、稳定性判断或排序。 - 简历疑点按岗位重要性排序,使用中性、通俗中文。 - 问题可直接照读,判断参考和加减分标准具体。 - 重点标记、回答、备注、本机恢复、导出和清空均可用。 - 页面离线可用、无外部资源、文本安全转义、移动端可读。 - 最终输出不含自动录用、淘汰、排序、人格诊断或虚假确定性。