前言¶
在 DSH(DeepSeek Harness)里走 Perplexity API 的路线,常见的问题不是模型本身不可用,而是请求格式对不上:Anthropic 系模型(Claude Opus 5.5、Claude Sonnet 5.5)要求带 output cap,DSH 的工具名可能和 Perplexity 内建工具撞名,工具 schema 少了 properties 或 description 也会被拒。GPT-6.1 Sol 又对 stop、temperature、reasoningEffort 的取值范围更敏感。这些错误都是 HTTP 400,从 DSH 侧看只是请求失败,不好定位。
下面介绍 Kinfxhk 维护的社区插件 DSH Perplexity Guard。它在请求发往 Perplexity provider 前做修正,并提供一键修复 provider 设置的入口。插件包名是 @local/perplexity-guard,仓库名 dsh-perplexity-api-fix-plugin 是历史原因。
这个插件是什么¶
一个 DSH Host + Web 插件,当前版本 1.0.3,MIT 许可证,不属于 Perplexity、Anthropic、OpenAI 或 DeepSeek 官方。
它面向一个具体场景:DSH 通过 Perplexity 的 API 使用 Claude Opus 5.5、Claude Sonnet 5.5 和 GPT-6.1 Sol 时,请求经常因格式问题失败。插件在每次发往 perplexity provider(可在配置里改)的请求上做补正,并把导致失败的 provider 设置修好。
要求:
- DSH 版本
>= 0.2.1-rc.5。 - 配置好
llm-pi-aiprovider,provider id 为perplexity(或在插件配置里改providerId)。 - 该 provider 里已填好 Perplexity API key。
插件官方说明里强调两件事:它不修改消息内容,Perplexity 返回 finish_reason=refusal 属于上游内容审核决定,插件只记录日志;它也不存储或读取 API key。
核心功能:请求修正¶
每次请求发往被守护的 provider 时,插件按下面这张表处理:
| 原问题 | 修正方式 |
|---|---|
| Anthropic 模型拒绝不带 output cap 的调用 | 补上 maxTokens(线上发送为 max_output_tokens),并按剩余上下文窗口封顶 |
DSH 工具名与 Perplexity 内建工具(web_search、fetch_url、sandbox 等)撞名,返回 HTTP 400 |
在请求里改名为 dsh_<name>,流式返回的 tool call 里再改回原名 |
工具 schema 为 type: "object" 但没有 properties,或 description 为空,返回 HTTP 400 |
补 properties: {} 或默认 description,不触碰 argument 本身 |
出现 stop、超范围的 temperature、不受支持的 reasoningEffort |
移除或夹到合法范围 |
可以做的配置项如下,默认值来自插件配置表:
| Key | 默认值 | 含义 |
|---|---|---|
enabled |
true |
打开或关闭实时请求修正 |
providerId |
perplexity |
要守护的 provider id |
defaultMaxTokens |
32768 |
调用未带 output cap 时使用的默认值 |
contextWindow |
200000 |
拿不到模型信息时的兜底上下文窗口 |
headroomTokens |
4096 |
封顶时保留的安全余量 |
核心功能:Provider 设置修复¶
插件带一个 Web 侧栏入口(叫做 “Perplexity”)和一个 agent 工具 perplexity_guard,工具的 action 有两个取值:status 和 repair。
侧栏页面展示 provider route、设置检查结果,以及最近 40 条改写记录或错误。status 用于看当前检查结果。
repair 只针对上面提到的三个模型补齐以下字段:
api: openai-responsesbaseURL:仅在缺失时写入,默认https://api.perplexity.ai/v1,不会覆盖已有的自定义 baseURLmaxTokens、contextWindowreasoningEfforts(低/中/高/xhigh)compat.supportsMaxOutputTokens- 15 分钟的流式空闲超时
约束也写明了:repair 不会删除其他模型,也不会替换已自定义的 baseURL。也就是说,修的只是三个目标模型缺的字段,不会大改你的 provider 配置。
安装与启用¶
README 提供的安装路径是一个本地 bundle 安装,不走包管理器。先 clone 或下载仓库,然后执行:
plugin_manager(action: "install_bundle", target: "C:\\path\\to\\dsh-perplexity-api-fix-plugin")
把 target 换成你本机实际放置插件目录的路径。然后:
- 重启 DSH。
- 打开侧栏的 Perplexity 页面。
- 如果页面里显示检查项,按 Repair settings 修复 provider 设置。
安装前建议先读一遍源码和 LICENSE。插件以当前 DSH 进程的权限运行,且 install_bundle 这个入口本身也是执行任意目录的脚本注册,倾向先审后装。
已知限制¶
当请求需要改写(工具别名或 schema 修复)时,因为公开的 middleware API 没有提供替换 options 的 next(),插件会带着副本重新进入 ctx.llm.stream()。重新进入的这一次调用使用的是当前 adapter,所以如果在流进行当中改了 provider 配置,这一次调用可能读到新配置。
实际影响不大:只影响被改写的那一次请求。
适用场景¶
适合正在用 DSH 接 Perplexity,并在用 Claude Opus 5.5、Claude Sonnet 5.5 或 GPT-6.1 Sol,且遇到 requests 直接 400 或模型对参数过于挑剔的场景。如果 provider 设置本来就完整,装完后主要价值在于请求改写和侧栏的状态检查。
不适合:不使用 Perplexity API 的,不涉及上面三个模型的,或者不打算接受”插件会改写线上请求参数”这点的。
结尾¶
这个插件的价值在于把一类格式层面的 400 从”要自己排查”变成”装好后自动补齐”,并且把 provider 设置里的常见缺口集中到一个按钮里修。它是社区维护的非官方插件,功能边界写清楚了,限制也写清楚了。
- 插件目录页:https://www.skillhub.cn/plugins/Kinfxhk/dsh-perplexity-api-fix-plugin
- GitHub:https://github.com/Kinfxhk/dsh-perplexity-api-fix-plugin