L'endpoint Chat Completions
Comprenderà l'array messages con i ruoli system, user e assistant, creerà il primo prompt e interpreterà l'oggetto di risposta restituito dall'API.
L'endpoint Chat Completions è una lezione AI Engineering Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Engineering Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Engineering Academy include 4 lezioni in totale.
L'architettura dell'array dei messaggi
L'endpoint Chat Completions funziona su un array di messaggi: un elenco di turni, ciascuno con un ruolo (system, user o assistant). Il modello non conserva lo stato, quindi deve inviare la cronologia ogni volta.
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)Il ruolo system: definire il comportamento
Il messaggio system è la leva più importante. Imposta la personalità, le regole e il formato del modello prima ancora che l'utente scriva una parola. Investire tempo in questa fase è fondamentale: dà forma a tutto. Veda il codice.
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?'}
]
)Gestire le conversazioni su più turni
Per mantenere una conversazione, aggiunge ogni turno all'array dei messaggi e lo invia nuovamente per intero. È così che il modello sembra ricordare: gli fornisce tutta la cronologia.
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'Anatomia della risposta dell'API
La risposta è un oggetto, non semplice testo. choices contiene la risposta, finish_reason indica perché si è fermata e usage conta i token, che determinano il costo. Registri questi dati in produzione.
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)Capire finish_reason
finish_reason indica perché la generazione si è fermata. 'stop' significa che è terminata; 'length' significa che ha raggiunto max_tokens e la risposta è stata troncata a metà. Lo controlli sempre: la troncatura è un bug silenzioso.
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.contentSelezionare il modello giusto
Scelga il modello giusto per il lavoro. gpt-4o è il modello più potente per i ragionamenti complessi; gpt-4o-mini è molto più economico e gestisce bene la maggior parte delle attività. Esegua dei benchmark prima di dare per scontato che un modello più grande sia migliore.
# 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 tokensTipi di contenuto nei messaggi
Il content di un messaggio può essere più di semplice testo. Per i modelli con visione come gpt-4o, può passare un elenco che combina testo e immagini, così da poter porre domande su grafici o schermate.
# 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'}
}
]
}
]
)Il parametro n: più completamenti
Il parametro n restituisce diversi completamenti per un singolo prompt. È utile per scegliere il migliore o per valutare la sicurezza: se tutti gli n risultati concordano, il modello è sicuro; se divergono, proceda con cautela.
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)Gestire la risposta come stringa
Per ottenere la risposta come testo, il percorso è sempre response.choices[0].message.content. Lo racchiuda in una funzione di supporto e gestisca il caso None, che si verifica durante le chiamate agli strumenti o a causa dei filtri.
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)Esaminare la richiesta e la risposta grezze
Sta eseguendo il debug di risposte insolite? Esamini la richiesta e la risposta grezze. Impostando OPENAI_LOG=debug, il corpo completo viene stampato nel terminale: è il modo più rapido per vedere cosa viene effettivamente trasmesso.
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 responseCreare un ciclo di chat minimale
Ora può creare un ciclo di chat minimale: mantenga un elenco di messaggi, aggiunga ogni turno, invii tutto e ripeta. Questo semplice schema alimenta ogni app di chat basata sull'API. Il codice mostra come fare.
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.')Verifica rapida
Verifichi la Sua comprensione dei concetti di AI Engineering trattati in questa lezione.
Riepilogo della lezione
Ha imparato le basi della chat: l'array di messaggi controlla la conversazione e la risposta contiene content, finish_reason e il conteggio dei token. Prossimo argomento: i parametri.
Domande Frequenti
La lezione «L'endpoint Chat Completions» è gratuita?
Sì — il testo completo di «L'endpoint Chat Completions» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Engineering Academy, passa a CoddyKit PRO. Il corso AI Engineering Academy include 4 lezioni in totale.
Cosa imparerò in «L'endpoint Chat Completions»?
Comprenderà l'array messages con i ruoli system, user e assistant, creerà il primo prompt e interpreterà l'oggetto di risposta restituito dall'API. Eserciti AI Engineering Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AI Engineering Academy?
Non è richiesta alcuna esperienza precedente. AI Engineering Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «L'endpoint Chat Completions»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AI Engineering Academy?
Sì. Ogni lezione AI Engineering Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurare l'ambiente Python
- L'endpoint Chat Completions
- Controllare il comportamento del modello con i parametri
- Gestione degli errori e limiti di frequenza