前言¶
在 DeepSeek Harness (DSH) 的開發中,ask_user_question 工具常用於向用戶發起交互。如果不對工具的描述做約束,模型在生成選項時容易產生視角漂移:同一個選項裏,標籤可能是“我”(用戶視角),而描述卻變成了“我”(AI視角),導致用戶無法判斷當前正在執行動作的是誰。
dsh-narrative-voice 插件通過在 prompt-assembly 階段重寫工具描述,強制 ask_user_question 中的問題、選項保持統一的敘述視角,解決這一問題。
這是什麼¶
這是一個 DSH bundle 插件,由 TellToday 維護。它會在 DSH 構建系統提示詞時介入,重寫 ask_user_question 工具的 questions.description 字段,植入固定的代詞規則。
插件支持兩種敘述模式,並通過 /voice 命令實時切換。它不依賴其他第三方庫,採用 MIT 許可證。
核心功能¶
-
視角重寫
插件在SystemPrompt.assemble()階段監聽system-prompt/assemble事件,找到ask_user_question工具,修改其參數描述。它只處理代詞出現的地方,不強制修改不需要代詞的內容。 -
雙模式支持
根據配置,支持兩種敘述方案:- Scheme A (
voice: "ai"):選項由 AI 敘述,內部使用“我”指代 AI,“你”指代用戶。 - Scheme B (
voice: "user"):選項由用戶敘述,內部使用“我”指代用戶,“你”指代 AI。這是默認模式。
- Scheme A (
-
運行時控制
通過/voice命令可以開啓、關閉或切換模式。該命令由宿主的commands服務處理,無需重啓進程即可生效。
安裝¶
安裝前需確保系統中 pnpm 和 git 已在 PATH 中。
dsh plugin --profile <profile> add "github:TellToday/dsh-narrative-voice#main"
安裝完成後,必須重啓 profile 的進程。對於 Web profile,請使用 dsh web 重啓。
典型用法¶
通過 /voice 命令控制插件行爲。命令列表如下:
| 命令 | 效果 |
|---|---|
/voice on |
啓用重寫(從下一條消息開始生效) |
/voice off |
禁用重寫(恢復原始工具描述) |
/voice user |
切換至 Scheme B(用戶敘述)並啓用 |
/voice ai |
切換至 Scheme A(AI 敘述)並啓用 |
/voice |
顯示當前狀態(開啓/關閉 + 激活的方案) |
配置與默認值¶
插件的默認配置在安裝時已激活,可通過 profile 的 patch 文件覆蓋。
| 配置項 | 默認值 | 含義 |
|---|---|---|
voice |
user |
使用的敘述方案:user 或 ai |
defaultActive |
true |
是否默認啓用 |
若要修改默認配置,需編輯 $DSH_HOME/profiles/<profile>/cordis.patch.yml,完整替換配置段:
- id: narrative-voice
config:
voice: user # user (方案B: 用戶敘述) | ai (方案A: AI敘述)
defaultActive: true # false = 默認禁用,需手動 /voice on
插件使用無依賴的 Standard Schema 實現進行配置校驗,無效配置會在加載時報錯。
適用場景與注意事項¶
- 適用場景:僅當你的應用大量使用
ask_user_question工具,且對交互視角的一致性有較高要求時適用。 - 作用範圍:插件僅影響
ask_user_question工具,不會干預其他工具或普通回覆。 - 依賴:插件本身無運行時依賴,但安裝和運行需要宿主環境具備
pnpm和git。
結語¶
dsh-narrative-voice 是一個解決大模型視角漂移問題的輕量級插件。通過在 prompt assembly 層面介入,它確保了交互中代詞的一致性。更多細節及源碼可參考:GitHub