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