Przejdź do treści

Jedna linijka kodu i działasz w Unii Europejskiej.

API jest zgodne z OpenAI. Istniejące SDK, frameworki i kod działają dalej: zmieniasz base_url i wybierasz tier zamiast nazwy modelu.

Szybki start: pierwsze wywołanie API

Utwórz klucz w swoim panelu w Ustawieniach, w sekcji Klucze API. Sekret zobaczysz dokładnie raz. Potem przechowujemy już tylko jego hash i prefiks. Trzymaj go w zmiennej środowiskowej, nigdy w repozytorium.

curl
curl https://api.europeanailab.eu/v1/chat/completions \
  -H "Authorization: Bearer $UNION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "eu-standard",
    "messages": [{"role": "user", "content": "Wyjaśnij mechanizm odwrotnego obciążenia w VAT."}]
  }'
python
import os

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["UNION_API_KEY"],
    base_url="https://api.europeanailab.eu/v1",   # jedyna linijka, która się zmienia
)

resp = client.chat.completions.create(
    model="eu-standard",
    messages=[{"role": "user", "content": "Wyjaśnij mechanizm odwrotnego obciążenia w VAT."}],
)
print(resp.choices[0].message.content)

Node, Go, Java czy .NET?

Działa każde oficjalne SDK OpenAI: ustaw base URL na https://api.europeanailab.eu/v1 i użyj swojego klucza Union. Implementujemy kontrakt chat completions, łącznie ze streamingiem, narzędziami i schematami JSON.

Tiery modeli i okna kontekstu

W polu model podajesz tier, a nie nazwę modelu. Dzięki temu twoja integracja działa dalej, gdy wymienimy model pod spodem. A wymienimy, bo modele open-weight są wycofywane i wyprzedzane przez nowsze.

TierKontekstWejście / 1 mlnWyjście / 1 mlnDo czego
eu-lite131K0,40 €1,60 €Szybkie i tanie zadania: klasyfikacja, ekstrakcja, krótkie odpowiedzi.
eu-standard262K0,70 €3,50 €Tier do wszystkiego. Domyślny dla czatu i większości ruchu w API.
eu-long1000K1,00 €2,00 €Całe akta spraw, umowy i bazy kodu w jednym prompcie.
eu-pro1000K4,00 €12,00 €Wymagające rozumowanie, agenci, złożony kod.

Jeśli przekroczysz okno kontekstu tieru, dostaniesz 400 z podanym maksimum: nigdy nie obcinamy twojego promptu po cichu.

Streaming odpowiedzi

Streaming działa tak, jak się spodziewasz, z jedną ważną różnicą, o której musisz wiedzieć, bo dotyczy twoich pieniędzy.

Włącz include_usage

Przy streamingu zgodnym z OpenAI API domyślnie nie wysyła zużycia tokenów. Bez stream_options: {"include_usage": true} nie zobaczysz na końcu strumienia, ile kosztowało wywołanie. My i tak to naliczamy: chodzi o to, żebyś ty też mógł to zobaczyć i sprawdzić.
python
stream = client.chat.completions.create(
    model="eu-standard",
    messages=[{"role": "user", "content": "Napisz podsumowanie."}],
    stream=True,
    # Bez tego nie ma obiektu usage i nie widzisz kosztu.
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
    if chunk.usage:                      # ostatni chunk
        print("\n", chunk.usage)

Jeśli przerwiesz strumień w połowie, płacisz tylko za to, co zostało wygenerowane do tego momentu. Jeśli przez zerwane połączenie nie dotrze chunk z zużyciem, szacujemy je i korygujemy w codziennym uzgodnieniu z naszym dostawcą. Do czasu rozliczenia taka pozycja ma w twoim przeglądzie zużycia status estimated.

Function calling i narzędzia

Narzędzia korzystają ze znanego schematu. Jeśli model wygeneruje wywołanie narzędzia niezgodne z twoim schematem, logujemy to: w wersji 1 nie poprawiamy tego po cichu, bo ciche naprawianie twojego wyniku jest gorsze niż widoczny błąd.

python
tools = [{
    "type": "function",
    "function": {
        "name": "find_invoice",
        "description": "Wyszukaj fakturę po numerze.",
        "parameters": {
            "type": "object",
            "properties": {"number": {"type": "string"}},
            "required": ["number"],
        },
    },
}]

resp = client.chat.completions.create(
    model="eu-standard", messages=messages, tools=tools
)

Ustrukturyzowane odpowiedzi ze schematem JSON

Przekaż schemat JSON i waliduj odpowiedź po swojej stronie. Nasza rada: waliduj zawsze, nawet jeśli model zwykle działa poprawnie.

python
resp = client.chat.completions.create(
    model="eu-standard",
    messages=[{"role": "user", "content": "Wyciągnij imię i nazwisko oraz kwotę."}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "invoice",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "amount_eur": {"type": "number"},
                },
                "required": ["name", "amount_eur"],
            },
        },
    },
)

