Kimi K3 Hands-On Anleitung: Neue Parameter & API-Unterstützungsmatrix

AIHubMix8 Min. Lesezeit
Kimi K3 Hands-On Anleitung: Neue Parameter & API-Unterstützungsmatrix

Dieser Artikel behandelt die neuen Parameter und Nutzungshinweise für Kimi K3. Auf AIHubMix ist K3 über die Chat Completions, Responses und Claude-kompatiblen Messages APIs verfügbar. Siehe auch: offizielle Moonshot-Plattformdokumentation.

Die "Verifizierten" Schlussfolgerungen und Beispielantworten in jedem Abschnitt stammen von tatsächlichen Aufrufen, die am 2026-07-17 über die AIHubMix APIs (Chat Completions / Responses / Messages) gemacht wurden.

1. Modell-Spezifikationen auf einen Blick

Artikel Wert
Kontextfenster 1M Tokens
Maximale Ausgabe max_completion_tokens standardmäßig 131.072, bis zu 1.048.576
Eingabemodalitäten Text, Bilder (für Videoeingaben siehe die offizielle Moonshot-Dokumentation)
Denkmodus Standardmäßig aktiviert; reasoning_effort unterstützt nur "max"
Stoppsequenzen stop erlaubt maximal 5 Einträge, jeder nicht länger als 32 Bytes
Verifiziert: beide stop Limits sind validiert, und das Überschreiten eines der Limits führt zu 400; die Messages API wendet dieselbe Validierung auf stop_sequences an.

Wenn eine Stoppsequenz erreicht wird, folgt die Messages API nicht den Anthropic-Semantiken: In Tests ist stop_reason "end_turn" (statt "stop_sequence"), stop_sequence ist null, und der sichtbare Text vor dem Stoppwort kann leer sein. Clients, die sich auf diese beiden Felder zur Erkennung von Trunkierungen verlassen, sollten dies beachten.
# stop mit 6 Einträgen / ein 33-Byte-Eintrag -> HTTP 400
"Ungültige Anfrage: stop-Array zu lang. Erwartete ein Array mit maximaler Länge 5, erhielt jedoch ein Array mit Länge 6."
"Ungültige Anfrage: Stoppsequenz darf nicht länger als 32 sein, erhielt jedoch 33."

2. Denkmodus: reasoning_effort unterstützt nur max

Das Denken von K3 ist standardmäßig aktiviert, und reasoning_effort unterstützt nur eine einzige Stufe: "max".

Mehrturngespräche müssen die Denkgeschichte unverändert zurückgeben: Laut der offiziellen Dokumentation von Moonshot wird K3 mit bewahrtem Denken trainiert, sodass in Mehrturngesprächen die vorherige Assistentenmeldung vollständig und unverändert (einschließlich des Denkens) zurückgegeben werden muss. Fehlende Denkgeschichte führt zu instabiler Ausgabequalität. Wenn Sie ein Sitzungsmanagement-Framework oder eine Proxy-Schicht verwenden, bestätigen Sie, dass der Denkinhalt unverändert zurückgegeben wird.
Chat Completions

Denkinhalt wird im Feld reasoning_content der Antwort zurückgegeben; in Mehrturngesprächen muss die vorherige Assistentenmeldung (einschließlich reasoning_content) unverändert zurückgegeben werden.

from openai import OpenAI

client = OpenAI(
    base_url="https://aihubmix.com/v1",
    api_key="<AIHUBMIX_API_KEY>",
)

completion = client.chat.completions.create(
    model="kimi-k3",
    reasoning_effort="max",
    messages=[
        {"role": "user", "content": "Eine Schnecke ist am Boden eines 10-Meter-Brunnens. Jeden Tag klettert sie 3 Meter, aber jede Nacht rutscht sie 2 Meter zurück. Wie viele Tage braucht sie, um die Spitze zu erreichen?"}
    ],
)

