TUTORIAL · PYTHON · 10 MIN

Jak używać Bielika w Pythonie

Od pustego katalogu do działającej rozmowy, walidowanego JSON-u i bezpiecznej obsługi błędów.

Po tym tutorialu:uruchomisz Bielika przez OpenAI SDK, zachowasz kontekst rozmowy i przygotujesz klienta do produkcji.
INTERAKTYWNY LAB

Uruchom Bielika w przeglądarce

Ten formularz wywołuje dokładnie ten sam model i endpoint, którego użyjesz z Pythona. Treść znika po dostarczeniu odpowiedzi.

Gotowe do uruchomienia · bez klucza

GOTOWE PLIKI

Pobierz i uruchom lokalnie

Skrypty używają zmiennej JANUSZ_API_KEY. Test E2E potrafi sam pobrać anonimowy klucz.

01 Przygotuj środowisko

Potrzebujesz Pythona 3.10 lub nowszego i klucza JANUSZ API. Klucza nie wklejaj do kodu ani repozytorium.

Wygeneruj klucz testowy →
TERMINAL
python -m venv .venv
source .venv/bin/activate
pip install openai pydantic
export JANUSZ_API_KEY="jan_..."
Windows PowerShell.venv\Scripts\Activate.ps1 oraz $env:JANUSZ_API_KEY="jan_...".

02 Wyślij pierwszy request

Klient korzysta ze znanego SDK, ale wskazuje endpoint JANUSZ przez base_url. Odpowiedź tekstową znajdziesz w pierwszym elemencie choices.

app.py
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["JANUSZ_API_KEY"],
    base_url="https://janusz.fabryka.ai/v1",
    timeout=30.0,
)

response = client.chat.completions.create(
    model="bielik-11b-v3",
    messages=[
        {"role": "system", "content": "Odpowiadaj krótko po polsku."},
        {"role": "user", "content": "Podaj trzy zalety automatyzacji faktur."},
    ],
    temperature=0.2,
    max_tokens=300,
)

print(response.choices[0].message.content)
print(response.usage.total_tokens)

Uruchom python app.py. Pole usage pokazuje faktycznie przetworzone tokeny, a response.model identyfikuje model, który odpowiedział.

03 Dodaj kontekst rozmowy

API jest bezstanowe: przy każdym wywołaniu wysyłasz potrzebną historię ponownie. To aplikacja decyduje, które wiadomości zachować.

conversation.py
messages = [{"role": "system", "content": "Jesteś pomocnym doradcą."}]

def ask(prompt: str) -> str:
    messages.append({"role": "user", "content": prompt})
    result = client.chat.completions.create(
        model="bielik-11b-v3", messages=messages[-12:]
    )
    answer = result.choices[0].message.content
    messages.append({"role": "assistant", "content": answer})
    return answer

Limit ostatnich 12 wiadomości jest prostym początkiem, nie uniwersalną strategią. W produkcji kontroluj budżet tokenów i streszczaj starszy kontekst.

04 Waliduj odpowiedź JSON

Instrukcja „zwróć JSON” nie jest gwarancją schematu. Parsuj wynik i waliduj pola przed użyciem biznesowym.

structured.py
import json
from pydantic import BaseModel

class Ticket(BaseModel):
    category: str
    priority: int

raw = response.choices[0].message.content
ticket = Ticket.model_validate(json.loads(raw))
print(ticket.category, ticket.priority)

05 Obsłuż błędy świadomie

401Nieprawidłowy klucz
402Brak salda
422Błędny request
429Limit ruchu
5xxBłąd przejściowy

Retry stosuj dla timeoutów, 429 i wybranych 5xx, z wykładniczym opóźnieniem i limitem prób. Nie ponawiaj automatycznie błędów walidacji ani uwierzytelnienia.

06 Checklista produkcyjna

  • Klucz jest w managerze sekretów, nie w kodzie.
  • Klient ma jawny timeout i ograniczone retry.
  • Logi zawierają status, latency, model i tokeny — bez promptów.
  • Odpowiedzi JSON są walidowane schematem.
  • Testy sprawdzają rzeczywiste zadania, nie pytanie „kim jesteś?”.

Wybierz następny materiał