Migracja do bramy API zgodnej z OpenAI: utwórz umowę dotyczącą zgodności przed zmianą podstawowego adresu URL
Praktyczny przewodnik po migracji umożliwiający przenoszenie aplikacji produkcyjnych z zestawów SDK dostawców lub rozproszonych punktów końcowych zgodnych z OpenAI do jednej bramy: wywołania inwentaryzacyjne, definiowanie macierzy możliwości, pisanie testów zgodności, normalizowanie dziwactw i wdrażanie z bezpiecznym wycofywaniem.
Zmiana base_url, api_key i model często wystarczy, aby prosta demonstracja czatu działała z OpenAIkompatybilnym z API. Nie wystarczy udowodnić, że migracja produkcyjna jest bezpieczna.
Awarie zwykle pojawiają się później: strumieniowe wywołania narzędzi przychodzą w innym kształcie, tryb schematu JSON jest ignorowany, model osadzania zwraca inny rozmiar wektora, brakuje pól użycia, ponowne próby podwójnego przesłania powodują efekt uboczny lub opcja rozumowania specyficzna dla dostawcy po cichu nic nie daje. Praktycznym celem nie jest pytanie, czy punkt końcowy jest „kompatybilny z OpenAI” w skrócie. Celem jest zdefiniowanie, od których części kontraktu w kształcie OpenAI zależą Twoje aplikacje, przetestowanie tych części i przejście przez bramę dopiero po wyraźnym określeniu kontraktu.
Ten przewodnik pokazuje, jak przeprowadzić migrację zespołu z pakietów SDK specyficznych dla dostawcy lub rozproszonych zgodnych punktów końcowych do jednej OpenAIkompatybilnej bramy, zachowując jednocześnie niezawodność, przypisanie użycia i opcje wycofywania zmian.
Jakie są fakty, zalecenia i przewidywania w przypadku tej migracji?
Fakty: kilku dostawców dokumentuje OpenAIkompatybilne ścieżki lub SDK użycie części swoich interfejsów API. Google dostęp do dokumentów Gemini poprzez biblioteki OpenAI Python i TypeScript oraz REST poprzez zmianę klucza API, podstawowego adresu URL i modelu, jednocześnie zalecając bezpośrednie użycie Gemini API dla aplikacji, które nie korzystają jeszcze z bibliotek OpenAI. Dokumentacja zgodności Gemini obejmuje uzupełnianie czatów, przesyłanie strumieniowe, wywoływanie funkcji, zrozumienie obrazów, osadzanie, mapowania wysiłku wnioskowania i opcje specyficzne dla dostawcy za pośrednictwem dodatkowych treści żądań. AI dokumentuje razem OpenAI REST i SDK zgodność dla wielu modalności, ale jej macierz zawiera również listę nieobsługiwanych powierzchni w kształcie OpenAI, takich jak Asystenci, wątki i przebiegi. Mistral dokumentuje ścieżkę migracji dla klientów zgodnych z OpenAI, zmieniając podstawowy adres URL i nazwę modelu. Groq udostępnia punkty końcowe zakończenia czatu OpenAI-path. vLLM oferuje serwer zgodny z OpenAI do uzupełniania i czatowania, jednocześnie dokumentując różnice parametrów. Dokumentacja OpenAI Agentów SDK ostrzega, że wielu dostawców innych niż OpenAI nie obsługuje jeszcze nowszych Odpowiedzi API i że tryb zakończenia czatu jest często bezpieczniejszym celem zgodności.
Zalecenia: Traktuj zgodność jako przetestowaną umowę dotyczącą aplikacji. Zrób inwentarz dokładnych punktów końcowych i funkcji, z których korzystają Twoje aplikacje, utwórz macierz możliwości dostawców i modeli, napisz testy zgodności przed migracją ruchu, znormalizuj znane różnice w żądaniach i odpowiedziach na granicy bramy oraz wdroż z kluczami dla poszczególnych aplikacji i profilami wycofywania zmian.
Przewidywanie: OpenAI kompatybilne powierzchnie pozostaną przydatne jako warstwa integracyjna o najniższym współczynniku tarcia, ale funkcje natywne dostawcy będą nadal się różnić. Zespoły, które utrzymują umowę na kompatybilność, będą mogły szybciej przyjmować nowe modele niż zespoły, które opierają się na nieformalnych założeniach „wymiany natychmiastowej”.
Krok 1: inwentaryzacja każdego bieżącego wywołania AI
Zacznij od inwentarza, a nie od zmian w kodzie. Migracja kończy się niepowodzeniem, gdy zespoły zakładają, że wszystkie wywołania AI wyglądają jak zakończenia czatu i odkrywają ukryte zależności dopiero po wydaniu.
Utwórz jeden wiersz na każdą witrynę połączeń. Uwzględnij zaplanowane zadania, narzędzia wewnętrzne, notesy, pracowników w tle, narzędzia ewaluacyjne i usługi skierowane do klienta.
app: support-assistant
owner: customer-platform
current_provider: provider_a
current_sdk: provider_a_python_sdk
endpoint_shape: chat.completions
model: provider-a-large-2026
features:
- streaming
- tool_calls
- json_schema_output
- usage_accounting
latency_budget_ms: 8000
retry_policy: retry_429_5xx_no_tool_side_effects
monthly_volume_estimate: 2.4M requests
rollback_contact: oncall-customer-platformKlasyfikuj każde wywołanie według punktu końcowego i funkcji, a nie tylko według modelu. Za jedną nazwą modelu mogą kryć się bardzo różne wymagania dotyczące zgodności, w zależności od sposobu jej użycia.
Lista kontrolna zapasów
- Czat: wiadomości, instrukcje systemowe, temperatura, górna część, maksymalne tokeny, sekwencje zatrzymania.
- Przesyłanie strumieniowe: analizator zdarzeń wysyłanych przez serwer, fragmenty końcowe, wykorzystanie w strumieniu, zachowanie podczas anulowania.
- Narzędzia: schematy funkcji, wywołania równoległe, argument JSON, komunikaty o wynikach narzędzi, bezpieczeństwo skutków ubocznych.
- Ustrukturyzowane wyniki: JSON tryb, JSON schemat, ścisła walidacja, logika naprawy awaryjnej.
- Wejście wizyjne lub multimodalne: adres URL obrazu, base64, obsługa MIME, parametry szczegółowe.
- Osadzenia: identyfikator modelu, wymiar wektorowy, oczekiwania dotyczące normalizacji, zgodność indeksów.
- Pliki i partie: przesyłanie interfejsów API, odpytywanie zadań, anulowanie, formaty wyjściowe.
- Kontrola rozumowania: wysiłek rozumowania, przemyślany budżet, ukryte tokeny, ustawienia specyficzne dla dostawcy.
- Błędy: kształt limitu szybkości, kształt przekroczenia limitu czasu, błędy polityki treści, kody stanu umożliwiające ponowną próbę.
- Wykorzystanie i rozliczenia: tokeny podpowiedzi, tokeny ukończenia, tokeny w pamięci podręcznej, tokeny wnioskowania, znaczniki alokacji kosztów.
Wynikiem tego kroku jest mapa zależności. Informuje, które aplikacje można migrować za pomocą prostego OpenAIkompatybilnego API profilu, a które wymagają pracy adaptera.
Krok 2: utwórz tabelę kontraktów zgodności
Umowa dotycząca kompatybilności to tabela, która określa, dla każdej funkcji aplikacji, co musi gwarantować brama i w jaki sposób ją przetestujesz. Powinien być wystarczająco szczegółowy, aby zespoły inżynieryjne i produktowe mogły podejmować decyzje dotyczące wdrożenia.
| Funkcja | Wymagane zachowanie | Decyzja dotycząca bramy | Wymagany test? |
|---|---|---|---|
| Zakończenie czatu | Zaakceptuj wiadomości w stylu OpenAI i zwróć SMS-a od asystenta | Normalizuj pola żądań i odpowiedzi | Tak |
| Transmisja strumieniowa | Emituj analizowalne delty i niezawodny sygnał zakończenia | Jeśli to możliwe, standaryzuj format fragmentów strumienia | Tak |
| Wywołania narzędzi | Zwróć nazwę narzędzia i prawidłowe JSON argumenty | Sprawdzaj i naprawiaj tylko na podstawie wyraźnych zasad | Tak |
| Przesyłanie strumieniowe wywołań narzędzi | Argumenty można rekonstruować deterministycznie | Delty bufora, jeśli fragmenty dostawcy są niezgodne | Tak |
| Ustrukturyzowane wyniki | Odpowiedź musi zostać zweryfikowana względem oczekiwanego schematu | Korzystaj z obsługi profilu modelu i sprawdzania poprawności aplikacji | Tak |
| Wprowadzanie wizji | Obrazy akceptowane w formatach używanych przez aplikację | Wcześnie odrzuć nieobsługiwane parametry | Tak |
| Osadzenia | Stabilny wymiar wektorowy indeksu docelowego | Przypnij osadzanie profilu i wymiaru modelu | Tak |
| Pliki | Znane sposoby przesyłania, odwoływania się, przechowywania i usuwania | Nie żądaj wsparcia, jeśli nie zostało to zmapowane | Tak |
| Partia | Stabilne przesyłanie zadań, odpytywanie i analizowanie danych wyjściowych | Oddziel profil od wnioskowania w czasie rzeczywistym | Tak |
| Kontrola rozumowania | Ustawienia wysiłku i myślenia udokumentowane dla każdego modelu | Użyj kontrolowanych pól przekazujących | Tak |
| Rachunek zużycia | Pola tokenów i kosztów dostępne do przypisania | Normalizacja rejestru użytkowania na bramce | Tak |
| Semantyka błędów | Sklasyfikowanie błędów, które można i nie można powtórzyć | Stan mapy, kod i metadane dostawcy | Tak |
Ta tabela zapobiega także nadmiernym obietnicom. Jeśli dostawca obsługuje czat i osadzanie, ale nie obsługuje przepływu pracy podobnego do plików lub asystentów, umowa powinna to określać. „Nieobsługiwany” to prawidłowy wynik migracji, jeśli pozwala uniknąć niespodzianek produkcyjnych.
Krok 3: utwórz profile modeli zamiast rozpraszać identyfikatory modeli
Nie zastępuj jednego zakodowanego na stałe identyfikatora modelu innym zakodowanym na stałe identyfikatorem modelu w każdej aplikacji. Użyj profili modelek.
profile: support-chat-fast
openai_model_alias: support-chat-fast
provider: provider_b
provider_model: provider-b/chat-large-fast
endpoint: chat.completions
features:
streaming: true
tools: true
structured_outputs: schema_validated
vision: false
embeddings: false
request_policy:
drop_unsupported_params: false
reject_unknown_params: true
pass_through_extra_body: ["reasoning_effort"]
fallback_profile: support-chat-safe
cost_center_required: trueTen profil nadaje aplikacjom stabilną nazwę, podczas gdy brama jest właścicielem mapowania dostawców. Obsługuje również dostawców korzystających z identyfikatorów modeli z przestrzenią nazw zamiast z płaskiej przestrzeni nazw modelu. Aplikacja prosi o support-chat-fast; brama decyduje, czy jest to aktualnie mapowane na model przestrzeni nazw w stylu Together, model zgodny z Gemini, model zgodny z Mistral, model czatu Groq, własny hostowany punkt końcowy vLLM, czy inny zatwierdzony cel.
Kompromisem są koszty ogólne zarządzania. Profile muszą być udokumentowane, sprawdzone i wersjonowane. Zaletą jest to, że migracje, wycofywanie zmian i wymiana modeli nie wymagają ponownego wdrożenia każdej aplikacji.
Krok 4: napisz testy zgodności przed migracją
Testy zgodności to małe, powtarzalne kontrole, które weryfikują Twoją umowę pod kątem każdego profilu docelowego. Powinny działać przed pierwszym wdrożeniem i za każdym razem, gdy zmienia się dostawca, model, SDK lub adapter bramy.
Minimalny zestaw testów
- Testy złotego podpowiedzi: Wysyłaj deterministyczne podpowiedzi i weryfikuj kształt odpowiedzi, przyczynę zakończenia, zachowanie związane z bezpieczeństwem i podstawowe wymagania semantyczne. Nie wymagaj dokładnego sformułowania, chyba że aplikacja naprawdę od tego zależy.
- Testy analizatora składni strumieniowej: upewnij się, że Twój klient może przeanalizować każdy fragment, zrekonstruować końcowy tekst, obsłużyć anulowanie i wykryć zakończenie strumienia.
- Obrotowe wywołania narzędzia: Wymuś wywołanie narzędzia, przeanalizuj argumenty, wykonaj fałszywe narzędzie, zwróć wynik narzędzia i potwierdź, że model działa poprawnie.
- Testy przesyłania strumieniowego wywołań narzędzi: Sprawdź, czy częściowe różnice argumentów mogą zostać buforowane i zrekonstruowane przed wykonaniem narzędzia. Jeśli nie, wyłącz przyrostowe wykonywanie narzędzi dla tego profilu.
- JSON sprawdzanie poprawności schematu: testowanie prawidłowych wyników, nieprawidłowych wyników, brakujących pól, dodatkowych pól oraz przypadków odmowy lub błędów.
- Sprawdzanie wymiarów osadzania: Przed ponownym użyciem istniejącego indeksu sprawdź długość wektora, typ liczbowy i zgodność z indeksem wektora docelowego.
- Testy ponownych prób i idempotencji: Symulacja błędów 429, 500, przekroczenia limitu czasu i częściowych błędów strumienia. Upewnij się, że skutki uboczne narzędzia nie powtórzą się przypadkowo.
- Uzgadnianie wykorzystania: Porównaj zapisy użycia bramy z polami użytkowania zgłoszonymi przez dostawcę i oczekiwaniami w księdze rozliczeniowej.
Trzymaj testy blisko wzorców ruchu produkcyjnego. Pojedyncza zachęta „napisz wiersz” prawie niczego nie dowodzi w odniesieniu do przepływu pracy zależnego od narzędzi, JSON, osadzania i rozliczania użycia.
Krok 5: normalizacja dziwactw na granicy bramy
Brama zgodna z OpenAI powinna ograniczyć zmiany w kodzie aplikacji, ale nie powinna udawać, że każdy dostawca zachowuje się identycznie. Użyj adapterów dla znanych różnic i uwidocznij zachowanie.
Poproś o normalizację
- Aliasy modeli: Mapuj nazwy profili stabilnych aplikacji na identyfikatory modeli specyficzne dla dostawcy.
- Nieobsługiwane parametry: Domyślnie odrzucaj nieobsługiwane parametry z wyraźnym błędem. Ciche upuszczanie jest wygodne podczas demonstracji i niebezpieczne w produkcji.
- Opcje specyficzne dla dostawcy: Zezwalaj na kontrolowane pola przekazywania, takie jak kontrole rozumowania lub myślenia, tylko w udokumentowanych profilach modeli.
- Konwersja wiadomości: Normalizuj wiadomości systemowe, programistyczne, użytkownika, asystenta i narzędzi, w których docelowy dostawca oczekuje innego kształtu.
- Budżety limitów czasu: zastosuj jeden ostateczny termin na poziomie aplikacji, zamiast pozwalać, SDK kumulować się wartości domyślne.
Normalizacja odpowiedzi
- Wybór tekstu i narzędzi: Zwróć spójny kształt tekstu asystenta, wywołań narzędzi i powodów zakończenia.
- Części przesyłania strumieniowego: Normalizuj typowe delty i dokumenty, w których wymagane jest buforowanie.
- Pola użycia: Przechowuj użycie natywne dostawcy oraz znormalizowane monity, zakończenia i łączną liczbę tokenów, jeśli są dostępne.
- Kształt błędu: Mapuj kody stanu, możliwość ponawiania prób, kod błędu dostawcy i identyfikator żądania w jeden schemat błędu.
- Metadane kosztów: dołącz etykiety aplikacji, zespołu, profilu, dostawcy, modelu i środowiska do późniejszej analizy.
Głównym kompromisem jest przenośność i moc dostawcy. Normalizacja do najmniejszej powierzchni wspólnej poprawia wymienność. Zezwolenie na pola specyficzne dla dostawcy pozwala zachować zaawansowane możliwości, ale każda opcja przekazywania staje się częścią dokumentacji profilu i macierzy testów.
Krok 6: wdrożenie z kluczami dla poszczególnych aplikacji i profilami wycofywania
Migracja powinna być odwracalna bez konieczności ponownego wdrażania kodu. Użyj oddzielnych kluczy API dla każdej aplikacji, środowiska i zespołu. Pojedynczy klucz współdzielony utrudnia przypisywanie użycia i awaryjne przywracanie ustawień.
Sekwencja bezpiecznego wdrożenia wygląda następująco:
- Profil programistyczny: Kieruj przez bramę tylko ruch lokalny i tymczasowy. Napraw problemy z kształtem żądania i analizatorem składni.
- Testy w tle: Odtwórz reprezentatywne żądania do nowego profilu bez wpływu na dane wyjściowe widoczne dla użytkownika. Porównaj ważność schematu, zachowanie narzędzia, klasę opóźnienia i pola użycia.
- Mały fragment produkcji: Przenieś niewielki procent ruchu lub jednego wewnętrznego najemcę. Obserwuj błędy, ponowne próby, sygnały dotyczące jakości zgłaszane przez użytkownika i koszty.
- Rozwój na aplikację: migruj jedną aplikację na raz. Nie migruj czatu, osadzonych elementów, plików wsadowych ani plików razem, chyba że mają ten sam profil ryzyka.
- Przywróć profil: Zachowaj dostęp do znanego, dobrego profilu dostawcy/modelu za tym samym aliasem obsługującym aplikację lub szybkim przełącznikiem konfiguracji.
- Blokada po migracji: Po ustabilizowaniu się usuń klucze bezpośredniego dostawcy ze środowisk aplikacji, aby ruch nie mógł ominąć kontroli bramy.
Wycofanie zmian należy przetestować jak każdą inną ścieżkę. Jeśli profil modelu można przełączyć w bramie, przetestuj ten przełącznik w cichym okresie i potwierdź, że dzienniki aplikacji, analizy użytkowania i przypisanie rozliczeń pozostają spójne.
Przykład: zastąpienie rozproszonych punktów końcowych jedną umową dotyczącą bramy
Załóżmy, że zespół ma trzy aplikacje:
- Asystent obsługi klienta korzystający z czatu i narzędzi do przesyłania strumieniowego.
- Klasyfikator treści wymagający JSON ścisłych wyników.
- Usługa wyszukiwania korzystająca z osadzania przechowywanych w wektorowej bazie danych.
Ryzykowna migracja spowodowałaby zmianę wszystkich trzech aplikacji na ten sam podstawowy adres URL i wybranie trzech nowych identyfikatorów modelu. Bezpieczniejsza migracja oddziela umowy:
- Profil czatu pomocy technicznej: Wymaga przesyłania strumieniowego, wywołań narzędzi, buforowanych różnic wywołań narzędzi, klasyfikacji ponownych prób i rejestrowania użycia.
- Profil klasyfikatora-json: Wymaga sprawdzania poprawności schematu, obsługi odmów i braku cichego usuwania parametrów.
- profil osadzania wyszukiwania: wymaga stałego wymiaru wektorowego i planu migracji indeksu w przypadku zmiany wymiaru.
Każdy profil przechodzi własne testy zgodności i wdrażanie. Asystent pomocy technicznej może potrzebować pracy z adapterem przesyłania strumieniowego. Klasyfikator może szybko przejść pomyślnie, jeśli sprawdzanie poprawności schematu jest zewnętrzne w stosunku do modelu. Usługa osadzania może wymagać nowego indeksu, a nie wymiany modelu w miejscu. Brama zapewnia zespołowi jeden OpenAIzgodny podstawowy adres URL, ale umowa dotycząca zgodności zapewnia uczciwość migracji.
Lista kontrolna migracji
- Wyświetl listę wszystkich witryn wywołań AI, w tym zadań w tle i skryptów wewnętrznych.
- Klasyfikuj wywołania według punktu końcowego, funkcji, modelu, właściciela i ścieżki wycofywania.
- Zdefiniuj profile modeli przeznaczone dla aplikacji zamiast kodowanych na stałe identyfikatorów modeli dostawców.
- Utwórz macierz możliwości dla każdego profilu dostawcy i modelu.
- Odrzuć nieobsługiwane parametry, chyba że profil wyraźnie zezwala na przekazywanie.
- Testuj przesyłanie strumieniowe, narzędzia, uporządkowane wyniki, osadzania, błędy, ponowne próby i pola użycia.
- Użyj kluczy API dla aplikacji i środowiska do przypisania i kontroli.
- Przeprowadź testy w tle przed ruchem produkcyjnym widocznym dla użytkownika.
- Wdrażaj jedną aplikację lub klasę funkcji na raz.
- Zachowaj przetestowany profil przywracania dostępności bez konieczności ponownego wdrażania kodu.
Wniosek, który można zastosować
Brama zgodna z OpenAI API jest najcenniejsza, gdy staje się kontrolowaną warstwą migracji, a nie tylko innym adresem URL. Podstawowy przełącznik adresu URL ogranicza mechaniczne zmiany kodu. Umowa o kompatybilność zmniejsza ryzyko operacyjne.
Zanim przełączysz ruch produkcyjny, zapisz, czego faktycznie wymagają Twoje aplikacje: zachowanie podczas przesyłania strumieniowego, semantyka narzędzi, gwarancje schematu, wymiary osadzania, reguły ponownych prób, pola użycia i znaczenie błędów. Przekształć te wymagania w profile modeli, reguły adapterów i testy zgodności. Następnie wprowadź klucze dla poszczególnych aplikacji, analizy i profile wycofywania.
Jeśli prosta ścieżka czatu działa, potraktuj ją jako dobry początek. Traktuj pozostałą część migracji jako pracę inżynieryjną, która zasługuje na taką samą dyscyplinę, jak zmiana bazy danych, kolejki lub dostawcy płatności.