前言¶
DeepSeek Harness (DSH) 在處理本地模型時,模型聲明的上下文窗口往往並不實用。隨着上下文長度增加,預填充速度會顯著下降,導致首字延遲大幅增加,甚至導致 GPU 在窗口完全填滿前掛起。一個 27B 模型可能在 100K 上下文前保持 300 tokens/s 的速度,一旦超過 100K,速度可能跌至 70 tokens/s,導致後續回覆需要數分鐘才能開始。
爲了解決這個問題,dsh-context-budget 插件通過測量預填充速度、設置硬上限並在超限時提前壓縮,幫助將本地模型的上下文保持在 GPU 能夠良好處理的範圍內。
核心功能¶
該插件負責在每次智能體步驟前,對受保護的提供程序路由進行檢查,確保上下文不會超出 GPU 的處理能力。
- 上下文控制:將本地模型上下文保持在 GPU 能夠良好處理的範圍內。
- 壓縮策略:當上下文達到模型聲明的上下文窗口的固定比例時,進行壓縮。
- 多維度檢查:
hardCeilingTokens:硬性上限檢查。maxTtftMs:測量首字延遲(Time to First Token),超過設定值則觸發。maxColdPrefillMs:預測冷預填充時間,即如果服務器緩存丟失,當前上下文預填充所需的時間。
- 動作執行:支持
warn(僅打印警告)或compact(執行壓縮)兩種動作。 - 監控命令:提供
/context-budget命令,用於查看當前值、歷史測量樣本及預測的冷預填充時間。
安裝與啓用¶
首先,使用官方提供的命令安裝插件。插件通過 DSH 的包管理器加載。
dsh plugin --profile web add dsh-context-budget
安裝完成後,需要編輯配置文件。配置文件路徑通常爲 ~/.dsh/profiles/web/cordis.patch.yml。在該文件中添加 context-budget 配置塊。
- id: context-budget
config:
providers:
llamacpp:
hardCeilingTokens: 110000 # 可選,硬性上下文 token 上限
maxTtftMs: 180000 # 可選,首字延遲上限,單位毫秒
maxColdPrefillMs: 600000 # 可選,冷預填充時間上限,單位毫秒
retainTokens: 24000 # 壓縮時保留的 token 數量(默認 16000)
action: warn # 動作:warn(默認)或 compact
配置完成後,重啓 dsh web 並打開新會話。可通過 dsh --profile web --dump-config 驗證配置是否生效。
典型用法¶
配置好插件後,插件會在後臺運行。當配置的檢查項被觸發時,會根據 action 設置打印日誌或執行壓縮。
若要查看當前的上下文狀態、歷史採樣數據和預測的冷預填充時間,可在會話中直接輸入命令:
/context-budget
輸出示例展示了當前上下文的 token 數量、各檢查項的觸發狀態、最近幾次預填充速率的採樣(包含冷/熱狀態)、預測的冷預填充耗時以及壓縮所需的時間估算。
適用場景與注意¶
該插件適合在本地運行大參數模型時使用,以避免上下文過長導致的性能急劇下降。
- 生態共存:插件與 DSH 自帶的
compaction-basic共存。如果會話的智能體預設沒有配置壓縮引擎,compact動作會退化爲warn。 - 測量範圍:壓縮摘要請求本身不計入測量。觀察到的慢速回復在上下文被重寫後會遺忘,因此一次壓縮不會觸發連鎖反應。
- 日誌輸出:只有在檢查項觸發時纔會打印日誌。如果會話始終在限制範圍內,終端將不會有任何輸出。
- 來源說明:該插件由社區維護,不屬於 DeepSeek 官方產品。源碼與目錄信息可參考下方鏈接。
總結¶
dsh-context-budget 提供了一種基於實際測量數據的上下文管理方案,通過軟硬結合的檢查機制,有效解決了本地模型在長上下文下的性能衰減問題。