dsh-decision-map:把會話執行軌跡畫成一眼能看懂的決策地圖

前言

用 DSH 跑智能體任務時,一個會話往往包含多輪推理、幾十次工具調用,事件日誌逐條排下來很長。內置的「軌跡」視圖是賬本式的,能查,但想快速回答「這一輪做了什麼、哪一步最慢、token 花在哪」並不直觀。DSH 的理念是一切皆插件,會話視圖本身也留了接縫。下面介紹的 dsh-decision-map,就是利用這個接縫做的一層可視化。

這是什麼

dsh-decision-map(決策地圖)是 Scitiger-AI 維護的 DeepSeek Harness bundle 插件,當前版本 0.1.0,MIT 許可證。一句話定位:把當前會話的執行軌跡渲染成一眼能看懂的時間線卡片與統計卡。

它是一個「雙面」插件:

1、node 半邊註冊一個 decisionMap 會話投影,把事件日誌摺疊成時間線和統計;

2、browser 半邊在會話視圖裏註冊一個「決策地圖」標籤頁,讀取投影並渲染。

包結構也很直接:

dsh-decision-map/
├── package.json          # 雙面包身份聲明dsh.bundle.patch + dsh.client
├── cordis.patch.yml      # bundle patchinsert 一行 { id: decision-map, name: dsh-decision-map }
├── lib/
   ├── index.js          # node half註冊 decisionMap 會話投影
   └── client.js         # browser half註冊 conversation.view 標籤頁
└── README.md

核心功能

卡片式時間線

安裝後,會話視圖(conversation.view slot,order 20)會多出一個「決策地圖」標籤頁。時間線上每個動作是一張卡片,分三類:

  • 💭 思考(琥珀色):該步產生了 reasoning
  • 🔧 工具(藍色):一次工具調用
  • ✍️ 寫文件(綠色):工具名恰爲 write / edit 的調用

輪次之間用「第 N 輪 · N 個動作 · 跨度 X」分隔。每張卡片標註類型、工具名、耗時、第N輪·第S步,下方縮進顯示詳情——思考顯示推理片段,工具顯示參數。

點擊任一卡片,右側展開一個詳情面板,顯示該動作的類型、耗時、時間與完整詳情,選中卡片有高亮描邊。與內置「軌跡」的區別在於:決策地圖把每一步做成帶圖標的卡片、按時間順序鋪開,每一步做了什麼、花了多久一眼能看清。

統計卡

時間線旁邊是一排統計卡:總 Token(含輸入/輸出拆分)、工具調用次數、輪次數、最耗時的步驟。

數據從哪來

node 半邊註冊 decisionMap 會話投影,摺疊這些事件:turn/startstep/startassistant/chunkassistant/messagetool/calltool/resultstep/end,結果是一個 timeline + stats 結構。口徑如下:

  • token 取 usageinputTokens + cacheReadTokens + cacheWriteTokens + outputTokens,只計入 adapter 上報了 usageassistant/message,未上報則爲 0;
  • 工具耗時按 callId 配對 tool/call → tool/result
  • 思考耗時是 TTFT 近似:該步首次 reasoning 到首個非 reasoning token 的時長,無輸出 token 的步思考節點耗時爲空。

browser 半邊註冊 conversation.view 標籤頁,通過 useProjection("decisionMap") 讀取投影。數據鏈路是:會話事件日誌 → 投影摺疊 → 經 api-proxy 的 tail page 與 session/projection push 幀送達瀏覽器 → 標籤頁渲染。

純前端實現,零依賴

渲染全部在前端完成:內聯樣式 + div,不引用任何外部庫、CDN、字體或圖片。配色使用 shell 自帶的 --dsw-static-* 靜態色與 --dsw-alias-* 主題別名,明暗主題自動適配。

整個包零運行時依賴、無構建、無 TypeScript,裝下來開箱即用。兩半都不創建進程級或頁面級副作用,可被 Cordis 的 stop/update/unload 乾淨回收。

安裝與啓用

先取包,再用 dsh plugin 把它裝進某個 profile。三種方式:

# 方式 A:在本包目錄內(package.json 所在目錄)用 `.`:
cd /path/to/dsh-decision-map
dsh plugin --profile web add .

# 方式 B:在本包目錄的父級目錄,用相對路徑:
dsh plugin --profile web add ./dsh-decision-map

# 方式 C:發佈到 npm 後按包名安裝:
dsh plugin --profile web add dsh-decision-map

兩個注意點:

1、dsh plugin add 會把相對路徑錨定到你執行命令時所在的目錄。別在包目錄內寫成 add ./decision-map——那會指向一個不存在的子目錄。

2、本包聲明瞭 dsh.bundle.patchdsh plugin add 會自動把它併入該 profile 的 dsh.profile.bundles 層棧,隨後 profile 組合器應用包內自帶的 cordis.patch.yml

- insert:
    - id: decision-map
      name: dsh-decision-map

也就是說,不需要手工編輯 profile 的 cordis.patch.yml

經過上面的步驟,重啓(或觸發配置熱重載)後,進入任意會話,標題欄的視圖標籤裏會出現「決策地圖」。

已知取捨

  • 投影值隨 tail page 全量攜帶:timeline 是完整動作列表,會話很長時投影值會變大。每個節點的 detail 已截斷至 120 字符,對常規會話可忽略。
  • 「寫文件」是啓發式分類:只把工具名恰爲 write / edit 的調用標爲綠色;bash 這類既能讀也能寫的工具歸入「工具」,不臆測是否落盤。
  • 思考耗時是 TTFT 近似,不是精確的推理牆鍾時間;無輸出 token 的步,思考節點耗時爲空。
  • token 是 provider 上報值,與核心的 token 記賬口徑一致,adapter 未上報 usage 則計爲 0。

適用場景與注意

適合需要覆盤智能體執行過程的開發者:確認多輪裏的動作順序、看每一步的耗時、檢查 token 消耗分佈。它只做展示,不改動會話數據。

提醒一點:插件以當前 dsh 進程權限運行,安裝前建議先讀源碼、確認許可證。本包的核心就是 lib/index.jslib/client.js 兩個文件,無構建、零運行時依賴,閱讀成本不高,許可證爲 MIT。

結尾

dsh-decision-map 做的事情很剋制:在會話視圖加一個標籤頁,把事件日誌折成時間線和統計卡,讓執行軌跡從「能查」變成「能看」。裝完即用,卸載乾淨,符合 DSH 一切皆插件的思路。

  • 插件目錄頁:https://www.skillhub.cn/plugins/Scitiger-AI/dsh-decision-map (社區維護的獨立目錄站點,與 DeepSeek / 幻方無官方從屬關係)
  • 源碼倉庫:https://github.com/Scitiger-AI/dsh-decision-map
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