Nagłówki odpowiedzi: koszt, tier i routing

Każda odpowiedź mówi, co się stało. To nie dodatek do debugowania, tylko sedno sprawy: możesz sam sprawdzić, że dostałeś to, za co zapłaciłeś.

NagłówekZnaczenie
X-EU-Model-TierTier, na którym wykonano to zapytanie.
X-EU-RoutedObecny, gdy zapytanie przekierowano do innego modelu, wraz z powodem: censorship albo error.
X-EU-Degradedtrue, gdy model zastępczy jest słabszy albo ma mniejsze okno kontekstu. Płacisz wtedy niższą z dwóch stawek.
X-EU-Refusal-ClassObecny przy odmowie, której nie dało się przekierować, na przykład A-unrouteable, gdy żadna alternatywa nie ma wystarczającego kontekstu.
X-EU-Tokens-In / -OutNaliczone tokeny za to zapytanie.
X-EU-Cost-EURIle to zapytanie zdjęło z twojego salda, w euro.
X-EU-Balance-EURSaldo, które zostało po tym zapytaniu.

Limity zapytań i limity wydatków

Jest limit na klucz i na konto, do tego limity, które ustawiasz sam. Te drugie są ważniejsze, niż się wydaje: bez limitu wyciek klucza albo nieskończona pętla we własnym kodzie potrafi wyczyścić saldo w ciągu jednej nocy.

  • Zapytania na minutę, na klucz i na konto.
  • Dzienny i miesięczny limit w euro, ustawiany osobno dla każdego klucza.
  • Nowe konta: maksymalnie 25 € dziennie przez pierwsze 48 godzin, niezależnie od salda.
  • Jeśli w ciągu godziny zobaczymy ponad dziesięciokrotność twojej średniej tygodniowej, automatycznie wstrzymujemy klucz i wysyłamy ci maila. Lepiej jeden fałszywy alarm niż pusty portfel.
  • Zapytanie startuje dopiero wtedy, gdy masz na saldzie co najmniej 0,05 €.

Kody błędów i co z nimi zrobić

KodZnaczenieCo zrobić
400Nieprawidłowe zapytanie albo prompt większy niż okno kontekstu.Popraw zapytanie; maksimum jest w komunikacie błędu.
401Nieznany, unieważniony albo wstrzymany klucz.Sprawdź klucz w swoim panelu.
402Niewystarczające saldo.Doładuj konto. W odpowiedzi jest bezpośredni link.
403Zapytanie wykracza poza zasady korzystania.Zobacz fair use poniżej.
429Osiągnięto limit zapytań albo wydatków.Odczekaj i ponów; respektuj Retry-After.
502 / 503Model po stronie dostawcy jest niedostępny i nie ma zastępstwa.Ponów. Zajrzyj na stronę statusu.

Nieudane zapytania nic cię nie kosztują: jeśli nie wróciła żadna użyteczna odpowiedź, nic nie schodzi z twojego salda.

Fair use i zasady korzystania

Odmawiamy instrukcji dotyczących broni, złośliwego oprogramowania i oszustw oraz materiałów krzywdzących dzieci. Te odmowy są ostateczne: nigdy nie przekazujemy takiego zapytania do innego modelu, żeby jednak wyciągnąć z niego odpowiedź.

Czym innym jest sytuacja, gdy model odmawia odpowiedzi na uzasadnione pytanie o politykę, historię albo drażliwy temat społeczny: traktujemy to jako wadę i wysyłamy zapytanie do modelu bez tej ślepej plamki. Widzisz to w nagłówku X-EU-Routed: censorship.

