dsh-plugin-python:爲 DSH 增加模型可調用的 Python 工具

前言

在 DeepSeek Harness(DSH)裏,模型常常需要跑一段 Python:算數、讀表、改 Office 文檔、把 stdout 當結果回傳。若只靠 Shell 拼命令,解釋器版本、依賴和編碼容易和宿主不一致;若每次讓用戶本機裝一套環境,又會拖慢會話啓動。

下面介紹社區插件 dsh-plugin-python(維護者 jcy0chenyuan0):向 DSH 註冊名爲 python 的工具,用 Harness 自帶的 Python 運行時執行代碼,README 寫明「無需安裝任何東西」指的是模型側不必再單獨裝解釋器——首次部署插件目錄時仍需按文檔跑安裝腳本並 install_bundle。

這是什麼

dsh-plugin-python 是可安裝的 DSH profile bundle(package.json 中 dsh.bundle 聲明 patch 層)。Host 側入口爲 lib/python.js,在 Cordis 裏註冊模型面向的 python 工具。

分類在 SkillHub 目錄中爲「模型推理」;倉庫簡介爲:DSH plugin: a model-facing python tool using the Harness bundled Python runtime.

捆綁運行時(資料記載):Python 3.12.14,並附帶 numpy 2.3.5、pandas 3.0.1、python-docx、python-pptx、openpyxl、Pillow、lxml、XlsxWriter 等,便於在會話裏直接做數據處理與文檔類任務。

核心功能

README 用表格歸納了工具行爲,下列能力均在資料中標註爲已實現:

能力 說明
執行代碼並返回 stdout 正常結束帶 [exit code: 0]
中文 / UTF-8 強制 PYTHONUTF8=1 與 PYTHONIOENCODING=utf-8(Windows 捆綁解釋器默認 locale 爲 gbk,不設環境變量時中文易亂碼)
非零退出與 stderr 失敗時 [exit code: 1] 並分離 traceback
args / stdin 對應 sys.argv[1:]、sys.stdin
workdir 相對路徑按會話工作區解析;越界 ../ 會被拒絕
files 多文件 可寫輔助模塊與數據,支持 import helpers、Path(__file__).parent
timeoutMs 超時終止,示例文案 [timed out after 1500 ms]
臨時目錄 異常路徑也會清理,不泄漏
路徑攔截 files / workdir 中的 ../ 越界會被拒絕

設計側要點(摘自 README):插件模塊零宿主 npm 依賴(僅用 Node 內置模塊),直接向 ctx.tools.register 傳原始 JSON Schema 定義;每次調用走 ctx.sandboxPolicy.resolve,非 danger-full-access 時用沙箱 confine 再 spawn,無沙箱提供者時 fail closed。

離線測試腳本 .tooling/test-python-plugin.mjs 對打樁 ctx 與真實子進程共 9/9 項通過;線上驗證記錄中多文件調用曾返回 [exit code: 0] 及預期 stdout。

安裝與啓用

1、生成 patch 配置

首次在本插件目錄執行安裝腳本(按平臺二選一,腳本會根據當前目錄生成 cordis.patch.yml,已 .gitignore,不寫死盤符):

powershell -ExecutionPolicy Bypass -File .\install.ps1

macOS / Linux:

node install.mjs

僅檢查環境、不自動安裝時(Windows):

powershell -ExecutionPolicy Bypass -File .\install.ps1 -CheckOnly

安裝腳本默認靜默補全缺失環境;插件加載時還會在後臺跑 bootstrap.ps1 -AutoInstall -Quiet(6 小時內不重複),不阻塞 DSH 啓動——資料提示首次裝完若工具不可用,可重試一次。

Python 來源優先級(資料原文):優先 DSH 捆綁運行時(dsh-runtimes\*\dependencies\python\python.exe);沒有則 Windows 上可 winget install Python.Python.3.12 --scope user。也可設環境變量 DSH_PYTHON 或配置項 pythonPath 指向 Python 3.11+。關閉自動安裝:patch 的 config 裏 autoInstall: false,或 DSH_BOOTSTRAP=0。

