ChatGPTClaudeGrok / X / CursorGemini

DeepSeek Harness Python SDK 怎么改配置?profile patch 与 editor 补丁

配置与使用发布于 2026-10-21作者: DeepSeek Plugin 插件市场
DeepSeek HarnessPython SDKcordis.patch.ymlstr_replace_editor配置
DeepSeek Harness Python SDK 的配置由 profile、持久 patch、home patch 与构造时 patches 四层叠加。持久改动写 cordis.patch.yml,单次启动传 patch 文件,str_replace_editor 也要用 patch 加回。

DeepSeek Harness Python SDK 的配置不是一个文件,而是四层叠加:profile 决定基础树,profile 持久 patch 与 home patch 负责长期改动,构造时传入的 patches 元组只管这一次启动。 很多人改完配置“下次又没了”,就是把临时 patch 当成了持久配置。这篇按“层从哪来 → 写哪一层 → 怎么加回工具”讲清。

DeepSeek Harness:四层配置分别管什么

最终配置由 profile、profile 持久 patch、home patch 与 patches 元组依次叠加,后面的层覆盖前面的层。 对应到文件:(来源)

层位置作用范围
profile$DSH_HOME/profiles/sdk-minimal/决定基础组合与 server 配置
profile 持久 patchprofiles/sdk-minimal/cordis.patch.yml只影响这个 profile,重启仍在
home patch$DSH_HOME/cordis.patch.yml影响该 home 下所有 profile
构造时 patchesDeepSeekHarness(patches=(...))只影响本次进程

一个容易忽略的点:patch 会替换目标行的整个 config,不是深度合并。改一个字段时,要把同一行其他字段一起写全,否则会被覆盖掉。

python
from pathlib import Path
from deepseek_harness import DeepSeekHarness

workspace = Path("/srv/work/demo").resolve()
dsh_home = Path("/srv/dsh-home/demo").resolve()

with DeepSeekHarness(
    provider="deepseek-official",
    model="deepseek-v4-flash",
    max_tokens=49_152,
    cwd=str(workspace),
    dsh_home=str(dsh_home),
    profile="sdk-minimal",
    patches=("/srv/dsh-home/demo/patches/editor.patch.yml",),
) as harness:
    result = harness.run("Inspect the repository.", session_id="demo-001")

DeepSeek Harness:持久配置怎么写

要跨次启动保留,就把 patch 写进 $DSH_HOME/profiles/sdk-minimal/cordis.patch.yml。 步骤:(来源)

  1. 先初始化 profile — 执行 dsh --profile sdk-minimal --dump-default-config >/dev/null。预期:profile 目录与默认组合生成完毕。
  2. 编辑 cordis.patch.yml — 只写要增改的行,不要复制整棵树。预期:文件能被 YAML 解析。
  3. 用 dump 核对 — dsh --profile sdk-minimal --dump-config。预期:输出里能看到你改的字段与来源文件。
  4. 再跑 SDK — 重新构造 DeepSeekHarness。预期:新配置生效,且不依赖本次传入的 patches。

如果第 3 步没看到改动,先检查 DSH_HOME 是不是你以为的那个目录。SDK 只读显式传入的 home,不会静默读取 ~/.dsh。

DeepSeek Harness:单次启动怎么传 patch

只影响一次的改动,用 patches 元组传入,不要污染持久文件。 适合三类场景:(来源)

  1. 临时提高超时 — 为一次长任务加一个超时 patch。预期:任务结束、进程退出后配置自动回到默认。
  2. 临时挂工具 — 只在某次调试中启用 str_replace_editor。预期:其他任务看不到这个工具。
  3. A/B 对比 — 同一 home 用两份不同 patch 跑两次。预期:两次结果可对比,且不互相污染。

传参时用绝对路径,顺序就是叠加顺序。后面的 patch 覆盖前面的同目标行。

DeepSeek Harness:启用 str_replace_editor 的完整写法

sdk-minimal 默认不挂载 str_replace_editor,要用一个 editor.patch.yml 把它插回去。 官方示例:(来源)

yaml
- insert:
    - id: tool-str-replace-editor
      name: '@deepseek-ai/dsh-tool-str-replace-editor'

两种启用方式:

  1. 按次启用 — 保存为 /srv/dsh-home/demo/patches/editor.patch.yml,构造时传 patches=("/srv/dsh-home/demo/patches/editor.patch.yml",)。预期:下次运行时模型工具列表多出 str_replace_editor。
  2. 持久启用 — 把同一段 insert 合并进 profiles/sdk-minimal/cordis.patch.yml。预期:之后每次启动都带这个工具。
  3. 标准 sdk profile 也能用 — 同一个 patch 对 sdk profile 同样适用。预期:换成 profile="sdk" 后工具仍出现。

