Zum Inhalt springen

Chat Completions API

POST /v1/chat/completions

Der /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).

ParameterTypBeschreibung
modelstringModell-ID, z. B. vllm/release/gpt-oss-120b
messagesarrayListe der Nachrichten (Rollengesteuert)
temperaturefloatSampling-Temperatur (Standard: 1.0)
top_pfloatNucleus-Sampling (Standard: 1.0)
max_tokensintegerMaximale Anzahl generierter Tokens
streambooleanAktiviert SSE-Streaming
toolsarrayVerfügbare Werkzeuge (Function Definitions)
tool_choicestring/objectSteuerung der Tool-Auswahl

Nachrichten folgen einem Rollen-Modell mit drei Standard-Rollen:

  • system: steuert Verhalten und Persona des Modells
  • user: Eingabe des Nutzers
  • assistant: 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?"}
]
}
Terminal-Fenster
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)
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);

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.

Ü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.

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.

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:

FeldBedeutung
choices[].message.contentGenerierter Text
choices[].finish_reasonGrund des Abbruchs (z. B. stop, length)
usage.prompt_tokensInput-Tokens
usage.completion_tokensGenerierte Tokens
usage.total_tokensSumme 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
}
}