前言¶
用 DeepSeek Harness(DSH)跑長會話時,上下文會不斷膨脹:推理模型在生成階段會產出大量 Wait、Hmm 等反思標記,這些內容寫入會話後,每次請求都會原樣帶上。若在出口對已發送歷史做小塊壓縮(例如官方 compaction-basic 的自動壓縮),往往會打斷前綴緩存,下一次從斷點起整段按未命中價重算,作者 README 裏把這類代價稱爲「斷點稅」。
下面介紹社區插件 dsh-entry-shaper(維護者 MaudieHakimi,GitHub 倉庫 MaudieHakimi/dsh-entry-shaper,SkillHub 分類爲「模型推理」)。它的思路是把塑形挪到入口:在會話元素首次出網前按類別跑 op 鏈定型,此後不再改寫已發送形態,從而儘量保持出網 payload 前綴單調。插件當前版本 1.0.6,狀態爲實驗性、默認關閉,要求 Node ≥ 20,MIT 許可,測試 94/94。
這是什麼¶
dsh-entry-shaper 是 DSH 的 payload 塑形插件:按 reasoning、toolResult、toolArgs、assistantText 等類別配置 op 鏈,在代理通道的 wire 層對尚未發送的內容做變換。它不干預模型生成中的推理過程,只改變之後進入上下文、再次出網時模型「看到自己曾經想過什麼」的形態。
README 強調:它不是消除所有斷點的萬能方案——官方自動壓縮、緩存 TTL、換 provider、改配置等仍可能打斷前綴;它保證的是自身不在已發送內容上再做有狀態改寫。默認策略主要塑形 reasoning 一類,其餘類別多爲 keep,省幅上限取決於推理在 payload 中的佔比(README 實測約 −21% ~ −47%)。
核心機制與能力¶
入口定型 vs 出口壓縮¶
生成結束後,內置策略(如 extract)可把長推理壓成較短決策句再出網;上下文裏後續請求攜帶的是定型後的文本,而不是完整的填充詞鏈。這與「生成時保留反思標記的增益、進入上下文後去掉其負擔」的設計目標一致——文獻與邊界說明見倉庫 README 與 docs/。
可插拔 op 鏈¶
插件提供純 op(keep、drop、extract、head、tail、truncate 等)以及三種外部接入方式,可在同一鏈上混用:
| 傳輸 | 含義 |
|---|---|
inline |
進程內算法,可熱改配置 |
exec |
子進程(python / node / 任意命令) |
http |
OpenAI 兼容端點的 LLM 壓摘要 |
外部調用統一 I/O:輸入信封含 text、kind、meta、op、protocol: 1;返回 { "text": "…" }、 { "text": null }(整塊刪除)或裸文本。單 op 失敗或超時則 fail-open(跳過該步,不阻斷會話)。非純 op 依賴內容哈希緩存以保持確定性;README 稱長會話緩存命中率約 98.4% ~ 99.6%。
代理與配置熱讀¶
配置放在 ~/.dsh-entry-shaper.config.json(不要寫進 cordis.patch.yml,否則市場熱掛載會受限)。開啓 proxy.enabled: true 後會惰性註冊路由(默認 provider 名 deepseek-shaped),將會話或默認 provider 指向該名即可。改配置按 mtime 熱讀,一般無需重啓;建空文件 ~/.dsh-entry-shaper.OFF 可立刻原樣轉發。
安裝與啓用¶
插件以 DSH 當前進程權限運行,安裝前請自行審閱 源碼與 LICENSE,勿憑名稱臆造安裝命令。README 給出的方式爲本地目錄安裝(路徑換成你本機位置):
dsh plugin --profile web add "file:D:\plugins\dsh-entry-shaper"
也可手動:複製目錄到 profile 的 node_modules,並在 profile 的 package.json 中同時加入 dependencies 與 dsh.profile.bundles,且 dsh.bundle.patch 仍指向本包 cordis.patch.yml。
掛載方式另有:SkillHub 市場頁熱開關(patch 爲純 insert 時無需重啓)、或在 cordis 上下文裏 ctx.plugin(module) 做實驗。注意 dsh plugin … add "file:…" 安裝的是物理副本而非符號鏈接,只改源碼目錄不會生效,需複製進 node_modules 或重新 add。
典型配置¶
先在用戶目錄創建或編輯 ~/.dsh-entry-shaper.config.json。README 示例(總開關、按類別的 op 鏈、緩存與代理)如下:
{
"enabled": true,
"shapeReasoning": true,
"policy": {
"reasoning": { "ops": [{ "op": "extract", "maxChars": 240 }] },
"toolResult": { "ops": [{ "op": "keep" }] },
"toolArgs": { "ops": [{ "op": "keep" }] },
"assistantText": { "ops": [{ "op": "keep" }] }
},
"cache": { "enabled": true, "path": "~/.dsh-entry-shaper.cache.jsonl", "maxBytes": 8388608 },
"proxy": { "enabled": true, "provider": "deepseek-shaped", "upstream": "deepseek-official" },
"opTimeoutMs": 8000,
"logPath": "~/.dsh-entry-shaper.log"
}
README 特別提醒:配置裏的路徑不會展開 ~,誤寫會在當前目錄下建名爲 ~ 的文件夾;建議省略路徑鍵使用默認絕對路徑,或寫完整絕對路徑。
常用推理策略片段(同 README「複製即用」):
// 默認思路:推理只留決策句
"reasoning": { "ops": [{ "op": "extract", "maxChars": 240 }] }
// 保守:保留真實開頭
"reasoning": { "ops": [{ "op": "head", "chars": 800 }] }
// 自定義進程內過濾(示例)
"reasoning": { "ops": [{ "op": "inline", "use": "code",
"code": "return text.split('\\n').filter(l => !/^(Let me|I will)\\b/.test(l)).join('\\n')" }] }
extract 的 marker 默認爲 false;若設爲 true 會加 [reasoning extract: …] 前綴,文檔標明該標記會污染模型上下文(見 docs/POLLUTION.md)。
適用場景與注意¶
適合誰:長會話、推理佔比高、希望在不頻繁改已發送歷史的前提下縮小出網 token;或願意用 exec / http / inline 接入自研塑形算法,複用插件的緩存、超時與 fail-open。
務必知曉的限制(均來自 README,非營銷承諾):
- 「更乾淨」≠ 已證明「更聰明」:插件未做去掉填充詞後的行爲對照實驗,只保證出網形態與生成過程分離。
- 內置
extract的已知偏差:決策句規則會保留大量Let me/I will類長填充,README 稱保留句中約 76.9% 仍爲自我敘述標記,詳見docs/FILLER-WORDS.md§5(候選修法尚未實施)。 - 會話日誌污染:實測日誌中可能出現塑形形態的推理塊,原文不保證保留;側路可用
node tools/original.mjs回溯當前輪原文(見docs/POLLUTION.md)。 - 改配置會改前綴形態:下一次請求可能整份全價重算(README 量級約 $0.2),宜一次定好策略。
- 與官方棧分工:官方已有 tool-result-pruner、compaction 等;啓用本插件前建議讀
docs/OFFICIAL-STACK.md,避免重複裁剪或預期衝突。
DSH 生態是「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-entry-shaper 把上下文壓縮從出口挪到入口:在 wire 層對首次出網的會話元素做確定性塑形,默認聚焦推理塊,並留出統一協議供自定義算法接入。若你在 Harness 上跑 R1 類推理模型且關心 payload 與前綴穩定,可在審閱源碼後按 README 安裝,從 enabled 與 policy.reasoning 小步試起。