- Genkit 的中間件可讓您使用模型鉤子、工具和通用流程來攔截和修改 AI 生成週期。
- 它包含自動重試、模型間回退、檔案控制和人工工具審核等原生功能。
- 它與 TypeScript、Go 和 Dart 相容,可以輕鬆創建多層安全性和可觀測性,而無需更改業務邏輯。
如果你開發過人工智慧應用,你就會知道,寫完美的提示並非全部。從原型到實際生產環境,你會遇到各種障礙,例如 API 逾時、配額限制,或需要手動驗證關鍵操作。這時,Genkit Middleware就派上用場了。 Genkit Middleware 是Google推出的解決方案,旨在讓開發者無需重寫所有代理程式碼即可添加多層控制。
基本上,我們指的是在生成呼叫周圍放置攔截器系統,而不是包裝每個函數。 generate() 在手動控制模組中,您可以定義請求必須經歷的一系列步驟。這使得您的代理架構可以… 更簡潔、更模組化將應用程式邏輯與系統安全、可觀測性和彈性等橫切關注點分開。
攔截系統究竟是如何運作的?

為了更好地理解這一點,可以考慮 Genkit 中請求的生命週期。通常,模型會產生回應,決定是否需要使用某個工具,執行該工具,然後重新處理結果。 Genkit 的中間件並非只是一個瓶頸;它提供了三個不同的錨點,可以介入這個過程:
- 生成鉤子: 它每個世代周期只運行一次。它是理想的站點,用於… 向系統注入指令 或在訊息發送前進行修改。
- 模特兒鉤子: 它封裝了對模型 API 的直接呼叫。這對於管理至關重要。 自動重試實現快取或記錄 LLM 的回應時間。
- 鉤形工具: 它的作用就像工具即將運作一樣。它非常適合用於創建 審核系統 代理人刪除文件或付款前,必須經過手動批准。
這種結構類似於 Express 或 Koa 等框架中的中間件,其工作原理如同洋蔥:請求從外層進入,到達中心(模型),然後再次退出,以相反的順序遍歷各層。最棒的是,您可以將多個中間件堆疊在一個陣列中,從而定義精確的執行順序。
預裝中間件目錄

為了避免重複發明輪子,我們採用了這種包裝方式。 @genkit-ai/middleware 它已經預先安裝了幾個現成的工具。其中一個最有用的工具是… 重試它使用帶有抖動的指數回退演算法。這可以防止我們在出現瞬態錯誤(例如)時導致 API 過載。 RESOURCE_EXHAUSTED o UNAVAILABLE提交申請 更堅固耐用 以應對瞬時故障。
如果主機型的配額用完,備用中間件就能派上用場。它允許您配置一個備用模型列表,這樣,如果主模型出現故障,請求會自動路由到容量更小或成本更低的模型,從而避免最終用戶看到錯誤訊息。這對於在高需求環境中維持服務連續性至關重要。
關於安全性,我們有中間件 工具審批系統會建立一個安全工具白名單;任何不在名單上的動作都會觸發錯誤。 ToolInterruptError強制系統暫停,直到有人確認操作。中間件加劇了這種情況。 文件系統這使得模型能夠存取本地文件,但 嚴格限制 限製到根目錄,以防止人工智慧窺探不應窺探的地方。

最後,我們還有以下功能: 技能此中間件掃描資料夾中的檔案。 SKILL.md 並將它們注入到系統提示字元中。這是一種非常優雅的代理知識管理方式,使其能夠… 上傳特定技能 按需提供,無需在主提示中填充不必要的文字。
建立自訂中間件

當原生選項不足時,Genkit 允許我們使用函數來建立自己的攔截器。 generateMiddleware該工具允許我們使用 Zod 定義配置方案,確保我們傳遞的參數是 正確且已輸入我們可以創建從記錄每次出入的簡單日誌記錄器到用於寫入敏感資料 (PII) 的複雜系統等各種東西。
一個非常強大的用例是實現內容過濾。您可以建立一個模型鉤子來分析回應,如果偵測到停用字詞或內部定價數據,則在回應到達使用者之前將其封鎖或清理。此外,還可以透過在生成鉤子中查詢資料庫來管理每個使用者的配額,然後再允許呼叫繼續進行。
實現方式與生態系之間的差異

雖然概念是通用的,但根據程式語言的不同,細節也會有所差異。在 TypeScript 中,系統非常動態,允許在檔案中定義中間件。 .prompt 通過領域 use在 Go 語言中,實作方式更加嚴格,因為它是一種編譯型語言,這需要創建… 中介軟體註冊 能夠在運行時將文字名稱轉換為函數物件。
需要注意的是,不要將 Genkit 與 Google 的代理開發工具包 (ADK) 混淆。 ADK 專為建立在 GCP 基礎架構上的複雜且資源密集的多代理系統而設計,而 Genkit 則是為現有應用程式(Web、行動應用程式等)添加代理功能的理想選擇。此外,您可以透過Genkit 開發者 UI監控整個中間件流程,從而精確追蹤是哪個鉤子修改了請求以及請求到達最終結果所經過的路徑。
該系統的出現將生成功能轉變為一個真正可組合的流程。透過將錯誤處理、文件安全和人工驗證整合到一個獨立的層中,代理開發變得更加專業化,並且在生產環境中發生災難性錯誤的可能性也大大降低。