攜程旅游的 AI 網關落地實踐

原創 董藝荃 Higress 2025年08月21日 16:32 陜西

本文整理自攜程旅游研發總監董藝荃在2025中國可信云大會上的分享,董藝荃 GitHub ID CH3CHO,同時也是 Higress 的 Maintainer。分享內容分為以下4部分。

01 大規模應用 AI 技術過程中遇到了哪些問題

02 網關選型上有哪些考慮

03 落地 AI 網關時,有哪些難點和如何應對的

04 應用成效和未來規劃

1、大規模應用 AI 技術過程中遇到了哪些問題

為了進一步提升服務水平和服務質量,攜程很早就開始在人工智能大模型領域進行探索。而隨著工作的深入,大模型服務的應用領域不斷擴大,公司內部需要訪問大模型服務的應用也越來越多,不可避免的就遇到了下面這幾個問題。

  • 第一,我們不僅接入了外部的商業大模型,還有很多我們內部的自研模型,不同的模型對網絡訪問能力要求不同,在認證機制也存在差異。
  • 第二,各個業務應用點對點接入大模型,費用管理各自為政,沒有集中的用量統計。
  • 第三,在流量高峰,乃至大模型服務出現故障的時候,沒有統一的限流、熔斷、流量切換等機制,全靠業務線自己。

在這種場景下,我們自然就會想到使用網關來對這些服務接入進行統一管理,并增加各種切面上的流量治理功能。

2、網關選型上有哪些考慮

在對比多個開源項目之后,我們選擇了 Higress 作為搭建 AI 網關的基礎。

  • 第一,Higress 在阿里內部有著長時間的實踐和技術沉淀,在傳統 API 網關的基礎上迭代了 AI 網關的功能,對各種大模型接入場景提供了豐富的功能支持,而且穩定性良好。
  • 第二,Higress 使用了在云原生服務網格領域廣泛應用的 Istio和 Envoy 作為內核,并且支持使用 C++、Go 和 Rust 等語言編寫 Wasm插件,具有極強的擴展性,便于我們后續根據自身需求添加功能。
  • 第三,Higress 社區非常活躍,對于需求的跟進速度很快,一般兩到三周就會發布一個新版本。

在內部落地 Higress 作為 AI 網關基礎設施之后,我們整個 AI 服務接入架構就如下圖所示。網關的所有組件都部署在內部的 Kubernetes 集群內,由它來負責服務器資源和配置信息的管理。

其中,網關本身由 3 個組件組成:

  • Gateway,也就是數據面,直接承接用戶流量并轉發給后端的大模型服務。
  • Controller,也就是控制面,負責從 Kubernetes 中讀取配置信息并推送給 Gateway。
  • Management API,負責對接我們內部的大模型運營平臺,也就是圖中的攜程機器學習平臺。管理員會在平臺上面配置可供訪問的各種大模型服務,最近還接入了 MCP 服務,以及接入方的相關信息。API 會把這些配置信息寫入 Kubernetes 進行持久化保存,供 Controller 讀取。

在配置數據方面,Higress 本身使用的是 K8s 原生的一些資源類型,還有一些自定義的資源。這部分我們沒有做什么改動。但在對接機器學習平臺時,我們根據實際的業務需求,針對大模型接入和 MCP Server 接入兩種場景設計了獨立的領域模型,并對 Higress的 Management API 進行了二次開發,增加了模型轉換的功能,并且支持對所有的配置進行增量和全量兩種同步操作。

在大模型服務接入方面,考慮到風險隔離的需求,我們為不同的接入方(這里我們稱之為消費者),設置了不同的接入點路徑。每個接入點路徑可以關聯多個模型路由,使用模型名稱進行匹配。每一個模型路由也可以關聯多個后端的大模型服務,實現服務間的負載均衡。

在實際轉發請求給大模型服務時,網關還支持對模型名稱進行映射,也就是說用戶可以使用統一的模型別名發起調用,在轉發到不同的大模型服務時,根據服務的實際情況來更換為具體的模型名稱。

最近,我們又在網關上增加了 MCP 服務接入的能力。這部分更類似于傳統的 API 網關,將一個服務暴露到網關上以便外部進行訪問。

但除了支持現有的 MCP 服務之外,網關還支持將存量的 HTTP API 轉化為 MCP 服務。用戶可以使用 SSE 或者 Streamable HTTP 方式來訪問這類 MCP 服務。針對存量轉化這一部分,我們后面也會進一步展開介紹。

對于所有經過 AI 網關處理的請求,訪問方都需要提供訪問憑證來進行認證和鑒權操作。目前針對訪問方,我們主要使用的是 Bearer Token 的認證機制。每個 Token 會關聯一個消費者。一個消費者可以訪問哪些服務則是需要經過申請和審批的。

