Przejdź do głównej treści

Kimi K3: funkcje, benchmarki, API i 5 praktycznych przykładów

Dowiedz się, czym jest Kimi K3, jak uzyskać do niego dostęp i jak radzi sobie z rozumowaniem, narzędziami, długim kontekstem i vision w pięciu praktycznych przykładach.
Zaktualizowano 21 lip 2026  · 12 min Czytać

Eksploruj z AI

Otwórz w ChatGPTOtwórz w ClaudeOtwórz w Perplexity

Wyścig otwartych modeli znów przyspieszył 16 lipca 2026 r., kiedy Moonshot AI udostępniło Kimi K3, model z 2,8 biliona parametrów, z oknem kontekstu 1 miliona tokenów i natywną obsługą vision. To największy otwarty model, jaki Moonshot wypuścił — znacznie większy od Kimi K2 — i pierwszy, który opisują jako wchodzący do klasy 3 bilionów parametrów.

Jeśli szukasz historii premiery, dogłębnej analizy architektury, wykresów benchmarków, porównań z Claude’em, GPT i innymi chińskimi laboratoriami oraz listy ograniczeń od Moonshot, nasz wpis na blogu o Kimi K3 omawia to wszystko. Ten tutorial to praktyczna część: jak uzyskać dostęp i jak model zachowuje się w użyciu. Przejdę przez pięć małych przykładów — cztery przez API, gdzie pokazuję rzeczywiste użycie tokenów i koszt, oraz dwa w aplikacji webowej kimi.com. Razem pokazują, jak K3 radzi sobie z:

  • Wywoływaniem narzędzi i zwracaniem ścisłego JSON-a
  • Ładowaniem definicji narzędzia w locie
  • Obniżaniem kosztu długiego kontekstu dzięki automatycznemu cache’owaniu
  • Odczytywaniem zrzutu ekranu i naprawą układu
  • Budowaniem interaktywnego dashboardu z jednego promptu

Cztery przykłady API uruchomiono 17 lipca 2026 r. na modelu kimi-k3 i kosztowały około 11 centów przy zimnym starcie, a po włączeniu cache’u — kilka centów.

Jak uzyskać dostęp do Kimi K3

Najszybszy sposób, by wypróbować model, to kimi.com, gdzie aplikacja webowa i mobilne działają na Kimi K3 dla ogólnych zadań agentowych bez konfiguracji.

Do cięższych zadań, jak raporty i dashboardy, jest Kimi Work — aplikacja desktopowa.

Jeśli żyjesz w terminalu, Kimi Code to agent do kodowania, którego instalujesz z npm jako @moonshot-ai/kimi-code; model wybierasz komendą /model. Użycie K3 w Kimi Code wymaga płatnej subskrypcji, a pełne okno 1 miliona tokenów — wyższego planu.

Ten tutorial skupia się na surowym API i aplikacji webowej, ale agent terminalowy też jest, jeśli chcesz.

K3 nie zastępuje jednak swoich rodzeństwa. Poniższa tabela pokazuje, jak obecna linia jest podzielona.

Model

Okno kontekstu

Najlepsze zastosowanie

kimi-k3

1 048 576 tokenów

Prace flagowe: długie kodowanie, vision, zadania wiedzy

kimi-k2.7-code

262 144 tokeny

Dedykowane kodowanie, z szybszą opcją high-speed

kimi-k2.6

262 144 tokeny

Ogólny czat tekstowy, obrazkowy i wideo

Krótko mówiąc: K3 to model wyjściowy, gdy zadanie łączy kod, narzędzia, dokumenty i obrazy lub gdy naprawdę potrzebujesz okna 1 miliona tokenów. Do czystej generacji kodu, gdzie prędkość liczy się bardziej niż kontekst, kimi-k2.7-code nadal jest rozsądniejszym wyborem, więc nie zakładaj, że najnowszy model zawsze jest właściwy.

Konfiguracja API Kimi K3

API jest zgodne z OpenAI SDK, więc jeśli już z niego korzystałeś, prawie nic tu nie będzie nowe. Potrzebujesz Pythona 3.9 lub nowszego i klucza API.

Krok 1: Wygenerowanie klucza API

Najpierw zaloguj się do platformy Kimi i otwórz w konsoli stronę API Keys. Utwórz klucz, skopiuj go jednorazowo i przechowuj w bezpiecznym miejscu — nie zobaczysz go ponownie. Potrzebujesz też małego salda na koncie, aby wykonywać wywołania; na cały ten tutorial kilka dolarów w zupełności wystarczy.

