Die Landschaft der Code-KI kurz erklärt
Cursor, Aider, Cline, Continue.dev, Claude Code selbst — sie alle bauen auf denselben drei oder vier führenden LLMs auf. Der Unterschied liegt nicht im Modell, sondern in der agentischen Schleife darum herum, der Dateiindizierung, der Diff-Anwendung und der Benutzererfahrung. Wenn Sie eines davon entwickeln (oder einen Coding-Copiloten in Ihrem eigenen Entwicklerprodukt), finden Sie auf dieser Seite das Modellangebot, die tatsächlichen Kosten und das Latenzbudget.
Modellübersicht für Code-Workflows
- Claude Haiku 4.5 (
claude-haiku-4-5) — Autovervollständigung (etwa $0.0001–0.0005 pro Vervollständigung). Der Latenzgewinner: Streaming-Time-to-First-Token, vergleichbar mit einem direkten Anbieteraufruf - Claude Sonnet 5 (
claude-sonnet-5) — Chat mit Codebasis, Änderungen über mehrere Dateien, agentische Schleifen. Das Arbeitspferd auf Cursor-Niveau für $1.40 / $7.00 pro 1M - Claude Opus 5 (
claude-opus-5) — gründliche Prüfung, Architekturkritik, Sicherheitsprüfung. Langsamer (P50 ~3 s), aber der stärkste Reasoner, mit $3.50 / $17.50 pro 1M - GPT-5.6 Sol (
gpt-5-6-sol) — OpenAIs code-optimiertes Modell: vergleichbare Qualität, andere stilistische Präferenzen
Die beiden Kernabläufe
import json
from openai import OpenAI
client = OpenAI(api_key="sk-kn-...", base_url="https://api.kunavo.com/v1")
# Code completion (autocomplete-as-you-type)
def complete(file_content: str, cursor_offset: int, file_path: str) -> str:
before = file_content[:cursor_offset]
after = file_content[cursor_offset:]
resp = client.chat.completions.create(
model="claude-haiku-4-5", # FAST for IDE latency
messages=[
{"role": "system", "content": (
"Complete the code at the cursor. Output ONLY the inserted "
"text — no markdown, no explanation."
)},
{"role": "user", "content": (
f"<file path=\"{file_path}\">\n{before}<CURSOR>{after}\n</file>"
)},
],
max_tokens=200,
stop=["<CURSOR>", "</file>"],
)
return resp.choices[0].message.content
# Code review (heavier model). Claude enforces a json_schema
# response_format; json_object it does not.
REVIEW = {
"type": "object",
"properties": {
"comments": {"type": "array", "items": {
"type": "object",
"properties": {"file": {"type": "string"},
"line": {"type": "integer"},
"comment": {"type": "string"}},
"required": ["file", "line", "comment"],
"additionalProperties": False,
}},
"verdict": {"type": "string", "enum": ["approve", "request_changes"]},
},
"required": ["comments", "verdict"],
"additionalProperties": False,
}
def review(diff: str, conventions: str) -> dict:
resp = client.chat.completions.create(
model="claude-opus-5",
messages=[
{"role": "system", "content": [{
"type": "text",
"text": conventions, # team style guide, security policy
"cache_control": {"type": "ephemeral"},
}]},
{"role": "user", "content": f"Review this diff.\n\n{diff}"},
],
response_format={"type": "json_schema",
"json_schema": {"name": "review", "schema": REVIEW}},
max_tokens=2000,
)
return json.loads(resp.choices[0].message.content)Latenzbudget nach Funktion
- Inline-Autovervollständigung: TTFT muss <200 ms betragen. Claude Haiku 4.5. Ausgabe streamen, beim Verschieben des Cursors abbrechen
- Chat mit der Codebasis: TTFT <500 ms ist akzeptabel. Sonnet + Streaming. Antwort anzeigen, während sie erzeugt wird
- Bearbeitung / Refactoring mehrerer Dateien: 5–30 s sind normal. Fortschritt anzeigen, im Hintergrund ausführen, Diff zur Prüfung anzeigen
- PR-Review: 10–60 s sind akzeptabel. Opus führt die gründliche Analyse durch; als umsetzbare Kommentare formatieren
Kostenökonomie für ein Codeprodukt
Realistischer Verbrauch pro Entwickler und Monat (Power-User):
- ~500 Vervollständigungen/Tag × Haiku ~$0.0003 = $0.15/Tag = $4–5/Monat
- ~30 Chatsitzungen/Tag × Sonnet ~$0.05 = $1.50/Tag = $30–45/Monat
- ~3 PR-Reviews/Woche × Opus ~$0.30 = $1/Woche = $4/Monat
- Power-User: ~$40–55/Monat an API-Kosten
- Durchschnittlicher Nutzer: ~$10–15/Monat
Die meisten Code-KI-Produkte kosten $20/Nutzer/Monat — es gibt Spielraum für eine Marge, aber bei Power-Usern ist sie knapp. Prompt-Caching ist unverzichtbar: Der Workspace-Kontext (Dateistruktur, Konventionen, aktuelle Dateien) kommt in den Cache; pro Aufruf ist nur der unmittelbare Bearbeitungskontext neu. Spart 50–70 % bei den Eingaben. Caching einrichten.
Architekturmuster zum Übernehmen
- FIM-Prompting (Fill-in-the-Middle): Statt „ab hier vervollständigen“ übergib
before<CURSOR>after, damit das Modell beide Seiten verwendet - Stop-Sequenzen:
stop=["<CURSOR>", "</file>", "```\n"]verhindert, dass das Modell über die angeforderte Vervollständigung hinaus etwas erfindet - Tool-Nutzung für Bearbeitungen mehrerer Dateien: Bitte das Modell nicht, 5 Dateien in einer Antwort auszugeben. Verwende
tools=[{name: 'edit_file', ...}], damit es strukturierte Änderungen erzeugt, die du atomar anwendest - Spekulatives Decoding per Streaming: Zeige die ersten ~50 Token, sobald sie eintreffen; Nutzer wählen die richtige Variante auch dann, wenn die vollständige Antwort noch nicht fertig ist
Anbieter in Sekunden wechseln
Kunavo ist OpenAI-wire-kompatibel. Wenn du deinen Assistenten mit dem OpenAI SDK erstellt hast, tausche base_url aus und erhältst Zugriff auf Claude und GPT mit demselben Code. Siehe Claude mit dem OpenAI SDK aufrufen für die Migration.
Start: /app/signup — Pay-as-you-go ab einer Aufladung von $10 (~30.000 Autocomplete-Aufrufe), Guthaben verfällt nie. Endpoint-Referenz unter /docs/chat und die native Anthropic Messages API unter /docs/messages.
FAQ
What does a heavy user of an AI coding assistant cost in API spend?
Roughly $40–55 per month against $20-per-user pricing. That margin only works because prompt caching cuts input cost by 50–70%.
Which model fits which coding-assistant surface?
Inline autocomplete needs time-to-first-token under 200ms, which points to Claude Haiku 4.5. Chat-with-codebase needs under 500ms, which is Claude Sonnet 4.6. PR review tolerates 10–60 seconds, so Claude Opus 4.7 fits there.
How should autocomplete prompts be formatted?
Use Fill-in-Middle prompting: format the request as before<CURSOR>after so the model sees both sides of the caret, and set stop=['<CURSOR>', '</file>'] to prevent overflow.
How should an assistant handle multi-file edits?
Pass a tool definition such as tools=[{name:'edit_file', ...}] and apply the edits atomically, rather than asking the model to dump several whole files into one response.