print(completion.choices[0].message.reasoning_content)
print(completion.choices[0].message.content)
# Mehrturn: die vorherige Assistentenmeldung unverändert zurückgeben
messages = [
    {"role": "user", "content": "Was ist die Hauptstadt von Frankreich?"},
    {"role": "assistant", "content": "Paris.", "reasoning_content": "<reasoning_content aus der vorherigen Antwort>"},
    {"role": "user", "content": "Und die Bevölkerung?"}
]
Verifiziert: die Antwort gibt reasoning_content zurück; nach der unveränderten Rückgabe der vorherigen Assistentenmeldung (einschließlich reasoning_content) antworten die nachfolgenden Runden normal.
Antworten

Denkinhalt wird als reasoning Ausgabeelement zurückgegeben; in Mehrturngesprächen fügen Sie die Ausgabeelemente der vorherigen Runde (reasoning + message) unverändert in input ein.

from openai import OpenAI

client = OpenAI(
    base_url="https://aihubmix.com/v1",
    api_key="<AIHUBMIX_API_KEY>",
)

response = client.responses.create(
    model="kimi-k3",
    input="Antworte mit einem Wort: Hauptstadt von Frankreich",
)

# Beobachtete response.output Elementtypen: ["reasoning", "message"]; Text: "Paris"
# Mehrturn: input = [erste Benutzeranfrage] + response.output + [nächste Benutzeranfrage]
# Beobachtete Antwort der zweiten Runde mit zurückgegebenen Ausgabeelementen: "Berlin"

Nachrichten

Denkinhalt wird als native thinking Inhaltsblöcke zurückgegeben; in Mehrturngesprächen müssen die vorherigen Assistenteninhaltsblöcke (einschließlich der Denkblöcke) unverändert zurückgegeben werden.

from anthropic import Anthropic

client = Anthropic(
    api_key="<AIHUBMIX_API_KEY>",
    base_url="https://aihubmix.com"
)

response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    messages=[
        {"role": "user", "content": "Antworte mit einem Wort: Hauptstadt von Frankreich"}
    ],
)

# Beobachtete response.content Blocktypen: ["thinking", "text"]; Text: "Paris"
# Mehrturn: response.content unverändert als Assistentenmeldung zurückgeben

3. Abtastparameter sind festgelegt

Die Abtastparameter von K3 sind vom Modellanbieter festgelegt: temperature 1.0, top_p 0.95, n 1 und presence_penalty / frequency_penalty 0. Die offizielle Empfehlung ist, diese Parameter aus den Anfragen wegzulassen.

Hinweis: Die festen Abtastwerte sind Teil der offiziellen Spezifikation und können nicht aus Antwortsignalen verifiziert werden; folgen Sie der offiziellen Empfehlung und lassen Sie diese Parameter weg.

4. Werkzeugaufruf und dynamisches Laden von Werkzeugen

tools unterstützt bis zu 128 Werkzeuge; tool_choice unterstützt das Erzwingen und Deaktivieren von Werkzeugaufrufen. K3 unterstützt auch das dynamische Laden von Werkzeugen: das Injizieren neuer Werkzeuge während des Gesprächs über das tools Feld einer Systemnachricht (eine Nachrichtenform, die spezifisch für die Chat-API ist).
Chat Completions

tool_choice unterstützt auto / none / required; required zwingt das Modell, ein Werkzeug aufzurufen. Dynamisches Laden von Werkzeugen: die systemnachricht, die das Werkzeug injiziert, enthält keinen content, die injizierten Werkzeuge treten für nachfolgende Runden in Kraft, und die Nachricht muss in jeder Anfrage erneut enthalten sein.

messages = [
    {"role": "system", "content": "Du bist ein hilfreicher Assistent."},
    {"role": "user", "content": "Hallo."},
    {"role": "assistant", "content": "Hallo, wie kann ich Ihnen helfen?"},
    # Ein neues Werkzeug während des Gesprächs injizieren: nur das tools-Feld, kein Inhalt
    {
        "role": "system",
        "tools": [
            {
                "type": "function",
                "function": {
                    "name": "get_time",
                    "description": "Holen Sie sich die aktuelle Zeit",
                    "parameters": {"type": "object", "properties": {}},
                },
            }
        ],
    },
    {"role": "user", "content": "Wie spät ist es jetzt?"},
]
# tool_choice="required" mit Eingabe "Hallo" -> das Modell wird gezwungen, das Werkzeug aufzurufen
"finish_reason": "tool_calls",
"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"city\":\"New York\"}"}}]
Verifiziert: tool_choice: "required" zwingt einen Werkzeugaufruf, selbst bei nicht verwandten Eingaben; "none" unterdrückt Werkzeugaufrufe; Werkzeuge, die während des Gesprächs über eine Systemnachricht ohne content injiziert werden, können normal aufgerufen werden.
Antworten

