前言¶
在 DeepSeek Harness(DSH)裏跑長會話時,上下文壓縮會把大量工具輸出收成一段摘要。壓縮後端(例如 dsh-context-zip、dsh-minimal-context)負責何時壓、怎麼寫摘要;開發者真正難的是事後:路徑、錯誤碼、提交號是否還在摘要裏、能否按事件序號回到原文。單靠 ROUGE 一類相似度並不能回答「這條任務還能不能繼續做」。
下面介紹社區工作流插件 dsh-summary-index(維護者 TLNing260310)。它在不註冊 ctx.compaction、不替換任何壓縮後端的前提下,監聽已提交的 compaction/summary 事件,建結構化索引,用確定性規則守衛錨點,並提供只讀召回工具。項目自述爲 AI 輔助完成的 alpha/demo,許可證 MIT,當前包版本 0.1.1;開發驗證使用 DSH API 0.2.1-rc.2 與 Node 24.21.0,peer 覆蓋 DSH 0.1.5 至 0.2.x。
這是什麼¶
dsh-summary-index 是宿主側 DSH 插件:inject: ['tools'],只增加 observer 與 sumidx_* 工具,不註冊裸的 search / read,也不插入 agent preset 的 compaction 行。
它做四件事:觀察標準 compaction/summary;從被遮蔽的原始事件中確定性提取 P0 字面量並生成帶事件號指針的存根;用守衛與探針檢查五段式、Anchors 覆蓋、指針可達性與原文可讀性;在下次 agent/pre-step 注入緊湊索引卡或隔離告警卡,並暴露 sumidx_search / sumidx_read / sumidx_probe。
索引數據落在 append-only JSONL,默認根目錄爲 DSH_HOME/dsh-summary-index/v1。
與壓縮後端的關係¶
DSH 的 compaction/summary 是已提交事件;session/event 只能觀察,不能回滾或改寫這次壓縮。因此本插件在錨點缺失時不會假裝壓縮沒發生,而是把存根 quarantine(拒絕進入可信索引),保留診斷,並在 pre-step 注入告警與 salvage anchors,引導模型用 sumidx_read 回查原始事件。
若要在提交前讓壓縮失敗,需要替換或包裝壓縮後端,那已超出本插件「非接管式」的設計邊界。
核心功能¶
五段式與錨點守衛¶
插件解析摘要中的五段(支持中英文標題):目標與意圖、關鍵決策、當前狀態、下一步、Anchors。代碼會從原始事件中規則提取高信號字面量,例如 UUID、URL、路徑、錯誤碼(ENOENT、HTTP 500 等)、環境變量鍵、版本號等。每個錨點攜帶 sourceSeq(DSH 原生 session event 序號),不依賴其他壓縮插件的私有段號。
探針而非相似度¶
不計算 ROUGE/BLEU。壓縮後運行確定性探針:pointer、index-search、event-read、source-range、replacement-pointer。sumidx_probe action=questions 可生成 recall 問題包,供 harness 或人工評估,不會自動調模型。
准入模式 guardMode¶
| 模式 | 行爲 |
|---|---|
enforce(默認) |
五段完整;P0 字面量須在 Anchors 段;指針可解析;源掃描未截斷 |
compat |
五段缺失僅警告;P0 可在摘要任意位置;缺字面量、斷指針、源截斷仍隔離 |
observe |
只診斷,全部 admitted;不適合高可靠自動化 |
過小分片默認不建索引:summarizeMinChars 512、summarizeMinNodes 2,這是索引准入閾值,不是壓縮觸發條件。
只讀工具¶
sumidx_search:在當前會話摘要索引中詞法檢索。sumidx_read:讀條目、在條目內搜索、或按允許範圍內的seq讀事件(不重新執行工具)。sumidx_probe:status/run/questions。
安裝與啓用¶
包聲明 dsh.bundle.patch,dsh plugin add 會把包加入 dsh.profile.bundles 並應用 cordis.patch.yml,一般無需手改 agent preset。README 說明 npmjs 首次發佈尚待維護者配置;當前優先可用 GitHub Release 或 GitHub spec。
方式 B:GitHub Release tarball
dsh plugin --profile <profile> add `
https://github.com/TLNing260310/dsh-summary-index/releases/download/v0.1.1/dsh-summary-index-0.1.1.tgz
方式 C:GitHub 倉庫 spec
dsh plugin --profile <profile> add github:TLNing260310/dsh-summary-index
npm 發佈後可用:
dsh plugin --profile <profile> add dsh-summary-index
安裝後重啓 DSH 會話;運行中的舊會話不會追溯注入,新裝可通過配置項 backfillLimit(默認 8)回填最近壓縮。驗證與卸載示例:
dsh --profile <profile> --dump-config
dsh plugin --profile <profile> update dsh-summary-index
dsh plugin --profile <profile> remove dsh-summary-index
Node 引擎要求 >=22.19.0(見 package.json)。
配置示例¶
在 profile 中插入 bundle 時可按需覆蓋默認值,例如:
- insert:
- id: summary-index
name: 'dsh-summary-index'
config:
enabled: true
guardMode: enforce
inject: true
summarizeMinChars: 512
summarizeMinNodes: 2
injectMaxChars: 1800
probeLimit: 24
inject: false 時關閉 pre-step 索引卡,僅保留工具化召回。完整配置鍵見倉庫 README 配置表(含 indexRoot、maxReadChars 等)。
典型用法¶
壓縮發生後,在 agent 中通過工具召回信息。在錯誤碼場景下搜索索引:
sumidx_search query="ENOENT" status=all limit=8
需要讀某條索引對應的原始事件片段時(seq 須在條目 shadowedSeqs 或 summarySeq 內):
sumidx_read action=event entry_id="sumidx:<id>" seq=42 offset=0 limit=12000
檢查條目與探針狀態,或重新跑探針:
sumidx_probe action=status
sumidx_probe action=run entry_id="sumidx:<id>" limit=24
被隔離條目仍寫在審計存儲中,可用 sumidx_search status=all 或 sumidx_probe action=status 查看原因碼(如 anchor-not-in-anchors-section、probe-failed 等)。
適用場景與注意¶
適合誰: 已使用 DSH 標準 compaction/summary、希望摘要可尋址、希望在壓縮後仍能用確定性規則檢查 P0 字面量是否被保留的工作流開發者;可與 dsh-context-zip 等只產出標準 summary 事件的後端共存。
務必知曉:
- 插件以當前 DSH 進程權限運行,會讀寫
DSH_HOME下 JSONL;安裝前請閱讀源碼與 MIT 許可證,勿把本項目當作唯一的數據完整性保障。 - 自述爲 alpha/demo,可能存在 DSH 版本兼容與邊界行爲;Issue/PR 歡迎到 GitHub 倉庫。
sumidx_read action=event讀取會話已記錄事件,可能含敏感內容;索引 snippet 會對明顯 token/JWT 等做[REDACTED],但仍應在可信會話中使用。- 進程重啓後若 raw session 未加載,事件讀取可能不可用,索引中的 seq 仍作爲指針保留。
- 社區目錄 SkillHub 插件頁 與 DeepSeek / 幻方無官方從屬關係;DSH 生態是「一切皆插件」的獨立社區實踐。
結尾¶
dsh-summary-index 在壓縮鏈路旁加一層結構化索引與確定性守衛:不搶 compression 服務,用 sumidx_* 只讀工具與 pre-step 索引卡幫助模型在摘要之後仍能找回路徑、錯誤碼和事件序號。細節與審計說明見 GitHub 倉庫 與 README;目錄入口見 SkillHub。