0Pricing
AI Engineering Academy · Lektion

Der Chat-Completions-Endpunkt

Sie verstehen das Nachrichtenarray mit den Rollen system, user und assistant, erstellen Ihren ersten Prompt und interpretieren das Antwortobjekt, das von der API zurückgegeben wird.

Der Chat-Completions-Endpunkt ist eine kostenlose AI Engineering Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Engineering Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Die Architektur des Nachrichten-Arrays

Der Chat-Completions-Endpunkt arbeitet mit einem Nachrichten-Array: einer Liste von Gesprächsbeiträgen, die jeweils eine Rolle haben (system, user oder assistant). Das Modell ist zustandslos, daher senden Sie den Verlauf jedes Mal mit.

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {'role': 'system', 'content': 'You are a concise Python tutor.'},
        {'role': 'user', 'content': 'What is a list comprehension?'}
    ]
)

print(response.choices[0].message.content)

Die Systemrolle: Verhalten festlegen

Die Systemnachricht ist Ihr wichtigstes Stellrad. Sie legt Persona, Regeln und Format des Modells fest, bevor der Benutzer ein Wort eingibt. Investieren Sie hier Zeit – sie prägt alles. Sehen Sie sich den Code an.

system_prompt = '''You are a customer support agent for TechShop.
You help customers with: order tracking, returns, and product questions.
You do NOT discuss pricing changes or competitor products.
Always respond in 2-3 sentences maximum.
If you cannot help, say: 'Let me connect you with a human agent.'
'''

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {'role': 'system', 'content': system_prompt},
        {'role': 'user', 'content': 'Where is my order #12345?'}
    ]
)

Mehrteilige Unterhaltungen verwalten

Damit eine Unterhaltung weitergeführt werden kann, fügen Sie jeden Beitrag an das Nachrichten-Array an und senden alles erneut. So scheint es, als würde sich das Modell erinnern – tatsächlich übergeben Sie ihm den vollständigen Verlauf.

history = [
    {'role': 'system', 'content': 'You are a helpful assistant.'}
]

def chat(user_message):
    history.append({'role': 'user', 'content': user_message})
    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=history
    )
    assistant_reply = response.choices[0].message.content
    history.append({'role': 'assistant', 'content': assistant_reply})
    return assistant_reply

print(chat('My name is Alice.'))
print(chat('What is my name?'))  # model remembers 'Alice'

Aufbau der API-Antwort

Die Antwort ist ein Objekt und nicht nur Text. choices enthält die Antwort, finish_reason gibt den Grund für das Ende an und usage zählt die Tokens – daraus ergeben sich Ihre Kosten. Protokollieren Sie diese Werte in der Produktion.

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[{'role': 'user', 'content': 'Say hello in one word.'}]
)

# Accessing response fields
print('Content:', response.choices[0].message.content)
print('Finish reason:', response.choices[0].finish_reason)  # 'stop'
print('Model:', response.model)  # exact version like gpt-4o-mini-2024-07-18
print('Prompt tokens:', response.usage.prompt_tokens)
print('Completion tokens:', response.usage.completion_tokens)
print('Total tokens:', response.usage.total_tokens)

finish_reason verstehen

finish_reason gibt an, warum die Generierung beendet wurde. 'stop' bedeutet, dass sie abgeschlossen ist; 'length' bedeutet, dass max_tokens erreicht wurde und die Antwort mitten im Satz abgeschnitten wurde. Prüfen Sie diesen Wert immer – eine Kürzung ist ein unauffälliger Fehler.

def safe_completion(messages, max_tokens=500):
    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=messages,
        max_tokens=max_tokens
    )
    choice = response.choices[0]
    
    if choice.finish_reason == 'length':
        print(f'WARNING: Response was truncated at {max_tokens} tokens!')
    elif choice.finish_reason == 'content_filter':
        print('WARNING: Response blocked by content filter!')
        return None
    
    return choice.message.content

Das richtige Modell auswählen

Wählen Sie für jede Aufgabe das passende Modell. gpt-4o ist das leistungsstarke Modell für anspruchsvolles Schlussfolgern; gpt-4o-mini ist deutlich günstiger und bewältigt die meisten Aufgaben gut. Führen Sie Benchmarks durch, bevor Sie annehmen, dass größer automatisch besser ist.

# Model comparison guidance
models = {
    'gpt-4o': {
        'use_for': 'Complex reasoning, code generation, nuanced analysis',
        'input_cost_per_1M': 2.50,  # USD
        'output_cost_per_1M': 10.00
    },
    'gpt-4o-mini': {
        'use_for': 'Classification, extraction, summarization, Q&A',
        'input_cost_per_1M': 0.15,
        'output_cost_per_1M': 0.60
    }
}
# gpt-4o is ~17x more expensive on input tokens

Inhaltstypen in Nachrichten

Der Inhalt einer Nachricht kann mehr als Text sein. Bei Vision-Modellen wie gpt-4o übergeben Sie eine Liste, die Text und Bilder kombiniert – so können Sie Fragen zu Diagrammen oder Screenshots stellen.

