HiAPI
Blog

Tutorial

So verwendest du deepseek-v4.1-flash über die hiapi API: curl, Python und funktionierende Request-Beispiele

Sep 9, 2026
So verwendest du deepseek-v4.1-flash über die hiapi API: curl, Python und funktionierende Request-Beispiele

deepseek-v4.1-flash ist ein schnelles, kostengünstiges Reasonings-Modell, das über die einheitliche hiapi-API aufgerufen werden kann. Derzeit ist es auf der Modellseite als Preview gekennzeichnet, was bedeutet, dass der zugrunde liegende Build rotieren kann, während die öffentliche Modell-ID (deepseek-v4.1-flash) stabil bleibt – bei einer Rotation musst du keinen Code ändern. Diese Anleitung zeigt einen tatsächlich funktionierenden Request: den richtigen Endpunkt, die richtigen Felder, den richtigen Authentifizierungs-Header.

Voraussetzungen

  • Ein hiapi-API-Schlüssel (sk-...). Hole ihn aus deiner hiapi-Konsole und exportiere ihn:
export HIAPI_API_KEY="sk-your-key-here"
  • Beliebiger HTTP-Client. Die folgenden Beispiele verwenden curl und Pythons requests sowie Hinweise zur Verwendung des offiziellen OpenAI SDK.

Minimales funktionierendes Beispiel

hiapi bietet zwei Text-Endpunkte. /v1/responses ist der empfohlene Standard-Endpunkt (OpenAI-Responses-API-Form, semantische SSE-Events). /v1/chat/completions ist der abwärtskompatible Endpunkt (OpenAI-Chat-Completions-Form) – verwende ihn nur, wenn du eine bestehende Chat-Completions-Integration portierst. Diese Anleitung verwendet /v1/responses.

curl

curl https://api.hiapi.ai/v1/responses \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "input": [
      {"role": "user", "content": "Explain what a hash map is in two sentences."}
    ]
  }'

Eine erfolgreiche Antwort gibt ein output-Array mit der Antwort des Modells sowie einen usage-Block zurück:

{
  "id": "resp_...",
  "model": "deepseek-v4.1-flash-expires-on-0910",
  "status": "completed",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {"type": "output_text", "text": "A hash map stores key-value pairs..."}
      ]
    }
  ],
  "usage": {
    "input_tokens": 14,
    "output_tokens": 42,
    "total_tokens": 56,
    "output_tokens_details": {"reasoning_tokens": 0}
  }
}

Beachte, dass das model-Feld in der Antwort als deepseek-v4.1-flash-expires-on-0910 gekennzeichnet ist – das ist der aktuell feste interne Build, der dieses Preview-Modell bedient. Dies ist das erwartete Verhalten bei Preview-Modellen auf hiapi und kein Signal, dass das Modell kurz vor der Abschaltung steht; wenn du weiterhin die reine deepseek-v4.1-flash-ID anforderst, leitet hiapi dich automatisch zum aktuellen Build weiter.

Python

import os
import requests

resp = requests.post(
    "https://api.hiapi.ai/v1/responses",
    headers={
        "Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "deepseek-v4.1-flash",
        "input": [
            {"role": "user", "content": "Explain what a hash map is in two sentences."}
        ],
    },
    timeout=60,
)
resp.raise_for_status()
data = resp.json()
print(data["output"][0]["content"][0]["text"])
print(data["usage"])

Stattdessen das OpenAI SDK verwenden

hiapi's /v1/responses und /v1/chat/completions sind mit dem offiziellen OpenAI SDK kompatibel – richte die Basis-URL einfach auf hiapi und behalte die Modell-ID als reinen Namen bei:

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["HIAPI_API_KEY"],
    base_url="https://api.hiapi.ai/v1",
)
resp = client.responses.create(
    model="deepseek-v4.1-flash",
    input=[{"role": "user", "content": "Explain what a hash map is in two sentences."}],
)
print(resp.output[0].content[0].text)

Praxis für den Produktivbetrieb

Requests sind zustandslos – die gesamte Konversation muss erneut gesendet werden

hiapi speichert für dieses Modell keinen serverseitigen Konversationszustand. Jeder Request muss die vollständige Nachrichtenhistorie im input enthalten. Sende nicht store, previous_response_id, conversation, background oder context_management – diese werden nicht unterstützt und ignoriert oder abgelehnt. Bei mehrteiligen Konversationen hängst du jede neue user/assistant-Nachricht selbst an das input-Array an und sendest bei jedem Request das gesamte Array.

history = [{"role": "user", "content": "What's a hash map?"}]
# ... call, get a reply, then append it and the next question ...
history.append({"role": "assistant", "content": "<model's previous reply>"})
history.append({"role": "user", "content": "How is that different from a hash set?"})

Reasoning-Intensität

deepseek-v4.1-flash akzeptiert ein reasoning-Objekt, das steuert, wie viel interne Reasoning das Modell vor der Antwort durchführt. Die effort-Aufzählung dieses Modells ist none | high | max – beachte, dass dies nicht die auf hiapi bei einigen anderen Reasoning-Modellen verwendeten Stufen low/medium/high sind, gehe also nicht davon aus, dass diese sich direkt übertragen lassen.