Werkzeugdefinitionen verwenden eine flache Struktur (name auf der obersten Ebene); das Erzwingen eines Aufrufs verwendet ebenfalls tool_choice: "required", und Aufrufe werden als function_call Ausgabeelemente zurückgegeben. Die Unterstützung für dynamisches Laden von Werkzeugen ist in Arbeit; derzeit müssen alle Werkzeuge im obersten tools Parameter deklariert werden.

response = client.responses.create(
    model="kimi-k3",
    input="Hallo",
    tools=[{
        "type": "function",
        "name": "get_weather",
        "description": "Holen Sie sich das Wetter für eine Stadt",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice="required",
)

# Beobachtete Ausgabe enthält: {"type": "function_call", "name": "get_weather", "arguments": "{\"city\":\"London\"}"}

Nachrichten

Werkzeuge verwenden das Anthropic-Format (input_schema); erzwingen Sie einen Aufruf mit tool_choice: {"type": "any"} und deaktivieren Sie Aufrufe mit {"type": "none"}. ❗ Der offizielle Messages (Anthropic-kompatible) Endpunkt von Kimi K3 unterstützt kein dynamisches Laden von Werkzeugen: In Tests gibt die injizierende Nachricht 200 zurück, aber das injizierte Werkzeug hat keine Wirkung (das Modell kann es nicht aufrufen). Deklarieren Sie alle Werkzeuge im obersten tools Parameter.

response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    tools=[{
        "name": "get_weather",
        "description": "Holen Sie sich das Wetter für eine Stadt",
        "input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice={"type": "any"},
    messages=[{"role": "user", "content": "Hallo"}],
)

# Beobachtet: stop_reason "tool_use"; der Inhalt enthält einen tool_use Block, der get_weather aufruft

5. Strukturierte Ausgabe

Strukturierte Ausgaben sorgen dafür, dass das Modell Inhalte zurückgibt, die strikt einem bestimmten JSON-Schema entsprechen.
Chat Completions

response_format unterstützt json_schema im strict Modus.

completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {"role": "user", "content": "Paris ist die Hauptstadt von Frankreich. Extrahiere den Stadtnamen."}
    ],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "extract",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    },
)

# Beobachtete Antwortinhalte: {"city":"Paris"}
Verifiziert: die Ausgabe ist gültiges JSON, das dem Schema entspricht.
Antworten

Strukturierte Ausgaben werden über text.format deklariert.

response = client.responses.create(
    model="kimi-k3",
    input="Paris ist die Hauptstadt von Frankreich. Extrahiere den Stadtnamen.",
    text={
        "format": {
            "type": "json_schema",
            "name": "extract",
            "strict": True,
            "schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
        }
    },
)

# Beobachteter Ausgabetext: {"city":"Paris"}

Nachrichten

Der offizielle Messages (Anthropic-kompatible) Endpunkt von Kimi K3 unterstützt keine strukturierte Ausgabe: die Felder für strukturierte Ausgaben werden stillschweigend ignoriert: die Anfrage gibt HTTP 200 mit freiem Text zurück, ohne Fehler oder Rückfallhinweis, und die nachgelagerte JSON-Analyse schlägt fehl. Wenn Sie strukturierte Ausgaben benötigen, verwenden Sie die Chat Completions oder Responses API.

6. Kontext-Caching ist automatisch

Das Kontext-Caching von K3 ist automatisch aktiviert, ohne dass Parameter erforderlich sind. Wenn ein wiederholter langer Präfix den Cache erreicht, wird die Anzahl der Treffer in der Nutzung gemeldet (der Feldname variiert je nach API). Die Preise für den Cache finden Sie auf der Modellseite.
Chat Completions

