前言¶
在 DeepSeek Harness (DSH) 的調試與測試流程中,模型生成的工具調用參數有時會包含無效的 JSON(例如未轉義的內部引號)。這類問題在流式傳輸路徑下可能被寬容處理,但在使用 vLLM 等嚴格服務器進行歷史記錄回放時,會觸發 400 錯誤,導致整個會話被“破壞”。本文介紹 dsh-tool-call-guard 插件,用於在傳輸前中和這些無效的工具調用,防止會話損壞。
插件簡介¶
dsh-tool-call-guard 是 DSH 的一個管理安全類插件,由 alchemistwu 維護。它攔截 DSH 的 llm/stream 水瀑布,對參數無法通過 JSON.parse 驗證的工具調用進行中和處理,確保會話的連續性。
- 插件名: dsh-tool-call-guard
- 維護者: alchemistwu
- 分類: admin-security
- 許可證: MIT
核心功能¶
- 攔截與中和: 攔截 DSH 的
llm/stream水瀑布,對無效 JSON 參數的工具調用進行中和。 - 純文本記錄: 將被中和的工具調用記錄爲純文本,保留原始內容,以便模型在上下文中重新發出修正後的調用。
- 協議平衡: 將匹配的工具結果重寫爲純用戶消息,避免出現孤立的
tool_calls或role:"tool"條目,防止因協議不平衡導致的後續請求失敗。 - 零開銷: 對於乾淨的歷史記錄,僅增加一次
JSON.parse操作,消息數組對象保持不變。 - 追加-僅日誌: 尊重 DSH 的追加-僅日誌機制,不重寫持久化的會話日誌,僅在傳輸層進行中和。
- 提供商無關: 基於
llm/stream接口,覆蓋所有適配器(DeepSeek、社區適配器等)。 - Fail-open: 如果 Guard 本身出錯,原始請求會通過,不影響正常流程。
- 零配置: 安裝即用。
安裝與啓用¶
使用官方安裝命令添加插件:
dsh plugin add dsh-tool-call-guard
安裝完成後,必須重啓 DSH 主機(dsh web 或 DSH Desktop)才能使插件生效。
典型場景¶
當模型發出類似以下格式的無效 JSON 參數時:
{"queries": [""The Idiots" trailer youtube official"]}
插件會執行以下操作:
1. 攔截該工具調用塊。
2. 將其轉換爲文本記錄,提示模型其參數無效。
3. 將對應的工具結果轉換爲用戶消息,保持對話協議平衡。
這使得會話能夠繼續運行,避免了因參數無效導致的 400 錯誤阻斷後續請求。
注意事項¶
- 重啓依賴: 插件安裝後必須重啓 DSH 主機才能生效。
- Fail-open 行爲: 插件設計爲 Fail-open,如果 Guard 內部邏輯出錯,原始請求會原樣通過,不會阻斷請求。
- 許可證: 代碼遵循 MIT 許可證。
總結¶
dsh-tool-call-guard 爲 DSH 提供了在傳輸層修復無效工具調用參數的能力,特別適用於需要與嚴格 OpenAI 兼容服務器(如 vLLM)交互的場景。它以零配置和 Fail-open 的特性,在不改變現有日誌結構的前提下,增加了會話的魯棒性。