简历自动填写助手 (Resume Autofill)
将用户信息自动填写到任意招聘网站的简历表单中,并持续积累用户信息,做到"一次收集、多次复用、越用越全"。
跨平台:浏览器操作采用平台无关的"语义动作"(导航/快照/填写/点击/下拉/上传/交还用户),各 Agent 平台(TRAE、Claude、WorkBuddy 等)的工具映射见 references/ADAPTERS.md。
何时使用
- 用户给出招聘/求职网站简历填写页 URL,要求自动填写
- 用户说"帮我填简历""自动填表"
- 用户上传简历文件,要求建立用户信息档案
前置:初始化用户信息库(仅首次使用执行一次)
- 创建个人信息目录(若不存在):
<workspace>/user_data/,内含resumes/、photos/、portfolio/、backups/子目录。所有用户私人数据集中存放于此,与技能目录(.trae/skills/)分离,不随技能发布,便于整体备份与迁移。 - 请用户上传简历文件(PDF / DOCX / 图片均可),复制到
<workspace>/user_data/resumes/持久化。 - 解析简历,按以下优先级回退(保证任何平台都能跑通):
- 首选:宿主平台有内置pdf/docx技能 → 直接用它解析,提取结构化字段。
- 回退:宿主无内置 pdf/docx 技能 → 用本技能自带的scripts/extract_resume.py解析。- DOCX / TXT / 带文本层的常见 PDF:零依赖(标准库即可);
- 复杂编码或扫描版 PDF:若装有
pypdf/pdfminer.six可提高成功率。 - 兜底:脚本也因扫描版 PDF、反馈字体等原因提取不到文本 → 请用户把简历内容粘贴为纯文本,再走同一套字段提取流程。
图片格式简历若无 OCR 手段,直接转用"用户粘贴文本"路径,不强行处理。
- 结合简历中缺失的信息,向用户询问以下常用字段(简历已包含的跳过,用户明确不愿提供的不强求):
- 身份:出生日期、证件类型、证件号码、性别
- 联系:手机号、邮箱、微信号、QQ 号、当前所在地
- 家庭:紧急联系人姓名、紧急联系人电话
- 意向:期望工作城市、是否接受调剂、可入职时间、实习时长、每周出勤天数
- 其他:成绩排名、GPA、导师、资料证明人 - 将结果保存到
<workspace>/user_data/user_profile.json(结构见"用户数据文件"章节)。 - 向用户展示提取/汇总结果并确认,确认后再开始后续填写。
自动填写流程(核心)
批量多站:用户一次可提供多个招聘网站 URL,逐个按以下流程填写,每站记录完成度,全部完成后输出汇总报告(各站已填/缺失/待收集字段)。
- 用户提供招聘网站简历填写页 URL(若用户已自己打开页面,直接使用当前标签页)。
- 导航(NAVIGATE)打开页面;若跳转到登录页,交还用户(HANDOVER)扫码/登录(TRAE 用
browser_waiting_for_user_interaction独立调用,不可放进 Exec;其他平台用文字提示用户完成登录后回复),登录后继续。 - 页面快照(SNAPSHOT)获取完整表单结构。快照过大时先保存到文件再读取(不要只看预览前 50 行)。若页面含 Element UI / Ant Design 等组件库下拉框,普通快照可能看不到选项,改用 DOM 模式快照或只读求值(EVALUATE)检查下拉面板(见
references/WEBSITES.md)。 - 必填项前置预警:从快照中识别所有必填字段(label 带
*或 required),与user_profile.json对比,优先向用户输出"缺少的必填项清单"并询问补齐(如紧急联系人、资料证明人、成绩排名等),补齐后再开始填写,避免填写中途卡住。 - 字段映射:从快照中提取各字段的 label 文本,按
references/FIELD_MAPPING.md映射到user_profile.json对应路径;同义词归一化(如"硕士研究生"→"硕士"、"CET4"→"CET-4")由模型自行判断处理,无需查表。 - 按控件类型填写(规范见"浏览器操作规范"章节),同一区块(如基础信息)尽量用一次 Exec 批量完成。
- 多步骤表单:若简历填写流程分页/分步(如基本信息页 → 教育经历页 → 经历页),按页面导航逐页填写,每页完成后进入下一页,避免漏页。
- 岗位 JD 分析与描述微调:若用户提供了目标岗位的 JD(文本或链接),先解析 JD 提取岗位关键词(见"岗位 JD 分析"章节),结合关键词微调自我评价/项目描述后填写;无 JD 或用户不需要微调时直接使用原文。
- 缺失字段:表单有但信息库没有的字段 → 追加到
<workspace>/user_data/pending_fields.md待收集清单,并现场询问用户;用户回答后立即回写信息库。 - 完成度校验:全部填写后,用一次只读求值(EVALUATE)批量读取所有必填字段的值,自动汇总"已填 / 缺失"清单,输出给用户,而不是让用户逐个人工核对。
- 总结:已填字段、未填字段、待收集字段,提示用户自查。不主动点击"提交简历"等提交按钮,提交前让用户确认。
- 批量多站:有下一个 URL 则回到第 1 步;全部完成后输出各站完成度汇总报告。
字段映射
- 通用映射表见
references/FIELD_MAPPING.md;按 label 文本匹配,支持通配(去掉*、(必填)、空格等修饰后包含匹配)。 - 多条目排序规则:教育经历默认按学历从高到低匹配(博士 > 硕士 > 本科 > 大专 > 高中);实习/项目按时间倒序匹配;如用户有特殊要求(如表单顺序固定),按用户需求调整。
- 值归一化:信息库值与表单选项存在同义差异时,由模型自行转换匹配,不依赖硬编码表。
- 网站适配:不同招聘网站的表单组件、快照技巧、附件限制不同,先查阅
references/WEBSITES.md获取已知经验,遇到新网站把新经验追加进去。
岗位 JD 分析
当用户提供目标岗位描述(JD 文本或链接)时:
- 关键词提取:解析 JD,提取高频技能词、方向词(如"量化""回测""因子""Python""风控")与软性素质词。
- 描述微调建议:对比自我评价/项目描述,给出针对该 JD 的润色建议(突出匹配的关键词与量化成果),询问用户是否采用后再填写;用户不确认则用原文。
- 简历匹配度提示:对比简历(
user_profile中技能/经历)与 JD 关键词,输出"JD 高频但简历未突出"的关键词清单,提示用户可在补充信息/自我评价中强调,或据此优化简历,提升投递匹配度。
用户数据文件
<workspace>/user_data/user_profile.json 是唯一信息源,结构化存储用户信息,字段模板见 references/user_profile.example.json。首次使用后由本流程生成。
<workspace>/user_data/pending_fields.md 记录"表单出现过但信息库还没有"的字段,每次填写前可读取并询问用户补齐。
数据可信度管理
- 来源与时间标注:
user_profile.json顶层_meta记录各区块字段的来源(简历解析 / 用户提供 / 表单回写)与整体更新时间;每次回写数据时同步更新_meta,便于追溯信息出处。 - 冲突检测:回写或填写前,若新值与信息库已有值不一致(且并非用户主动要求修改),暂停并请用户确认采用哪个值,不静默覆盖。
- 敏感信息脱敏:向用户展示/确认信息时,证件号、手机号等敏感字段脱敏显示(保留前 3 位与后 4 位,中间
*,如522******2015);仅在填写表单时使用全量值。 - 字段格式校验:填写前校验关键字段格式——大陆手机号 11 位数字、邮箱含
@、日期为YYYY-MM-DD、身份证 18 位;格式不符时先修正再填,无法修正则询问用户。
文件路径管理
user_profile.json 的 files 字段集中记录需要上传的本地文件路径,自动填写时直接使用,避免反复向用户要文件:
| 字段 | 用途 |
|---|---|
files.resume[] |
简历文件数组(支持多份简历,如量化方向/数据方向),上传到"简历附件"入口时按投递岗位方向选择 |
files.photo |
证件照(jpg/png),上传到"个人照片"入口 |
files.portfolio[] |
作品集/其他附件(rar/zip/pdf),上传到"作品集"入口 |
维护规则:
- 用户上传或提供文件路径时,立即回写 files 字段。
- 优先把文件持久化到 <workspace>/user_data/ 对应子目录(如 <workspace>/user_data/resumes/简历.pdf、<workspace>/user_data/photos/证件照.jpg),避免引用临时/附件目录的不稳定路径。
- 上传时用 UPLOAD 动作指定 files 中对应路径;路径为空则询问用户。
照片预处理(保留原图):
1. 网站有大小限制(如 ≤300KB)且原照片超限时,用本技能自带的 scripts/compress_image.py 压缩生成临时副本(如 <workspace>/user_data/.tmp/photo_compressed.jpg):
python scripts/compress_image.py <原照片> <临时副本> --max-kb 300 --max-width 1024
依赖说明:脚本优先用 Pillow(PIL)做高质量压缩(JPEG 必需);未安装 Pillow 时仅能对 PNG 用标准库重写。证件照多为 JPEG,建议 pip install pillow(见 scripts/requirements.txt)。
2. 上传临时副本成功后,立即删除临时副本。
3. 原照片始终保留在用户指定位置,不修改、不删除。
数据备份与定期维护
- 填写前备份:每次开始填写前,把
user_data/user_profile.json复制为user_data/backups/user_profile.backupN.json;保留最近 5 份备份(.backup1.json~.backup5.json),超出后滚动覆盖最旧的。 - 定期备份:每周或每次会话开始时,执行一次备份轮换,并校验
user_data/user_profile.json的 JSON 合法性;损坏则提示用户从最近备份恢复。 - 备份集中存放于
user_data/backups/,仅本地保留。
浏览器操作规范(语义动作)
浏览器选择:优先使用宿主 Agent 平台默认自带的浏览器(agent-browser / 内置浏览器),能直接用自带的绝不要求用户另配外部浏览器(如 Playwright MCP、CDP)。各平台浏览器映射见 references/ADAPTERS.md"浏览器选择原则"。
操作采用语义动作,各平台工具映射见 references/ADAPTERS.md:
| 语义动作 | 语义 | 关键注意 |
|---|---|---|
| NAVIGATE | 打开页面 | 导航/页面跳转后必须重新快照 |
| SNAPSHOT | 获取页面结构 | 每次交互前快照;组件库下拉需 DOM 模式快照 |
| FILL / TYPE | 填写文本/日期 | 优先 FILL(原子清空+写入);多字段批量用 FILL 合并 |
| CLICK | 点击元素 | 触发页面变化(AJAX/跳转)的点击后重新快照 |
| SELECT | 下拉选择选项 | readonly 组件型下拉先点击展开再选目标项 |
| UPLOAD | 上传本地文件 | 优先使用 files 字段中的路径,找不到则询问 |
| WAIT | 等待页面/元素就绪 | 短增量等待(1-3 秒)+ 检查,优于单次长等待 |
| EVALUATE | 只读提取数据 | 只用于读取,禁止用其修改页面 |
| HANDOVER | 交还用户(登录/验证码) | TRAE 中必须独立调用;其他平台用文字提示 |
- 日期控件:点击输入框 → FILL/TYPE 输入
YYYY-MM-DD→ 回车确认(日期选择器弹出也不影响输入)。 - 单选 / 复选:CLICK 对应项(如性别"男"、"至今"开关)。
- 重复条目检测(幂等):添加多条目(教育 / 实习 / 项目 / 获奖)前,先 EVALUATE 读取表单中已有条目的名称/公司列表,与信息库对比:已存在 → 更新该条目而非新增;确实缺失 → 才点"添加"按钮。避免重复添加。
- 失败重试:填写/点击失败(元素不存在、值未生效)时,重新 SNAPSHOT 获取最新定位后重试 1-2 次;仍失败则记录到待收集清单并询问用户,不无限重试。
- 登录页 / 验证码 / 需要人工判断的操作:使用 HANDOVER 交还用户,不在自动化流程内代劳。
- 提交简历、删除已有条目等不可逆或敏感操作前停下,先向用户确认。
异常恢复
- 登录过期 / 被踢出:重新导航(NAVIGATE)到目标页,遇到登录页再次交还用户(HANDOVER)扫码,登录后继续。
- 元素定位失效:任何操作报"元素不存在"或页面结构变化时,重新 SNAPSHOT 获取最新定位信息(ref / 选择器)再继续。
- 填写中断:重新进入页面后,先对比信息库与表单已填值(EVALUATE 批量读取),只补填缺失字段,不覆盖已有且正确的值。
- 数据文件损坏:
user_data/user_profile.json无法解析时,从最近的user_data/backups/user_profile.backupN.json恢复,并告知用户。
增量学习
每次填写完成后:
- 对比本次表单字段与信息库,把用户补充/修正的新信息回写 user_profile.json,并同步更新 _meta 来源标注。
- 无法填写的字段追加到 pending_fields.md,下次填写前询问补齐。
- 映射表自动学习:本次匹配成功的"表单 label → 信息库字段"若不在 references/FIELD_MAPPING.md 中,去重后自动追加,让映射表随实战自动扩展。
- 新网站的表单特点、控件技巧追加到 references/WEBSITES.md。
- 保持 user_profile.json 为唯一信息源,不在 SKILL.md 内保存任何用户数据。
合规与隐私声明
合规边界:
- 本技能仅用于辅助用户填写本人求职简历,不用于批量注册、数据爬取、绕过网站登录/验证码/付费墙或 robots.txt 限制。
- 所有浏览器操作均在用户可见的页面中执行;提交简历、删除条目等不可逆动作由用户手动确认,不在后台静默执行。
- 不包含恶意代码、危险命令或诱导模型执行违规操作的指令。
隐私保护:
- 用户个人信息(简历、证件号、联系方式等)仅存储在本地 <workspace>/user_data/,不上传任何服务器、不随技能发布。
- 数据仅用于简历填写用途,不用于其他目的、不向第三方披露。
- 填写时仅向目标招聘网站提交表单所必需的信息,不做额外采集与追踪。
- 用户可随时删除 user_data/ 目录清除全部个人数据。