# Nutzung des zweiten Aufrufs mit einem identischen langen Präfix
"prompt_tokens_details": {"cached_tokens": 1536}
Verifiziert: die zweite Anfrage mit einem identischen langen Präfix meldet den Treffer in usage.prompt_tokens_details.cached_tokens.
Antworten
# Nutzung des zweiten Responses-Aufrufs mit identischen langen Anweisungen
"input_tokens_details": {"cached_tokens": 1536}

Nachrichten

# Nutzung des zweiten Messages-Aufrufs mit einem identischen langen Systemprompt
"cache_read_input_tokens": 1536

7. partial Präfix-Vervollständigung

Die Präfix-Vervollständigung ermöglicht es dem Modell, die Generierung von einem gegebenen Präfix fortzusetzen, was sich gut für die Codevervollständigung und formatgesteuerte Ausgaben eignet.
Chat Completions

Geben Sie "partial": true in der letzten Assistentenmeldung an.

messages = [
    {"role": "user", "content": "Schreibe ein Haiku über das Meer."},
    {"role": "assistant", "content": "Wellen falten sich zu Schaum,", "partial": True},
]

# Präfix: "Wellen falten sich zu Schaum,"  ->  Fortsetzung, die vom Modell zurückgegeben wird
# Salz hängt in der Luft—
# Mond zieht die Gezeiten nach Hause.
Verifiziert: die Generierung setzt sich vom gegebenen Präfix fort, ohne es zu wiederholen.
Antworten

Geben Sie das Präfix als Assistentenmeldung am Ende des input Arrays an; kein partial Parameter ist erforderlich.

response = client.responses.create(
    model="kimi-k3",
    input=[
        {"role": "user", "content": "Schreibe ein Haiku über das Meer."},
        {"role": "assistant", "content": "Wellen falten sich zu Schaum,"},
    ],
)

# Beobachtete Fortsetzung: "Salz hängt in der Luft— / Mond zieht die Gezeiten nach Hause."

Nachrichten

Die gleiche Fähigkeit wird mit der nativen Assistenten-Vorbefüllung des Protokolls erreicht, ohne dass ein partial Parameter erforderlich ist: Geben Sie das Präfix als letzte Assistentenmeldung an.

response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    messages=[
        {"role": "user", "content": "Schreibe ein Haiku über das Meer."},
        {"role": "assistant", "content": "Wellen falten sich zu Schaum,"},
    ],
)

# Beobachtete Fortsetzung: "Salz wind trägt den Schrei der Möwe— / Gezeiten ziehen ..."

8. Visionseingabe

Bilder werden als base64 übergeben; das Format des Inhaltsblocks variiert je nach API.
Chat Completions

messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "Was ist die dominante Farbe dieses Bildes? Ein Wort."},
            {"type": "image_url", "image_url": {"url": "data:image/png;base64,<BASE64>"}},
        ],
    }
]

# Beobachteter Antwortinhalt: "Rot"  (Eingabe: ein 64x64 solides rotes PNG)
Verifiziert: base64-Bild-Eingaben funktionieren, und das Modell beschreibt das Testbild korrekt.
Antworten
input = [
    {
        "role": "user",
        "content": [
            {"type": "input_text", "text": "Was ist die dominante Farbe dieses Bildes? Ein Wort."},
            {"type": "input_image", "image_url": "data:image/png;base64,<BASE64>"},
        ],
    }
]

# Beobachteter Ausgabetext: "Rot"

Nachrichten

messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "Was ist die dominante Farbe dieses Bildes? Ein Wort."},
            {"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "<BASE64>"}},
        ],
    }
]

# Beobachteter Antworttext: "Rot"

9. Verifizierte Referenz: Latenz und Nutzung einer langen Einzelaufrufaufgabe

Das Denken von K3 ist auf dem maximalen Niveau festgelegt, sodass Einzelanfragen für komplexe Aufgaben deutlich länger dauern als bei typischen Modellen. Gemessene Daten aus einer Einzeldatei-HTML-Spielgenerierungsaufgabe (ein Prompt mit einem Referenzbild, das in einem Durchgang ohne Iteration generiert wurde): Die Einzelanfrage dauerte 2.541 Sekunden (etwa 42 Minuten), mit 74.994 Abschluss-Tokens, von denen 54.486 (73%) Denk-Tokens waren; die endgültige Ausgabe bestand aus 1.275 Zeilen direkt ausführbarem Code, mit finish_reason stop.

