w-sing-hung/dsh-resume:AI 按岗位重写简历,拒绝编造

前言

DeepSeek Harness(DSH)的设计理念是「一切皆插件」。开发者在构建智能体时,往往需要针对不同场景组合工具:有的负责解析指令,有的负责检索知识,有的负责生成内容。当内容生成环节涉及用户提供的敏感或关键信息时,工具本身的可靠性就变得至关重要。

求职简历属于敏感内容。投递时每个岗位都要微调简历:对齐 JD 关键词、调整经历顺序、强化表述。人工做这件事,一个岗位要花 20-30 分钟;不改,又会在 ATS(简历筛选系统)里沉底。现有网页版简历工具的问题在于:简历要上传到第三方服务器、切换平台会割裂工作流、且无法保证”不编造”——很多工具会主动替用户加经历。

w-sing-hung/dsh-resume 是一个 DSH 插件,它的核心价值在于:把简历重写放进你已有的 AI 工作流,并且从机制上不可能编造。

插件定位

  • 名称:dsh-resume
  • 维护者:W-SING-HUNG
  • 分类:模型推理
  • 定位:求职简历工坊:粘贴 JD,AI 按岗位重写简历,只基于真实内容,不编造

插件在会话里接收岗位描述(JD)与简历原文,模型会调用 rewrite_resume 工具,按岗位定制简历。交付结果包含四部分:优化后简历、改动说明、待补充清单、校验结果,并可导出为可直接投递的 .docx 文件。

核心功能

1. JD × 简历 → 定制简历

模型根据岗位描述调整简历内容,包括 ATS 关键词对齐、经历权重重排。

2. 反虚构代码守卫

这是插件的核心特性。它不是一句提示词约束,而是确定性代码校验——判定由代码执行,不依赖模型的态度。改写完成后,verify_rewrite 工具会逐项比对简历原稿与改写结果。

守卫检查项包括:

  • 出现原文没有的数字
  • 出现原文没有的机构/具体技术名
  • 职责强度被升格(如”参与”变”主导”)
  • 时间点被改动
  • 整条内容凭空新增
  • 关键词覆盖虚报
  • 原文数字在改写后丢失
  • 原文技术名消失且无其它技术名接替
  • 容量单位大小写被改动
  • 出现原文没有的通用概念缩写/普通英文词
  • 英文全称 + 其缩写并列
  • 头部行/表格单元格里的职责主张或新增文字
  • 合并条目掩盖了职责变化

3. 一键导出可投递 .docx

调用 export_resume 会直接产出文件,不用手动复制。生成的 .docx 是零依赖手写 OOXML,单栏版式、A4 页边距、项目符号段落,Word / WPS / Google Docs 均可直接打开。版式刻意保持简洁,避免复杂排版导致 ATS 解析失败。

4. 改动说明与待补充清单

每处改动对应 JD 哪条要求(5 条以内),并明确列出 JD 要求但简历缺失的能力,而非编造。

5. 会话内工具调用

插件装载后自动注册 rewrite_resume 工具,向系统提示词注入求职意图感知。Agent 可自动识别意图并调用。

6. 中英双语

支持 language: 'zh' | 'en'。

安装与启用

安装

# 装进目标 profile(把 <repo> 换成你的本地仓库路径或 npm 包名)
dsh plugin --profile web add "file:<repo>"

# 重启
dsh web

一条命令即可:CLI 会自动把插件写进 profile 的 dependencies 与 dsh.profile.bundles 两处。

注意事项:
- 路径含空格时 pnpm 会报错(Could not install from "D:/...")。这是 pnpm 对 file: 路径的限制,不是本插件的问题。解法:把仓库放到不含空格的路径(如 C:\dsh-resume)后再装,或改用 npm 包名安装。
- 需满足 Node >=20,dsh >=0.1.5-rc.2 <0.2.0-0。

使用

插件装载后,直接在会话里说:

帮我根据这个岗位要求优化一下简历。

【JD】 …岗位描述原文…

【我的简历】 …简历原文…

模型会自动调用工具,交付四部分内容,并可按需导出为可直接投递的 .docx 文件。

验证机制

插件包含两道防滥用设计:

  1. 不能”自证清白”:original(简历原文)是必填参数,导出前代码会再执行一次确定性校验,不通过则拒绝写出文件。这让”编造的简历投不出去”成为机制保证。
    - original 与 resume 实质相同(含仅空白/换行差异)→ 拒绝导出。
    - original 只比 resume 多出少量文字(疑似”副本 + 装饰”)→ 不拒绝,但 verified 降级为 false 并在摘要里说明原因。

  2. 不谎报校验范围:includeAppendix: true 时,附录(改动说明/待补充清单/校验结果)属元信息,不参与校验。

适用场景与注意

  • 适合谁:需要频繁投递不同岗位的开发者、希望用 AI 辅助简历优化但担心编造的用户。
  • 注意:插件以当前 DSH 进程权限运行。安装前应检查源码与许可证(MIT)。
  • 安全边界:不覆盖已存在的文件、不自动创建目录、拒绝目录路径。可用环境变量 DSH_RESUME_EXPORT_ROOT 限定导出根目录。

示例验证

运行 npm run demo:guard 可以看到真实拦截效果:

假设简历里原本写着:

## 项目经历
校园二手交易平台(前端负责人)
- 使用 Vue2 编写主要展示页面和商品列表模块
- 对接后端 REST 接口,完成登录与购物车功能
- 通过懒加载商品图片与合并请求,将首屏加载时间从 2.4s 缩短至 1.8s
  • 情况一:模型顺手加了个数据(如”接口响应时间优化 60%”)→ 被拦住,返回 FABRICATED_NUMBER。
  • 情况二:模型把”负责”升格成”主导” → 被拦住,返回 RESPONSIBILITY_INFLATED。
  • 情况三:模型凭空多写了一条经历 → 被拦住,返回 RESPONSIBILITY_INFLATED 和 NOVEL_CONTENT。
  • 情况四:合法改写(只强化措辞、事实分毫未动)→ 通过校验,返回 ok = true。

结尾

w-sing-hung/dsh-resume 把”不编造”从提示词约束变成了确定性代码校验。开发者可以放心地把简历优化放进自己的 DSH 工作流,每一处改动都必须在事实边界内——而且这件事由代码判定,不靠模型自觉。

  • 目录页:https://www.skillhub.cn/plugins/W-SING-HUNG/dsh-resume
  • GitHub:https://github.com/W-SING-HUNG/dsh-resume
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