注意:本地文件系统后端以运行时工作目录解析相对路径,不会把访问限制在该目录内。启用编辑器后,权限边界要靠沙箱或一次性 checkout 控制。

DeepSeek Harness:patch 替换整个 config 的对照

官方规则是“patch 替换目标行的整个 config”,不是逐字段深合并。 原行有 apiKeyEnv、api、baseURL 三个字段时,patch 只写 api 会把另外两个字段一起删掉。正确做法是把原行完整抄下来再改;改完用 --dump-config 核对。(来源)

DeepSeek Harness:三种改配置方式的取舍

持久 patch、home patch、构造时 patches 各自解决不同问题,不要用一种方式包打天下。 对比如下:(来源)

  1. profile 持久 patch — 适合“这个 SDK 应用长期就要这样”。代价:换 home 就丢失,需要重新写。
  2. home patch — 适合“这台机器上所有 SDK profile 都要带”。代价:影响面大,调试时容易误伤其他任务。
  3. 构造时 patches — 适合“只这一次”。代价:每次调用都要记得传,漏传就回到默认。

一个实用规则:先在构造时 patches 里验证,确认稳定后再搬进 profile 持久 patch。这样不会把实验配置写进长期环境。

DeepSeek Harness 常见问题

Q:改了 cordis.patch.yml 需要重启 SDK 吗? 需要重新构造 DeepSeekHarness。持久 patch 在启动时读取;进程内的 harness 不会因为文件变化自动重载。

Q:patch 里只写一个字段,为什么其他字段没了? 因为 patch 替换目标行的整个 config,不是逐字段合并。改之前先把原行完整抄下来,再改其中一项。

Q:profile 能不能指向自己新建的目录? 可以,但该 profile 必须包含 @deepseek-ai/dsh-sdk-app 或另一个 JSON-RPC server 配置项。缺 server 配置会在启动时失败,不会回退。

一句话收束: SDK 配置的关键不是“写哪个文件”,而是先分清这层改动要活多久;一次性的进 patches,长期的进 cordis.patch.yml。

ChatGPTClaudeGrok / X / CursorGemini

常见问题

DeepSeek Harness Python SDK 的配置到底由哪几层组成?

DeepSeek Harness 里,由 profile、profile 持久 patch、home patch 与构造时传入的 patches 元组共同组成。profile 决定基础组合,持久 patch 写 cordis.patch.yml,home patch 影响该 home 下所有 profile,patches 元组只作用于本次启动。

怎么让 Python SDK 的配置在下次启动时仍然生效,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,把改动写进 $DSH_HOME/profiles/sdk-minimal/cordis.patch.yml。SDK 每个 home 都有自己的 profile 目录;写进这个文件的是持久配置,写进构造参数 patches 的只影响本次进程。

DeepSeek Harness 的 sdk-minimal 为什么默认没有 str_replace_editor?

DeepSeek Harness 里,sdk-minimal 的默认 Cordis tree 不挂载它。要启用就写一个 editor.patch.yml,用 insert 加入 @deepseek-ai/dsh-tool-str-replace-editor,再通过 patches 参数传入,或把这段写进 cordis.patch.yml 持久化。

Python SDK 启动时提示缺少 server 配置项或插件无法解析,是什么原因?

DeepSeek Harness 要求 profile 里包含 @deepseek-ai/dsh-sdk-app 或另一个 JSON-RPC server 配置项。缺失 server 配置、插件无法解析或 patch 非法都会在启动时失败,不会回退到其他组合。

同一个 home 里能不能同时跑多个 SDK 任务,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,可以,但要用不同的 session id。独立工作用新 session;只有要继续同一段持久对话和会话资源时,才同时复用 harness、home 与 session id。配置层是 home 级的,不要指望用 session 隔离配置。

相关术语

sdk-minimal
sdk-minimal 是 DeepSeek Harness Python SDK 随附的极简 profile,在空根上插入完整配置树且不含 dsh-base,只包含 SDK 协议、DeepSeek 适配器、本地执行与持久化。— DeepSeek Harness 官方文档 - Python SDK 入门
cordis.patch.yml
cordis.patch.yml 是 DeepSeek Harness profile 的持久配置补丁文件,位于 $DSH_HOME/profiles/<name>/ 下,用 insert 等操作在既有配置树上增改条目。— DeepSeek Harness 官方文档 - Python SDK 入门
patches 元组
patches 是构造 DeepSeekHarness 时可传入的有序 patch 文件路径元组,只作用于本次启动;它与 profile 持久 patch、home patch 一起决定最终配置。— DeepSeek Harness 官方文档 - Python SDK 入门
str_replace_editor
str_replace_editor 是 DeepSeek Harness 随附运行时里的文本编辑工具,但 sdk-minimal 默认不挂载;需要写 editor.patch.yml 显式插入 tool-str-replace-editor 才能使用。— DeepSeek Harness 官方文档 - Python SDK 入门

来源