Empfehlungen auf der Client-Seite:

  • Setzen Sie die Client-Timeouts auf Minuten oder länger und bevorzugen Sie Streaming für lange Aufgaben;
  • Hinterlassen Sie ausreichend Spielraum in max_completion_tokens: In diesem Fall verbrauchte das Denken allein 54.486 Tokens.

10. Fähigkeit × API-Unterstützungsmatrix

Jede Zelle in der folgenden Tabelle wurde am 2026-07-17 durch tatsächliche Aufrufe der AIHubMix Produktions-APIs verifiziert; jede Zelle zeigt die Parameter-/Feldsyntax für die entsprechende API.

Fähigkeit Chat Completions Responses Messages
Denkinhalt in der Antwort reasoning_content Feld reasoning Ausgabeelement thinking Inhaltsblock
Denkgeschichte Rückgabe ✅ Assistentenmeldung unverändert zurückgegeben ✅ Ausgabeelemente unverändert zurückgegeben ✅ Inhaltsblöcke unverändert zurückgegeben
Werkzeugaufrufe erzwingen/deaktivieren tool_choice: "required" / "none" tool_choice: "required" {"type": "any"} / {"type": "none"}
Dynamisches Laden von Werkzeugen ✅ Systemnachricht mit tools (kein content) ➖ Unterstützung in Arbeit ❗ Nicht unterstützt am offiziellen Messages (Anthropic-kompatiblen) Endpunkt
Strukturierte Ausgabe response_format (json_schema + strict) text.format (json_schema) ❗ Nicht unterstützt am offiziellen Endpunkt; Felder werden stillschweigend ignoriert (200 + freier Text); verwenden Sie Chat / Responses stattdessen
Automatische Cache-Trefferzählung usage.prompt_tokens_details.cached_tokens usage.input_tokens_details.cached_tokens usage.cache_read_input_tokens
Präfix-Vervollständigung "partial": true ✅ Assistenten-Vorbefüllung ✅ Assistenten-Vorbefüllung (protokollnative)
Visionseingabe image_url (base64) input_image (base64) image Inhaltsblock (base64)
Stoppsequenzen stop (Limits validiert) ➖ Unterstützung in Arbeit stop_sequences Limits identisch validiert, aber bei einem Treffer wird weder stop_reason: "stop_sequence" noch der stop_sequence Wert zurückgegeben

FAQ

Welche APIs unterstützt K3 auf AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses) und die Claude-kompatible Messages API (/v1/messages).

Kann das Denken deaktiviert oder verringert werden?
Nein. Das Denken von K3 ist standardmäßig aktiviert, und reasoning_effort unterstützt nur die einzelne "max" Stufe.

Warum muss reasoning_content in Mehrturngesprächen zurückgegeben werden?
K3 wird mit bewahrtem Denken trainiert; Moonshot verlangt, dass die vorherige Assistentenmeldung vollständig und unverändert zurückgegeben wird. Fehlende Denkgeschichte führt zu instabiler Ausgabequalität.

Was sind die Grenzen des stop Parameters?
Maximal 5 Stoppsequenzen, jede nicht länger als 32 Bytes; das Überschreiten eines der Limits führt zu einem 400-Fehler.

Unterstützt die Messages API strukturierte Ausgaben?
❗ Nein. Der offizielle Messages (Anthropic-kompatible) Endpunkt von Kimi K3 ignoriert stillschweigend strukturierte Ausgabefelder (gibt 200 mit freiem Text zurück und keinen Fehler). Für strukturierte Ausgaben verwenden Sie response_format bei Chat Completions oder text.format bei Responses.

Warum dauern Einzelanfragen an K3 so lange?
Das Denken von K3 ist auf dem maximalen Niveau festgelegt, und Denk-Tokens machen einen großen Anteil bei komplexen Aufgaben aus (73% der Abschluss-Tokens im gemessenen Fall). Setzen Sie die Client-Timeouts auf Minuten oder länger und verwenden Sie Streaming.


Für Preise und Echtzeitstatus siehe die Kimi K3 Modellseite; für weitere Modelle besuchen Sie die Modellgalerie.

Letzte Aktualisierung: 2026-07-17