{"author":{"@type":"Person","name":"Alexander Bock","url":"https://abxk.ai/de/autor/alexander-bock/"},"categories":["AI Development"],"content":{"markdown":"Chat-Apps sind der einfachste Weg, ein großes Sprachmodell zu nutzen. Sobald KI aber in Ihrer eigenen Software arbeiten soll — in einem Support-Formular, einem Berichtsgenerator oder einem kleinen internen Tool —, muss Ihr Programm direkt mit dem Modell sprechen: über seine **API** (Application Programming Interface, eine Programmierschnittstelle). Ihr Code schickt eine Anfrage, und die Antwort kommt als Daten zurück, mit denen Ihr Programm weiterarbeiten kann.\n\nDies ist Teil 1 von Level 1 unseres Lernpfads AI Development. Sie legen einen API-Schlüssel an, speichern ihn sicher, senden eine erste Anfrage mit Python, lesen die Antwort und behandeln Fehler. Wenn Tokens und Kontextfenster für Sie neu sind, lesen Sie zuerst [APIs, Tokens und Kontextfenster erklärt](/de/ai-development/learn/apis-tokens-and-context-windows/) aus Level 0.\n\n## Was bei einem API-Aufruf passiert\n\nEin API-Aufruf ist ein kurzer Austausch zwischen zwei Programmen über das Internet. Ihr Programm schickt eine **Anfrage** (Request) an eine feste Webadresse, den **Endpunkt** (Endpoint). Der Server des Anbieters prüft Ihren Schlüssel und Ihre Limits, gibt Ihre Nachrichten an das Modell weiter und sendet eine **Antwort** (Response) zurück. Anfrage und Antwort sind in **JSON** geschrieben, einem einfachen Textformat aus Namen und Werten, das fast jede Programmiersprache lesen kann.\n\n![Sequenzdiagramm: Ihr Code schickt eine Anfrage mit Schlüssel, Modell und Nachrichten; die API des Anbieters prüft Schlüssel und Limits und leitet die Nachrichten weiter; das Modell erzeugt die Antwort; die Antwort mit Text, Stoppgrund und Token-Verbrauch kommt zu Ihrem Code zurück](/images/learn/de/your-first-llm-api-call-sequence.webp \"Ein API-Aufruf in fünf Schritten: Anfrage hin, Prüfung beim Anbieter, Antwort zurück.\")\n\nBei einer typischen Chat-API erinnert sich das Modell nicht an frühere Aufrufe. Jede Anfrage muss alles enthalten, was das Modell braucht: die Anweisungen, die Frage und in einem Gespräch die früheren Nachrichten, auf die es ankommt. Das klingt nach Mehrarbeit, macht Ihre App aber berechenbar: Das Modell sieht genau das, was Sie schicken.\n\n## Schritt 1: API-Schlüssel anlegen und aus dem Code heraushalten\n\nEin **API-Schlüssel** (API Key) ist eine lange geheime Zeichenfolge, die Sie gegenüber dem Anbieter ausweist. Jede Anfrage mit Ihrem Schlüssel wird Ihrem Konto berechnet — behandeln Sie ihn wie ein Passwort.\n\n1. Öffnen Sie die Entwicklerkonsole eines Modellanbieters, legen Sie ein Konto an und richten Sie die Abrechnung ein.\n2. Erstellen Sie einen neuen Schlüssel mit einem klaren Namen wie „faq-bot-dev“, damit Sie später wissen, wo er verwendet wird.\n3. Kopieren Sie den Schlüssel sofort. Viele Konsolen zeigen ihn nur ein einziges Mal.\n4. Speichern Sie ihn in einer **Umgebungsvariable**: einem benannten Wert, der in Ihrem System oder in den Einstellungen Ihres Hostings liegt — nicht im Quellcode.\n\nUnter macOS oder Linux setzen Sie die Variable für die aktuelle Terminal-Sitzung so:\n\n```bash\nexport LLM_API_KEY=\"hier-den-schluessel-einfuegen\"\n```\n\nUnter Windows in der PowerShell:\n\n```powershell\n$env:LLM_API_KEY = \"hier-den-schluessel-einfuegen\"\n```\n\nIn Projekten legen viele Entwickler Schlüssel in einer lokalen Datei namens `.env` ab und laden sie mit einer kleinen Bibliothek. Tragen Sie `.env` in Ihre `.gitignore`-Datei ein, damit der Schlüssel nie in der Versionsverwaltung landet.\n\n{{\u003c callout type=\"warning\" title=\"Vor dem ersten Commit prüfen\" \u003e}}\nFühren Sie vor dem Commit `git status` aus. Taucht `.env` in der Liste auf, greift Ihre `.gitignore` noch nicht: Beheben Sie das zuerst. Ein Schlüssel, der einmal in einem Commit gelandet ist, gilt als kompromittiert, auch wenn Sie ihn später löschen. Was dann zu tun ist, hat Level 0 erklärt: widerrufen und einen neuen erzeugen. Teil 5 dieses Levels zeigt, [wo der Schlüssel in einer veröffentlichten App liegt](/de/ai-development/learn/deploy-a-small-ai-web-app/).\n{{\u003c /callout \u003e}}\n\n## Schritt 2: Die Anfrage zusammenbauen\n\nEine Anfrage hat drei Teile: wohin sie geht, wer sie schickt und was sie verlangt.\n\n![Kommentierte Anfrage: die Adresse des Endpunkts, der Authorization-Header mit dem API-Schlüssel aus einer Umgebungsvariable, der Modellname, die Nachrichten mit den Rollen system und user sowie die Einstellungen temperature und max tokens](/images/learn/de/your-first-llm-api-call-request.webp \"Die Teile einer typischen Chat-Anfrage. Die Feldnamen unterscheiden sich je nach Anbieter leicht.\")\n\n- **Endpunkt und Methode.** Die Webadresse steht in der Dokumentation des Anbieters. Daten senden Sie mit der HTTP-Methode POST.\n- **Header.** Zusatzzeilen, die mit der Anfrage reisen: Ihr API-Schlüssel und der Inhaltstyp `application/json`. Viele Anbieter erwarten den Schlüssel als `Authorization: Bearer …`, andere in einem Header mit anderem Namen.\n- **Body.** Das JSON mit Modell, Nachrichten und Einstellungen.\n\nJede Nachricht hat eine **Rolle**. Die System-Nachricht enthält Regeln für das ganze Gespräch. User-Nachrichten enthalten die Eingabe. Assistant-Nachrichten enthalten frühere Antworten des Modells. Teil 2 dieses Levels, [Prompt-Design für Entwickler](/de/ai-development/learn/prompt-design-for-developers/), zeigt, wie Sie sie gut formulieren.\n\nDie Einstellungen steuern, wie das Modell antwortet. Diese brauchen Sie am häufigsten:\n\n| Einstellung | Was sie bewirkt | Guter Startwert |\n|---|---|---|\n| model | Wählt das Modell, das antwortet | Ein mittelgroßes Modell Ihres Anbieters |\n| messages | System-Regeln, Eingabe, frühere Antworten | Eine System- und eine User-Nachricht |\n| temperature | Zufall: niedrig = fokussiert und wiederholbar, hoch = abwechslungsreicher | 0–0,3 für Fakten und Daten, höher für Ideen |\n| max tokens | Obergrenze für die Länge der Antwort | Genug für Ihre längste normale Antwort |\n| stream | Schickt die Antwort in kleinen Stücken, während sie entsteht | Aus in Skripten, an in Chat-Oberflächen |\n| stop | Text, an dem das Modell aufhört zu schreiben | Nur bei Bedarf |\n\nNamen und Wertebereiche unterscheiden sich je nach Anbieter, und manche Modelle — vor allem Reasoning-Modelle — akzeptieren nicht jede Einstellung. Die API-Referenz Ihres Anbieters nennt, was welches Modell unterstützt.\n\n## Schritt 3: Die erste Anfrage senden\n\nSo sieht die Anfrage als reines HTTP aus. `api.example.com` und `model-name` sind Platzhalter: Setzen Sie den Endpunkt und die Modell-ID aus der Dokumentation Ihres Anbieters ein.\n\n```http\nPOST https://api.example.com/v1/chat\nAuthorization: Bearer \u003cIhr Schlüssel aus LLM_API_KEY\u003e\nContent-Type: application/json\n\n{\n  \"model\": \"model-name\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"Antworten Sie in einfachem Deutsch, in höchstens drei Sätzen.\"},\n    {\"role\": \"user\", \"content\": \"Was ist ein API-Schlüssel?\"}\n  ],\n  \"temperature\": 0.2,\n  \"max_tokens\": 300\n}\n```\n\nDerselbe Aufruf in Python, mit der verbreiteten Bibliothek `requests` (Installation mit `pip install requests`):\n\n```python\nimport os\nimport requests\n\nAPI_KEY = os.environ[\"LLM_API_KEY\"]        # Schlüssel aus der Umgebung lesen\nURL = \"https://api.example.com/v1/chat\"    # Endpunkt Ihres Anbieters\n\npayload = {\n    \"model\": \"model-name\",\n    \"messages\": [\n        {\"role\": \"system\", \"content\": \"Antworten Sie in einfachem Deutsch, in höchstens drei Sätzen.\"},\n        {\"role\": \"user\", \"content\": \"Was ist ein API-Schlüssel?\"},\n    ],\n    \"temperature\": 0.2,\n    \"max_tokens\": 300,\n}\n\nresponse = requests.post(\n    URL,\n    headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n    json=payload,      # schickt den Body als JSON und setzt den Inhaltstyp\n    timeout=30,        # nie endlos warten\n)\nresponse.raise_for_status()   # bei einem Fehler mit Meldung abbrechen\nprint(response.json())\n```\n\nDie meisten Anbieter bieten außerdem offizielle Bibliotheken an, sogenannte **SDKs** (Software Development Kits), die diese Schritte auf wenige Zeilen verkürzen. Das ist bequem, die Struktur darunter bleibt aber dieselbe. Selbst Open-Weight-Modelle, die Sie selbst betreiben — etwa auf einer GPU-Cloud wie Runpod —, bieten meist dieselbe Art von Chat-Endpunkt. Ihr Code ändert sich dann kaum.\n\n## Schritt 4: Die Antwort lesen\n\nAuch die Antwort ist JSON. Ihr genauer Aufbau hängt vom Anbieter ab, aber Sie finden immer dieselben vier Arten von Informationen.\n\n![Kommentierte Antwort: ID und Modellversion, der erzeugte Text in einer Liste von Ausgabeteilen, der Stoppgrund und der Token-Verbrauch für Eingabe und Ausgabe](/images/learn/de/your-first-llm-api-call-response.webp \"Was zurückkommt: die Antwort plus die Daten, die Sie für Prüfung und Kostenkontrolle brauchen. Beispielwerte.\")\n\n- **Der erzeugte Text.** Er steht in einem Feld wie `content` oder `text`, oft innerhalb einer Liste, weil eine Antwort aus mehreren Teilen bestehen kann.\n- **Der Stoppgrund.** Er zeigt, ob das Modell normal fertig wurde oder an Ihre Grenze für max tokens gestoßen ist. Im zweiten Fall ist die Antwort abgeschnitten. Erhöhen Sie die Grenze oder bitten Sie um eine kürzere Antwort.\n- **Der Token-Verbrauch.** Die Zahl der Eingabe- und Ausgabe-Tokens. Anbieter rechnen pro Token ab — protokollieren Sie diese Zahlen vom ersten Tag an.\n- **ID und Modellversion.** Damit verfolgen Sie eine seltsame Antwort später zurück.\n\nDas Feld `model` entscheidet, wer antwortet. Unsere [LLM-Datenbank](/de/llm/) führt {{\u003c stat \"models\" \u003e}} Modelle mit Erscheinungsdatum und Testergebnissen. Hier einige aktuelle Modelle verschiedener Anbieter:\n\n{{\u003c llm-models \"claude-sonnet-5-5 gpt-6-luna gemini-3-8-flash deepseek-v4-1-flash\" \u003e}}\n\nDie Namen in unserer Datenbank sind Anzeigenamen. Die genaue Modell-ID für Ihre Anfrage steht in der Dokumentation des Anbieters. Teil 4 dieses Levels erklärt, wie Sie [ein Modell für Ihre App wählen](/de/ai-development/learn/choose-a-model-for-your-app/).\n\n## Schritt 5: Fehler behandeln und richtig wiederholen\n\nAufrufe scheitern. Das Netz bricht ab, der Anbieter ist überlastet, oder Ihre Anfrage enthält einen Fehler. Der **Statuscode** der Antwort verrät, welcher Fall vorliegt. Codes im 200er-Bereich bedeuten Erfolg, alles andere verlangt eine Reaktion:\n\n| Statuscode | Übliche Bedeutung | Was Sie tun |\n|---|---|---|\n| 400 | Fehlerhafte Anfrage: falsches Feld, ungültiges JSON, Eingabe zu lang | Anfrage korrigieren, nicht wiederholen |\n| 401 / 403 | Schlüssel fehlt, ist falsch oder hat keine Rechte | Schlüssel und Berechtigungen prüfen |\n| 404 | Unbekannter Endpunkt oder unbekannte Modell-ID | Adresse und Modell-ID prüfen |\n| 429 | Zu viele Anfragen oder Nutzungslimit erreicht | Warten, dann wiederholen; Limits prüfen |\n| 500 / 503 | Fehler oder Überlast beim Anbieter | Warten, dann wiederholen |\n| Zeitüberschreitung | Keine Antwort in der vorgesehenen Zeit | Ein- bis zweimal wiederholen, dann sauber abbrechen |\n\nDie Regel hinter der Tabelle: Vorübergehendes wiederholen, Dauerhaftes korrigieren.\n\n![Zwei Gruppen von Fehlern: vorübergehende wie 429, 500 bis 503 und Zeitüberschreitungen, die Sie wiederholen; dauerhafte wie 400, 401, 403 und 404, die Sie zuerst beheben; darunter die Regel für Exponential Backoff](/images/learn/de/your-first-llm-api-call-retry.webp \"Vorübergehende Fehler mit wachsenden Pausen wiederholen, dauerhafte Fehler in Code oder Einstellungen beheben.\")\n\nWarten Sie bei jedem neuen Versuch etwas länger — zum Beispiel etwa 1, dann 2, dann 4 Sekunden, plus einen kleinen zufälligen Zuschlag. Dieses Muster heißt **Exponential Backoff**. Der Zufallsanteil verhindert, dass viele Programme im selben Moment erneut anfragen. Enthält die Antwort einen `Retry-After`-Header, warten Sie mindestens so lange. Nach drei bis vier Versuchen brechen Sie ab und zeigen eine verständliche Meldung.\n\n```python\nimport random\nimport time\n\nimport requests\n\ndef post_with_retry(url, headers, payload, tries=4):\n    for attempt in range(tries):\n        try:\n            r = requests.post(url, headers=headers, json=payload, timeout=30)\n            if r.status_code != 429 and r.status_code \u003c 500:\n                r.raise_for_status()   # 400, 401, 403, 404: Anfrage korrigieren, kein neuer Versuch\n                return r.json()\n        except (requests.exceptions.Timeout, requests.exceptions.ConnectionError):\n            pass                       # Netzprobleme sind ebenfalls vorübergehend\n        if attempt \u003c tries - 1:        # nach dem letzten Versuch keine Pause\n            time.sleep(2 ** attempt + random.random())   # etwa 1, 2, 4 Sekunden\n    raise RuntimeError(\"Die API scheitert auch nach mehreren Versuchen.\")\n```\n\n## Übung: Ihr erster Aufruf in 20 Minuten\n\n{{\u003c callout type=\"try\" \u003e}}\nNutzen Sie das Python-Skript aus Schritt 3:\n\n1. Setzen Sie `LLM_API_KEY` im Terminal und führen Sie das Skript aus. Suchen Sie in der Ausgabe den erzeugten Text, den Stoppgrund und den Token-Verbrauch.\n2. Stellen Sie dieselbe Frage dreimal mit temperature 0 und dreimal mit temperature 1 (sofern Ihr Modell die Einstellung unterstützt). Wie stark ändern sich die Antworten?\n3. Setzen Sie max tokens auf 20. Sehen Sie sich den Stoppgrund und die abgeschnittene Antwort an.\n4. Ändern Sie ein Zeichen des Schlüssels und starten Sie das Skript erneut. Sie sollten einen Fehler erhalten, meist 401 Unauthorized — so sieht ein falscher Schlüssel aus.\n5. Tragen Sie die Eingabe- und Ausgabe-Tokens jedes Laufs in eine kleine Tabelle ein. Diese Gewohnheit brauchen Sie, um Kosten abzuschätzen.\n{{\u003c /callout \u003e}}\n\nSie möchten lieber keinen Code schreiben? No-Code-Plattformen wie MindStudio bauen auf denselben Modellen auf, ohne dass Sie diese Aufrufe selbst schreiben müssen — Teil 3 dieses Levels zeigt, wie Sie [eine einfache KI-App ohne Code bauen](/de/ai-development/learn/build-a-simple-ai-app-without-code/).","text":"Chat-Apps sind der einfachste Weg, ein großes Sprachmodell zu nutzen. Sobald KI aber in Ihrer eigenen Software arbeiten soll — in einem Support-Formular, einem Berichtsgenerator oder einem kleinen internen Tool —, muss Ihr Programm direkt mit dem Modell sprechen: über seine API (Application Programming Interface, eine Programmierschnittstelle). Ihr Code schickt eine Anfrage, und die Antwort kommt als Daten zurück, mit denen Ihr Programm weiterarbeiten kann.\nDies ist Teil 1 von Level 1 unseres Lernpfads AI Development. Sie legen einen API-Schlüssel an, speichern ihn sicher, senden eine erste Anfrage mit Python, lesen die Antwort und behandeln Fehler. Wenn Tokens und Kontextfenster für Sie neu sind, lesen Sie zuerst APIs, Tokens und Kontextfenster erklärt aus Level 0.\nWas bei einem API-Aufruf passiert Ein API-Aufruf ist ein kurzer Austausch zwischen zwei Programmen über das Internet. Ihr Programm schickt eine Anfrage (Request) an eine feste Webadresse, den Endpunkt (Endpoint). Der Server des Anbieters prüft Ihren Schlüssel und Ihre Limits, gibt Ihre Nachrichten an das Modell weiter und sendet eine Antwort (Response) zurück. Anfrage und Antwort sind in JSON geschrieben, einem einfachen Textformat aus Namen und Werten, das fast jede Programmiersprache lesen kann.\nEin API-Aufruf in fünf Schritten: Anfrage hin, Prüfung beim Anbieter, Antwort zurück. Bei einer typischen Chat-API erinnert sich das Modell nicht an frühere Aufrufe. Jede Anfrage muss alles enthalten, was das Modell braucht: die Anweisungen, die Frage und in einem Gespräch die früheren Nachrichten, auf die es ankommt. Das klingt nach Mehrarbeit, macht Ihre App aber berechenbar: Das Modell sieht genau das, was Sie schicken.\nSchritt 1: API-Schlüssel anlegen und aus dem Code heraushalten Ein API-Schlüssel (API Key) ist eine lange geheime Zeichenfolge, die Sie gegenüber dem Anbieter ausweist. Jede Anfrage mit Ihrem Schlüssel wird Ihrem Konto berechnet — behandeln Sie ihn wie ein Passwort.\nÖffnen Sie die Entwicklerkonsole eines Modellanbieters, legen Sie ein Konto an und richten Sie die Abrechnung ein. Erstellen Sie einen neuen Schlüssel mit einem klaren Namen wie „faq-bot-dev“, damit Sie später wissen, wo er verwendet wird. Kopieren Sie den Schlüssel sofort. Viele Konsolen zeigen ihn nur ein einziges Mal. Speichern Sie ihn in einer Umgebungsvariable: einem benannten Wert, der in Ihrem System oder in den Einstellungen Ihres Hostings liegt — nicht im Quellcode. Unter macOS oder Linux setzen Sie die Variable für die aktuelle Terminal-Sitzung so:\nexport LLM_API_KEY=\u0026#34;hier-den-schluessel-einfuegen\u0026#34; Unter Windows in der PowerShell:\n$env:LLM_API_KEY = \u0026#34;hier-den-schluessel-einfuegen\u0026#34; In Projekten legen viele Entwickler Schlüssel in einer lokalen Datei namens .env ab und laden sie mit einer kleinen Bibliothek. Tragen Sie .env in Ihre .gitignore-Datei ein, damit der Schlüssel nie in der Versionsverwaltung landet.\n!Vor dem ersten Commit prüfen\nFühren Sie vor dem Commit git status aus. Taucht .env in der Liste auf, greift Ihre .gitignore noch nicht: Beheben Sie das zuerst. Ein Schlüssel, der einmal in einem Commit gelandet ist, gilt als kompromittiert, auch wenn Sie ihn später löschen. Was dann zu tun ist, hat Level 0 erklärt: widerrufen und einen neuen erzeugen. Teil 5 dieses Levels zeigt, wo der Schlüssel in einer veröffentlichten App liegt.\nSchritt 2: Die Anfrage zusammenbauen Eine Anfrage hat drei Teile: wohin sie geht, wer sie schickt und was sie verlangt.\nDie Teile einer typischen Chat-Anfrage. Die Feldnamen unterscheiden sich je nach Anbieter leicht. Endpunkt und Methode. Die Webadresse steht in der Dokumentation des Anbieters. Daten senden Sie mit der HTTP-Methode POST. Header. Zusatzzeilen, die mit der Anfrage reisen: Ihr API-Schlüssel und der Inhaltstyp application/json. Viele Anbieter erwarten den Schlüssel als Authorization: Bearer …, andere in einem Header mit anderem Namen. Body. Das JSON mit Modell, Nachrichten und Einstellungen. Jede Nachricht hat eine Rolle. Die System-Nachricht enthält Regeln für das ganze Gespräch. User-Nachrichten enthalten die Eingabe. Assistant-Nachrichten enthalten frühere Antworten des Modells. Teil 2 dieses Levels, Prompt-Design für Entwickler, zeigt, wie Sie sie gut formulieren.\nDie Einstellungen steuern, wie das Modell antwortet. Diese brauchen Sie am häufigsten:\nIhr erster LLM-API-Aufruf, Schritt für Schritt Einstellung Was sie bewirkt Guter Startwert model Wählt das Modell, das antwortet Ein mittelgroßes Modell Ihres Anbieters messages System-Regeln, Eingabe, frühere Antworten Eine System- und eine User-Nachricht temperature Zufall: niedrig = fokussiert und wiederholbar, hoch = abwechslungsreicher 0–0,3 für Fakten und Daten, höher für Ideen max tokens Obergrenze für die Länge der Antwort Genug für Ihre längste normale Antwort stream Schickt die Antwort in kleinen Stücken, während sie entsteht Aus in Skripten, an in Chat-Oberflächen stop Text, an dem das Modell aufhört zu schreiben Nur bei Bedarf Namen und Wertebereiche unterscheiden sich je nach Anbieter, und manche Modelle — vor allem Reasoning-Modelle — akzeptieren nicht jede Einstellung. Die API-Referenz Ihres Anbieters nennt, was welches Modell unterstützt.\nSchritt 3: Die erste Anfrage senden So sieht die Anfrage als reines HTTP aus. api.example.com und model-name sind Platzhalter: Setzen Sie den Endpunkt und die Modell-ID aus der Dokumentation Ihres Anbieters ein.\nPOST https://api.example.com/v1/chat Authorization: Bearer \u0026lt;Ihr Schlüssel aus LLM_API_KEY\u0026gt; Content-Type: application/json { \u0026#34;model\u0026#34;: \u0026#34;model-name\u0026#34;, \u0026#34;messages\u0026#34;: [ {\u0026#34;role\u0026#34;: \u0026#34;system\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;Antworten Sie in einfachem Deutsch, in höchstens drei Sätzen.\u0026#34;}, {\u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;Was ist ein API-Schlüssel?\u0026#34;} ], \u0026#34;temperature\u0026#34;: 0.2, \u0026#34;max_tokens\u0026#34;: 300 } Derselbe Aufruf in Python, mit der verbreiteten Bibliothek requests (Installation mit pip install requests):\nimport os import requests API_KEY = os.environ[\u0026#34;LLM_API_KEY\u0026#34;] # Schlüssel aus der Umgebung lesen URL = \u0026#34;https://api.example.com/v1/chat\u0026#34; # Endpunkt Ihres Anbieters payload = { \u0026#34;model\u0026#34;: \u0026#34;model-name\u0026#34;, \u0026#34;messages\u0026#34;: [ {\u0026#34;role\u0026#34;: \u0026#34;system\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;Antworten Sie in einfachem Deutsch, in höchstens drei Sätzen.\u0026#34;}, {\u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;Was ist ein API-Schlüssel?\u0026#34;}, ], \u0026#34;temperature\u0026#34;: 0.2, \u0026#34;max_tokens\u0026#34;: 300, } response = requests.post( URL, headers={\u0026#34;Authorization\u0026#34;: f\u0026#34;Bearer {API_KEY}\u0026#34;}, json=payload, # schickt den Body als JSON und setzt den Inhaltstyp timeout=30, # nie endlos warten ) response.raise_for_status() # bei einem Fehler mit Meldung abbrechen print(response.json()) Die meisten Anbieter bieten außerdem offizielle Bibliotheken an, sogenannte SDKs (Software Development Kits), die diese Schritte auf wenige Zeilen verkürzen. Das ist bequem, die Struktur darunter bleibt aber dieselbe. Selbst Open-Weight-Modelle, die Sie selbst betreiben — etwa auf einer GPU-Cloud wie Runpod —, bieten meist dieselbe Art von Chat-Endpunkt. Ihr Code ändert sich dann kaum.\nSchritt 4: Die Antwort lesen Auch die Antwort ist JSON. Ihr genauer Aufbau hängt vom Anbieter ab, aber Sie finden immer dieselben vier Arten von Informationen.\nWas zurückkommt: die Antwort plus die Daten, die Sie für Prüfung und Kostenkontrolle brauchen. Beispielwerte. Der erzeugte Text. Er steht in einem Feld wie content oder text, oft innerhalb einer Liste, weil eine Antwort aus mehreren Teilen bestehen kann. Der Stoppgrund. Er zeigt, ob das Modell normal fertig wurde oder an Ihre Grenze für max tokens gestoßen ist. Im zweiten Fall ist die Antwort abgeschnitten. Erhöhen Sie die Grenze oder bitten Sie um eine kürzere Antwort. Der Token-Verbrauch. Die Zahl der Eingabe- und Ausgabe-Tokens. Anbieter rechnen pro Token ab — protokollieren Sie diese Zahlen vom ersten Tag an. ID und Modellversion. Damit verfolgen Sie eine seltsame Antwort später zurück. Das Feld model entscheidet, wer antwortet. Unsere LLM-Datenbank führt 343 Modelle mit Erscheinungsdatum und Testergebnissen. Hier einige aktuelle Modelle verschiedener Anbieter:\nModelle aus unserer LLM-Datenbank ModellErschienenGewichteECIRang Claude Sonnet 5.5 Anthropic28.09.2026geschlossen164,46 GPT-6 Luna OpenAI22.09.2026geschlossen156,328 Gemini 3.8 Flash Google DeepMind02.09.2026geschlossen157,219 DeepSeek V4.1 Flash DeepSeek09.09.2026offen155,631 ECI = Epoch Capabilities Index, ein Gesamtwert über viele Benchmarks; Rang unter allen Modellen mit ECI. Daten: Epoch AI, abgerufen am 17.10.2026, Lizenz CC BY 4.0. Alle Modelle: LLM-Datenbank.\nDie Namen in unserer Datenbank sind Anzeigenamen. Die genaue Modell-ID für Ihre Anfrage steht in der Dokumentation des Anbieters. Teil 4 dieses Levels erklärt, wie Sie ein Modell für Ihre App wählen.\nSchritt 5: Fehler behandeln und richtig wiederholen Aufrufe scheitern. Das Netz bricht ab, der Anbieter ist überlastet, oder Ihre Anfrage enthält einen Fehler. Der Statuscode der Antwort verrät, welcher Fall vorliegt. Codes im 200er-Bereich bedeuten Erfolg, alles andere verlangt eine Reaktion:\nIhr erster LLM-API-Aufruf, Schritt für Schritt (2) Statuscode Übliche Bedeutung Was Sie tun 400 Fehlerhafte Anfrage: falsches Feld, ungültiges JSON, Eingabe zu lang Anfrage korrigieren, nicht wiederholen 401 / 403 Schlüssel fehlt, ist falsch oder hat keine Rechte Schlüssel und Berechtigungen prüfen 404 Unbekannter Endpunkt oder unbekannte Modell-ID Adresse und Modell-ID prüfen 429 Zu viele Anfragen oder Nutzungslimit erreicht Warten, dann wiederholen; Limits prüfen 500 / 503 Fehler oder Überlast beim Anbieter Warten, dann wiederholen Zeitüberschreitung Keine Antwort in der vorgesehenen Zeit Ein- bis zweimal wiederholen, dann sauber abbrechen Die Regel hinter der Tabelle: Vorübergehendes wiederholen, Dauerhaftes korrigieren.\nVorübergehende Fehler mit wachsenden Pausen wiederholen, dauerhafte Fehler in Code oder Einstellungen beheben. Warten Sie bei jedem neuen Versuch etwas länger — zum Beispiel etwa 1, dann 2, dann 4 Sekunden, plus einen kleinen zufälligen Zuschlag. Dieses Muster heißt Exponential Backoff. Der Zufallsanteil verhindert, dass viele Programme im selben Moment erneut anfragen. Enthält die Antwort einen Retry-After-Header, warten Sie mindestens so lange. Nach drei bis vier Versuchen brechen Sie ab und zeigen eine verständliche Meldung.\nimport random import time import requests def post_with_retry(url, headers, payload, tries=4): for attempt in range(tries): try: r = requests.post(url, headers=headers, json=payload, timeout=30) if r.status_code != 429 and r.status_code \u0026lt; 500: r.raise_for_status() # 400, 401, 403, 404: Anfrage korrigieren, kein neuer Versuch return r.json() except (requests.exceptions.Timeout, requests.exceptions.ConnectionError): pass # Netzprobleme sind ebenfalls vorübergehend if attempt \u0026lt; tries - 1: # nach dem letzten Versuch keine Pause time.sleep(2 ** attempt + random.random()) # etwa 1, 2, 4 Sekunden raise RuntimeError(\u0026#34;Die API scheitert auch nach mehreren Versuchen.\u0026#34;) Übung: Ihr erster Aufruf in 20 Minuten ▸Probieren Sie es aus\nNutzen Sie das Python-Skript aus Schritt 3:\nSetzen Sie LLM_API_KEY im Terminal und führen Sie das Skript aus. Suchen Sie in der Ausgabe den erzeugten Text, den Stoppgrund und den Token-Verbrauch. Stellen Sie dieselbe Frage dreimal mit temperature 0 und dreimal mit temperature 1 (sofern Ihr Modell die Einstellung unterstützt). Wie stark ändern sich die Antworten? Setzen Sie max tokens auf 20. Sehen Sie sich den Stoppgrund und die abgeschnittene Antwort an. Ändern Sie ein Zeichen des Schlüssels und starten Sie das Skript erneut. Sie sollten einen Fehler erhalten, meist 401 Unauthorized — so sieht ein falscher Schlüssel aus. Tragen Sie die Eingabe- und Ausgabe-Tokens jedes Laufs in eine kleine Tabelle ein. Diese Gewohnheit brauchen Sie, um Kosten abzuschätzen. Sie möchten lieber keinen Code schreiben? No-Code-Plattformen wie MindStudio bauen auf denselben Modellen auf, ohne dass Sie diese Aufrufe selbst schreiben müssen — Teil 3 dieses Levels zeigt, wie Sie eine einfache KI-App ohne Code bauen.\n","words":1683},"date":"2026-10-14","description":"API-Schlüssel anlegen und sicher speichern, die erste Anfrage an ein Sprachmodell senden, die Antwort lesen und Fehler behandeln – mit Python-Code.","image":"https://abxk.ai/images/cover/your-first-llm-api-call.webp","json":"https://abxk.ai/de/ai-development/learn/your-first-llm-api-call/index.json","kind":"page","language":"de","learning_path":{"category":"ai-development","level":1,"level_name":"Grundlagen"},"modified":"2026-10-14","related_tools":["MindStudio","Netlify","Runpod"],"section":"ai-development","tags":["llm-api","api-schluessel","python","einstieg"],"title":"Ihr erster LLM-API-Aufruf, Schritt für Schritt","translations":[{"json":"https://abxk.ai/en/ai-development/learn/your-first-llm-api-call/index.json","language":"en","url":"https://abxk.ai/en/ai-development/learn/your-first-llm-api-call/"}],"url":"https://abxk.ai/de/ai-development/learn/your-first-llm-api-call/"}