Strona kluczy API w konsoli platformy Kimi z przyciskiem create API key.

Tworzenie klucza API Kimi K3. Obraz: autor.

Krok 2: Instalacja SDK

Następnie zainstaluj OpenAI SDK w swoim środowisku. Wystarczy jedno polecenie.

python -m pip install --upgrade "openai>=1.0"

To pobiera bibliotekę kliencką używaną w dalszych przykładach i nie ma nic specyficznego dla Kimi do instalacji.

Krok 3: Przechowywanie klucza i inicjalizacja klienta

Lepiej odczytywać klucz ze zmiennej środowiskowej niż wklejać go w kod. Ustaw MOONSHOT_API_KEY w swojej powłoce lub pliku .env , a następnie skieruj klienta na bazowy URL Moonshot.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["MOONSHOT_API_KEY"],
    base_url="https://api.moonshot.ai/v1",
)

Dwie rzeczy różnią się od standardowej konfiguracji OpenAI: base_url oraz nazwa modelu, którą jest kimi-k3. Mając to, możesz wykonać wywołanie.

Krok 4: Wykonanie pierwszego wywołania

Czas na pierwsze żądanie. Poprosiłem model, by się przedstawił, co przerodziło się w mały szczery moment.

completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[{"role": "user", "content": "Introduce Kimi K3 in one sentence."}],
    max_completion_tokens=800,
)
print(completion.choices[0].message.content)

Odpowiedź była uprzejmą odmową zgadywania: model stwierdził, że nie ma wiarygodnych informacji o Kimi K3, bo został wytrenowany przed własną premierą, i odesłał do ogłoszeń Moonshot. To przydatne przypomnienie, że model nie zna samego siebie. To wywołanie API kosztowało około siedem dziesiątych centa. Zwróć uwagę na limit max_completion_tokens — ustawiałem go w każdym wywołaniu w tym tutorialu, żeby zbyt gadatliwe odpowiedzi nie podbijały rachunku.

Wyjście w terminalu, gdzie Kimi K3 mówi, że nie ma wiarygodnych informacji o sobie.

Pierwsze wywołanie API Kimi K3. Obraz: autor.

Przykład 1: Strumieniowanie rozumowania i finalnej odpowiedzi

K3 zawsze rozumuje, a API zwraca to rozumowanie w osobnym kanale niż odpowiedź. Przy strumieniowaniu każdy kawałek może zawierać reasoning_content, finalne content lub oba, więc możesz osobno umieścić myślenie i odpowiedź.