# Sending an image to a vision-capable model
response = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {
            'role': 'user',
            'content': [
                {
                    'type': 'text',
                    'text': 'What is in this image? Describe in one sentence.'
                },
                {
                    'type': 'image_url',
                    'image_url': {'url': 'https://example.com/photo.jpg'}
                }
            ]
        }
    ]
)

Der n-Parameter: Mehrere Vervollständigungen

Der n-Parameter gibt mehrere Vervollständigungen für einen Prompt zurück. Das ist hilfreich, wenn Sie die beste Antwort auswählen möchten oder eine Einschätzung der Sicherheit benötigen: Stimmen alle n Antworten überein, ist das Modell wahrscheinlich sicher; widersprechen sie sich, ist Vorsicht geboten.

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[{'role': 'user', 'content': 'Name the capital of Germany.'}],
    n=3,  # generate 3 independent completions
    temperature=0.5
)

for i, choice in enumerate(response.choices):
    print(f'Completion {i+1}: {choice.message.content}')

# Check if all completions agree (confidence signal)
answers = [c.message.content.strip() for c in response.choices]
print('All agree:', len(set(answers)) == 1)

Die Antwort als String verarbeiten

Um die Antwort als Text abzurufen, verwenden Sie stets den Pfad response.choices[0].message.content. Kapseln Sie ihn in eine Hilfsfunktion und behandeln Sie None, das bei Tool-Aufrufen oder Filtern auftreten kann.

def get_completion(prompt, system='You are a helpful assistant.', model='gpt-4o-mini'):
    '''Simple helper that returns the response text as a string.'''
    response = client.chat.completions.create(
        model=model,
        messages=[
            {'role': 'system', 'content': system},
            {'role': 'user', 'content': prompt}
        ]
    )
    content = response.choices[0].message.content
    if content is None:
        raise ValueError(f'No content in response. Finish reason: {response.choices[0].finish_reason}')
    return content

result = get_completion('Explain recursion in one sentence.')
print(result)

Rohe Anfrage und Antwort untersuchen

Antworten Sie erhalten ungewöhnliche Antworten beim Debugging? Untersuchen Sie die rohe Anfrage und Antwort. Wenn Sie OPENAI_LOG=debug setzen, wird der vollständige Inhalt in Ihrem Terminal ausgegeben – der schnellste Weg, um zu sehen, was tatsächlich übertragen wird.

import json
import httpx

# Enable debug logging (shows full request/response)
import os
os.environ['OPENAI_LOG'] = 'debug'

# Or use a custom logging client:
class LoggingClient(httpx.Client):
    def send(self, request, *args, **kwargs):
        print('REQUEST:', request.method, request.url)
        print('BODY:', json.loads(request.content))
        response = super().send(request, *args, **kwargs)
        print('STATUS:', response.status_code)
        return response

Eine minimale Chat-Schleife erstellen

Jetzt können Sie eine minimale Chat-Schleife erstellen: Bewahren Sie eine Nachrichtenliste auf, fügen Sie jeden Beitrag hinzu, senden Sie alles und wiederholen Sie den Vorgang. Dieses einfache Muster bildet die Grundlage jeder Chat-App auf der API. Der Code zeigt es.

import openai

client = openai.OpenAI()

SYSTEM_PROMPT = 'You are a helpful assistant. Be concise.'

def simple_chat_loop():
    messages = [{'role': 'system', 'content': SYSTEM_PROMPT}]
    print('Chat started. Type "quit" to exit.')

    while True:
        user_input = input('You: ').strip()
        if user_input.lower() == 'quit':
            break
        if not user_input:
            continue

        messages.append({'role': 'user', 'content': user_input})

        response = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            max_tokens=500
        )

        assistant_reply = response.choices[0].message.content
        messages.append({'role': 'assistant', 'content': assistant_reply})
        print(f'Assistant: {assistant_reply}\n')

print('Example chat loop defined. Run simple_chat_loop() to start.')

Kurze Überprüfung

Testen Sie Ihr Verständnis der AI-Engineering-Konzepte aus dieser Lektion.

Zusammenfassung der Lektion

Sie haben die Grundlagen des Chats gelernt: Das Nachrichten-Array steuert die Unterhaltung, und die Antwort enthält content, finish_reason und die Token-Anzahl. Als Nächstes: Parameter.

Häufig gestellte Fragen

Ist die Lektion „Der Chat-Completions-Endpunkt“ kostenlos?

Ja — der vollständige Text von „Der Chat-Completions-Endpunkt“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Engineering Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Der Chat-Completions-Endpunkt“?

Sie verstehen das Nachrichtenarray mit den Rollen system, user und assistant, erstellen Ihren ersten Prompt und interpretieren das Antwortobjekt, das von der API zurückgegeben wird. Du übst AI Engineering Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Engineering Academy zu starten?

Keine Vorkenntnisse erforderlich. AI Engineering Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Der Chat-Completions-Endpunkt“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Engineering Academy-Lektion Code schreiben und ausführen?

Ja. Jede AI Engineering Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ihre Python-Umgebung einrichten
  2. Der Chat-Completions-Endpunkt
  3. Das Modellverhalten mit Parametern steuern
  4. Fehlerbehandlung und Rate Limits
← Zurück zu AI Engineering Academy