前言¶
用 DeepSeek Harness(DSH)搭智能體時,經常會遇到這類需求:讓模型查某個倉庫的元數據、找某個 repo 下的 issue、讀一段源碼文件。DSH 的理念是「一切皆插件」,這類聯網檢索能力不必自己從零接入,社區裏已有現成實現。下面介紹的 dsh-plugin-github 就是其中之一:安裝後智能體獲得兩個工具,可以直接檢索 GitHub 倉庫與 issue,並完整讀取單個資源。
這是什麼¶
dsh-plugin-github 是 moxingovo 維護的 DSH 插件,MIT 許可證,解決的問題是:讓智能體以工具調用的方式訪問 GitHub 公開數據,而不是靠人工粘貼內容。
兩個工具分工明確:
github_search:使用 GitHub 原生搜索語法檢索倉庫與 issue/PR,例如repo:vercel/next.js is:issue;github_get:完整讀取單個資源——倉庫元數據、issue/PR 正文,或解碼後的文件內容。
插件默認匿名可用,匿名限流爲每 IP 每小時 60 次請求;配置一個只讀 fine-grained token 後,可解鎖代碼搜索,並把限流提升至每小時 5000 次。設計上只讀:插件從不創建 issue、評論或代碼。
安裝與啓用¶
官方安裝命令:
dsh plugin --profile web add dsh-plugin-github
README 也給出了從 Git 直裝的等價命令:
dsh plugin --profile web add git+https://github.com/moxingovo/dsh-github
安裝後重啓 dsh web,新會話會自動獲得 github_search 與 github_get 兩個工具,沒有額外的註冊步驟。
可選 token:解鎖代碼搜索與更高限流¶
匿名模式下大部分功能都能用,只有代碼搜索和更高的限流需要 token。先在 GitHub 創建 fine-grained personal access token,Repository access 選 Public Repositories (read-only),再把它放進環境變量或 $DSH_HOME/.env:
GITHUB_TOKEN=github_pat_...
不配置 token 一切照常,匿名可用;token 隻影響代碼搜索和限流額度。
配置項¶
經過上面的步驟,插件已經可用。需要調優時,插件提供四個字段:
| 配置項 | 默認值 | 說明 |
|---|---|---|
tokenEnv |
GITHUB_TOKEN |
存放可選 token 的環境變量名 |
requestTimeoutMs |
30000 |
單次請求超時(毫秒) |
searchMaxPerPage |
30 |
github_search 的單頁數量上限(API 上限爲 100) |
fileMaxChars |
200000 |
github_get 讀文件的字符上限(值級截斷,帶 truncated 標誌) |
覆蓋方式是在 profiles/web/cordis.patch.yml 中修改任意字段,後層按行優先。
錯誤碼¶
工具失敗時返回帶結構化錯誤碼的錯誤,排查時可對照:
GITHUB_UNAUTHORIZED:401,常見於無 token 時調用代碼搜索;GITHUB_FORBIDDEN:403,限流或權限不足;GITHUB_NOT_FOUND:404;GITHUB_API_ERROR:422 或其他非 2xx 響應;GITHUB_BAD_RESPONSE:響應體不是 JSON;GITHUB_REDIRECT_REFUSED:憑據安全防護,請求重定向被拒絕;GITHUB_REQUEST_FAILED:網絡錯誤;GITHUB_FILE_TOO_LARGE:大於 1MB 的文件不會被 API 內聯返回。
安全設計¶
token 相關的約束有三條:
1、token 只從環境變量讀取,不會進入配置文件、日誌或工具輸出;
2、所有請求拒絕重定向,token 不可能被轉發到其他源;
3、token 只發送到 api.github.com。
配合前面提到的只讀設計,這套插件對 GitHub 既不能寫,也不會把憑據帶出預期範圍。
附帶的 skills¶
插件在 skills/ 目錄附帶兩個 skill:plugin-tool-github 講工具用法,plugin-web-github 講服務配置與錯誤碼。把它們複製進 harness 的 skills 目錄,智能體會在調用工具前先查閱,減少誤用。
已知問題與規避¶
上游 DeepSeek Harness 的早期 rc 版本聲明瞭一個未發佈的 peer dependency:dsh-agent 0.0.1-rc.1/rc.2 與 dsh-session 0.0.1-rc.1/rc.2 都依賴 @deepseek-ai/dsh-type-meta,而這個包尚未發佈到 npm。新安裝的解析器若落在這些版本上,會因 @deepseek-ai/dsh-type-meta 報 404(在 pnpm 11 與 npmmirror 鏡像下復現;npm 會解析到 0.0.1-rc.5 並正常安裝)。
兩種規避方式:
1、用 npm 配合倉庫提交的 package-lock.json 安裝(npm ci);
2、在一個已安裝好的 harness workspace 內執行 dsh plugin add,其 lockfile 鎖定了可解析的版本。
這是上游 rc 階段的發佈問題,上游修復元數據後會自然消失。另外,若要參與插件本身的開發,要求 Node 22+,倉庫內執行 npm ci && npm test 即可,測試套件完全離線運行(HTTP 已 mock)。
適用場景與注意¶
適合的場景:
- 讓智能體引用某個倉庫真實的 issue/PR 討論;
- 查倉庫元數據、讀解碼後的源碼文件;
- 只需要檢索公開數據,不需要任何寫操作。
注意兩點。其一,匿名限流是每 IP 每小時 60 次,高頻使用請按上文配置 token;其二,插件以當前 dsh 進程的權限運行,安裝前建議先檢查源碼與許可證——本項目爲 MIT,源碼在 GitHub 上可查。
結尾¶
回顧一下:dsh-plugin-github 用 github_search 與 github_get 兩個工具覆蓋了 GitHub 檢索的主要場景,匿名可用、只讀設計、token 可選。如果你在用 DSH 搭智能體,需要接入 GitHub 公開數據時可以從它開始。
- 社區插件目錄頁:https://www.skillhub.cn/plugins/moxingovo/dsh-github (社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係)
- 源碼倉庫:https://github.com/moxingovo/dsh-github