stream = client.chat.completions.create(
    model="kimi-k3",
    messages=[{"role": "user", "content": "A bat and a ball cost $1.10 together. The bat costs $1.00 more than the ball. How much is the ball?"}],
    max_completion_tokens=1200,
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if not chunk.choices:
        continue
    delta = chunk.choices[0].delta
    reasoning = getattr(delta, "reasoning_content", None)
    if reasoning:
        print(reasoning, end="", flush=True)
    if delta.content:
        print(delta.content, end="", flush=True)

Model najpierw strumieniował tok rozumowania: rozpoznał zadanie kij-baseball i piłka jako klasyczny Cognitive Reflection Test, wskazał intuicyjnie błędną odpowiedź 0,10 $, potem rozwiązał algebrę do 0,05 $ za piłkę i sprawdził, że 1,05 $ plus 0,05 $ daje 1,10 $. Najważniejszy jest podział: w prawdziwej aplikacji pokazujesz użytkownikom content, a reasoning_content trzymasz do logów, bo surowe rozumowanie rzadko chcesz pokazywać w produkcji. To wywołanie zużyło 488 tokenów wyjścia i kosztowało poniżej centa.

Terminal pokazujący, jak Kimi K3 strumieniuje krok po kroku rozumowanie, a następnie finalną odpowiedź, że piłka kosztuje pięć centów.

Strumieniowanie rozumowania, potem odpowiedzi. Obraz: autor.

Przykład 2: Wywoływanie narzędzi ze strukturalnym wynikiem

Kimi K3 to model w linii, który obsługuje tool_choice="required", co wymusza co najmniej jedno wywołanie narzędzia w turze. Przydaje się, gdy chcesz, by model pobrał dane przed odpowiedzią zamiast zgadywać. Dałem mu dwa atrapy narzędzi — sprawdzanie ceny i stanu magazynu — wymusiłem wywołanie narzędzia, uruchomiłem narzędzia lokalnie, a następnie poprosiłem o wynik jako ścisły JSON przez response_format.

first = client.chat.completions.create(
    model="kimi-k3",
    messages=messages,
    tools=TOOLS,
    tool_choice="required",
    max_completion_tokens=2500,
)
assistant_message = first.choices[0].message
messages.append(assistant_message)

for tool_call in assistant_message.tool_calls or []:
    args = json.loads(tool_call.function.arguments)
    messages.append({"role": "tool", "tool_call_id": tool_call.id, "content": run_tool(tool_call.function.name, args)})

Model wywołał oba narzędzia z właściwym kodem produktu, a potem zwrócił czyste podsumowanie zamówienia jako JSON: pięć klawiatur mechanicznych po 89 $ każda, suma 445 $, i flaga stanu magazynu ustawiona na true. Dwa szczegóły są kluczowe w praktyce. Musisz dodać pełną wiadomość asystenta z powrotem do rozmowy przed dołączeniem wyników narzędzi, a JSON parsować tylko z content, nigdy z pola rozumowania. Para wywołań łącznie kosztowała poniżej centa.

Terminal z dwoma wywołaniami narzędzi, po których następuje strukturalne podsumowanie zamówienia w JSON o wartości czterystu czterdziestu pięciu dolarów

Wywołania narzędzi i strukturalny JSON w odpowiedzi. Obraz: autor.

Przykład 3: Dynamiczne ładowanie narzędzi

Jeśli masz dziesiątki narzędzi, wysyłanie ich definicji przy każdym żądaniu marnuje tokeny i zaśmieca prompt. Kimi K3 pozwala wstrzyknąć definicję narzędzia w środku rozmowy poprzez wiadomość system zawierającą pole tools i bez content. Narzędzie od tego momentu jest dostępne, co trzyma duże katalogi narzędzi poza cache’owanym prefiksem, dopóki faktycznie nie będą potrzebne.

messages = [
    {"role": "user", "content": "Convert 100 US dollars to euros at a rate of 0.92."},
    {"role": "system", "tools": [{
        "type": "function",
        "function": {
            "name": "convert_currency",
            "description": "Convert an amount from one currency to another",
            "parameters": {
                "type": "object",
                "properties": {"amount": {"type": "number"}, "rate": {"type": "number"}},
                "required": ["amount", "rate"],
            },
        },
    }]},
]
completion = client.chat.completions.create(model="kimi-k3", messages=messages)
print(completion.choices[0].message.tool_calls)

K3 podchwycił świeżo załadowane narzędzie i wywołał convert_currency z kwotą 100 i kursem 0,92 — dokładnie jak zamierzono. Pamiętaj tylko, że serwer nie przechowuje za ciebie tej definicji, więc jeśli chcesz, by narzędzie pozostało dostępne, wysyłasz wiadomość system w kolejnych żądaniach. To było najtańsze wywołanie z zestawu — około dwóch dziesiątych centa.

Terminal pokazujący, jak Kimi K3 wywołuje dynamicznie załadowane narzędzie do konwersji walut z kwotą i kursem.

Wywołanie dynamicznie załadowanego narzędzia walutowego. Obraz: autor.

Przykład 4: Obniżanie kosztu długiego kontekstu dzięki cache’owi

Tu okno 1 miliona tokenów staje się praktyczne. Cache kontekstu działa automatycznie — bez ID cache’a i bez TTL do zarządzania. Wysyłasz duży prefiks, utrzymujesz go bajt-w-bajt identycznym w kolejnych żądaniach, a powtarzana część jest rozliczana po stawce cache-hit zamiast cache-miss. Żeby różnica była widoczna, użyłem bazy wiedzy ok. 33 000 tokenów i zadałem o nią pytanie.

knowledge = Path("knowledge_base.md").read_text(encoding="utf-8")
completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {"role": "system", "content": knowledge},
        {"role": "user", "content": "What is the rated payload of the Atlas robot?"},
    ],
    max_completion_tokens=600,
)

Za pierwszym razem żaden fragment prefiksu nie był w cache’u i żądanie kosztowało ok. 9,9 centa za około 33 000 tokenów wejścia. Po zapisaniu prefiksu, to samo żądanie trafiło w cache na wszystkich 32 512 tokenach prefiksu i kosztowało ok. 1,1 centa — niemal dziewięciokrotny spadek. Powodem jest różnica cen: wejście z cache’a to 0,30 $ za milion tokenów vs 3,00 $ bez cache’a. Jedna osobliwość: zapisy do cache’a są asynchroniczne, więc trafienie nie pojawia się przy natychmiastowym kolejnym wywołaniu. Pojawia się później, więc uruchomienie skryptu dwa razy w odstępie minuty pokaże najpierw miss, potem hit.