針對后端服務這一側,大部分大模型服務都是需要在訪問時進行鑒權操作的。這些訪問憑證統一存儲在了網關內,消費者一側無需關注。而在 MCP 服務這一邊,情況就要復雜一些。有的 MCP 服務并不需要認證,有的則是要求提供認證信息。網關層是支持服務提供方根據實際情況進行選擇的。如果需要認證,既可以把認證憑證統一放在網關內,也可以要求由調用方提供。網關也會根據配置來調整憑證信息的傳遞方式,以滿足端到端的認證需求。

當然這些都是正常的情況,下面我們要說的就是一些針對異常流量的處理機制。


首先是限流。

每一個消費者在申請大模型訪問的時候,都需要填入響應的限流閾值,這個閾值一種有三種,分別 Token per Minute (TPM)、Query per Minute (QPM) 和并發請求數。這不僅可以保護我們的網關和后端服務免收突發流量的干擾,也便于網關和服務的運維團隊進行容量規劃,同時也可以幫助用戶管控成本。


這些限流機制利用的都是 Higress 所提供的 Wasm 插件擴展點,內部使用 Redis 作為中央計數器,實現全局性的限流統計功能,并通過 LUA 腳本來實現計數器更新的原子化。

其次是降級。

但如果意外情況下,后端大模型服務出現故障,我們還可以預先配置相應的模型降級規則。當路由原本指向的大模型服務返回 4xx、5xx 等異常響應碼時,網關并不會直接把響應返回給調用方,而是會再次把請求轉發給降級用的大模型服務,并返回降級服務的響應數據。這個降級操作只會進行一次,而且考慮到降級服務支持的模型列表可能與原服務有所差異,我們可以針對降級服務配置獨立的模型名稱映射規則。

在下方的這張圖里的黑色的調用次數的對比圖中,我們就可以看到,當綠色線所對應的服務出現故障時,請求被自動切換到了黃色線所對應的服務上。之所以有這張圖,是因為網關本身也提供了強大的可觀測能力。


第三是日志和監控。

網關的請求日志是落在本地磁盤的,通過 logrotate 來進行滾轉,避免占用過多存儲空間。日志的內容是可以自行修改定制的,通過 Wasm 插件配合自定義的日志模版,我們將大模型請求的很多詳細信息都記錄到了日志里,比如說模型名稱、消耗的 Token 數、輸入和輸出的消息內容等等。這些都有助于我們后續對用戶的使用情況進行分析,并且幫助用戶優化自己的使用方式。

日志的采集就比較直接了,這部分也是復用的公司現有的監控鏈路,通過 FileBeat 將日志內容送到 Kafka,通過類似 LogStash 的組件消費 Kafka 獲取日志信息,解析重組之后寫入 ClickHouse,然后在 Kibana 上提供給大家查看。

監控這邊就更加直接了。網關本身就暴露了一個供 Prometheus 抓取的接口。抓取到的監控信息可以在內部的 Grafana 上進行查看。

網關整體的情況大概就是這樣。接下來是一些關鍵難點分享。當然在 Higress 的幫助之下,原本的難點也并沒有那么難。

3、落地 AI 網關的難點和應對方案

首先是適配各種大模型供應商的接口契約。目前請求大模型時最通用的就是 OpenAI 的接口協議,網關本身對外提供的服務也基于的是這套協議。但有一些大模型服務并不完全兼容這個協議,比如說有的是接口路徑不一樣,有的是認證方式不一樣。

這樣就需要網關在轉發數據時,對請求和響應的數據進行修改,對齊對端所支持的接口協議。好在 Higress 目前已經適配了市面上很多種大模型服務類型,我們基本上不需要做什么改動,就可以對接各種大模型服務,但在推廣 MCP 服務接入方面就沒有這么簡單了。

攜程內部現在有大量的 HTTP 服務,覆蓋了業務場景的方方面面。如果能夠直接利用起來,把它們變成 MCP 服務提供給 AI 使用,對于業務方接入整個 AI 體系是很有幫助的。

但眾所周知,如果要把一個接口作為工具放到 MCP Server 上,它是需要一個工具描述信息的,包括接口的名稱、參數列表等等。

而我們的 REST API 最多也就是這種使用 Swagger 生成的 OpenAPI 接口契約,所以這里的核心就是要把左面這種接口契約轉化為右側這種工具描述。

除了請求參數部分之外,我們還需要對后端接口的響應數據進行格式化,作為 MCP Server 的響應數據,便于大模型的理解。

這顯然是個重復性很強的工作。既然是重復性很強的工作,那肯定就可以讓 AI 來幫我們完成。

