前言¶
DeepSeek Harness (dsh) 的内置 openrouter 路由使用发布时附带的静态模型列表。OpenRouter 上线的新模型(如 deepseek/deepseek-v4.1-flash)在下一个 DSH 版本发布前不会出现在模型选择器中。dsh-openrouter-live 插件为 dsh 提供了一个新的路由,它直接读取 OpenRouter 的 /models 端点,确保模型列表实时更新。
核心功能¶
该插件通过读取 OpenRouter 的实时数据,扩展了 DSH 的能力:
- 实时模型列表:列表每 10 分钟刷新一次。模型按名称排序,且输入/输出价格以每百万 tokens 计算后追加到模型名称中。如果刷新失败,则继续使用上一次有效的列表。
- 模型元数据:上下文窗口和输出限制直接来自 OpenRouter 的 API。推理级别(reasoning levels)从模型的
reasoning.supported_efforts读取,选择器中只会显示模型支持的选项。 - 图像输入:支持图片输入。插件会内联图片,并遵循 DSH 的图片预算:图片会被缩放,当请求过大时,旧图片会被卸载。
- 推理连续性:插件会在后续请求中发送
reasoning_details(包括签名和加密条目),使 Claude 或 DeepSeek 等模型能够在工具调用间保持推理状态。 - 提示缓存:Anthropic 模型会在系统提示词和最新消息处设置缓存断点。对于其他提供商,插件使用
x-session-id头部保持会话与上游提供商一致,从而保持缓存热度。 - 故障分类:错误被映射为 DSH 的故障代码,以便重试插件只针对值得重试的情况进行重试(如速率限制、5xx 错误、空响应),而跳过无效密钥或上下文溢出等错误。
- 实际花费追踪:插件记录 OpenRouter 报告的每次响应的
usage.cost,这是真实费用而非估算值。费用会附加到当前会话及其所有委托的子会话中。数据持久化在~/.dsh/openrouter-live/costs.jsonl中,每行对应一个 JSON 记录,包含 OpenRouter 的生成 ID。 - 共享凭据:默认情况下,该路由读取与内置
openrouter路由相同的OPENROUTER_API_KEY凭据,无需额外配置。
安装与启用¶
安装前请确保环境满足以下要求:
* DeepSeek Harness 版本:0.1.6-alpha.2 至 0.1.7
* Node.js 版本:^22.19 或 >=24
* 已拥有 OpenRouter API Key
执行以下命令安装插件:
dsh plugin --profile web add dsh-openrouter-live
安装后必须重启配置文件。若尚未存储 API Key,请在设置中选择 OpenRouter 卡片存储,或导出 OPENROUTER_API_KEY 环境变量。
配置¶
插件的所有配置项均位于 ~/.dsh/profiles/<profile>/cordis.patch.yml,在 openrouter-live 节点下设置。
基本配置示例¶
- id: openrouter-live
config:
models: ['deepseek/*', 'anthropic/claude-*']
priceInName: true
关键配置项¶
| 字段 | 默认值 | 说明 |
|---|---|---|
models |
[] |
模型 ID 的通配符过滤列表。空列表表示显示所有模型。 |
priceInName |
true |
是否将价格追加到模型名称中。 |
apiKeyEnv |
OPENROUTER_API_KEY |
读取凭据的环境变量名。 |
maxTokens |
32768 |
输出限制。如果未设置,则使用此值,但模型自身的限制优先级更高。 |
costLedgerPath |
$DSH_HOME/openrouter-live/costs.jsonl |
花费日志文件的路径。设置为空字符串则仅保留在内存中。 |
典型用法¶
设置默认模型:
agent-default-model:
provider: openrouter-live
model: deepseek/deepseek-v4.1-flash
在 Composer 中选择模型,或使用命令查看花费:
/cost
注意事项¶
- 许可证:本项目采用 MIT 许可证。
- 源码审查:作为插件,它以当前进程权限运行。建议在安装前检查源码。
- 安装方式:请安装打包后的
.tgz文件,不要安装目录,否则会导致依赖解析错误。