前言¶
在 DSH 工作流中,人設通常寫在全局 ~/.dsh/AGENTS.md 裏,由 @deepseek-ai/dsh-agent-instructions 插件注入。該注入插件爲“全局 + 項目 AGENTS.md”共享 65536 字節的指令預算。其渲染規則是“按最寬泛 → 最具體排序,先整份丟掉最寬泛的”。如果人設恰好在最寬泛的那份裏,項目文件一旦變大,人設就是第一個被犧牲的。更麻煩的是,這個過程靜默發生,只會在注入塊頂部留一行 Workspace instruction budget …,不報錯。
現有的注入配置(如 maxBytes)沒有任何 pin 或 alwaysInclude 選項能保住某個文件。另一個直覺方案 personaPrefix 也會失效,因爲 dsh-system-prompt 的 assemble() 邏輯中,默認 agent preset(如 standard)已經註冊了同名的 deployment:persona-prefix section,新寫入的會被直接覆蓋。
dsh-persona-anchor 旨在解決這個問題:換一個沒人會註冊的 section 名,通過 systemPrompt.section() 通道直接注入,完全繞過 AGENTS.md 的 65536 字節預算。
這是什麼¶
這是一個 DSH host plugin(web profile),它將指定的「人設」文本釘進 system prompt section。
核心功能:
* 將人設文本釘進 system prompt section。
* 不消耗 AGENTS.md 的指令預算。
* 依賴:僅 Node.js 內置模塊。
安裝¶
安裝前請確認當前 DSH 進程支持 --profile web。
dsh plugin --profile web add github:harmless0819-dev/dsh-persona-anchor
配置¶
在 DSH 的插件配置文件中添加以下內容:
- id: dsh-persona-anchor
name: dsh-persona-anchor
config:
file: 'C:/Users/<you>/.dsh/persona.md' # 必填,人設文件的絕對路徑
onError: log # log(默認)| throw
配置項說明:
| 鍵 | 默認值 | 說明 |
|---|---|---|
file |
必填 | 人設文件絕對路徑 |
section |
deployment:persona-anchor |
section 名;建議保持默認,確保唯一性 |
maxBytes |
524288 (512 KiB) |
單次讀取上限,防止誤操作讀取過大文件 |
onError |
'log' |
讀文件失敗時的行爲:log 僅告警 / throw 觸發錯誤 |
order |
部署人設位 | section 排序位置 |
reloadMs |
0 |
若大於 0,則定時重讀文件 |
route |
true |
是否註冊狀態路由以報告錯誤 |
典型用法¶
- 在磁盤上創建人設文件,例如
~/.dsh/persona.md。 - 在插件配置中指定該文件的絕對路徑。
- 修改配置後,新開一個會話。
- 詢問 AI “你的名字/設定是什麼”。
- 若人設未生效,插件會註冊一個狀態路由報告
state.error,從中可以看到失敗原因(如文件不存在、過大或爲空)。
注意事項¶
- 自用性質:這是一個自用插件,已在本地跑通。
- 可選依賴:
webServer是可選依賴。代碼通過ctx.inject([...])延遲註冊,因此寫進頂層inject不會導致沒有 webServer 的 headless profile 加載失敗。 - 容錯機制:讀文件失敗默認不拋異常,只在日誌和狀態裏報告,避免一個人設文件打不開就把整個 profile 搞掛。
結尾¶
dsh-persona-anchor 提供了一條繞過 AGENTS.md 預算限制的路徑,適合需要確保人設文本在所有場景下都存在的開發者。更多詳情與源碼可參考:GitHub。