Tutorial
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
curlund Pythonsrequestssowie 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
- deepseek-v4.1-flash Modellseite
/v1/responses-Referenz/v1/chat/completions-Referenz- Authentifizierung
- Preise
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 →-
Tutorial
So rufen Sie hailuo-2.3-fast/image-to-video über die HiAPI API auf: curl und Python in der Praxis
Die erste lauffähige Anfrage für die schnelle, kostengünstige Bild-zu-Video-Stufe – von der Modell-ID bis zum heruntergeladenen MP4
-
Tutorial
So rufen Sie hailuo-2.3/text-to-video über die HiAPI API auf: curl, Python und lauffähige Anfragebeispiele
-
Tutorial
Kandinsky 6.0 Pro Text-zu-Video auf HiAPI: curl- und Python-Tutorial
Eine anfrageorientierte praktische Demonstration: Aufbau des Aufrufs vom Prompt zum Videoclip, Absenden der Anfrage, Abfragen des Fertigstellungsstatus und Herunterladen des Ergebnisses