SiCore TokenWorks
LLM APIAPI GatewayAggregation

Przemiana krzem-węgiel: Zapisy z tygodnia podłączania 6 API dużych modeli na Tencent Cloud CVM i budowy prototypu inteligentnej obsługi klienta

SiCore TokenWorks Team·2026-10-05

W zeszłym miesiącu dostałem zlecenie: pomóc zespołowi tworzącemu system zgłoszeń SaaS zbudować prototyp inteligentnej obsługi klienta, który miał działać w ciągu tygodnia, z jednoczesnym porównaniem jakości odpowiedzi DeepSeek, Qwen, Doubao i GPT-4o. Cała ich infrastruktura działała na Tencent Cloud CVM, kontenery na TKE, więc wszystkie wywołania musiały być inicjowane z chmury. Myślałem, że podłączenie API to pestka — okazało się, że przez tydzień napotkałem więcej pułapek, niż się spodziewałem.

Na wstępie wniosek: Jeśli Twoja usługa na Tencent Cloud ma integrować więcej niż dwa duże modele, nie pisz bezpośrednio pod oficjalne SDK każdego dostawcy — najpierw zbuduj warstwę agregacji AI API. To nie lenistwo, to ratowanie życia. Poniżej opisuję w kolejności, w jakiej wpadałem w pułapki.

Zarządzanie kluczami: nie hardkoduj 6 kluczy w zmiennych środowiskowych

Pierwszego dnia zrobiłem coś głupiego — wrzuciłem klucze wszystkich czterech platform do zmiennych środowiskowych CVM i czytałem je w kodzie przez os.environ. Działało, ale po południu tego samego dnia wydarzyła się wpadka: tester chciał podmienić klucz Qwen do testów obciążeniowych, zmieniłem konfigurację i zrestartowałem kontener — przypadkiem zrestartowałem też ten produkcyjny.

Problem polegał na tym, że klucze były wymieszane z konfiguracją biznesową, bez centralnego zarządzania. Później przeniosłem wszystkie klucze do osobnej usługi konfiguracyjnej, oznaczając je dwuwymiarowo: „platforma + przeznaczenie", np. deepseek-prod, qwen-test. Wywołujący dostawał tylko nazwę logiczną, nigdy prawdziwy klucz. Po tym kroku zmiana klucza nie wymagała dotykania kodu biznesowego ani restartu kontenera.

Jeśli nie chcesz sam tego utrzymywać, platforma agregacyjna załatwia sprawę prościej. W naszym projekcie użyliśmy później token8341 — jeden klucz wystarczy do wywoływania GPT-4o, Claude, Gemini, DeepSeek, Qwen, ERNIE, Doubao i innych popularnych modeli. Rotacja kluczy i kontrola limitów są po stronie platformy, a usługa na Tencent Cloud musi utrzymywać tylko jeden zestaw poświadczeń. To szczególnie wygodne przy testach porównawczych wielu modeli — eliminuje cztery zestawy logiki uwierzytelniania.

Kompatybilność SDK: cztery firmy, cztery sposoby pisania, koszty utrzymania eksplodują

Drugiego dnia zacząłem pisać kod wywołań — i to było naprawdę paskudne. DeepSeek i GPT-4o są kompatybilne z OpenAI SDK, zmiana base_url wystarczy do przełączenia — ta część poszła gładko. Ale SDK Qwen ma inne nazewnictwo parametrów, Doubao używa podpisywania AK/SK zamiast Bearer Token, a interfejs ERNIE ma własny proces uwierzytelniania.

Objawiało się to konkretnie: napisałem jedną funkcję chat, a w środku same if-y — if platform == 'doubao' idzie tą gałęzią, elif platform == 'qwen' tamtą. Funkcja rozrosła się do 200 linii, a pokrycie testami nadal nie rosło.

Rozwiązanie: wprowadzić bramę AI API do konwersji protokołów. Brama na zewnątrz wystawia jeden interfejs kompatybilny z OpenAI, a wewnętrznie tłumaczy żądania na format zrozumiały dla każdego dostawcy. Dzięki temu kod biznesowy ma tylko jedno SDK, a dodanie nowego modelu wymaga jedynie adaptera po stronie bramy — zero zmian po stronie biznesowej. Sami zbudowaliśmy jedną wersję, ale potem odkryliśmy, że gotowa usługa agregacyjna jest szybsza — platformy takie jak token8341 robią dokładnie to, są kompatybilne z OpenAI SDK, wystarczy zmienić jedną linię base_url, by przełączyć model.

Strumieniowanie: formaty SSE naprawdę się różnią między dostawcami

