2024 年 10 月,我們討論了使用 AI Gateway 儲存來自 AI 應用程式的數十億條日誌,以及我們如何使用 Cloudflare 的開發者平台來實現此目的。
2024 年 10 月,我們介紹瞭如何使用 AI Gateway 儲存來自 AI 應用程式的數十億條日誌,以及如何使用 Cloudflare 的開發者平台來執行此操作。
AI Gateway 已處理超過 30 億筆日誌,且成長迅速,平台連線數持續穩定成長。為了幫助開發人員更有效地管理這種規模,我們希望提供一種替代方案來實現HTTP/2 keep-alive 來維持持久的HTTP(S) 連接,從而避免與AI Gateway 的每個新HTTP 連接重複握手和TLS 協商的開銷。我們知道實作 HTTP/2 可能會帶來挑戰,特別是當許多程式庫和工具預設可能不支援它並且大多數現代程式語言都有完善的 WebSocket 程式庫可用時。
考慮到這一點,我們使用 Cloudflare 的開發者平台和 Durable Objects(是的,再次!)來建立 WebSockets API,該 API 建立單一持久連接,從而實現持續通訊。
透過此 API,AI 網關支援的所有 AI 提供者都可以透過 WebSocket 進行訪問,從而允許您在客戶端或伺服器應用程式與 AI 網關之間維護單一 TCP 連線。最好的部分?即使您選擇的提供者不支援 WebSockets,我們也會為您處理,管理對您首選 AI 提供者的請求。
透過 WebSocket 連接到 AI Gateway,我們使用提供者支援的協定(HTTPS、WebSocket 等)為您向推理服務發出請求,您可以保持連線開啟以執行盡可能多的推理請求想要。
為了讓您與AI網關的連線更加安全,我們也引入了AI網關的身份驗證。新的 WebSockets API 將需要身份驗證。您所需要做的就是建立一個具有「AI Gateway: Run」權限的 Cloudflare API 令牌,並將其傳送到 cf-aig-authorization 標頭中。
在上面的流程圖:
1.當啟用身份驗證網關並包含有效令牌時,請求將成功通過。
2.如果啟用了驗證網關,但請求不包含具有有效令牌的所需 cf-aig-authorization 標頭,則請求將失敗。這可確保只有經過驗證的請求才能通過網關。
3.停用經過驗證的閘道時,將完全繞過 cf-aig-authorization 標頭,並且任何令牌(無論有效或無效)都會被忽略。
我們如何建構它
我們最近使用持久性物件 (DO) 來擴展 AI 網關的日誌記錄解決方案,因此在同一 DO 中使用 WebSocket 是很自然的選擇。
當我們的 Cloudflare Workers 收到新的 WebSocket 連線時,我們以兩種方式實作身份驗證,以支援 WebSocket 用戶端的不同功能。主要方法涉及透過 cf-aig-authorization 標頭驗證 Cloudflare API 令牌,確保令牌對於連接帳戶和網關有效。
但是,由於瀏覽器 WebSocket 實現的限制,我們也支援透過「sec-websocket-protocol」標頭進行驗證。瀏覽器 WebSocket 用戶端不允許在其標準 API 中使用自訂標頭,這使得在請求中新增身份驗證令牌變得複雜。雖然我們不建議您在瀏覽器中儲存 API 金鑰,但我們決定新增此方法,以便為所有 WebSocket 用戶端增加更多靈活性。
在這個初步驗證步驟之後,我們將連線升級到持久對象,這意味著它現在將處理該連線的所有訊息。在新連線被完全接受之前,我們會產生一個隨機的 UUID,因此該連線在持久性物件接收到的所有訊息中都是可識別的。在開放連線期間,透過標頭傳遞的任何 AI 閘道設定(例如 cf-aig-skip-cache(設定為 true 時繞過快取))都會被儲存並套用於會話中的所有請求。但是,這些標頭仍然可以根據每個請求進行覆蓋,就像今天的通用端點一樣。
如何運作
連線建立後,持久性物件開始偵聽傳入訊息。從現在起,使用者可以透過 WebSocket 以 AI Gateway 通用格式發送訊息,從而簡化應用程式從現有 HTTP 設定到基於 WebSockets 通訊的轉換。
當新訊息到達持久性物件時,它會使用支援 HTTP 通用端點的相同程式碼進行處理,從而實現跨 Workers 和持久物件的無縫程式碼重用 - 這是在 Cloudflare 上建置的主要優勢之一。
對於非串流請求,回應會封裝在 JSON 信封中,使我們能夠包含 AI 推理本身之外的其他信息,例如該請求的 AI 網關日誌 ID。
以下是上述請求的回應範例:
對於串流請求,AI Gateway 會發送一條帶有請求元資料的初始訊息,告訴開發人員流正在開始。
在此初始訊息之後,所有流塊在從推理提供者到達時都會即時中繼到 WebSocket 連線。請注意,這些流塊的元資料中僅包含 eventId 欄位(有關此新欄位的詳細資訊如下)。
這種方法有兩個目的:
以上是使用 WebSocket 和耐用物件進行大規模即時 AI 推理的詳細內容。更多資訊請關注PHP中文網其他相關文章!