Dwa uruchomienia skryptu cache’ującego w terminalu pokazujące koszt miss blisko dziesięciu centów i koszt hit blisko jednego centa.

Koszt cache miss vs cache hit. Obraz: autor.

Przykład 5: Wychwytywanie błędów układu na zrzucie ekranu

Vision jest natywne w K3, a API to czysty sposób, by z niego korzystać, choć nie przyjmie publicznego URL-a obrazu. Wysyłasz obraz jako data URL base64 i czynisz content wiadomości tablicą obiektów: jedna część to obraz, druga to tekst. Wyrenderowałem mały dashboard z kilkoma celowymi błędami układu, zapisałem zrzut i poprosiłem K3 o wskazanie, co jest nie tak.

Zrzut ekranu dashboardu z nieosią kartą, plakietką siedzącą na liczbie i słupkiem wylewającym się z wykresu.

Dashboard z celowymi błędami układu. Obraz: autor.

import base64
from pathlib import Path

image_data = base64.b64encode(Path("broken_dashboard.png").read_bytes()).decode()
completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[{
        "role": "user",
        "content": [
            {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_data}"}},
            {"type": "text", "text": "List the layout and alignment problems you can see, and give a short CSS fix for each."},
        ],
    }],
    max_completion_tokens=3500,
)
print(completion.choices[0].message.content)

K3 dobrze odczytał obraz. Wychwycił kartę, która siedzi niżej niż rząd i zachodzi na sąsiadkę, plakietkę ustawioną na wierzchu liczby (nawet błędnie odczytał zasłonięte 3 910 jako 5 910 — błąd sam się ujawnia), nierówną przerwę przed ostatnią kartą, słupek wylewający się do karty powyżej i dymek narzędzia siedzący nad słupkami; podał też krótką poprawkę CSS dla każdego, np. przeniesienie kart do jednej siatki. Pominął jednak niemal niewidoczny napis o niskim kontraście, więc vision wyłapuje to, co rzuca się w oczy bardziej niż słabe detale. Wywołanie kosztowało około dwa centy.

Ograniczenia Kimi K3

Przykłady API wypadły dobrze, ale warto nazwać kilka zadziorów, żeby cię nie zaskoczyły. Większość z nich napotkałem bezpośrednio.

  • Dostępne jest tylko reasoning_effort="max", więc na razie nie możesz ograniczyć rozumowania, by oszczędzić pieniądze.

  • Ustawienia próbkowania są stałe. Wartości takie jak temperature, top_p i kary są zablokowane, więc pomiń je w żądaniach zamiast je dostrajać.

  • Wyjście bywa długie i drogie. Ogranicz max_completion_tokens, jak w przykładach, i waliduj każdą pętlę agenta.

  • Publiczne URL-e obrazów nie są obsługiwane przez API, więc do vision licz na base64 lub przesyłane pliki.

Żadne z nich nie jest dealbreakerem, ale wpływają na sposób użycia modelu. Najbardziej pilnowałbym kosztu wyjścia.

Wnioski

W moich uruchomieniach wyróżniły się dwie rzeczy. Wywoływanie narzędzi i strukturalne wyjście nie wymagały ponowień, a cache okazał się ważniejszy, niż się spodziewałem, bo ponowne użycie tego samego długiego prefiksu sprawiło, że duże żądanie było tanie do wysłania ponownie. Więc do analiz w skali repozytorium, powtarzalnych wywołań z długim kontekstem czy inżynierii multimodalnej K3 jest rozsądnym domyślnym wyborem; do szybkiego, taniego czatu lub precyzyjnej kontroli próbkowania łatwiejszy będzie mniejszy model. Szczegóły o otwartych wagach i licencji, o których wspomniałem wcześniej, powinny się wyjaśnić po wydaniu 27 lipca.

Więcej tła o wzorcach użytych w tych przykładach znajdziesz w naszym kursie Developing AI Systems with the OpenAI API, który obejmuje wywoływanie funkcji i łączenie modeli z zewnętrznymi narzędziami w Pythonie.

Tematy

Ucz się z DataCamp

Track

Inżynier AI Associate dla programistów

26 godz.
Dowiedz się, jak integrować AI z aplikacjami software’owymi za pomocą API i bibliotek open source. Rozpocznij swoją drogę do zostania inżynierem AI już dziś!
Zobacz szczegółyRight Arrow
Rozpocznij Kurs
Zobacz więcejRight Arrow