DeepSeek Harness Python SDK 读不到 ~/.dsh?dsh_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。 两个原因:(来源)
- 避免污染全局环境 — 示例与 SDK 不应把测试插件、测试凭据写进
~/.dsh。预期:每个任务可以有自己的干净环境。 - 避免误读旧状态 — 全局 home 里可能有与当前项目无关的 profile 与会话。预期:结果可复现。
如果你确实想复用全局配置,正确做法是把 dsh_home 显式指向它,而不是期待 SDK 自动发现。这样至少意图是明确的。
DeepSeek Harness:三种缺失症状
同样是“看不到”,缺配置、缺插件、缺会话的处理完全不同。 三种:(来源)
- 缺配置 — 模型、provider 或工具不在。预期:检查目标 home 的 profile patch,而不是全局 settings。
- 缺插件 — 工具列表少项,启动日志可能有解析失败。预期:在目标 home 下重新
dsh plugin add。 - 缺会话 — 旧对话打不开。预期:确认是否换了 home 或 session id。
如果三类同时缺,基本可以确定是 home 指错了;先打印实际路径,再继续排查。
DeepSeek Harness:正确初始化 home
先设 DSH_HOME,再初始化 profile,最后装插件。 步骤:(来源)
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
- 固定 home 路径 — 用绝对路径,避免相对路径随工作目录变化。预期:Python 与命令行看到同一个 home。
- 先初始化 profile — 让
profiles/sdk-minimal落盘。预期:后续插件安装有目标。 - 装插件需要 pnpm — 只有管理命令需要,运行 SDK 不需要。预期:
pnpm -v有输出。 - Python 传同一个 home —
DeepSeekHarness(dsh_home="/srv/dsh-home/demo")。预期:能读到刚装的插件。
第 4 步最容易漏:命令行里设了 DSH_HOME,Python 里却传了另一个路径,结果就是“装了但看不到”。
DeepSeek Harness:三种隔离策略
按项目、按任务、共享 home,各有适用场景。 三种:(来源)
- 按项目隔离 — 每个项目一个 home,插件与配置随项目走。预期:环境稳定,磁盘占用增加。
- 按任务隔离 — 一次性任务用临时 home,跑完即删。预期:最干净,但无法复用会话。
- 共享 home — 多个任务共用一个 home,用 session id 隔离对话。预期:省空间,但插件与凭据共享。
共用 home 时不要复用 session id;独立工作用新 id,只有继续同一段对话才复用 harness、home 与 id 三者。
DeepSeek Harness:最小复现实验
用三步确认问题是不是 home 指错,避免在插件代码里绕圈。 步骤:(来源)
- 打印实际路径 — 在 Python 里打印
dsh_home,在 shell 里echo $DSH_HOME。预期:两者一致。 - 用同一 home 跑命令行 —
dsh --profile sdk-minimal "list tools"。预期:能看到与 SDK 相同的工具集。 - 换一个新 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、插件、会话三层查。
常见问题
DeepSeek Harness 里,不会。SDK 与随附示例绝不静默读取 ~/.dsh,只使用你显式传入的 dsh_home。想复用已有配置,就要把 home 指过去,或在目标 home 里重新初始化 profile 与插件。
DeepSeek Harness 里,插件按 home 与 profile 隔离。你之前在全局 dsh 的 home 里装的插件,不会自动出现在 SDK 的 home。需要在目标 home 下用 dsh plugin --profile sdk-minimal add 重新安装。
DeepSeek Harness 里,会话日志写在显式 dsh_home 下的 sessions/,是未压缩 JSONL。换 home 就等于换了一套会话存储;要继续旧对话,必须复用同一个 home 与 session id。
DeepSeek Harness 里,不需要手动建目录,但建议先初始化 profile:设置 DSH_HOME 后执行 dsh --profile sdk-minimal --dump-default-config >/dev/null。这样 profile 与默认配置会在该 home 下落盘。
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 入门
来源
- DeepSeek Harness 官方文档 - Python SDK 入门· deepseek-ai
- DeepSeek Harness 官方参考 - dsh CLI 行为· deepseek-ai