我們利用右側這個提示詞,將接口契約一同提供給大模型,大模型就可以生成出基本可用的描述信息。只需要人工校對并做少量的調整就可以使用了。

完成了協議轉換,我們就來到了下一個問題點。

雖然 SSE 這個傳輸方式已經被 MCP 官方廢棄,但仍舊有很多調用方希望網關能夠支持 SSE,而這種傳輸方式采用了請求與響應分離的設計,這就要求在網關層面提供一個會話管理的功能。

大致流程是這樣的:MCP Client 請求服務的 /SSE 接口,啟動一個新的會話。然后網關生成一個新的 SessionID,并且在 Redis 里監聽一個與這個 SessionID 所關聯的 Channel,然后把這個 MCP Server 對應的 Endpoint 信息返回給客戶端。這樣客戶端就可以向這個 Endpoint 發起后續的請求,比如說初始化監聽、獲取工具列表、調用工具等等。而這請求的響應數據并不會被直接返回給客戶端,而是要發布到前面監聽的那個 Redis Channel 中。通過這個 Channel 把信息傳遞給 /SSE 那個請求的上下文,然后推送給客戶端。

4、應用成效和未來規劃

關于網關落地的技術細節就介紹到這兒。

目前 AI 網關在攜程內部已經接入了多款大模型,具備穩定支撐大規模模型調用的能力,為公司的人工智能技術探索奠定了扎實的基礎。現在我們也在不斷的接入各種 MCP Server,豐富整個產品的生態體系。

各位可以看到,我們整個 AI 網關很多功能都是開源的 Higress 原生提供的,我們要做的更多是將它適配到攜程的研發體系中去,并對接周邊的治理平臺。通過我們的驗證,也發現了一些社區尚不支持的場景。這些我們也通過 Pull Request 的方式提交給了社區,并已經合并進了代碼庫中。相信隨著有越來越多的人使用開源產品,貢獻開源代碼,我們的社區也會越來越好。

正如這句話所說:每一次代碼回饋,都是開源生命力的延續。

接下來,我們也會繼續對網關的能力進行迭代,在模型路由規則、模型輸出后處理、調用方優先級識別和內容安全防護等方面進行優化,并將 AI 能力融入到網關內部,而不僅僅停留在作為由網關所承載的業務這一層面,并進一步強化網關的安全性和合規性,讓網關在整個 AI 流量鏈路上發揮更大的作用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94554.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94554.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CloudBase云開發MCP + CodeBuddy IDE:打造智能化全棧理財助手的完整實踐

CloudBase云開發MCP CodeBuddy IDE:打造智能化全棧理財助手的完整實踐 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵&#x…

ESP8266學習

一,連接Wifi1.Esp8266連接手機熱點ATATRST ATCWMODE1 ATCWJAP"ESP8266","123456789"手機查看連接信息2.Esp8266連接手機熱點進入透傳模式ATATRST ATCWMODE1 ATCWJAP"ESP8266","123456789"ATCIPMUX0 ATCIPSTART"TCP&qu…

Mac安裝mitmproxy及操作對監控的請求

在 macOS 上安裝和配置 mitmproxy 是一個相對簡單的過程,可以使用常見的包管理工具如 Homebrew 或直接通過 Python 的包管理工具 pip。以下是詳細的安裝步驟: 方法一:使用 Homebrew 安裝 Homebrew 是 macOS 上流行的包管理工具。它可以快速安…

c++ 數據結構-堆、優先隊列 小總結

之前學習了一些堆、優先隊列的知識點,在此做一個小總結。堆(Heap)堆(Heap)是一種特殊的完全二叉樹數據結構,具有以下重要特性:結構特性堆是一棵完全二叉樹,即除了最后一層外&#xf…

編寫Linux下usb設備驅動方法:probe函數中要進行的工作

一. 簡介 前一篇文章簡單學習了 Linux下usb設備驅動實現流程,文章如下: 編寫Linux下usb設備驅動方法:usb設備驅動實現流程-CSDN博客 本文來學習一下 usb設備驅動的 probe函數要完成的任務。 當usb主控制器檢測到設備與 驅動相匹配時&…

動態規劃:為什么暴力算法會有重復子問題

