dsh-ai-nav:給 DSH 側邊欄加一面 AI 導航牆

前言

給模型裝上工具鏈之後,一個常見損耗是鏈接質量。問”有沒有能做知識庫的”,模型多半憑記憶回一個域名,寫得有模有樣,點開是 404 或別人的站。瀏覽器書籤欄裏存着同一批 AI 站點,翻起來比問一次還慢。

naturalth2012/dsh-ai-nav 針對的是這個點:它維護一份經過驗證的 AI 站點目錄,把入口做成側邊欄裏的一整面瓷磚牆,同時把索引交給模型當工具用。下面介紹它的定位、頁面能力、給模型的工具、安裝與自檢方式。

這是什麼

naturalth2012 維護的 DSH 插件,安裝後在側邊欄多一個圖標,點開是索引頁:上方搜索框,下方八類共 95 個條目。目的寫得很直白——別再把同一批 AI 站點存在瀏覽器書籤欄裏翻。

它同時解決兩件事:一是給人一個分類入口,二是給模型一份真實 URL 的目錄,讓”查到的是能點的網址,不是憑記憶編的鏈接”。README 明確聲明這是”入口索引”,不是”服務承諾”:能不能打開取決於本機網絡,境外站點在中國大陸通常不可直連,這屬於網絡可達性問題,不是鏈接失效。

package.json 裏的定位是 dsh-ai-nav,version 爲 1.0.0,license 爲 MIT,author 爲 naturalth2012。

頁面提供什麼

README 用一張表列了頁面區域,這裏逐項說明。

搜索框邊打字邊給本地候選,名稱、別名、拼音縮寫、域名都能命中,回車走搜索引擎。候選項右側有”站內搜”,用該站點自己的搜索參數查詢;沒有查詢參數的站點只提供”打開”,搜索仍走選中的引擎。

“不知道用哪個”是場景化推薦:用一句話說需求(例如”給團隊搭個內部文檔問答的知識庫”),按場景推薦一套互補組合,每條寫清爲什麼。

置頂與最近訪問:鼠標移到瓷磚上出現星標,點一下置頂或取消;最近訪問自動記最近 8 個,重複點同一塊瓷磚只留一條。

分類瓷磚牆覆蓋八個類目:對話助手、AI 搜索與深研、知識庫與筆記、編程與 Agent、圖像與音視頻、辦公與文檔、模型與社區、學習與資料,共 95 個條目。

添加站點與導入書籤:手工加一條,或選瀏覽器導出的書籤 HTML(也支持拖進去),已知站點自動歸類。

站點圖標走宿主的同源代理 /plugins/ai-nav/favicon,頁面本身不直連第三方。圖標解析分三步,任一步成功即停:先試站點自身的常規地址(/favicon.ico、/apple-touch-icon.png、/favicon.png),再試根域名(chat.deepseek.com 回退到 deepseek.com),最後讀頁面 <head> 裏聲明的 <link rel="icon">。回包按首字節判定是不是圖片,因爲現代站點常用 application/octet-stream 返回圖標,缺圖標時又常返回 200 text/html,只看響應頭兩頭都會錯。結果按域名緩存 24 小時,無圖標的域名 20 分鐘內不重試;取不到就畫按域名取色的字母方塊。

給模型的工具

插件向宿主暴露六個工具,README 列的用途如下:

工具 用途
ai_nav_search 按關鍵詞、別名、域名查目錄,返回真實 URL、類目、標籤、是否可自部署
ai_nav_recommend 按一句需求推薦組合,可限定國內直連、只要可自部署、優先免費
ai_nav_browse 不帶關鍵詞地瀏覽類目與條目
ai_nav_sites 管理自定義站點與置頂(list / add / remove / pin)
ai_nav_import 導入書籤文件(給內容或本機路徑)
ai_nav_open 把一句話解析成該打開的地址:像網址就打開,命中目錄就開站點,否則去搜

目錄質量上的兩條規矩

README 把這兩條作爲目錄維護底線,寫在這裏因爲它決定了這套索引是否值得依賴。

  1. 每個 url 都是驗證過能打開的官方入口——導航站的鏈接 404 比少收錄更糟。
  2. 只有站點真的支持查詢參數時纔給 q 站內搜模板。猜一個模板會得到一個壞掉的結果頁,這正是老式導航站最煩人的毛病。

安裝與啓用

README 和 package.json 都沒有給出獨立的安裝命令(例如 dsh plugin add ... 形式),本文不拼接命令。需要先讀源碼確認行爲,再按宿主的方式加載插件。

