前言¶
DeepSeek Harness(DSH)自帶一套智能體循環(dsh-agent-loop),會話、Web UI、預設與權限表面都由 Harness 統一管理。若你已經在使用 pi coding agent,並希望保留 pi 自身的提示詞、工具、壓縮策略與模型路由,同時又想留在 DSH 的會話與界面裏工作,就需要把「殼」和「循環」拆開:DSH 管會話與展示,pi 管執行邏輯。
dsh-inline-pi-agent 是 Komorebi-Nine 維護的 DSH 工作流類插件(社區目錄:SkillHub 條目)。它以 profile bundle 的形式,用無頭子進程 pi --mode rpc 替換內置的 dsh-agent-loop,在不動磁盤上會話數據的前提下,把 pi 的 RPC 事件翻譯成 DSH 可持久化的事件流。
這是什麼¶
插件全名 dsh-inline-pi-agent(npm 包版本 0.1.0,MIT 許可證)。定位一句話:在 DSH 裏跑 pi 的智能體循環,而不是 DSH 原生循環。
DSH 仍負責會話、Web UI、預設與權限相關 UI;pi 負責自己的 prompt、tools、compaction 與 model routing。二者通過 RPC 橋接,不是把 pi 再包裝成另一種 DSH 工具。
核心功能¶
下列能力均來自插件 README 的「What works」說明,安裝後可按同一套行爲預期使用。
流式輸出與工具卡片¶
pi 的 RPC 事件會被轉換成 DSH 的 durable session 事件,以及 agent/assistant-stream 幀。流式文本、工具卡片展示、停止按鈕在 DSH 側重放,用戶體驗與原生循環接近。
斷點續聊(Resume)¶
每次 create/resume 時,插件會從 DSH 的 event log 重建 pi 的 session 文件。Harness 重啓後,pi 側上下文仍能接上完整對話。
模型選擇器¶
插件調用 pi --mode rpc get_available_models,把 pi 的模型目錄註冊進 DSH 的 LLM registry。選擇器列出的是 pi 實際能跑的模型;選中後通過 set_model 轉發給 pi。
中途轉向與排隊跟進(Steering / Follow-ups)¶
運行中的 steer 會轉發給 pi,接受後即 claim。排隊的 follow-up 按順序作爲獨立 turn 執行。
交還內置循環(Hand-back)¶
由 pi 驅動的會話仍可被內置 dsh-agent-loop resume:每個請求按 DSH 標準事件詞彙記錄,包含聲明 registry 工具模式的 request/header,便於從 pi 切回原生循環。
安裝與啓用¶
環境要求¶
- DSH:
0.2.2-rc.1或兼容版本(package.json中engines.dsh爲^0.2.2-rc.1)。 pi可執行文件在PATH上,或在配置裏顯式指定piPath。
從 GitHub 安裝¶
在已配置好 DSH CLI 的機器上執行:
dsh plugin --profile web add github:Komorebi-Nine/dsh-inline-pi-agent
bundle 層會禁用 agent-loop、DSH 側的 compaction 與 tool-result pruning,並插入 pi-agent 行。之後重啓 dsh web,或依賴 profile 的 patch 熱加載(官方文檔建議以重啓爲準,見下文「回滾」)。
本地目錄安裝¶
若你已有插件源碼目錄(無需在本文中 git clone),可用 link 方式掛載:
dsh plugin --profile web add link:/absolute/path/to/dsh-inline-pi-agent
配置項¶
在 profile patch 裏覆蓋 pi-agent 的 config 即可。常用字段如下(默認值以 README 爲準):
| key | default | 含義 |
|---|---|---|
piPath |
pi |
pi 可執行路徑;Windows 可爲 .cmd/.exe 或通過 cmd.exe 解析的名稱。 |
model |
空 | 初始推送給 pi 的路由,例如 deepseek/deepseek-flash。 |
models |
空 | DSH 路由名 → pi 路由名的映射(兩套目錄命名不一致時用)。 |
catalog |
true |
是否把 pi 模型目錄註冊進 DSH,供選擇器使用。 |
requestHeader |
true |
是否記錄每步的 request/header 與 request/context(token 統計與交還內置循環需要)。 |
streamPaceMs |
16 |
流式文本揭示節拍(8–200 ms)。 |
streamCatchUpFrames |
6 |
積壓文本應在多少 tick 內追平。 |
streamMaxCharsPerFrame |
64 |
單幀最多揭示字符數。 |
piSessionDir |
~/.dsh/pi-sessions |
重建的 pi session 快照寫入目錄。 |
debug |
false |
協議與生命週期診斷日誌。 |
Windows 上指定 pi 的示例:
- id: pi-agent
config:
piPath: 'C:/Users/me/.pi/agent/bin/pi.cmd'
若曾把部署默認模型改成 pi 路由,在停用 bundle 前應改回內置路由(pi 提供方僅在 bundle 加載時存在):
- id: agent-default-model
config: { provider: deepseek-official, model: deepseek-flash }
典型用法與開發自測¶
日常使用時:安裝並重啓 dsh web 後,在 Web profile 下新建或恢復會話,即走 pi RPC 循環;模型列表來自 pi 目錄;需要中途改方向時使用 DSH 提供的 steer / follow-up 能力(由插件轉發)。
插件倉庫提供獨立 smoke 腳本(不依賴 DSH 服務進程),用於驗證文本、工具、多輪、中止、dispose、resume、steer、followup、token 統計與模型目錄等路徑:
node scripts/smoke.mjs text
node scripts/smoke.mjs tool
node scripts/smoke.mjs resume
接口與事件契約見倉庫內 CONTRACT.md。
適用場景與限制¶
適合誰¶
- 已經在用 pi,希望會話、UI、預設仍落在 DSH 裏。
- 需要 pi 的模型路由與工具棧,但又想利用 DSH 的事件日誌與 resume 語義。
- 偶爾要把會話從 pi 交還給內置
dsh-agent-loop(依賴requestHeader等記錄)。
務必注意¶
- 權限與沙箱:pi 執行自己的工具,DSH 的沙箱、審批流與 permission preset 不作用於 pi 的工具調用。
- Hooks:插件不分發
agent/pre-step;依賴該鉤子的能力(時間上下文注入、逐步 flush、plan-mode 旁白等)在 pi 會話中不會運行。 - 上下文統計:
contextBreakdown.toolsTokens描述的是 DSH 工具 registry,而非 pi 的工具塊;上下文壓力以提供方上報的 usage 爲準。 - 安裝前審查:插件以當前
dsh進程權限運行。安裝前應閱讀源碼與 MIT 許可證,確認符合你的安全與合規要求;社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
回滾¶
在 Settings → Plugins 中禁用 bundle,或移除包;agent-loop 會恢復,已有會話在磁盤上不受影響。切換啓用狀態後應重啓 dsh web:運行中的 loader 無法原子替換 agent factory,半加載狀態可能導致會話列表爲空(數據仍在磁盤上)。
結尾¶
dsh-inline-pi-agent 把 DSH 的會話與界面層和 pi 的執行循環拆開又接上:保留 pi 的 prompt、工具與路由,同時保留 DSH 的流式展示、resume 與模型選擇器集成。需要原生 DSH 沙箱與 agent/pre-step 鉤子時,應繼續使用內置循環或停用本 bundle。