OpenAI API: chat.completions i przesyłanie strumieniowe
Klient OpenAI, lista messages, role system/user/assistant, przesyłanie strumieniowe za pomocą stream=True.
OpenAI API: chat.completions i przesyłanie strumieniowe to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Poznajemy OpenAI Python SDK
Pakiet openai dla języka Python to oficjalny sposób komunikowania się z modelami OpenAI, takimi jak GPT-4o. Po zainstalowaniu go za pomocą pip install openai otrzymuje się pojedynczą klasę klienta OpenAI, która obsługuje uwierzytelnianie, ponowienia prób i konstruowanie żądań.
Każde wywołanie przechodzi przez tego klienta, dlatego standardowym rozwiązaniem jest utworzenie go raz i ponowne używanie.
pip install openai
from openai import OpenAITworzenie klienta
Proszę utworzyć instancję klienta za pomocą OpenAI(). Domyślnie odczytuje on klucz ze zmiennej środowiskowej OPENAI_API_KEY, dzięki czemu sekrety nie trafiają do kodu źródłowego.
Klucz można również przekazać jawnie, ale w aplikacjach produkcyjnych zalecane jest korzystanie ze zmiennych środowiskowych.
from openai import OpenAI
# Reads OPENAI_API_KEY from the environment
client = OpenAI()
# Or pass it explicitly (not recommended)
client = OpenAI(api_key="sk-...")Lista messages
Modele czatu są sterowane przez listę wiadomości. Każda wiadomość jest słownikiem zawierającym role i content. Trzy podstawowe role to system (instrukcje), user (człowiek) i assistant (model).
Ta lista stanowi pełny kontekst rozmowy, który model otrzymuje przy każdym wywołaniu.
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the capital of France?"}
]Pierwsza odpowiedź
Należy wywołać client.chat.completions.create(), podając model oraz własne messages. Tekst odpowiedzi znajduje się w response.choices[0].message.content.
API zwraca listę odpowiedzi, ale w typowym użyciu odczytuje się pierwszą z nich.
response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
print(response.choices[0].message.content)Sterowanie wynikiem za pomocą parametrów
Na odpowiedź wpływają dwa parametry: temperature (0 oznacza wynik deterministyczny, a wyższa wartość — większą kreatywność) oraz max_tokens (ogranicza długość odpowiedzi). Niższe wartości temperatury sprawdzają się w zadaniach wymagających faktów, a wyższe — podczas burzy mózgów.
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
temperature=0.2,
max_tokens=300
)Dlaczego warto strumieniować odpowiedzi?
Bez strumieniowania trzeba czekać na całą odpowiedź, zanim pojawi się jakikolwiek tekst. Dzięki strumieniowaniu tokeny docierają w miarę ich generowania, więc interfejs może wyświetlać tekst w czasie rzeczywistym, tak jak robi to ChatGPT.
Strumieniowanie włącza się za pomocą stream=True, co zmienia zwracaną wartość z pojedynczego obiektu na iterator.
Włączanie strumieniowania
Należy przekazać stream=True do create(). Zamiast ukończonej odpowiedzi otrzymuje się generator, który zwraca fragmenty w miarę generowania ich przez model.
stream = client.chat.completions.create(
model="gpt-4o",
messages=messages,
stream=True
)Iterowanie po fragmentach
Należy iterować po strumieniu. Każdy fragment zawiera częściowy tekst w chunk.choices[0].delta.content. W początkowych i końcowych fragmentach może znajdować się tam wartość None, dlatego przed wyświetleniem należy to sprawdzić.
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta is not None:
print(delta, end="", flush=True)Zrozumienie różnicy między delta a message
W zwykłej odpowiedzi odczytuje się message.content (całą odpowiedź). W strumieniu odczytuje się delta.content (tylko nowy fragment). Słowo delta oznacza „zmianę” od czasu otrzymania poprzedniego fragmentu.
Połączenie wszystkich delt pozwala odtworzyć pełną wiadomość.
full_text = ""
for chunk in stream:
piece = chunk.choices[0].delta.content or ""
full_text += piece
print("\nFinal:", full_text)Rozmowy wieloetapowe
Aby kontynuować rozmowę, należy dopisać odpowiedź asystenta z powrotem do messages, a następnie dodać kolejną wiadomość użytkownika. Model nie zachowuje stanu, dlatego to Państwo muszą utrzymywać historię.
messages.append({"role": "assistant", "content": response.choices[0].message.content})
messages.append({"role": "user", "content": "And its population?"})
follow_up = client.chat.completions.create(model="gpt-4o", messages=messages)Sprawdzanie użycia tokenów
Odpowiedzi bez strumieniowania zawierają obiekt usage z polami prompt_tokens, completion_tokens i total_tokens. Dzięki niemu można śledzić i planować koszt korzystania z API, ponieważ rozliczenia odbywają się za token.
print(response.usage.prompt_tokens)
print(response.usage.completion_tokens)
print(response.usage.total_tokens)Szybki test
Sprawdź swoją wiedzę na temat strumieniowania.
Podsumowanie: Chat Completions i strumieniowanie
Nauczyli się Państwo utworzyć klienta OpenAI, zbudować listę messages z rolami systemu, użytkownika i asystenta oraz wywołać chat.completions.create(). Zwykłe odpowiedzi odczytuje się z choices[0].message.content.
Po ustawieniu stream=True można iterować po fragmentach i odczytywać delta.content, aby uzyskać dane w czasie rzeczywistym, utrzymywać historię przez dopisywanie odpowiedzi oraz śledzić koszt za pomocą obiektu usage.
Często zadawane pytania
Czy lekcja „OpenAI API: chat.completions i przesyłanie strumieniowe” jest bezpłatna?
Tak — pełny tekst „OpenAI API: chat.completions i przesyłanie strumieniowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „OpenAI API: chat.completions i przesyłanie strumieniowe”?
Klient OpenAI, lista messages, role system/user/assistant, przesyłanie strumieniowe za pomocą stream=True. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „OpenAI API: chat.completions i przesyłanie strumieniowe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- OpenAI API: chat.completions i przesyłanie strumieniowe
- Anthropic Claude API w Pythonie
- Wywoływanie funkcji i używanie narzędzi z LLM
- Projektowanie promptów dla produkcyjnych aplikacji LLM