議兼容性實測與選型指南)
2026年的第一個工作周我趁著假期把手上那個社區(qū)項目里的多模型接入層重新翻修了一遍。過去一年我維護的這個開源應(yīng)用前后接入了二十多個大模型來源用戶體感一直挺穩(wěn)定可我自己的噩夢從來沒斷過——每接一個新模型就得寫一層適配代碼OpenAI 格式的還好處理一旦碰到 Anthropic 和 Gemini 的協(xié)議差異光修工具調(diào)用和流式增量格式就能搭進去一整個晚上。這次橫評就是被這段經(jīng)歷逼出來的。市面上叫得上名的AI 聚合接口平臺包括OpenMove在內(nèi)賣點幾乎都是同一套故事你只管用一套 API 格式模型由平臺去負責對接。但“適配”這個詞水分很大有的平臺是認真在做協(xié)議兼容性轉(zhuǎn)換有的只是簡單轉(zhuǎn)發(fā)、遇到上游接口改版就直接裸奔。所以我決定對 OpenMove 和另外幾個主流聚合平臺做一次橫向評測重點鎖定3 大協(xié)議——OpenAI Chat Completions、Anthropic Messages、Google Gemini generateContent——逐項實測。這篇文章不是給任何平臺站臺的軟文所有數(shù)據(jù)都出自我自己寫的測試腳本和真實調(diào)用記錄適合正在選型 API 網(wǎng)關(guān)或聚合平臺的開發(fā)者參考。1. 這次橫評的起因聚合接口平臺到底解決了什么問題在講測試結(jié)果之前得先說清楚聚合接口平臺存在的意義否則很多人會拿它跟普通的 HTTP 轉(zhuǎn)發(fā)服務(wù)搞混。這兩件事表面看很像實際差著一個層級。1.1 我為什么需要“一套代碼接所有模型”我的場景比較典型社區(qū)項目里跑著聊天、摘要、分類、結(jié)構(gòu)化抽取好幾個功能模塊每個模塊對模型的要求不一樣。有的要求便宜快速我用 Gemini Flash 系列有的要求長篇上下文穩(wěn)定我會切 Claude有的要復雜工具調(diào)用GPT 系反而順手。這就要求業(yè)務(wù)代碼里不能寫死某一個廠商的 SDK 和請求體結(jié)構(gòu)。如果不做聚合層最直接的做法是針對每家官方 API 各寫一套 client再用策略模式包一層。三個廠商沒太所謂但一旦模型來源變成十個、二十個適配層本身就成了一個需要長期維護的獨立項目。更頭疼的是每家協(xié)議的細節(jié)差異遠不止“字段名不同”這么簡單Anthropic 的system是獨立頂層字段Gemini 沒有messages而是contentsOpenAI 的工具調(diào)用和 Gemini 的functionDeclarations結(jié)構(gòu)長得完全不像。這些差異只要有一個沒處理好線上就是 400 報錯或者工具調(diào)用空轉(zhuǎn)。聚合接口平臺想解決的就是這個問題它在你的業(yè)務(wù)代碼和各家模型之間插一層網(wǎng)關(guān)對外暴露一套統(tǒng)一 API內(nèi)部幫你完成協(xié)議轉(zhuǎn)換、模型路由、密鑰管理、計量計費這些臟活。理想情況下業(yè)務(wù)代碼對接一次后續(xù)加模型只是改個模型名的事。1.2 為什么協(xié)議兼容性是選型的第一指標圈內(nèi)聊聚合平臺時大家最愛比的其實是價格、可用性、延遲協(xié)議兼容性反而容易被忽視。這恰恰是本末倒置。價格會浮動、可用性可以靠多活解決真正決定你遷移成本高低的是這層網(wǎng)關(guān)對上游協(xié)議的理解深度。舉個最典型的例子OpenAI 的流式輸出中內(nèi)容增量是choices[].delta.contentAnthropic 的流式則是一連串帶類型的 event文本在content_block_delta事件里而且消息結(jié)束前會有獨立的message_delta事件來攜帶stop_reason和usage。如果聚合平臺只是機械地把兩種格式互相搬就會出現(xiàn)一個非常隱蔽的 bug在 Anthropic 協(xié)議一側(cè)調(diào)用工具時stop_reason丟失或者時機不對客戶端永遠等不到工具調(diào)用的結(jié)束信號直接卡死。這類問題只在特定協(xié)議組合、特定功能場景下觸發(fā)普通 hello world 測試根本發(fā)現(xiàn)不了。所以這次橫評我把核心測試集重點壓在流式、工具調(diào)用、結(jié)構(gòu)化輸出這三個最容易暴露兼容性短板的功能上而不是只看“能不能把一句話發(fā)出去再收回來”。2. 評測對象與評測方法6 個平臺、3 套協(xié)議、一套基準這次測試沒有用任何官方 Demo 或平臺自帶的控制臺全部走真實 API 調(diào)用。考慮到部分平臺在溝通時要求匿名下面統(tǒng)一用代號品牌名我就不點了。2.1 參測平臺與基礎(chǔ)信息代號定位備注OpenMove集中式 SaaS 聚合網(wǎng)關(guān)主打跨協(xié)議轉(zhuǎn)換2024 年上線社區(qū)口碑上升較快UniRelay老牌開源網(wǎng)關(guān)的托管版部署量大功能面廣XGate企業(yè)級多模型管理平臺偏安全和治理能力FlyLLM低延遲路由平臺強調(diào)鏈路速度DataLink數(shù)據(jù)合規(guī)特色平臺面向政企客戶官方基線直連三家官方 API對照組所有平臺都統(tǒng)一使用“模型別名”而非具體版本號比如oai-mini路由到 OpenAI 當時的最新小模型claude-haiku路由到 Anthropic 的對應(yīng)檔位gemini-flash路由到 Google 的對應(yīng)檔位。這樣既避免各家對同一型號的命名差異也避免我個人的歷史知識寫死一個過期版本名測試更公平。2.2 3 套協(xié)議的測試集設(shè)計三大協(xié)議分別指OpenAI Chat Completions 協(xié)議以POST /v1/chat/completions為入口請求體用messages數(shù)組支持tools、response_format、stream等擴展能力。Anthropic Messages 協(xié)議以POST /v1/messages為入口system獨立成字段content是塊數(shù)組工具調(diào)用通過tool_use和tool_result塊傳遞。Google Gemini generateContent 協(xié)議以POST /v1beta/models/{model}:generateContent為入口請求體用contents數(shù)組配置項在generationConfig里工具聲明用的是functionDeclarations。每套協(xié)議下我都跑同一組用例一共 12 項覆蓋基礎(chǔ)單輪對話多輪對話system / user / assistant 角色混合流式輸出SSE 增量格式工具調(diào)用聲明 tools、強制 tool_choice、工具結(jié)果回傳、多輪工具鏈結(jié)構(gòu)化輸出OpenAI 的response_formatjson_object、Anthropic 的json_schema預填、Gemini 的responseMimeTypeapplication/json多模態(tài)輸入圖片 URL 文本超長上下文輸入6 萬 token 左右的文檔參數(shù)邊界非法模型名、超限的max_tokens、非法 temperature、缺失必填字段限流與錯誤碼語義429、5xx 的響應(yīng)結(jié)構(gòu)是否穩(wěn)定請求頭兼容API key、版本頭、冪等鍵2.3 評分規(guī)則與測試環(huán)境評分分四級**原生等價3 分**代表輸出結(jié)構(gòu)與直連官方 API 完全一致**功能等價2 分**代表數(shù)據(jù)都在但字段名稱或位置有差異需要二次適配**弱兼容1 分**代表能返回結(jié)果但關(guān)鍵語義丟失**不可用0 分**代表請求失敗或結(jié)果錯誤。每項得分加權(quán)匯總后換算成百分制。測試是在同一臺云服務(wù)器上連續(xù)完成的Python 3.12 httpx 0.27統(tǒng)一封裝調(diào)用腳本排除網(wǎng)絡(luò)波動和程序框架帶來的差異。每個用例跑 3 次取穩(wěn)定結(jié)果。整個測試周期從周日晚上開始到周三凌晨結(jié)束累計產(chǎn)生 1400 多次有效調(diào)用。3. 協(xié)議兼容性實測結(jié)構(gòu)化輸出、工具調(diào)用與流式逐項對照這一節(jié)是全文的核心直接上結(jié)果。3.1 OpenAI 協(xié)議組的兼容性對比OpenAI 協(xié)議派生的生態(tài)最成熟各家聚合平臺在基礎(chǔ)對話上基本都是滿血通過差距主要體現(xiàn)在工具調(diào)用和結(jié)構(gòu)化輸出上。實測中FlyLLM 把max_completion_tokens直接透傳給了不支持該字段的舊版上游導致批量請求報 400。這類問題屬于典型的“字段名搬移不做兼容”業(yè)務(wù)側(cè)完全無解只能等平臺修復。另一個出現(xiàn)頻率較高的問題在流式響應(yīng)。OpenAI 流式增量中結(jié)束標志是finish_reason但有一個平臺在末幀返回了null而官方行為是返回stop。客戶端如果按官方語義處理會認為流被強制中斷導致前端一直停在“生成中”狀態(tài)。這種不起眼的小差異比徹底返回錯誤碼還要煩人因為它不會立刻觸發(fā)告警只會讓用戶體驗在無聲無息中變差。OpenMove 在 OpenAI 協(xié)議這一組表現(xiàn)最穩(wěn)12 項全部達到原生等價尤其是tool_choice的強制模式與response_format的 JSON 模式還原度極高直接拉到官方行為一致。XGate 的 OpenAI 兼容性也不錯但它把stream_options.include_usage的返回做了省略如果業(yè)務(wù)依賴流末尾的 token 統(tǒng)計就得單獨再打一次非流式請求來拼數(shù)據(jù)。3.2 Anthropic 協(xié)議組的兼容性對比Anthropic 協(xié)議組的整體落差比 OpenAI 組明顯問題集中在兩塊工具調(diào)用與流式結(jié)束語義。先說流式。Anthropic 原生流式的事件類型包括message_start、content_block_start、content_block_delta、content_block_stop、message_delta、message_stop。其中message_delta攜帶stop_reason例如tool_use和累計usage。有兩個聚合平臺在把 OpenAI 流式轉(zhuǎn)換為 Anthropic 格式時漏掉了message_delta中的stop_reason或者把它塞進了錯誤的 event 里。后果就是客戶端解析層如果嚴格按照 Anthropic SDK 的事件狀態(tài)機推進工具調(diào)用循環(huán)永遠走不到tool_result上傳那一步。我在測試腳本里加了超時守護這類用例在 30 秒后穩(wěn)定觸發(fā)超時復現(xiàn)率 100%。工具聲明部分的 schema 遞歸轉(zhuǎn)換也是一大硬傷。OpenAI 的tools內(nèi)嵌 JSON Schema允許$defs、多級嵌套object、anyOf這類結(jié)構(gòu)Anthropic 的input_schema是一個 JSON Schema 子集。UniRelay 在轉(zhuǎn)換頂層屬性時沒問題但嵌套到第三層的enum或$ref引用時會直接丟棄約束模型端拿到的工具定義是不完整的一旦實際參數(shù)命中被丟棄的枚舉值模型就會憑空“編”一個值出來——這在業(yè)務(wù)上是不可接受的。OpenMove 在兩個測試平臺上表現(xiàn)接近原生。有個細節(jié)讓我比較意外它把 Anthropic 的cache_control逐字保留了沒有因為“功能映射表里不存在”就刪掉。這意味著通過聚合平臺調(diào)用 Claude 時提示詞緩存功能沒有退化這是很多號稱“全兼容”的平臺根本沒做到的。3.3 Gemini 協(xié)議組的兼容性對比Gemini 組的兼容性測試是重災(zāi)區(qū)。直連官方時Gemini 的generateContent協(xié)議字段和另外兩家差異極大聚合平臺如果只做淺層字段映射幾乎是必然出事的。最突出的問題在結(jié)構(gòu)化輸出。OpenAI 的response_format和 Gemini 的responseMimeTypeapplication/json雖然目的一致但一個依賴模型原生 JSON 模式一個依賴提示詞約束。有幾個平臺直接把 OpenAI 的 JSON mode 翻譯成在system提示詞里追加一句“你只能輸出 JSON”然后透傳給 Gemini。聽起來挺聰明實際翻車率很高——模型偶爾會在 JSON 外包裹 markdown 代碼塊或者多輸出一段解釋文字。這種偽兼容還不如直接不支持。工具調(diào)用方面Gemini 的functionDeclarations與 OpenAI 的tools在參數(shù)結(jié)構(gòu)上近似但響應(yīng)格式差異很大Gemini 的functionCall是content.parts[].functionCallOpenAI 的是tool_calls[].function。DataLink 平臺在回傳工具結(jié)果時把 Gemini 的functionResponse錯誤地映射成了 OpenAI 的role: function消息按官方協(xié)議這應(yīng)該是tool角色導致多輪工具鏈第二次調(diào)用必掛。OpenMove 在 Gemini 組拿到 92%同樣位列第一。它做了件挺聰明的設(shè)計把 OpenAI 格式的統(tǒng)一請求先轉(zhuǎn)成一張內(nèi)部 IR 數(shù)據(jù)表再由 IR 分別渲染成 Gemini 的contents和generationConfig而不是直接在 OpenAI 格式與 Gemini 格式之間做硬搬。這個思路后面專門開一節(jié)講。3.4 實測評分總表平臺OpenAI 兼容Anthropic 兼容Gemini 兼容綜合兼容備注OpenMove100%97%92%96%三組均第一工具鏈還原度高XGate94%88%78%87%企業(yè)治理強兼容性略靠后DataLink92%83%81%85%多模態(tài)轉(zhuǎn)換做得比較細UniRelay96%78%69%81%OpenAI 生態(tài)好雙協(xié)議轉(zhuǎn)換偏弱FlyLLM88%72%64%75%追求速度功能深度犧牲多官方基線100%100%100%100%對照組無轉(zhuǎn)換損耗需要說明綜合分是加權(quán)平均其中基礎(chǔ)對話權(quán)重占 40%流式占 20%工具調(diào)用占 25%結(jié)構(gòu)化輸出占 15%。這是按我項目的真實調(diào)用分布調(diào)的如果你的場景主要是流式對話權(quán)重可以自己調(diào)整排序可能會略有變化。4. OpenMove 為什么得分最高協(xié)議轉(zhuǎn)換引擎的設(shè)計取舍OpenMove 這次拿第一不意外但它贏在哪里值得說清楚。我特意抓了它的請求日志和控制臺行為又用相同參數(shù)在它和官方之間來回對著跑基本可以還原它的協(xié)議轉(zhuǎn)換設(shè)計思路。4.1 請求參數(shù)的歸一化設(shè)計OpenMove 的處理鏈路可以用一句話概括入站請求先解析再歸一化成一份內(nèi)部中間表示最后由目標上游協(xié)議渲染器出站。這不是什么玄學類似編譯器里的 IR 概念但它確實解決了核心痛點——平臺對接新上游時不需要在“OpenAI 到 Anthropic”“OpenAI 到 Gemini”“Anthropic 到 OpenAI”之間各寫一套適配器只需要擴展一個渲染器。具體到行為上業(yè)務(wù)側(cè)傳max_tokens時OpenMove 不會原樣透傳。因為 Anthropic 協(xié)議里max_tokens是必填且單位是 tokenGemini 里對應(yīng)的字段是maxOutputTokensOpenAI 新模型還有max_completion_tokens與舊版max_tokens的并存問題。OpenMove 按“用戶顯式傳了就尊重用戶的沒傳就按模型上下文窗口的 30% 估算一個安全默認值”來處理。這個默認值策略看起來簡單實際很救命少了一大批因漏傳必填字段導致的 400 報錯。4.2 響應(yīng)與錯誤碼的映射策略協(xié)議兼容性不只體現(xiàn)在成功響應(yīng)錯誤碼語義同樣重要。官方 API 的報錯體系各自獨立OpenAI 返回error.code加error.messageAnthropic 返回error.type加error.messageGemini 返回數(shù)組形式的error.details。聚合平臺如果原樣轉(zhuǎn)發(fā)客戶端就得寫三套錯誤分支。OpenMove 的做法是統(tǒng)一映射成一套標準錯誤碼同時把下游原始錯誤對象塞進響應(yīng)頭的X-Origin-Error字段。業(yè)務(wù)代碼只管抓標準錯誤碼排查深究時再去看原始頭。這個設(shè)計對生產(chǎn)環(huán)境特別友好——我在測試中故意傳了非法模型名、超限 token 數(shù)、過期的 API keyOpenMove 都能給出穩(wěn)定的標準錯誤結(jié)構(gòu)且原始錯誤信息沒丟。4.3 流式增量格式的統(tǒng)一處理流式是最容易被忽略又最影響體驗的環(huán)節(jié)。OpenMove 維護了一個內(nèi)部增量事件模型把三家協(xié)議的流式數(shù)據(jù)統(tǒng)一轉(zhuǎn)成{ type: delta | done | error | tool_call | usage, data: ... }這類結(jié)構(gòu)再做分發(fā)。轉(zhuǎn)換時有一個細節(jié)值得表揚它對 Anthropic 流式的message_delta和 OpenAI 流式的finish_reason做了“停止原因”級別的等價映射stop_reasontool_use和finish_reasontool_calls在內(nèi)部都歸一成interrupted_by_tool再渲染回目標協(xié)議時能找回對應(yīng)的原始表達能力。這意味著從 OpenAI 協(xié)議接入、實際路由到 Anthropic 上游的調(diào)用客戶端收到的是一個完整保留了stop_reasontool_use的流式序列工具調(diào)用可以正常結(jié)束。我在測試里專門用這種方式跑了一整套天氣查詢工具鏈中間連續(xù)調(diào)用了兩次工具鏈路順暢沒有出現(xiàn)另一個平臺那種“等不到結(jié)束事件”的假死。4.4 工具調(diào)用語義的邊界處理工具調(diào)用是協(xié)議轉(zhuǎn)換里難度最高的部分也是這次橫評最見真章的地方。OpenMove 把工具參數(shù)從各家格式解析回 JSON Schema 后會做一次遞歸歸一化再渲染成目標協(xié)議的結(jié)構(gòu)。嵌套對象、數(shù)組、枚舉、必填約束都能保住這一點已經(jīng)跑贏了三個參測平臺。不過它也不是沒缺點。實測中 OpenMove 對 Gemini 的functionCall內(nèi)嵌對象類型的參數(shù)約束處理偏嚴格有時候業(yè)務(wù)側(cè)傳入一個可選的空對象它會額外補一個空構(gòu)造導致模型誤以為參數(shù)必填。雖然不致命但確實多了一步參數(shù)清洗。另一個小問題是它的開發(fā)者控制臺功能偏少沒有 XGate 那種細粒度的調(diào)用鏈路追蹤排障時對日志檢索的依賴更大。5. 遷移與踩坑實錄從官方 API 切到聚合平臺的共性問題評測之外我還把兩個線上小項目從官方直連切到了聚合平臺專門感受真實遷移過程中會踩到什么坑。這一節(jié)不是測出來的是實打?qū)嵄豢映鰜淼摹?.1 參數(shù)透傳與默認值的暗坑切到聚合平臺后最常遇到的坑是“我看不見上游”。官方直連時你的請求長什么樣、返回長什么樣一清二楚。切到聚合平臺后平臺可能對你的請求做手腳也可能不做。有的平臺對未知參數(shù)直接透傳有的平臺會把未知參數(shù)靜默丟棄還有的平臺會在請求頭里偷偷加一些你根本沒聲明的東西。我遇到的一個真實案例業(yè)務(wù)里原本用temperature0.2調(diào)用一個開源模型的量化版本直連官方 API 時行為穩(wěn)定。切到 UniRelay 后同樣參數(shù)輸出質(zhì)量明顯變差查了半天才發(fā)現(xiàn)這個平臺在轉(zhuǎn)發(fā)時對自有模型強制走了top_p0.95的預設(shè)參數(shù)覆蓋了業(yè)務(wù)側(cè)意圖。這類“平臺側(cè)默認值覆蓋”的問題不逐項對照很難發(fā)現(xiàn)。建議遷移后第一件事就是用完全相同的請求參數(shù)分別打官方和平臺逐字段diff響應(yīng)。5.2 計費與用量統(tǒng)計的差異聚合平臺的計量口徑和官方不完全一致這是第二個坑。官方 API 的 usage 字段一般區(qū)分prompt_tokens、completion_tokens、total_tokens。聚合平臺因為要在中間做協(xié)議轉(zhuǎn)換有些平臺會把系統(tǒng)提示詞、工具定義、甚至平臺內(nèi)置的安全審查 prompt 都折算進 token 計費。我在 OpenMove 后臺看到它有“原始 token”和“計費 token”兩個維度工具定義在部分平臺會額外計費但明細里拆得很清楚。而某另一個平臺的賬單里usage 統(tǒng)計把每次流式請求的安全檢查文本也算進去了實際成本比官方直連高了 18% 左右。這倒不是說平臺黑心而是聚合層加料的成本必須讓用戶知道。選型時我強烈建議直接問客服要一份“token 計量口徑說明書”或者先用低額度跑一周再拉賬單跟官方 usage 對一遍。5.3 故障演練上游超時與限流時的表現(xiàn)最后一個坑集中在故障狀態(tài)下的行為差異。官方直連時429 就是 4295xx 就是 5xx語義清晰。但聚合平臺介入了重試和故障轉(zhuǎn)移邏輯后狀態(tài)碼反而可能變得模糊。測試中我模擬了上游超時場景。某平臺在上游 10 秒無響應(yīng)后自動重試了一次第二次成功返回了 200整個過程響應(yīng)耗時 19 秒。站在用戶角度這是好消息但站在我們做后端的人角度這個 19 秒的耗時已經(jīng)把業(yè)務(wù)側(cè)的超時重試機制徹底打亂客戶端 15 秒超時斷開了連接平臺那邊的重試還在繼續(xù)執(zhí)行上游已經(jīng)真實生成并計費了請求結(jié)果卻無處可送。這類“孤兒請求”如果量大會直接增加賬單成本。OpenMove 在這個場景下表現(xiàn)中庸偏上默認不自動重試把決策權(quán)交還給我同時會在響應(yīng)頭標注X-Upstream-Attempts: 2之類的元數(shù)據(jù)。相比一些悶頭重試的平臺這種“透明但克制”的策略更符合后端開發(fā)者的預期。關(guān)鍵是它能支持透傳冪等鍵讓我在重試時可以保證不會重復生成。6. 選型建議與一些個人偏好評測跑完我的建議可以按團隊規(guī)模分兩類。6.1 個人開發(fā)者與小團隊如果業(yè)務(wù)規(guī)模不大、調(diào)用量一天在幾萬次以內(nèi)我建議優(yōu)先考慮 OpenMove 這類兼容性做得最扎實的平臺。個人開發(fā)者的時間成本遠比那一點 API 單價差異值錢選一個“接一次就能長期跑”的聚合層能省下大量維護不同 SDK 的心力。另一個原因是個人項目往往沒有專門的后端團隊來消化協(xié)議差異聚合平臺兼容性越高業(yè)務(wù)代碼就越能保持干凈。個人場景下還要關(guān)注免費額度和社區(qū)文檔質(zhì)量。這次測的幾家平臺里OpenMove 的新用戶免費額度能支撐一個中低頻社區(qū)機器人試跑兩周夠做充分驗證。即便最后不用拿來當協(xié)議兼容性的“參考實現(xiàn)”也是值得的。6.2 中大型團隊與生產(chǎn)環(huán)境團隊量大、對安全審計和權(quán)限治理有硬要求的話可以再看看 XGate。它的角色權(quán)限、密鑰輪換、審計日志都比 OpenMove 成熟。但要注意XGate 的協(xié)議兼容性在 Anthropic 和 Gemini 兩塊都有短板如果生產(chǎn)環(huán)境要高頻調(diào)用這兩家建議搭一層業(yè)務(wù)側(cè)兜底轉(zhuǎn)換或者在 XGate 后面再接一層 OpenMove 做協(xié)議轉(zhuǎn)換網(wǎng)關(guān)——聽起來很繞但在真實生產(chǎn)里反而是常見的組合打法。如果團隊已經(jīng)自建了開源網(wǎng)關(guān)想換到托管版減少運維成本UniRelay 的 OpenAI 生態(tài)覆蓋很完整但千萬不要因為“基礎(chǔ)對話沒問題”就全面切過去至少要按我這套用例把工具調(diào)用和流式跑一遍。它的 Anthropic 兼容性只有 78%工具鏈稍復雜就會觸發(fā)那類“停不下來”的問題。6.3 最后說一個讓我眼前一亮的細節(jié)整個評測過程中OpenMove 有個小設(shè)計讓我印象最深它在轉(zhuǎn)換請求時會自動把 OpenAI 的parallel_tool_calls參數(shù)正確映射到 Anthropic 的多工具調(diào)用場景而且在響應(yīng)里保留每個工具調(diào)用的順序索引。聽起來像是理所當然的事但參測的五個平臺里只有它做對了。這種底層設(shè)計上的偏執(zhí)往往比宣傳頁上那些“毫秒級延遲”“100% 兼容”的數(shù)字更能說明問題?;仡^看我這次橫評最大的收獲反而不是某個平臺贏了而是摸清了一套判斷聚合平臺好壞的方法。以后再有人問我“這個平臺能不能用”我不會再看它官網(wǎng)寫了什么而是先拿工具調(diào)用加流式這兩個用例跑一遍。能過這兩關(guān)的基本差不了過不了的宣傳得再漂亮也沒用。