dsh 系統提示詞(system prompt)詳解

DeepSeek Harness 在每輪模型呼叫前往系統提示詞裡組裝了什麼——固定身分、人格槽位、工具指引,以及改寫它們的外掛。

最近更新: 2026-10-04

每一輪對話開始前,模型都會先讀到一段系統提示詞。在 DeepSeek Harness(dsh)裡,這段文字不是手工維護的檔案,而是由官方 system-prompt 套件(packages/core/system-prompt)在每次請求時即時組裝:固定的身分行、你的部署人格(persona)、第一方工具指引,以及所有外掛註冊的 prompt 段落,按順序合併成一條系統訊息。

本頁講清楚這次組裝裡有什麼、誰能改它,以及三類熱門提示詞外掛——persona 編輯器、prompt armor、思考語言注入——分別怎麼接入。提示詞送出去之後發生的事,請讀 agent loop 指南;本頁只談這段文字本身。

TL;DR

  • ▸系統提示詞是逐輪組裝的,不是存好的檔案:system-prompt 套件把註冊的段落按 order 排序,用 renderPrompt 渲染成最終文字。
  • ▸固定部分只有一行——「You are an AI agent powered by DeepSeek Harness.」,由 includeHarnessIdentity 設定控制(預設開啟)。
  • ▸不改程式也能加內容:personaPrefix 與 personaSuffix 兩個設定欄位,或者一個設定頁裡的 persona 外掛。
  • ▸外掛透過 ctx.systemPrompt.section(...) 注入;標記為 complete 的段落會整段接管該作用域的系統提示詞。

dsh 系統提示詞從哪來

官方子系統文件把契約寫得非常精確:system-prompt 套件擁有「prompt 貢獻方與一次組裝呼叫之間交換的資料」。貢獻方註冊 PromptSection——每段都有唯一的 name、一個數字 order,以及靜態或按次解析的 text。段落按 order 升序拼接(同序按名字排),合併結果就是模型收到的系統訊息。

三個術語撐起整個設計:

PromptSection

一段被貢獻的內容:name、order、text(靜態或按組裝解析的函式),可選 undefined} 插值。重名註冊直接拋錯。

Assembly(組裝)

一次 assemble() 呼叫:合併全域層與請求作用域層,解析工具 schema 與變數,再跑 system-prompt/assemble 瀑布。

Surface node 0

渲染後的文字作為「衍生歷史的系統訊息」提交——首輪作為 surface 節點 0 附加,文字變化時就地替換。它不是請求欄位。

模型實際收到什麼:按順序

第一方預設全開時,渲染結果遵循固定順序——從 −1000 的身分行到 10200 的人格後綴,下面每個槽位都真實存在,與套件 README 記載的渲染順序一致:

  1. 1

    固定身分行

    order −1000 · includeHarnessIdentity

    「You are an AI agent powered by DeepSeek Harness.」——唯一的硬編碼句子,排在最前。includeHarnessIdentity: false 可去掉它,官方只建議完全接管提示詞的部署這麼做。

  2. 2

    部署人格前綴

    order 0 · deployment:persona-prefix

    你的 personaPrefix 設定,或 persona 外掛的貢獻。README 註明這個槽位承載模型名介紹。預設為空。

  3. 3

    第一方通用指引

    first-party guidance

    生成的工具 SDK 與結構化輸出指引:告訴模型怎麼呼叫已掛載的能力。註冊的工具 schema 也在同一次組裝中隨行。

  4. 4

    Harness source 行

    order 10000 · harness source

    帶環境資訊的後綴從 order 10000 的 harness source 條目開始。

  5. 5

    Web surface

    order 10100 · Web surface

    部署暴露的本機 Web URL,在 order 10100 處隨後渲染。

  6. 6

    部署人格後綴

    order 10200 · deployment:persona-suffix

    你的 personaSuffix 設定——order 10200,整份提示詞的最後一句話。

  7. ↻

    動態執行時上下文

    獨立通道
    PromptContext → user-role snapshot

    有序的 PromptContext 不進入系統文字:它們作為帶來源的 user-role 快照進入模型歷史——另一條對快取更友善的通道。includeRuntimeContext: false 或作用域級 suppressor 可整體移除。

部署註冊的其它內容落在它宣告的 order 上——外部貢獻可用任意有限整數。還有一個逃生艙:標記 complete: true 的段落會成為唯一的提示詞段落——組裝仍然解析工具與變數,然後以這段原文作為全部系統提示詞;若有兩個生效的 complete 段落,組裝會大聲失敗,而不是送出殘缺提示詞。

誰能改它:三類外掛

幾乎沒人手改 YAML——社群透過外掛改提示詞。本站目錄在此叢收錄了 40+ 支外掛,按實際用途分三類(星標 2026-10-04 核驗):

Persona 編輯器

xilin3/dsh-prompt-persona(★14)在設定頁直接編輯部署人格並即時預覽——不寫程式填兩個人格槽位的方式。同樣的槽位用原生 personaPrefix / personaSuffix 設定也能改。

Prompt armor(提示詞護甲)

