DeepSeek Harness 怎么用 Python 调用?DSH plugin 的 SDK 入门
DeepSeek Harness 提供官方 Python SDK:pip install deepseek-harness-sdk 之后,用 DeepSeekHarness 上下文管理器就能从 Python 程序里驱动一个 sdk-minimal profile——配置由 profile、home patch 与传入的 patches 共同组成,会话日志落在 $DSH_HOME/sessions 的未压缩 JSONL(来源)。
DeepSeek Harness Python SDK 安装与前置条件
装 SDK 的前置是 Python 3.10+ 与 Git,执行 pip install deepseek-harness-sdk 即可;安装内容自带匹配的原生运行时 wheel 与 dsh 命令,普通 SDK 运行不需要系统 Node.js(来源)。 按下面步骤走一遍:
- 确认平台与版本 — Linux x64 / arm64、arm64 上的 macOS 14+,或 Windows x64;另需一个 DeepSeek 兼容的 API endpoint 与凭据。预期:环境满足后再安装,避免原生 wheel 不匹配。
- 创建隔离环境 — 建虚拟环境并激活(Linux/macOS 用
python -m venv .venv后. .venv/bin/activate;Windows 用py -3.10 -m venv .venv后激活脚本)。预期:python -m pip install deepseek-harness-sdk装到该环境。 - 准备隔离 workspace 与 home — 给测试用一个一次性 workspace 和一个独立
dsh_home。预期:SDK 只用你传入的 home,不读~/.dsh。 - 导出凭据 — 设置
DEEPSEEK_API_KEY;用兼容代理时再设DEEPSEEK_BASE_URL。预期:凭据从环境变量进入运行时。
用 DeepSeekHarness 在程序里跑任务
在程序里用 DeepSeekHarness 作为上下文管理器,指定 provider、model、cwd、dsh_home 与 profile,调用 harness.run(prompt, session_id=...),最后读 result.final_response(来源)。 最小用法:
from pathlib import Path
from deepseek_harness import DeepSeekHarness
workspace = Path("/absolute/path/to/disposable-workspace").resolve()
dsh_home = Path("/absolute/path/to/example-dsh-home").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",
) as harness:
result = harness.run(
"Inspect the repository and fix the failing tests.",
session_id="example-001",
)
print(result.final_response)
几个关键点:
- 进程是延迟启动的 — SDK 会延迟启动内置的
dsh --profile sdk-minimal进程,并复用到上下文管理器退出。预期:退出with块后进程被回收。 - 没有独立的 Python 运行时 — 不存在单独的 Python 运行时 bin 或一套完整配置选项,所有配置仍走 profile 与 patch。预期:概念统一到 DeepSeek Harness 自身的配置体系。
- 隔离用新 home、独立工作用新 session id — 只在需要继续同一段持久对话时才复用 harness、home 与 id。预期:混用会导致会话被意外接续。
DSH plugin 与 minimal profile:装插件、传 patch、启用 str_replace_editor
要用 dsh plugin 在该 home 里持久保存依赖与 bundle 层;持久配置改动编辑 $DSH_HOME/profiles/sdk-minimal/cordis.patch.yml,单次启动的改动则从 Python 传入 patch 文件(来源)。 三步:
- 初始化 profile — 执行
dsh --profile sdk-minimal --dump-default-config >/dev/null。预期:初始化随附的独立 profile,后续管理才有落点。 - 装插件包 — 用
dsh plugin --profile sdk-minimal add file:/absolute/path/to/my-plugin-bundle,它把包管理转发给pnpm并记录所有导出dsh.bundle层的包。预期:只有执行这条管理命令时才需要pnpm,启动已装好的 SDK 不需要。想找现成插件可以先进 DSH Plugin Hub 浏览社区实现。 - 按需启用
str_replace_editor— 随附运行时包含它,但sdk-minimal默认不挂载。写一份editor.patch.yml用insert加回文件系统后端与编辑器,再通过patches传入或写进cordis.patch.yml持久保存。预期:下次启动后模型就能在持久 shell 之外使用该工具。
# editor.patch.yml
- insert:
- id: fs-local
name: '@deepseek-ai/dsh-fs-local'
config:
cwd: !!js process.cwd()
- id: tool-str-replace-editor
name: '@deepseek-ai/dsh-tool-str-replace-editor'
注意:另一个 profile 只有在包含 @deepseek-ai/dsh-sdk-app 或另一个 JSON-RPC server 配置项时才有效;缺失 server 配置项、无法解析的插件或非法 patch 会在启动时直接失败,不会回退到其他组合。
理解 sdk-minimal 极简 profile
sdk-minimal 在空根之上插入完整配置树且不含 dsh-base,因此基础 profile 以后新增的工具不会隐式出现(来源)。 它的默认值:
| 属性 | 值 |
|---|---|
| 系统提示词 | DSH_SYSTEM_PROMPT,未设置时为 You are a helpful software engineer assistant. |
| 模型 | --model,然后是 DSH_MODEL,最后回退 deepseek-v4-flash |
| 面向模型的工具 | Linux / macOS 上的持久 bash,或 Windows 上的 pwsh |
| Shell 超时 | 300 秒 |
| 运行时上下文与 compaction | 不存在 |
| 会话持久化 | <dsh_home>/sessions 下的未压缩 JSONL |
该 profile 包含 SDK 协议、一个由环境配置的 DeepSeek 适配器、本地执行与持久化;文件系统工具、settings、托管凭据、OTel 遥测、Web 工具、subagent、本地指令发现与 compaction 都不存在。它还固定使用 danger-full-access——持久 shell 能修改运行时可见的任何路径,所以务必用一次性 checkout 或容器。
注意事项与常见问题
~/.dsh不会被读取:SDK 只用你传入的dsh_home,这是刻意的隔离设计,别指望它继承你日常的配置。- 权限很宽:
danger-full-access下 shell 可写任何可见路径,务必隔离环境。 - 会话日志未压缩:
<dsh_home>/sessions里的 JSONL 未压缩,注意磁盘占用与隐私,详见《DeepSeek Harness 会话记录在哪、怎么查》。 - Web UI 不在 SDK 里:Python SDK 部署若要浏览器应用,需针对显式
DSH_HOME另外运行dsh web;web是独立 CLI 应用,不能为 Python SDK client 提供服务。 - 要换模型或接自建服务:改
providers与凭据,见《DeepSeek Harness 模型提供方怎么配》。
常见问题
装 DeepSeek Harness Python SDK 需要 Python 3.10 或更高版本加 Git,然后 pip install deepseek-harness-sdk。安装内容包含匹配的原生运行时 wheel 与 dsh 命令,普通 SDK 运行不需要系统 Node.js。
在 DeepSeek Harness 里用 DeepSeekHarness 作为上下文管理器,指定 provider、model、cwd、dsh_home 与 profile,再调用 harness.run(prompt, session_id=...),最后读 result.final_response。SDK 会延迟启动内置的 dsh --profile sdk-minimal 进程并复用到退出。
不会:DeepSeek Harness SDK 与随附示例绝不静默读取 ~/.dsh;你传入的 dsh_home 才是唯一来源,所选 home 会保存生成的 sdk-minimal profile、已安装插件与 sessions/ 下的会话日志。
先初始化 DeepSeek Harness profile,再用 dsh plugin --profile sdk-minimal add 装包(这一步需要 pnpm)。持久配置改动编辑 $DSH_HOME/profiles/sdk-minimal/cordis.patch.yml,单次启动的改动则从 Python 传入 patches。
DeepSeek Harness 的 sdk-minimal profile 默认 Cordis tree 不挂载它。要启用就写一个 editor.patch.yml 用 insert 加回 fs-local 与 tool-str-replace-editor,再通过 patches 参数传入,或写进 cordis.patch.yml 持久化。
相关术语
- deepseek-harness-sdk
- deepseek-harness-sdk 是 DeepSeek Harness 官方发布的 Python 包,安装后同时带来匹配的原生运行时 wheel 与 dsh 命令,用 DeepSeekHarness 类在程序里驱动一个 dsh profile。— DeepSeek Harness 官方文档 - Python SDK 入门
- sdk-minimal
- sdk-minimal 是 SDK 随附的独立极简 profile,在空根之上插入完整配置树且不含 dsh-base,只包含 SDK 协议、由环境配置的 DeepSeek 适配器、本地执行与持久化。— DeepSeek Harness 官方文档 - Python SDK 入门
- dsh_home
- dsh_home 是 DeepSeek Harness 的隔离 home 目录,保存 profile、已安装插件、凭据、设置与会话日志;SDK 只用你显式传入的这个 home,不读 ~/.dsh。— DeepSeek Harness 官方文档 - Python SDK 入门
- patch
- patch 是 DeepSeek Harness 的配置叠加层,用 insert 等操作在既有配置树上增改条目;SDK 里可由 profile 持久 patch、home patch 与构造时传入的 patches 元组共同组成。— DeepSeek Harness 官方文档 - Python SDK 入门
来源
- DeepSeek Harness 官方文档 - Python SDK 入门· deepseek-harness
- dsh CLI README· deepseek-ai