2、作爲 bundle 裝入 profile

本包需在 GUI「設置 → 插件」中可見、可整體啓停,安裝命令爲:

plugin_manager install_bundle  file:<本目錄的絕對路徑>

裝完後 profile 的 package.json 會出現 dsh.profile.bundles 與 dependencies 中的 dsh-plugin-python 條目。卸載:GUI 插件頁移除,或 plugin_manager remove_bundle dsh-plugin-python。

機制說明(README):pnpm 會把包複製到 <profile>/node_modules/dsh-plugin-python,而 cordis.patch.yml 掛載的是工作區絕對路徑的 lib/python.js——改插件 JS 一般重啓 DSH 即可;若改了 patch 掛載參數,需重新 install_bundle。改代碼後 ESM 按 URL 緩存,運行中的 fiber 可能仍用舊實現;資料給出的熱替換做法是換新的 loader 條目 id 並停用舊 id(現用 id 爲 plugin-python-4)。

工具參數與配置

調用參數

參數 必填 說明
code 是 要執行的 Python 源碼(寫入 main.py)
description 是 5–10 詞動作描述(UI 展示)
files 否 [{ path, content }],寫入運行目錄
workdir 否 進程 cwd,默認會話工作區;相對路徑按工作區解析
args 否 追加命令行參數
stdin 否 管道輸入文本
timeoutMs 否 超時毫秒數

注意:進程工作目錄是會話工作區,不是腳本所在臨時目錄;讀 files 裏的數據應用 Path(__file__).parent;要把產物留在工作區應直接寫工作區路徑。

插件 config 條目

鍵 默認 含義
pythonPath 自動 解釋器路徑;默認按 runtime.json 找捆綁運行時
cwd 會話工作區 默認工作目錄
timeoutMs 120000 默認超時
graceMs 3000 終止寬限期
maxOutputBytes 200000 單流收集上限,超出落盤並給出 spillPath
keepScript false 爲 true 時保留臨時腳本並回報 scriptPath

典型用法(模型視角)

模型通過已註冊的 python 工具提交 code 與 description;需要多文件時附帶 files,例如輔助模塊 helpers.py 與同目錄數據文件,在 main.py 裏 import helpers 並用 Path(__file__).parent 讀數據。需要 CLI 風格輸入時使用 args 或 stdin;長時間任務可調 timeoutMs(未傳則用 config 默認 120000 ms)。

README 未給出完整 JSON 調用示例,但線上驗證記錄提到:files 多文件場景下 stdout 曾出現 live after move: moved-to-python_hk / data: k,v | x,1 等形式,說明多文件 import 與數據讀取路徑在真機環境中可用。

適用場景與注意

適合:需要在 DSH 會話裏讓模型執行 Python、且希望儘量對齊 Harness 捆綁運行時與常見數據/Office 庫的場景;希望插件出現在 GUI 插件頁、以 bundle 方式統一啓停的團隊工作流。

注意:

  1. 工具以當前 DSH 進程權限在主機上 spawn Python;安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證(package.json),確認沙箱策略與 danger-full-access 是否符合你的安全要求。
  2. 社區目錄 SkillHub 插件頁 與 DeepSeek / 幻方無官方從屬關係;DSH 生態強調「一切皆插件」,本文事實以倉庫 README 與 package.json 爲準。
  3. 改動插件實現後若行爲未更新,按 README「三個實測坑」③ 處理:重啓 DSH,或新 loader id + 停用舊條目。

結尾

dsh-plugin-python 把「在 Harness 裏跑 Python」收成單一模型工具:捆綁運行時、UTF-8、超時、多文件、workdir 邊界與沙箱 fail closed 均在文檔中有對應說明。若要安裝或提 issue,可從目錄頁與倉庫入手:

  • 目錄頁:https://www.skillhub.cn/plugins/jcy0chenyuan0/dsh-plugin-python
  • GitHub:https://github.com/jcy0chenyuan0/dsh-plugin-python
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