前言¶
DeepSeek Harness(DSH)运行在需要记录会话日志的环境中,而官方 DeepSeek API 对某些特定文本序列非常敏感。例如,某些区域指示符对(如 U+1F1F9 后接 U+1F1FC,即旗帜表情)会被 API 直接拒绝,返回 400 错误。由于 DSH 的机制要求每次请求都重发历史记录,一旦日志中包含这些被拒绝的序列,整个会话的后续轮次都会被阻断。
dsh-text-guard 是为此设计的一个插件,它在内容进入会话日志之前,对配置好的代码点序列进行中和处理。
插件定位¶
这是一个 DeepSeek Harness 插件,由开发者 7771sd 维护。它专注于解决因特定文本序列导致 API 拒绝请求,进而破坏会话连续性的问题。其核心价值在于在日志记录阶段拦截并替换这些敏感序列,确保会话可以正常继续。
核心功能¶
插件通过挂载到三个特定的钩子点来工作,在内容写入日志前进行重写:
tools/post-execute: 拦截工具的执行结果,包括网页抓取、文件读取、命令输出等。tools/ptc-dispatch-log: 拦截run_code子分发的持久化日志副本。agent/pre-step: 拦截进入步骤的消息,包括用户粘贴的文本。
对于不匹配的序列,内容保持原样并保留原始对象身份,不影响性能。
安装与启用¶
使用 Harness CLI 进行安装,无需构建步骤或额外依赖:
dsh plugin --profile <profile> add github:7771sd/dsh-text-guard
安装后,插件会通过一个补丁挂载到“宽模式”(wide mode)。
配置说明¶
配置文件位于 cordis.patch.yml。默认情况下,插件挂载时会启用宽模式,但所有字段都可以在你的配置文件中进行覆盖。
配置示例:
- id: text-guard
config:
mode: exact
sequences: [[0x1F1F9, 0x1F1FC]]
replacement: '[flag U+{codepoints}]'
toolResults: true
userMessages: true
log: true
关键字段说明:
mode: 匹配模式。默认为regional-pairs(匹配任意两个连续的区域指示符),设置为exact时仅匹配配置的sequences。sequences: 需要中和的代码点序列列表(在 exact 模式下有效)。replacement: 替换文本模板,使用{codepoints}占位符插入匹配的代码点。toolResults/userMessages/log: 控制在哪些阶段启用中和与日志记录。
注意: 修改配置后无法热加载,必须重新挂载插件包(禁用并启用)才能生效。
适用场景与注意¶
适用场景:
当你的智能体需要调用外部工具(如浏览器抓取、文件系统读写)时,这些输出可能包含 API 拒绝的文本。使用该插件可以防止这些内容进入会话日志,避免后续请求被阻断。
限制与注意事项:
1. 有损替换:插件的设计就是有损的。如果原始文本必须逐字保留,不要挂载此插件。
2. 系统提示不覆盖:通过 skill 文件或 instruction 文件注入到请求中的文本(系统提示部分)不会经过此拦截点,不受保护。
3. 日志不一致:被中和的用户消息在服务端日志中显示为替换后的文本,而客户端界面显示的仍是你发送的原始文本,两者会不一致。
4. 环境要求:需要 Node.js 版本 ^22.19 或 >=24。
结尾¶
dsh-text-guard 解决了因 API 内容风险过滤导致的会话崩溃问题。通过在日志记录前进行 ASCII 替换,它保证了会话历史的可重放性。更多细节可参考项目主页。