- Das OpenAI Python-Paket installieren
- Die OpenAI-Client-Klasse
- Chat-Completions: Einfache Anfrage
- Streaming-Antworten
- Function Calling
- Asynchrone Nutzung mit AsyncOpenAI
- OpenAI JavaScript SDK
- Azure OpenAI Python-Integration
- Zu Novita AIs OpenAI-kompatibler API wechseln
- Open-Source-Modelle über Novita AI
- FAQ
- Empfohlene Artikel
Das OpenAI Python SDK (openai auf PyPI) ist der offizielle Python-Client für die OpenAI API. Es übernimmt Authentifizierung, Anfrageformatierung, Antwort-Analyse, Streaming und Wiederholungen – sodass Sie diese nicht selbst implementieren müssen. Dieser Leitfaden behandelt die Installation, die zentrale OpenAI-Klasse, Chat-Completions, Streaming, Function Calling, asynchrone Nutzung, das äquivalente JavaScript SDK, die Azure-OpenAI-Integration und die Verwendung desselben SDKs mit dem OpenAI-kompatiblen Endpunkt von Novita AI, um Open-Weight-Modelle ohne Codeänderungen zu verwenden.
Das OpenAI Python-Paket installieren
Python 3.8 oder höher ist erforderlich:
pip install openai
Für die Entwicklung fügen Sie es Ihrer requirements.txt oder pyproject.toml hinzu:
pip install openai>=1.0.0
Die 1.x-Version (Ende 2023 veröffentlicht) hat die Benutzeroberfläche im Vergleich zur 0.x-API erheblich geändert. Wenn Sie älteren Code migrieren, beachten Sie, dass openai.ChatCompletion.create() nicht mehr existiert; verwenden Sie stattdessen client.chat.completions.create().
Setzen Sie Ihren API-Schlüssel als Umgebungsvariable. Fügen Sie ihn nicht in den Quellcode ein:
export OPENAI_API_KEY="sk-..."
Die OpenAI-Client-Klasse
Die Klasse OpenAI ist der Haupteinstiegspunkt. Sie liest den API-Schlüssel standardmäßig aus der Umgebungsvariable OPENAI_API_KEY, oder Sie können ihn explizit übergeben:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
)
Der Client verwaltet Verbindungspooling, Wiederholungen und Timeouts. Sie sollten eine Instanz erstellen und diese über Ihre gesamte Anwendung hinweg wiederverwenden, nicht pro Anfrage instanziieren.
Konfigurierbare Optionen bei der Initialisierung:
| Parameter | Standard | Beschreibung |
|---|---|---|
api_key |
Umgebungsvariable OPENAI_API_KEY |
Authentifizierungsnachweis |
base_url |
https://api.openai.com/v1 |
Überschreibung für Proxy oder kompatible API |
timeout |
600s | Timeout pro Anfrage |
max_retries |
2 | Automatische Wiederholungen bei Rate-Limit-Fehlern |
http_client |
None | Benutzerdefinierter httpx-Client für Proxy oder Zertifikatskonfiguration |
Chat-Completions: Einfache Anfrage
Chat-Completions sind der häufigste Anwendungsfall. Die messages-Liste folgt dem gleichen Format wie die API: eine Liste von Role/Content-Dictionaries, die das Gespräch darstellen:
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Sie sind ein hilfreicher Coding-Assistent."},
{"role": "user", "content": "Was ist der Unterschied zwischen einer Liste und einem Tuple in Python?"},
],
temperature=0.3,
max_tokens=512,
)
print(response.choices[0].message.content)
Die Antwort ist ein ChatCompletion-Objekt. Wichtige Felder:
response.choices[0].message.content— der Text der Antwortresponse.usage.prompt_tokens— vom Input verbrauchte Tokensresponse.usage.completion_tokens— vom Output verbrauchte Tokensresponse.model— die Modellversion, die die Anfrage bedient hat
Für den Produktionseinsatz übergeben Sie max_tokens, um unkontrollierte Generierungskosten zu vermeiden, und temperature=0 oder niedrige Werte, wenn Sie deterministische Ausgaben benötigen.
Streaming-Antworten
Für interaktive Oberflächen, bei denen Benutzer Tokens sehen, während sie eintreffen, verwenden Sie stream=True:
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
with client.chat.completions.stream(
model="gpt-4o",
messages=[
{"role": "user", "content": "Erklären Sie Python-Generatoren in einfacher Sprache."},
],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
Die Verwendung des Kontextmanagers (with-Anweisung) stellt sicher, dass die Verbindung nach der Iteration ordnungsgemäß geschlossen wird. Das Attribut .text_stream liefert einfache Zeichenfolgen; .stream liefert rohe Ereignisobjekte, falls Sie Metadaten wie Nutzungsstatistiken pro Chunk benötigen.
Wenn Sie Streaming ohne Kontextmanager benötigen:
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Nennen Sie 5 Python-Best-Practices."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
Function Calling
Function Calling ermöglicht es dem Modell, zu entscheiden, wann eine Funktion aufgerufen werden soll, und ein JSON-Argument-Objekt zurückzugeben. Ihre Anwendung führt die Funktion aus und sendet das Ergebnis zurück, damit das Modell es in seine Antwort einbeziehen kann:
import os
import json
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Gibt das aktuelle Wetter für eine Stadt zurück.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Stadtname, z. B. 'Berlin'",
}
},
"required": ["city"],
},
},
}
]
messages = [{"role": "user", "content": "Wie ist das Wetter in Tokio?"}]
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto",
)
choice = response.choices[0]
if choice.finish_reason == "tool_calls":
tool_call = choice.message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
# Führen Sie hier Ihre eigentliche Funktion aus
result = {"city": args["city"], "temperature": "18°C", "condition": "bewölkt"}
messages.append(choice.message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result),
})
final = client.chat.completions.create(
model="gpt-4o",
messages=messages,
)
print(final.choices[0].message.content)
Das Modell gibt finish_reason="tool_calls" zurück, wenn es eine Funktion aufrufen möchte. Sie führen die Funktion aus, fügen das Ergebnis zur Nachrichtenliste hinzu und stellen eine zweite Anfrage. Diese Zwei-Schritt-Schleife ist das Standardmuster.
Asynchrone Nutzung mit AsyncOpenAI
Für FastAPI, asyncio-basierte Dienste oder jeden Code, der von nicht blockierender E/A profitiert, verwenden Sie AsyncOpenAI:
import os
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"])
async def get_response(prompt: str) -> str:
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
max_tokens=256,
)
return response.choices[0].message.content
async def main():
result = await get_response("Was ist asyncio in Python?")
print(result)
asyncio.run(main())
AsyncOpenAI ist ein direkter asynchroner Gegenpart; alle Methoden sind awaitable. Dies ist der Verwendung von asyncio.to_thread vorzuziehen, um den synchronen Client zu wrappen.
OpenAI JavaScript SDK
Das OpenAI JavaScript SDK (openai auf npm) spiegelt die Python-Oberfläche weitgehend wider. Installieren Sie es:
npm install openai
Einfache Chat-Completion in Node.js:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Explain promises vs async/await in JavaScript." },
],
max_tokens: 512,
});
console.log(response.choices[0].message.content);
Streaming in JavaScript:
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const stream = await client.chat.completions.stream({
model: "gpt-4o",
messages: [{ role: "user", content: "Summarize the fetch API in 3 sentences." }],
});
for await (const chunk of stream) {
const text = chunk.choices[0]?.delta?.content ?? "";
process.stdout.write(text);
}
Das JavaScript SDK unterstützt Node.js 18+, Deno und Browser-Umgebungen (allerdings ist das Offenlegen Ihres API-Schlüssels im Browser unsicher – verwenden Sie stattdessen einen serverseitigen Proxy). Die Option base_url für die Adressierung kompatibler APIs funktioniert genauso wie in Python.
Azure OpenAI Python-Integration
Wenn Sie den Azure OpenAI-Dienst anstelle der direkten OpenAI-API verwenden, nutzen Sie den Client AzureOpenAI aus demselben Paket:
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version="2024-02-01",
)
response = client.chat.completions.create(
model="gpt-4o", # Ihr Deployment-Name in Azure
messages=[
{"role": "user", "content": "Wie verwende ich Azure OpenAI mit Python?"},
],
)
print(response.choices[0].message.content)
Erforderliche Umgebungsvariablen für Azure:
AZURE_OPENAI_API_KEY: Ihr Azure-Ressourcen-API-SchlüsselAZURE_OPENAI_ENDPOINT: Ihre Endpunkt-URL, z. B.https://ihre-resource.openai.azure.com/
Der Parameter model in Azure OpenAI bezieht sich auf Ihren Deployment-Namen, nicht auf den zugrunde liegenden Modellnamen. Setzen Sie api_version so, dass sie mit der Azure-API-Version Ihres Deployments übereinstimmt (überprüfen Sie die Azure OpenAI-Dokumentation für aktuell unterstützte Versionen).
Für die Authentifizierung über Microsoft Entra ID (früher Azure AD) anstelle eines API-Schlüssels:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI
token_provider = get_bearer_token_provider(
DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default",
)
client = AzureOpenAI(
azure_ad_token_provider=token_provider,
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version="2024-02-01",
)
Zu Novita AIs OpenAI-kompatibler API wechseln
Novita AI bietet einen OpenAI-kompatiblen Endpunkt unter https://api.novita.ai/openai. Sie können dasselbe openai Python- oder JavaScript-SDK verwenden, indem Sie nur base_url und api_key ändern. Es sind keine weiteren Codeänderungen erforderlich:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["NOVITA_API_KEY"],
base_url="https://api.novita.ai/openai",
)
response = client.chat.completions.create(
model="deepseek/deepseek-v4-pro",
messages=[
{"role": "system", "content": "Sie sind ein hilfreicher Coding-Assistent."},
{"role": "user", "content": "Erklären Sie, wie sich Pythons GIL auf Multithreading auswirkt."},
],
temperature=0.3,
max_tokens=512,
)
print(response.choices[0].message.content)
Holen Sie sich einen Novita AI API-Schlüssel von novita.ai/settings/key-management. Derselbe Schlüssel funktioniert für alle Novita AI APIs, einschließlich des OpenAI-kompatiblen Endpunkts.
JavaScript mit Novita AI:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.NOVITA_API_KEY,
baseURL: "https://api.novita.ai/openai",
});
const response = await client.chat.completions.create({
model: "qwen/qwen3-coder-30b-a3b-instruct",
messages: [{ role: "user", content: "Write a Python type annotation cheatsheet." }],
max_tokens: 600,
});
console.log(response.choices[0].message.content);
Alles Weitere – Streaming, Function Calling, asynchrone Nutzung, response_format, temperature, max_tokens – funktioniert identisch. Der Novita AI Endpunkt folgt der OpenAI Chat Completions API-Spezifikation.
Open-Source-Modelle über Novita AI
Durch das Ändern von base_url erhalten Sie Zugriff auf eine Reihe von Open-Weight-Modellen, die heute bei bestimmten Aufgaben mit geschlossenen Frontier-Modellen konkurrieren können. Für Coding-Workflows, Function Calling und Langkontext-Argumentation hat sich die praktische Lücke deutlich verringert.
Modelle, die über Novita AIs OpenAI-kompatiblen Endpunkt verfügbar sind und eine Evaluierung wert sind:
DeepSeek V4 Pro (deepseek/deepseek-v4-pro): Ein großes MoE-Modell (MIT-ähnliche Lizenz), das in SWE-Bench und Function-Calling-Benchmarks nahe der Spitze rangiert. Stark für Coding-Agenten, Code-Reviews und mehrstufige Tool-Use-Aufgaben, bei denen Sie sonst zu GPT-4o oder Claude Opus greifen würden.
Qwen3 Coder 30B A3B Instruct (qwen/qwen3-coder-30b-a3b-instruct): Ein 30B dünn besetztes MoE-Modell aus der Qwen Coder-Familie, optimiert für Codegenerierung, Fehlerdiagnose und Pull-Request-Reviews. Mit 0,07 $ pro 1 Mio. Input-Tokens und 0,27 $ pro 1 Mio. Output-Tokens bei Novita AI ist es für routinemäßige Coding-Unterstützung deutlich günstiger als die meisten geschlossenen APIs.
Qwen3 235B A22B Instruct (qwen/qwen3-235b-a22b-instruct-2507): Ein großes MoE-Modell (Apache 2.0) mit starker Argumentations- und mehrsprachiger Coding-Leistung. Geeignet für Aufgaben, bei denen Sie derzeit GPT-4o für kreative oder komplexe Antworten einsetzen, aber die Kosten pro Token bei hohem Volumen senken möchten.
Das Modell-ID-Format bei Novita AI ist provider/model-name. Sie übergeben es direkt an den model-Parameter im SDK.
Ein unkompliziertes Routing-Muster für Teams, die offene und geschlossene Modelle mischen möchten:
def get_client(use_novita: bool = False) -> OpenAI:
if use_novita:
return OpenAI(
api_key=os.environ["NOVITA_API_KEY"],
base_url="https://api.novita.ai/openai",
)
return OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# Open-Weight für kostensensitive, hochvolumige Coding-Aufgaben verwenden
coding_client = get_client(use_novita=True)
# OpenAI für Aufgaben verwenden, bei denen das geschlossene Modell wirklich besser ist
openai_client = get_client(use_novita=False)
So können Sie A/B-Tests der Ausgabequalität durchführen, die Leistung pro Aufgabe benchmarken und Volumen auf günstigere Modelle verlagern, ohne die Anforderungslogik zu ändern.
FAQ
Wie lautet der Name des OpenAI Python-Pakets?
Der Paketname auf PyPI lautet openai. Installation mit pip install openai.
Wie heißt die OpenAI-Client-Klasse in Python?
Die Hauptklasse ist OpenAI für synchrone Nutzung und AsyncOpenAI für asynchrone Nutzung. Beide befinden sich im Modul openai: from openai import OpenAI, AsyncOpenAI.
Unterstützt das OpenAI Python SDK Streaming?
Ja. Verwenden Sie client.chat.completions.stream() als Kontextmanager oder übergeben Sie stream=True an client.chat.completions.create() und iterieren Sie über die Chunks.
Wie lautet der Paketname des OpenAI JavaScript SDKs?
Das npm-Paket ist openai. Installation mit npm install openai. Die Klassen- und Methodensignaturen sind nahezu identisch mit dem Python SDK.
Wie verwende ich Azure OpenAI mit Python?
Verwenden Sie die Klasse AzureOpenAI aus dem Paket openai. Übergeben Sie azure_endpoint, api_key und api_version. Der Parameter model bezieht sich auf Ihren Azure Deployment-Namen, nicht auf das zugrunde liegende Modell.
Kann ich das OpenAI Python SDK mit anderen Anbietern verwenden?
Ja. Jeder Anbieter, der das OpenAI Chat Completions API-Format implementiert, kann durch Setzen von base_url auf dem Client verwendet werden. Novita AIs Endpunkt unter https://api.novita.ai/openai ist ein Beispiel; der gesamte SDK-Funktionsumfang – Streaming, Function Calling, asynchron – funktioniert ohne Änderungen.
Wie halte ich meinen OpenAI API-Schlüssel sicher?
Speichern Sie den Schlüssel in einer Umgebungsvariable (OPENAI_API_KEY) und lesen Sie ihn mit os.environ["OPENAI_API_KEY"] aus. Fügen Sie ihn niemals in Quellcode, öffentliche Repositorys, Build-Logs oder clientseitiges JavaScript ein.
Empfohlene Artikel
- Novita AI unterstützt jetzt das OpenAI Agents SDK! — Verbinden Sie Novita AI Modelle mit dem OpenAI Agents SDK für Multi-Agent-Orchestrierung, Absicherungen und Tracing.
- Qwen3 Coder 30B A3B Instruct Schnellstart — Modell-ID, Preise, Kontextfenster und API-Beispiele für dieses kosteneffiziente Coding-Modell auf Novita AI.
- Vercel AI SDK: Vollständiger Entwicklerleitfaden zur Erstellung von KI-Anwendungen — Verwenden Sie das Vercel AI SDK mit Novita AIs OpenAI-kompatiblem Endpunkt für Streaming, Tool-Aufrufe und Agenten-Schleifen in TypeScript.