Jeden z naszych modeli ma licencję z własnymi zasadami korzystania. Te zasady obowiązują w całości: przekierowanie nie omija warunków licencji.

Nie wiesz, czy twój przypadek użycia się mieści? Napisz na hello@europeanailab.eu. Odpowiedź z góry jest tańsza dla obu stron niż zablokowany klucz po fakcie.

Najczęściej zadawane pytania

Pytania, które przychodzą mailem, zanim ktokolwiek utworzy klucz: z czym API jest zgodne, ile kosztuje zapytanie i gdzie to działa.

Które SDK OpenAI działają z API zgodnym z OpenAI?

Wszystkie oficjalne, bo to cienkie klienty nad kontraktem chat completions, a base URL przyjmują jako argument konstruktora. Najczęściej chodzi o SDK dla Pythona i Node, ale Go, Java i .NET działają tak samo. Zachowujesz swoją logikę ponawiania, obsługę streamingu i typy.

Czy mogę używać LangChain albo Vercel AI SDK?

Tak. Oba pozwalają ustawić base URL w konfiguracji providera OpenAI, więc wskazujesz tam nasz host i używasz klucza Union AI. Na tej samej zasadzie działa wszystko, co pozwala nadpisać base URL, w tym większość frameworków agentowych i narzędzi do ewaluacji.

Czy API obsługuje streaming i function calling?

Tak, jedno i drugie, a do tego structured output według schematu JSON. Odpowiedzi strumieniowane podają zużycie tokenów na końcu strumienia, więc streamowane zapytanie rozliczysz tak samo dokładnie jak zwykłe.

Jakie są limity zapytań w API?

Jest limit zapytań na minutę na klucz i na konto, do tego dzienne i miesięczne limity wydatków w euro, które ustawiasz sam. Nowe konta mają przez pierwsze 48 godzin limit 25 € dziennie, niezależnie od salda. Po przekroczeniu limitu dostajesz 429 z nagłówkiem Retry-After.

Jak obsługiwać błąd 429 i ponawianie zapytań?

Respektuj Retry-After zamiast ponawiać od razu i stosuj wykładniczy backoff z losowym rozrzutem, żeby seria zapytań nie zsynchronizowała się między workerami. Nie ponawiaj 402: to znaczy, że saldo jest puste, a pętla tylko powtórzy ten sam błąd. Zwykle wystarczy jedna ponowna próba, bo druga porażka rzadko daje inną odpowiedź.

Jak sprawdzić, ile kosztowało zapytanie do API?

Każda odpowiedź ma nagłówki: X-EU-Tokens-In i X-EU-Tokens-Out z naliczonymi tokenami, X-EU-Cost-EUR z kwotą pobraną z salda i X-EU-Balance-EUR z tym, co zostało. Twoje własne logi odpowiedzą więc na pytanie o koszt na funkcję albo na klienta, bez otwierania panelu.

Jaki model działa w każdym tierze?

Każdy tier odpowiada konkretnemu modelowi open-weight, opublikowanemu z licencją i oknem kontekstu na stronie Przejrzystość AI. Kupujesz tier, a nie nazwę modelu, więc możemy wymienić model pod spodem bez psucia twojej integracji. Kiedy to robimy, informujemy cię o tym.

Przeniesienie istniejącej integracji to trzy linijki: klucz, base URL i nazwa tieru. Całą zmianę, łącznie z tym, czego nie da się przenieść, opisujemy w tekście przejście w trzech linijkach. Coś jeszcze niejasne? Stawki za każdy tier są w cenniku, model i licencja za każdym tierem na stronie Przejrzystość AI, a to, co dzieje się podczas awarii, na stronie statusu. Dwie dłuższe lektury: ile kosztuje API AI za token i dokąd naprawdę trafiają twoje prompty.

Zacznij korzystać z AI dla Europejczyków.

Korzystaj z AI bez wysyłania danych za granicę: wszystko na europejskich serwerach, w europejskiej cenie.

13 € miesięcznie za czat, rezygnujesz, kiedy chcesz. Albo za tokeny, z doładowaniem od 10 €.

Nie wiesz jeszcze? Zrób 60-sekundowy quiz →