dsh-wolfram:DeepSeek Harness 下的 Wolfram/AgentTools 集成

前言

DeepSeek Harness (DSH) 採用“一切皆插件”的理念,允許開發者將各種模型和工具能力掛載到工作流中。Wolfram 官方提供的 Wolfram/AgentTools MCP Server 是一個功能完備的數學與計算工具集,但在 DSH 環境下直接集成需要解決內核發現、進程生命週期管理以及權限審批等中間問題。

dsh-wolfram 是一個集成 bundle,旨在填補這些缺口。它不重寫任何一方:底層協議由 DSH 通用客戶端處理,Wolfram 工具由官方 Paclet 提供。本插件主要處理三件事:自動發現內核、管理 Wolfram 進程樹(僅管理自身啓動的進程)、以及對接 DSH 的原生權限策略。

核心功能

本插件提供以下能力:

  • 內核發現:自動探測本機 Wolfram 可執行文件(支持註冊表、標準目錄、wolframscript),也支持顯式覆蓋。
  • Windows 透明 stdio supervisor:啓動並管理 Wolfram 進程。插件關閉或重載時,只會終止自己啓動的進程樹,不會影響已打開的 Mathematica 前端或其他客戶端的內核。
  • DSH 原生權限策略:將工具調用納入 DSH 的審批鏈。未知工具默認爲 ask,已知工具根據配置決定是否需要審批。
  • WSL 複用支持:支持在 WSL 中複用 Windows 側的 Mathematica,配置 POSIX 路徑以避免衝突。
  • 圖像塊轉發:支持 DSH 0.1.1-rc.2+ 版本的圖像塊轉發機制,原始 MCP 值會被保留。
  • 離線依賴構建:支持基於 docs/offline-dependencies.json 的離線安裝。

前置條件

在使用前,請確保滿足以下環境要求:

  • DeepSeek Harness:版本需在 0.1.1-rc.2 或 0.1.0-rc.5 以上。
  • Node.js:版本要求 ^22.19 || >=24。
  • Wolfram 環境:需安裝 Wolfram 桌面產品或 Wolfram Engine,並安裝 Wolfram/AgentTools Paclet。
    PacletInstall["Wolfram/AgentTools"]

安裝

通過 DSH 的插件命令安裝此 bundle:

dsh plugin --profile <你的 profile> add D:\dsh-dev\dsh-wolfram

安裝完成後,dsh plugin 會在 profile 目錄初始化依賴,並將插件追加到 dsh.profile.bundles 列表中。確認配置生效:

dsh --profile <你的 profile> --dump-config

輸出中應出現 id: wolfram 與 id: wolfram-permission。

使用說明與默認行爲

安裝後,DSH 會默認連接內置的 WolframLanguage server。模型會看到 7 個工具,命名空間統一爲 mcp__wolfram__ 前綴。

所有工具默認需審批 (ask),因爲這些操作具有副作用(如讀寫文件、執行代碼)。未列出的新工具默認也是 ask。只有 WolframLanguageContext 和 SymbolDefinition(只讀元數據)被設爲 delegate,直接交給後續策略處理。

注意:Wolfram 工具不在沙箱中,可執行任意代碼、讀寫文件。在部署時應謹慎配置權限策略。

配置項

配置文件位於 $DSH_HOME/profiles/<profile>/cordis.patch.yml。主要有兩行配置:id: wolfram 和 id: wolfram-permission。

1. id: wolfram 行

控制內核的發現與啓動。

字段 默認值 說明
serverName wolfram 工具名命名空間
mcpServerName WolframLanguage 啓動的內置 Server 名稱
command 自動發現 顯式指定可執行文件路徑
graceMs 1000 關閉 stdin 後等待進程退出的時間
recordDirectory $DSH_HOME/.dsh-wolfram Supervisor 記錄子進程的位置
reclaimOrphans true 裝載時回收殘留的進程樹
probeWolframScript true 是否啓用 wolframscript 探測(較慢)

2. id: wolfram-permission 行

控制審批策略。

字段 默認值 說明
unknown ask 未知工具的決策
delegate [WolframLanguageContext, WolframAlphaContext, SymbolDefinition] 交給後續策略的只讀工具

配置示例:指定內核路徑並關閉未知審批

- id: wolfram
  config:
    serverName: wolfram
    mcpServerName: WolframLanguage
    command: 'D:\mathematica\Mathematica 15.0\wolfram.exe'
    graceMs: 1000
    reclaimOrphans: true

- id: wolfram-permission
  config:
    serverName: wolfram
    unknown: deny
    delegate: []

WSL 環境複用

如果在 WSL 中使用,需要顯式指定路徑並關閉自動探測,以避免啓動錯誤的默認 server。

- id: wolfram
  config:
    serverName: wolfram
    mcpServerName: WolframLanguage
    command: /mnt/d/mathematica/Mathematica 15.0/wolfram.exe
    probeWolframScript: false
    recordDirectory: /home/<user>/.local/state/dsh-wolfram
    reclaimOrphans: true

排障

找不到內核

啓動時報錯 no Wolfram kernel found。檢查順序:
1. 確認 Wolfram 已安裝:wolframscript -code '$InstallationDirectory'。
2. 在配置中顯式指定 installationDirectory 或 command。
3. 環境變量 DSH_WOLFRAM_COMMAND 也可臨時覆蓋。

工具爲空

檢查 Wolfram/AgentTools Paclet 是否安裝及版本。可以手動運行 supervisor 測試:

node D:\dsh-dev\dsh-wolfram\src\supervisor-main.js --command 'D:\mathematica\Mathematica 15.0\wolfram.exe' --arg -run --arg 'PacletSymbol["Wolfram/AgentTools","Wolfram`AgentTools`StartMCPServer"][]' --arg -noinit --arg -noprompt

或運行倉庫內置的測試:

npm run test:live

進程殘留

插件僅管理通過 supervisor 啓動的進程。檢查時不要按進程名批量殺戮,應對比父進程 ID。正常的 Wolfram 進程其父進程應爲 node.exe(運行 supervisor-main.js 的進程)。

總結

dsh-wolfram 插件爲 DeepSeek Harness 提供了與 Wolfram 官方工具集的標準化集成路徑。它解決了進程隔離、權限控制和環境配置的繁瑣細節,讓開發者可以直接在 DSH 生態中使用 Wolfram 的計算能力。

羽毛球分组比赛记分
小程序二维码

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

小夜