{
  "model": "deepseek-v4.1-flash",
  "input": [{"role": "user", "content": "Prove that the square root of 2 is irrational."}],
  "reasoning": {"effort": "high"}
}

Reasoning-Tokens werden als Output-Tokens abgerechnet und separat in usage.output_tokens_details.reasoning_tokens ausgewiesen, daher können Requests mit high/max-Intensität selbst bei gleicher sichtbarer Antwortlänge deutlich teurer sein als none. Prüfe auf der Preisseite die aktuellen Token-Preise, bevor du eine Standardintensität für Produktivverkehr festlegst.

Streaming

Wenn du "stream": true übergibst, erhältst du Server-Sent Events statt eines einzelnen JSON-Blocks. /v1/responses streamt semantische Events, nicht rohe Textdeltas, die in Chat-Completions-Stil-[DONE]-Marker verpackt sind. Die Event-Sequenz eines normalen Abschlusses ist:

response.created
response.in_progress
response.output_item.added
response.content_part.added
response.output_text.delta   (repeated, one per chunk of text)
response.output_text.done
response.content_part.done
response.output_item.done
response.completed

Behandle response.completed als erfolgreiches Abschlussereignis. Behandle auch response.incomplete (z. B. Erreichen des Token-/Längenlimits) und response.failed (Serverfehler) als Endzustände – gehe nicht davon aus, dass jeder Stream mit response.completed endet.

import json
import requests

with requests.post(
    "https://api.hiapi.ai/v1/responses",
    headers={
        "Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "deepseek-v4.1-flash",
        "input": [{"role": "user", "content": "Count to 5."}],
        "stream": True,
    },
    stream=True,
    timeout=60,
) as r:
    for line in r.iter_lines():
        if not line or not line.startswith(b"data: "):
            continue
        event = json.loads(line[len(b"data: "):])
        if event.get("type") == "response.output_text.delta":
            print(event["delta"], end="", flush=True)
        elif event.get("type") in ("response.completed", "response.incomplete", "response.failed"):
            break

Fehlerbehandlung

Ein ungültiger oder fehlender API-Schlüssel führt zu HTTP 401 mit einem strukturierten Fehlerantwortkörper:

{"error": {"code": "permission_denied", "message": "..."}}

Prüfe resp.status_code und verzweige nach error.code, statt den Nachrichten-String zu parsen, da sich der Nachrichtentext ohne Vorankündigung ändern kann.

Verwandte Dokumentation

Häufige Fragen

Ist deepseek-v4.1-flash für die Produktion oder nur zum Testen geeignet? Es ist als Preview gekennzeichnet, was auf hiapi bedeutet, dass das Modell live und normal aufrufbar ist, der zugrunde liegende Build jedoch nach dem Ermessen von hiapi rotieren kann. Bei einer Rotation ändert sich die öffentliche Modell-ID nicht – dein Code funktioniert ohne Änderungen weiter. Wenn du eine Nicht-Preview-Garantie benötigst, sieh dir die Nicht-Preview-Varianten von DeepSeek v4 in der Modellliste an.

Warum zeigt die Antwort einen anderen Modellnamen an als den, den ich angefragt habe? Im model-Feld der Antwort siehst du einen Wert wie deepseek-v4.1-flash-expires-on-0910. Das ist der spezifische feste Build, der aktuell deine Requests unter der deepseek-v4.1-flash-ID bedient – das ist das erwartete Verhalten bei Preview-Modellen, kein Fehler.

Kann ich /v1/chat/completions statt /v1/responses verwenden? Ja, hiapi unterstützt beides für dieses Modell. /v1/chat/completions verwendet die Request-/Response-Form von OpenAI Chat Completions (messages-Array, choices[0].message.content) statt der input/output-Form von /v1/responses. Wähle den Endpunkt, der zu deiner bestehenden Integration passt; neue Integrationen sollten standardmäßig /v1/responses verwenden.

Speichert hiapi meinen Konversationsverlauf, damit ich nur die neueste Nachricht senden kann? Nein. Dieses Modell hat kein previous_response_id und keinen serverseitigen Konversationszustand – sende bei jedem Request die vollständige Nachrichtenhistorie im input.

Was genau überspringt reasoning.effort: "none"? Es überspringt den internen Reasoning-Prozess des Modells vollständig und antwortet direkt. Für Aufgaben, die von mehrstufigem Reasoning profitieren (Mathematik, Logik mit mehreren Bedingungen), verwende "high" oder "max"; höhere Intensität geht mit entsprechend höherem Output-Token-Verbrauch und Latenz einher.

Brauchen Streaming- und Nicht-Streaming-Requests separate API-Schlüssel? Nein – derselbe Authorization: Bearer sk-...-Schlüssel gilt für beides. Streaming wird ausschließlich über das Feld "stream": true im Request-Body gesteuert.

Ähnliche Artikel

Alle Artikel ansehen →

Starte mit persistenten KI-Artefakten

Hol dir deinen API-Key und rufe Bild-, Video- und Audiomodelle über eine einzige task-basierte API auf.

API-Dokumentation lesen