Chat Completions API
POST /v1/chat/completionsDer /v1/chat/completions-Endpunkt ist der zentrale Einstiegspunkt für Konversations- und Text-Generierungs-Anwendungen. Er unterstützt Streaming, Tool Calling und multimodale Eingaben (Vision).
Request-Parameter
Abschnitt betitelt „Request-Parameter“| Parameter | Typ | Beschreibung |
|---|---|---|
model | string | Modell-ID, z. B. vllm/release/gpt-oss-120b |
messages | array | Liste der Nachrichten (Rollengesteuert) |
temperature | float | Sampling-Temperatur (Standard: 1.0) |
top_p | float | Nucleus-Sampling (Standard: 1.0) |
max_tokens | integer | Maximale Anzahl generierter Tokens |
stream | boolean | Aktiviert SSE-Streaming |
tools | array | Verfügbare Werkzeuge (Function Definitions) |
tool_choice | string/object | Steuerung der Tool-Auswahl |
Nachrichten-Format
Abschnitt betitelt „Nachrichten-Format“Nachrichten folgen einem Rollen-Modell mit drei Standard-Rollen:
system: steuert Verhalten und Persona des Modellsuser: Eingabe des Nutzersassistant: vorherige Antworten des Modells (für Multi-Turn)
{ "model": "vllm/release/gpt-oss-120b", "messages": [ {"role": "system", "content": "Du bist ein hilfreicher Assistent."}, {"role": "user", "content": "Was ist die Hauptstadt von Frankreich?"}, {"role": "assistant", "content": "Paris."}, {"role": "user", "content": "Wie viele Einwohner hat die Stadt?"} ]}Basis-Beispiel
Abschnitt betitelt „Basis-Beispiel“curl -X POST https://ai.noris.de/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "model": "vllm/release/gpt-oss-120b", "messages": [{"role": "user", "content": "Erkläre RAG in einem Satz."}] }'from openai import OpenAI
client = OpenAI( base_url="https://ai.noris.de/v1", api_key="YOUR_API_KEY")
response = client.chat.completions.create( model="vllm/release/gpt-oss-120b", messages=[{"role": "user", "content": "Erkläre RAG in einem Satz."}])print(response.choices[0].message.content)JavaScript
Abschnitt betitelt „JavaScript“const response = await fetch("https://ai.noris.de/v1/chat/completions", { method: "POST", headers: { "Content-Type": "application/json", "Authorization": "Bearer YOUR_API_KEY" }, body: JSON.stringify({ model: "vllm/release/gpt-oss-120b", messages: [{role: "user", content: "Erkläre RAG in einem Satz."}] })});const data = await response.json();console.log(data.choices[0].message.content);Streaming
Abschnitt betitelt „Streaming“Setzen Sie "stream": true, um Antworten tokenweise als Server-Sent Events (SSE) zu empfangen. Dies senkt die wahrgenommene Latenz, da erste Tokens sofort ausgegeben werden.
Details und Beispiele siehe Streaming.
Tool Calling
Abschnitt betitelt „Tool Calling“Über das tools-Array stellen Sie dem Modell Funktionen zur Verfügung. Das Modell entscheidet anhand von tool_choice, ob es ein Werkzeug aufruft, und gibt den Aufruf in der Antwort als tool_calls zurück.
Details und Beispiele siehe Tool Calling.
Multimodal/Vision
Abschnitt betitelt „Multimodal/Vision“Für multimodale Modelle wird content als Array übergeben, der auch image_url-Einträge enthalten kann:
{ "role": "user", "content": [ {"type": "text", "text": "Was zeigt dieses Bild?"}, {"type": "image_url", "image_url": {"url": "https://example.com/bild.jpg"}} ]}Details und Beispiele siehe Multimodal.
Response-Struktur
Abschnitt betitelt „Response-Struktur“Eine erfolgreiche Antwort enthält ein choices-Array. Jede Choice umfasst die generierte message sowie Finish-Grund-Metadaten. Im usage-Block werden die verarbeiteten Tokens ausgewiesen:
| Feld | Bedeutung |
|---|---|
choices[].message.content | Generierter Text |
choices[].finish_reason | Grund des Abbruchs (z. B. stop, length) |
usage.prompt_tokens | Input-Tokens |
usage.completion_tokens | Generierte Tokens |
usage.total_tokens | Summe aus Input und Output |
{ "id": "chatcmpl-...", "object": "chat.completion", "choices": [ { "index": 0, "message": {"role": "assistant", "content": "..."}, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 12, "completion_tokens": 28, "total_tokens": 40 }}