插件的入口聲明在 package.json 的 dsh 字段:

"dsh": {
  "bundle": { "patch": "./cordis.patch.yml" },
  "client": {
    "platform": "web",
    "immediately": true,
    "inject": ["@deepseek-ai/dsh-client-ui-conversation"]
  }
}

bundle.patch 指向 ./cordis.patch.yml,是宿主半邊的補丁入口。配置項寫在這個文件裏:

- insert:
    - id: ai-nav
      name: 'dsh-ai-nav'
      config:
        engine: metaso      # 默認搜索引擎 id(metaso / baidu / bing / google / perplexity …)
        showSelfHost: true  # 是否顯示"可自部署"的條目
        favicons: true      # 是否啓用圖標代理(關掉就全用字母方塊)

頁面裏選的引擎會存進用戶數據,優先於這裏的默認值。

需要留意的是插件以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證。許可證爲 MIT,倉庫地址是 https://github.com/naturalth2012/dsh-ai-nav。

數據位置與寫入安全

自定義站點、置頂、最近訪問、引擎選擇存在 $DSH_PROFILE_DIR/ai-nav/data.json,回退到 $DSH_HOME/ai-nav,再回退到 ~/.dsh/ai-nav。寫入走”臨時文件 + rename”,壞文件按”沒有數據”處理,不會讓頁面打不開。

所有存儲的鏈接在寫入和讀出時都過一遍 safeUrl():只接受 http(s):,javascript:、data:、file: 一律拒絕。

離線自檢

node scripts/selfcheck.mjs

覆蓋 138 項純函數檢查(目錄完整性、別名詞彙、排序、URL 猜測、書籤解析、推薦、存儲 URL 閘門、圖標候選順序與首字節嗅探),不聯網、不開瀏覽器。改動 catalog.js 後值得跑一遍。

代碼結構

README 的文件表如下:

文件 內容
index.js 宿主半邊:目錄組裝、同源路由、六個工具、圖標代理的網絡部分
icon.js 圖標策略(純函數):候選順序、首字節嗅探、<link rel="icon"> 解析、緩存與併發閘門
catalog.js 八類目、十二個搜索引擎、全部內置條目(純數據)
search.js 歸一化、分詞、排序、URL 猜測、書籤解析、歸類
recommend.js 場景規則與推薦(長詞優先的特異性權重)
store.js 可寫狀態:自定義站點、置頂、最近、設置
client.js 瀏覽器半邊:sidebar.panellist 圖標 + main 面板
scripts/selfcheck.mjs 離線自檢

已知邊界

這些邊界直接來自 README,它寫得很具體,值得照錄。

目錄是人工維護的真實入口,不是抓取來的;站點改版後個別鏈接可能需要更新,改 catalog.js 即可。站內搜只覆蓋少數確實支持查詢參數的站點,其餘站點回車走搜索引擎。

推薦是規則引擎,不是模型調用:可解釋、可離線測試,但不會理解超出關鍵詞表的表達。推薦裏”同一類最多兩條”是降權而非過濾,第三名之後的同類條目按與首名的差距打折,所以”寫文檔、做 PPT、整理會議紀要”能給出 WPS AI、WorkBuddy、飛書、騰訊文檔、通義聽悟,而不是讓 17 分的對話助手擠掉 83 分的辦公工具。

圖標代理每個域名最多 4 秒、96 KiB,最多跟一次跳轉,並拒絕內網地址;併發取 5 個域名,同域名合併成一次請求。取不到就回退到字母方塊,能取到的比例取決於本機網絡,被牆的站點一律是方塊。

適用場景

適合兩類人。做 DSH 應用的人,需要一個分類清晰、鏈接經過驗證的 AI 站點索引,比自建書籤列表維護成本低,也給模型一份可靠的查詢對象。做模型交互的人,可以把”推薦組合”和”一句話打開地址”當成熟能力直接用,不必自己寫規則。

不適合當作訪問境外站點的手段:被牆的站點圖標和鏈接都會失敗,索引本身不解決網絡可達性。

結尾

dsh-ai-nav 的價值不在收錄數量,而在”每條鏈接都驗證過”和”給模型的是真實 URL”這兩點。如果已經在用 DSH 並且常用多個 AI 站點,值得裝一個試試。

目錄頁:https://www.skillhub.cn/plugins/naturalth2012/dsh-ai-nav
GitHub:https://github.com/naturalth2012/dsh-ai-nav

插件以當前 DSH 進程權限運行,安裝前請檢查源碼與 MIT 許可證。

羽毛球分组比赛记分
小程序二维码

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

小夜