ChatGPTClaudeGrok / X / CursorGemini

DeepSeek Harness Python SDK 读不到 ~/.dsh?dsh_home 隔离与插件缺失

故障排查发布于 2026-10-21作者: DeepSeek Plugin 插件市场
DeepSeek HarnessPython SDKdsh_home插件缺失隔离
DeepSeek Harness Python SDK 不会静默读取 ~/.dsh,只使用你显式传入的 dsh_home。读不到配置、插件或会话,先确认 home 路径,再看 profile 是否初始化、插件是否装到了同一个 home。

“SDK 读不到我原来的配置”通常不是 bug,而是设计:DeepSeek Harness Python SDK 不会静默读取 ~/.dsh,只使用你显式传入的 dsh_home。 换一个 home,就等于换了一套 profile、插件、凭据、设置与会话。很多“插件缺失”“会话找不到”“配置没生效”,本质都是把两套 home 搞混了。

DeepSeek Harness:三个落点先分清

SDK 的数据都围绕 home,但 home 里还分 profile 与 sessions 两层。 对照:(来源)

内容位置换 home 后
profile 与配置<dsh_home>/profiles/<name>/重新初始化
插件profile 的依赖目录需要重装
会话日志<dsh_home>/sessions/旧会话不可见
凭据与设置<dsh_home> 内需要重新配置

所以你看到的“缺失”,要先判断缺的是哪一层,而不是笼统地说“SDK 没读到配置”。

DeepSeek Harness:为什么读不到 ~/.dsh

SDK 的隔离是刻意的:它不假设你的全局 home 就是当前任务的 home。 两个原因:(来源)

  1. 避免污染全局环境 — 示例与 SDK 不应把测试插件、测试凭据写进 ~/.dsh。预期:每个任务可以有自己的干净环境。
  2. 避免误读旧状态 — 全局 home 里可能有与当前项目无关的 profile 与会话。预期:结果可复现。

如果你确实想复用全局配置,正确做法是把 dsh_home 显式指向它,而不是期待 SDK 自动发现。这样至少意图是明确的。

DeepSeek Harness:三种缺失症状

同样是“看不到”,缺配置、缺插件、缺会话的处理完全不同。 三种:(来源)

  1. 缺配置 — 模型、provider 或工具不在。预期:检查目标 home 的 profile patch,而不是全局 settings。
  2. 缺插件 — 工具列表少项,启动日志可能有解析失败。预期:在目标 home 下重新 dsh plugin add。
  3. 缺会话 — 旧对话打不开。预期:确认是否换了 home 或 session id。

如果三类同时缺,基本可以确定是 home 指错了;先打印实际路径,再继续排查。

DeepSeek Harness:正确初始化 home

先设 DSH_HOME,再初始化 profile,最后装插件。 步骤:(来源)

sh
export DSH_HOME=/srv/dsh-home/demo

# 初始化 sdk-minimal profile
dsh --profile sdk-minimal --dump-default-config >/dev/null

# 装插件到同一个 home
dsh plugin --profile sdk-minimal add file:/srv/plugins/my-plugin
  1. 固定 home 路径 — 用绝对路径,避免相对路径随工作目录变化。预期:Python 与命令行看到同一个 home。
  2. 先初始化 profile — 让 profiles/sdk-minimal 落盘。预期:后续插件安装有目标。
  3. 装插件需要 pnpm — 只有管理命令需要,运行 SDK 不需要。预期:pnpm -v 有输出。
  4. Python 传同一个 home — DeepSeekHarness(dsh_home="/srv/dsh-home/demo")。预期:能读到刚装的插件。

第 4 步最容易漏:命令行里设了 DSH_HOME,Python 里却传了另一个路径,结果就是“装了但看不到”。

DeepSeek Harness:三种隔离策略

按项目、按任务、共享 home,各有适用场景。 三种:(来源)

  1. 按项目隔离 — 每个项目一个 home,插件与配置随项目走。预期:环境稳定,磁盘占用增加。
  2. 按任务隔离 — 一次性任务用临时 home,跑完即删。预期:最干净,但无法复用会话。
  3. 共享 home — 多个任务共用一个 home,用 session id 隔离对话。预期:省空间,但插件与凭据共享。

共用 home 时不要复用 session id;独立工作用新 id,只有继续同一段对话才复用 harness、home 与 id 三者。