minglink/dsh-infinite-gen-4(★2,294,本叢星標最高)是最知名的 armor 類條目:它加固已部署的提示詞、抵抗探測與套取,而不是往裡加文字——做防護,不做注入。

注入與提示詞上下文

len7183/dsh-think-zh(★32)與 max-null/dsh-chinese-thinking(★10)注入思考語言指令(見下節);asktheway/dsh-auto-memory(★81)把長期記憶作為動態執行時上下文貢獻,而非提示詞文字。

如何開發 dsh 外掛.

中文思考這條差異軸

這個叢最早的需求來自中文使用者:即便對話用中文,模型的思考鏈預設仍是英文。官方討論 #8798 收集了這條訴求,兩個社群外掛從提示詞層給出答案——不用 fork,也不用換模型。

len7183/dsh-think-zh(★32)在設定裡加了思考語言檔位(簡體中文/預設英文),回覆語言跟隨提問語言,程式與識別子保持原文;max-null/dsh-chinese-thinking(★10)是更輕量的替代。兩者的原理都是往組裝好的提示詞裡注入一條指令——這正是人格槽位與外掛段落存在的意義。

成本帳:提示詞如何到達模型

README 對這筆帳算得很坦率:身分行開啟後是每請求的固定成本,人格前後綴與外掛文字隨每次請求重複,開銷隨渲染長度伸縮。對沖機制是快取,不是刪減:

  • ▸渲染結果不變時,提示詞保持前綴穩定:歷史中的系統節點原地不動,KV 快取逐輪複用。
  • ▸任何變化——改人格、換工具、調順序——都會從第一個變化的 token 起使快取失效。
  • ▸在同一請求系列的後續呼叫中宣告 systemPromptUpdate: 'in-history' 時,變化後的提示詞附加在快取歷史之後,前綴到歷史為止仍然可複用。
  • ▸上下文壓縮壓不掉這部分——壓縮作用於保留的歷史,不作用於逐輪組裝的提示詞。省的槓桿是少註冊,而不是更用力壓縮。

dsh agent loop 如何跑完一輪. 上下文壓縮是怎麼回事.

常見問題

關於 dsh 系統提示詞最常被問到的幾件事。

dsh 系統提示詞能改嗎?

能,三種方式,威力遞增。設定:在 system-prompt 外掛項上設 personaPrefix 與 personaSuffix(includeHarnessIdentity: false 可去掉身分行)。設定頁:dsh-prompt-persona 這類 persona 編輯器視覺化改同樣的槽位,不碰 YAML。程式:用 ctx.systemPrompt.section(undefined) 註冊段落——標記 complete: true 的段落會整段接管所在作用域,但兩個生效的 complete 段落會讓組裝直接失敗。

系統提示詞變長會拖慢會話嗎?

它多花 token,而快取能消化掉大部分。身分行加人格加外掛文字隨每個請求重複,但只要渲染結果不變,歷史中的系統節點就原地不動,服務商側 KV 快取在輪與輪之間持續複用。只有從第一個變化的 token 起才重新全額計價——所以每輪都在變的 persona 文字才是貴的模式,穩定的文字在首次請求之後幾乎免費。

外掛是怎麼注入進提示詞的?

透過註冊表。外掛呼叫 ctx.systemPrompt.section(undefined),段落就會在每次組裝時按 order 升序拼進結果。透過 agent 自己的 ctx 註冊的是作用域內條目:只對該 agent 遮蔽同名全域項。合併之後,system-prompt/assemble 瀑布還可以改寫結果——除非存在 complete 段落,監聽者不能增刪它。

不同 profile 看到的系統提示詞不一樣嗎?

可以不一樣。組裝把全域層與請求作用域層合併,作用域內的段落、變數與工具提供方按 agent 遮蔽同名全域項——同一個安裝裡,工作 profile 和個人 profile 註冊了不同 persona 段落,就會拿到不同的提示詞。固定身分行與第一方指引保持一致,除非某個 profile 明確關掉它們或自帶 complete 段落。

它是模型內建的系統提示詞嗎?

不是——這是兩層東西。模型廠商的行為調校在權重裡,dsh 看不見也改不了。dsh 系統提示詞是 harness 在執行時組裝、以系統訊息送出的文字;其中固定的只有一行身分句。正因為這層分離,同一個模型在 dsh 和別的 harness 下表現可以不同,提示詞層外掛也能在你掛載的任何模型上生效。

在哪裡能看到實際組裝出的提示詞?

下面兩個官方來源就是權威契約:子系統文件列出精確型別,套件 README 記載渲染順序與全部設定欄位。執行時,會話的 trajectory 記錄了每輪模型實際收到什麼——配合 loop 記錄的系統節點替換日誌,能精確看到提示詞在會話中哪一刻發生了變化。

相關指南

系統提示詞在整張原理圖裡的位置。

來源與證據

本頁每個機制都能追溯到下列來源;commit 與星標核驗於 2026-10-04。

DSH Plugins 是獨立的 DeepSeek Harness 外掛市集,與 DeepSeek 官方無關,也不代表官方背書。第三方外掛未經安全稽核,安裝前請審查原始碼。

每週取得最新的 DeepSeek Harness 外掛,絕不濫發。