dsh-gateway-billing:把自建網關的對話成本顯示在 DSH 輸入欄下方

前言

自建 New API / One API 兼容網關做 Agent 開發時,單次對話後面往往跟着一串模型調用,每個調用的輸入、輸出、緩存 token 都不一樣。想知道這一輪到底花了多少錢,要麼去網關後臺翻賬單,要麼自己手算。dsh-gateway-billing 解決的是後一個動作:它在 DSH Web 對話輸入欄下方,按當前對話實時彙總各模型調用產生的費用。

這是一個客戶端側的 DSH 插件,由 YaoleWu 維護,GitHub 倉庫目前星標爲 0,許可證 MIT,package.json 版本號 0.1.2。下面介紹它的安裝與啓用方式。

這是什麼

一個逐對話模型計費顯示 skill。從內部一個「網關計費」看板脫敏泛化而來,在 DSH Web 對話輸入欄下方實時顯示當前對話調用各模型產生的費用,適用於任何自建的、暴露 New API / One API 兼容 /pricing 接口的 LLM 網關。

核心功能

下面列出的每一項都來自倉庫 README:

  • 價格表拉取:從你配置的網關地址拉取 New API / One API 格式的價格表,每 10 分鐘自動刷新。
  • 雙計費模式:按 token 計價(quota_type=0)與固定單價(quota_type=1)兩種模式都支持。
  • 逐對話折算:遍歷當前對話的所有模型調用節點,按 usage(input/output/cache token)與價格表折算總費用。
  • Composer Dock 展示:一行顯示總費用、最近調用模型及次數、輸入/輸出/cache token;多模型對話自動展開分行。
  • 未配置/失敗態區分:未配置價格表地址與拉取失敗(如網絡錯誤)展示不同提示;未配置時不提供「點擊重試」,因爲重試解決不了沒配置的問題。
  • 未定價模型提示:價格表中找不到對應條目的模型調用單獨計數高亮,不會被靜默計爲 $0。

設計原則方面,README 寫明瞭三條:網關無關(不內置任何具體網關地址,價格表來源完全由使用者配置)、失敗可見、單次刷新多處消費(價格表在服務端每 10 分鐘刷新一次並緩存,composer dock 通過 RPC 讀取快照,不會爲每個對話重複拉取)。

安裝與啓用

README 提供了兩種方式。方式一通過 profile 安裝(推薦):

# 1. 克隆倉庫到本地
git clone https://github.com/LeslieWylie/dsh-gateway-billing.git ~/Desktop/01-Projects/dsh-gateway-billing

# 2. 在 profile 目錄添加依賴
cd ~/.dsh/profiles/<your-profile>

# 編輯 package.json,在 dependencies 中添加:
# "dsh-gateway-billing": "link:~/Desktop/01-Projects/dsh-gateway-billing"

# 3. 編輯 cordis.patch.yml,添加一行,並填入你自己網關的價格表地址:
# - id: gateway-billing
#   name: 'dsh-gateway-billing'
#   config:
#     pricingUrl: 'https://your-gateway.example.com/api/pricing'

# 4. 安裝依賴
pnpm install

# 5. 重啓 dsh 進程

需要說明的是,上面的 clone 命令照抄自 README,其 URL 指向 LeslieWylie/dsh-gateway-billing,而本插件的倉庫實際是 YaoleWu/dsh-gateway-billing。倉庫 owner 與 README 中的安裝路徑不一致,採用前請自行覈對。

方式二是一條命令,但 README 明確標註「待發布到 npm 後可用」:

dsh plugin add dsh-gateway-billing

也就是說,截至資料抓取時間,npm 安裝路徑尚未走通,profile 方式是當前可用的路徑。

所需配置

README 給出的配置項只有一個,寫入你自己 profile 的 cordis.patch.yml 中 gateway-billing 條目的 config 下:

配置項 說明 示例
pricingUrl 你的網關的價格表接口地址,需返回 New API / One API 格式的 {data: [{model_name, quota_type, model_ratio, completion_ratio, model_price}, ...]} https://your-gateway.example.com/api/pricing

不配置 pricingUrl 時,composer dock 會明確提示「未配置」,不會報錯,也不會顯示誤導性的計費數字。這是 README 強調的一個行爲點,和它區分未配置與拉取失敗兩種狀態的設計直接相關。

典型用法

啓用後不需要額外操作,插件掛在 Composer Dock 上。跑一輪多模型的對話(比如主模型負責推理,再調用一個較小的模型做總結),輸入欄下方會逐步彙總:

  • 這一輪的總費用;
  • 最近調用的模型及次數;
  • 輸入 / 輸出 / 緩存 token 的分項;
  • 價格表裏沒有條目的模型會被單獨高亮計數。

價格表每 10 分鐘在服務端刷新;改動網關側價格後,最遲一個刷新週期生效,不需要重啓進程。

適用場景與注意

適合自建 New API / One API 兼容網關、且網關暴露了 /pricing 接口的場景。插件不內置網關地址,價格表來源完全由使用者配置,所以任何只要滿足接口格式的網關都能接。

兩點提醒:

  • 這個插件以當前 dsh 進程的權限運行,安裝前應先檢查源碼與許可證(MIT)再啓用。
  • 價格表是折算的輸入,不參與實際扣費。扣費以網關賬單爲準,插件展示的數字用於快速判斷對話成本結構。

結尾

這個插件的價值在於把「這一輪對話花多少錢」從查賬單變成輸入欄下的一行:價格表來源你自己配,狀態區分清楚,價格表拉不到也不會顯示誤導性數字。目錄頁與源碼見 https://www.skillhub.cn/plugins/YaoleWu/dsh-gateway-billing 與 https://github.com/YaoleWu/dsh-gateway-billing 。

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

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

小夜