第一步:先明確 “子問題” 和 “重復子問題” 的定義 在算法中,“子問題” 不是泛指 “小一點的問題”,而是具有明確 “狀態參數” 的、可獨立求解的問題單元。 狀態參數:描述子問題核心信息的變量(比如 01 背包中的 “…

【網絡】添加路由時,via和dev參數作用、直連路由

文章目錄概述1、帶via1.1 添加路由前的初始狀態1.2. 執行添加路由的命令1.3. 添加路由后的狀態2、不帶 via (使用設備接口),直連3、帶via還是不帶via ?4、dev xx的作用4.1 命令中帶via時,建議不帶 dev eth0 (讓系統自動判斷)4.2 命令中帶via&#xff0c…

云原生---企業級Kubernetes

一、Kubernetes介紹 1.簡介 kubernetes的本質是一組服務器集群,它可以在集群的每個節點上運行特定的程序,來對節點中的容器進行管理。目的是實現資源管理的自動化,主要提供了如下的主要功能: 自我修復:一旦某一個容器…

無人機三維路徑規劃首選算法:RRT_

無人機三維路徑規劃首選算法:RRT* 要判斷哪種算法更適合無人機三維路徑規劃,需先明確無人機三維路徑規劃的核心需求,再結合各算法的底層邏輯與特性進行匹配。以下先梳理核心需求,再逐一分析算法特性,最終通過對比得出結…

CentOS 7 服務器初始化:從 0 到 1 的安全高效配置指南

前言 對于運維或開發人員而言,新到手的 CentOS 7 服務器絕非 “開箱即用”—— 默認的國外軟件源下載緩慢、系統缺乏基礎工具、防火墻未做安全配置,這些問題都會影響后續使用效率與服務器安全性。本文整理了 CentOS 7 服務器初始化的全套實操方案&#…

32.Attention-注意力機制

不是所有的信息都是有用的,或者說重要的。我們應該把注意力放在他該在的地方。 在人工智能領域,注意力機制被廣泛應用。他可以幫助模型關注與當前任務相關的特征,而忽略不重要的特征,以提高準確率。注意力機制本質:即通…

如何設計 “用戶共創型” IP 成長社群模型??

“用戶共創型” IP 成長社群的核心,是從 “IP 單向輸出” 轉向 “IP 與用戶共生”,讓用戶從 “被動接收者” 變為 “主動參與者”,通過 “需求共建、內容共造、價值共享” 形成閉環,既強化用戶歸屬感,又為 IP 注入持續…

Windows 命令行:mkdir 命令

專欄導航 上一篇:Windows 命令行:dir 命令 回到目錄 下一篇:MFC 第一章概述 本節前言 本節,我們來講解一個常見的命令,mkdir 命令。 學習本節知識,需要你首先懂得如何打開一個命令行界面,…

Linux系統編程——進程(函數)

回調函數:atexit()原型: int atexit(void (*function)(void));功能: 注冊進程退出前執行的函數參數: function 函數指針,指向void返回值void參數的函數指針返回值 成功 返回0失敗 …

均勝電子上半年毛利率持續提升,汽車智能化與機器人業務多點突破

8月25日,全球領先的智能汽車科技解決方案提供商均勝電子(600699.SH)發布2025上半年業績,報告期內公司實現營業收入約303.47億元,同比增長12.07%;營業利潤總額約12.47億元,歸母凈利潤同比增長11.…

【QT入門到晉級】進程間通信(IPC)-共享內存

前言 前面分享了幾種IPC通信技術,都有成熟的交互機制(阻塞和非阻塞方式交互),而本文分享的共享內存,更像是系統提供了一張“白紙”,讓多個進程自己構建管理及安全機制,而有些場景只需要簡單的機…

自動化測試概念與 Web 自動化實戰(基于 Selenium)

在軟件測試領域,自動化測試是提升測試效率、保障回歸測試質量的核心手段。尤其對于 C 開發的項目,自動化測試能有效減少重復手工操作,避免新增功能對歷史功能的影響。本文從自動化基礎概念入手,詳解自動化分類、Web 自動化測試核心…

NeRAF、ImVid論文解讀

目錄 一、NeRAF 1、概述 2、方法 3、訓練過程 4、實驗 二、ImVid 1、概述 2、Imvid數據集 3、STG方法 一、NeRAF 1、概述 NeRF類方法僅支持視覺合成功能,缺乏聲學建模能力。對于以往的聲學建模(如NAR/INRAS)會忽略三維場景幾何對聲…

重復文件刪除查找工具 Duplicate Files Search Link v10.7.0

軟件介紹 Duplicate Same Files Searcher 是一款面向 Windows 平臺的專業重復文件檢索與清理工具,兼具符號鏈接替換與 NTFS 高級特性支持,可在無損數據的前提下大幅縮減磁盤冗余。 軟件使用 軟件打開后是英文版,手動切換中文(按…

簡易shell

目錄 一、整體功能概述 函數準備 1.env命令 2.getenv()函數 3.snprintf 4.strtok()函數 三、全局變量 四、核心功能函數解析 1. 信息獲取函數 2. 命令行交互 3. 命令解析 4. 普通命令執行 5. 內置命令處理(核心功能) 五、主函數流程 六、總…