DeepSeek Harness:最小复现实验

用三步确认问题是不是 home 指错,避免在插件代码里绕圈。 步骤:(来源)

  1. 打印实际路径 — 在 Python 里打印 dsh_home,在 shell 里 echo $DSH_HOME。预期:两者一致。
  2. 用同一 home 跑命令行 — dsh --profile sdk-minimal "list tools"。预期:能看到与 SDK 相同的工具集。
  3. 换一个新 home 对照 — 新建空 home 初始化后跑同一任务。预期:能复现“默认工具集”,说明原 home 的差异来自插件。

三步结果一致,再去查 profile patch;不一致,先修路径。

dsh_home 的目录对照

把“配置、插件、会话”分别落到目录上,才知道该查哪一层。 对照:

内容典型路径换 home 后
profile 配置<home>/profiles/sdk-minimal/cordis.patch.yml需要重建
插件依赖<home>/profiles/sdk-minimal/node_modules需要重装
会话日志<home>/sessions/*.jsonl旧会话不可见
凭据与设置<home> 根下需要重新配置

先 ls <home> 确认目录存在,再分别检查;不要用一个“配置没了”概括所有缺失。

DeepSeek Harness 常见问题

Q:能不能让 SDK 自动回退到 ~/.dsh? 不能。官方明确说不静默读取;需要时显式传入该路径。

Q:为什么命令行能看到插件,Python 里看不到? 命令行与 Python 用了不同的 DSH_HOME 或不同的 profile。先把两边路径打印出来对照。

Q:换 home 后需要重新登录 provider 吗? 通常需要重新配置凭据,因为凭据也在 home 内。复用旧凭据前先确认安全边界。

一句话收束: SDK 的“读不到”多半是 home 不一致;先确认路径,再分 profile、插件、会话三层查。

ChatGPTClaudeGrok / X / CursorGemini

常见问题

DeepSeek Harness Python SDK 会读取 ~/.dsh 里已有的配置吗?

DeepSeek Harness 里,不会。SDK 与随附示例绝不静默读取 ~/.dsh,只使用你显式传入的 dsh_home。想复用已有配置,就要把 home 指过去,或在目标 home 里重新初始化 profile 与插件。

为什么 SDK 里看不到已经装好的插件,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,插件按 home 与 profile 隔离。你之前在全局 dsh 的 home 里装的插件,不会自动出现在 SDK 的 home。需要在目标 home 下用 dsh plugin --profile sdk-minimal add 重新安装。

SDK 的会话日志存在哪,为什么旧会话找不到,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,会话日志写在显式 dsh_home 下的 sessions/,是未压缩 JSONL。换 home 就等于换了一套会话存储;要继续旧对话,必须复用同一个 home 与 session id。

dsh_home 需要提前创建吗,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,不需要手动建目录,但建议先初始化 profile:设置 DSH_HOME 后执行 dsh --profile sdk-minimal --dump-default-config >/dev/null。这样 profile 与默认配置会在该 home 下落盘。

多个任务能不能共用一个 dsh_home,在 DeepSeek Harness 中如何处理?

DeepSeek Harness 里,可以,但要用不同 session id 隔离对话。共用 home 意味着共用 profile、插件、凭据与设置;需要完全隔离时,应给每个项目或任务单独的 home。

相关术语

dsh_home
dsh_home 是 DeepSeek Harness SDK 使用的隔离 home,保存 profile、已安装插件、凭据、设置与 sessions;SDK 只读显式传入的 home。— DeepSeek Harness 官方文档 - Python SDK 入门
session id
session id 是 DeepSeek Harness 会话的标识;独立工作应使用新 id,只有继续同一段持久对话与资源时才复用 harness、home 与 id。— DeepSeek Harness 官方文档 - Python SDK 入门
sdk-minimal
sdk-minimal 是 SDK 随附的极简 profile,保存在 dsh_home/profiles/sdk-minimal,不含 dsh-base,只包含 SDK 协议、适配器、本地执行与持久化。— DeepSeek Harness 官方文档 - Python SDK 入门
DSH_HOME
DSH_HOME 是 DeepSeek Harness 命令行与 SDK 使用的 home 环境变量;设置它后,dsh plugin 与 profile 初始化都会落到该目录。— DeepSeek Harness 官方文档 - Python SDK 入门

来源