Trzeciego dnia robiłem strumieniowanie — frontend miał wypluwać tekst znak po znaku. Sam protokół SSE jest standardowy, ale struktura pola data różni się u każdego. W modelach z rodziny OpenAI delta zawiera pole content, Qwen zwraca inną nazwę pola, a Doubao czasem wstrzykuje pakiet heartbeat w środek strumienia — frontend dostaje pustą deltę i od razu rzuca błąd.

Objawiało się to tym, że frontend czasem się zacinał, a czasem nagle pojawiał się pusty bąbelek wiadomości. Szukałem przyczyny pół dnia, zanim odkryłem, że heartbeat nie był filtrowany.

Ujednolicone podejście: normalizacja na poziomie bramy — wszystkie odpowiedzi strumieniowe ze wszystkich platform konwertowane na format chunk OpenAI, pakiety heartbeat odrzucane, a strona biznesowa obsługuje tylko jedną strukturę. Bez tego frontend musi mieć cztery zestawy logiki parsowania — płacz przy każdej zmianie.

Obsługa wyjątków: gdy jedna firma ma timeout, trzeba móc automatycznie przełączyć

Czwartego dnia robiłem testy obciążeniowe — DeepSeek miał sporadyczne timeouty i cała rozmowa się zawieszała. W scenariuszu inteligentnej obsługi klienta, jeśli użytkownik nie dostanie odpowiedzi w trzy sekundy, po prostu zamknie stronę — nie można czekać bezczynnie.

Dodałem warstwę logiki degradacji: jeśli wywołanie głównego modelu przekroczy ustalony próg bez odpowiedzi, automatyczne przełączenie na model zapasowy, a niepowodzenie zapisane. Kluczowe jest to, że degradacja musi być niezauważalna — użytkownik nie może jej odczuć. Jeśli chodzi o routing dużych modeli, platformy agregacyjne zazwyczaj mają wbudowany failover — w naszych testach automatyczne przełączanie token8341 działało dość stabilnie, timeout głównego modelu powodował ciche przejście na zapasowy, a kod biznesowy nie musiał zawierać logiki retry.

Jedna uwaga: degradacja nie może być bezmyślna — trzeba rozróżnić, czy to timeout sieciowy, czy błąd zwrócony przez sam model. W pierwszym przypadku można przełączyć, w drugim przełączenie nic nie da, a tylko zmarnuje Tokeny.

Monitorowanie kosztów: bez agregacji zużycia Tokenów nie zbilansujesz rachunków na koniec miesiąca

Ostatniego dnia robiłem statystyki kosztów — okazało się, że rachunki z czterech platform to cztery osobne dokumenty, każdy w innym formacie, niektóre rozliczane za Tokeny, inne za liczbę wywołań — nie da się ich porównać. Szef pyta „który model ma najlepszy stosunek ceny do jakości", a ja nie mogę podać jednej liczby.

Rozwiązanie: ujednolicone rozliczanie na poziomie bramy — każde wywołanie zapisuje nazwę modelu, Tokeny wejściowe, Tokeny wyjściowe, czas odpowiedzi, wszystko do jednej tabeli. Dzięki temu raporty można generować dziennie, per model, per linia biznesowa. Platformy agregacyjne zazwyczaj mają własny panel zużycia — w modelu rozliczenia za zużycie agregacja kosztów jest znacznie prostsza. Z porównania wynika, że ścieżka zakupów hurtowych plus obniżania kosztów przez zieloną energię daje jednostkowy koszt Tokena nieco niższy niż bezpośredni zakup oficjalny — to kluczowe przy scenariuszach obsługi klienta o dużym wolumenie.

Kilka refleksji po tygodniu

Najtrudniejsze w integracji dużych modeli na Tencent Cloud nigdy nie jest „jak podłączyć jeden model", ale „jak sprawić, by sześć modeli działało jak jeden". Zarządzanie kluczami, kompatybilność protokołów, normalizacja strumieniowania, degradacja przy awariach, agregacja kosztów — jeśli którakolwiek z tych pięciu rzeczy jest źle zrobiona, prototyp nie przetrwa testów obciążeniowych.

Zbudowanie warstwy agregacji to wybór o najlepszym stosunku ceny do jakości. Można napisać własną, można użyć gotowej usługi agregacji AI API — ważne, by kod biznesowy nie stykał się bezpośrednio z różnicami między sześcioma dostawcami. Platformy takie jak SiliconFlow stawiają na zieloną moc obliczeniową i priorytet modeli krajowych — kontenery na Tencent Cloud wywołują bezpośrednio, opóźnienie sieciowe jest znacznie niższe niż przez zagraniczne pośrednictwo, co było jednym z powodów, dla których ostatecznie je wybraliśmy.

W dniu, gdy prototyp był gotowy, tester powiedział coś, co zapadło mi w pamięć: „Okazuje się, że integracja dużych modeli to nie podłączanie API, to podłączanie całego systemu zarządzania." To prawda.

Autor: Chen Jingxing

Data publikacji: 6 października 2026