Chat Completions -päätepiste
Ymmärrätte system-, user- ja assistant-rooleja sisältävän messages-taulukon, laaditte ensimmäisen promptinne ja tulkitsette API:lta palautuvan response-olion.
Chat Completions -päätepiste on ilmainen AI Engineering Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu AI Engineering Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. AI Engineering Academy-kurssilla on yhteensä 4 oppituntia.
Viestitaulukkoarkkitehtuuri
Chat Completions -päätepiste toimii viestitaulukon avulla: kyseessä on luettelo vuoroista, joilla jokaisella on rooli (system, user tai assistant). Malli on tilaton, joten lähetätte historian joka kerta.
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)System-rooli: toiminnan määrittäminen
Järjestelmäviesti on tärkein vaikutuskeinonne. Se määrittää mallin persoonan, säännöt ja muodon ennen kuin käyttäjä kirjoittaa sanaakaan. Käyttäkää sen laatimiseen aikaa — se vaikuttaa kaikkeen. Katsokaa koodi.
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?'}
]
)Monivaiheisen keskustelun hallinta
Jatkaaksenne keskustelua lisäätte jokaisen vuoron viestitaulukkoon ja lähetätte koko taulukon uudelleen. Näin malli vaikuttaa muistavan — syötätte sille koko historian.
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'API-vastauksen rakenne
Vastaus on objekti, ei pelkkää tekstiä. choices sisältää vastauksen, finish_reason kertoo, miksi suoritus päättyi, ja usage laskee tokenit — ne määrittävät kustannuksenne. Kirjatkaa nämä tuotannossa.
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-kentän ymmärtäminen
finish_reason kertoo, miksi generointi päättyi. 'stop' tarkoittaa, että vastaus valmistui; 'length' tarkoittaa, että max_tokens-raja saavutettiin ja vastaus katkaistiin kesken. Tarkistakaa kenttä aina — katkeaminen on huomaamaton ohjelmistovirhe.
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.contentOikean mallin valitseminen
Valitkaa tehtävään sopiva malli. gpt-4o on tehokas valinta vaativaan päättelyyn; gpt-4o-mini on paljon edullisempi ja suoriutuu useimmista tehtävistä hyvin. Mitatkaa suorituskyky ennen kuin oletatte suuremman mallin olevan parempi.
# 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 tokensViestien sisältötyypit
Viestin content voi olla muutakin kuin tekstiä. Näkömalleille, kuten gpt-4o:lle, voitte välittää tekstin ja kuvat yhdistävän luettelon — näin voitte esittää kysymyksiä kaavioista tai kuvakaappauksista.
# 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'}
}
]
}
]
)n-parametri: useita täydennyksiä
n-parametri palauttaa yhdelle kehotteelle useita täydennyksiä. Se on kätevä, kun haluatte valita parhaan vaihtoehdon tai arvioida varmuutta: jos kaikki n vaihtoehtoa ovat samaa mieltä, malli on varma; jos ne poikkeavat toisistaan, suhtautukaa tulokseen varauksella.
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)Vastauksen käsitteleminen merkkijonona
Kun haluatte poimia vastauksen tekstinä, polku on aina response.choices[0].message.content. Käärikää se apufunktioon ja käsitelkää myös None-arvo, joka voi esiintyä työkalukutsuissa tai suodattimien yhteydessä.
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)Raakapyynnön ja -vastauksen tarkastelu
Saako palvelu odottamattomia vastauksia? Tarkastelkaa raakapyyntöä ja -vastausta. Kun asetatte arvoksi OPENAI_LOG=debug, koko runko tulostetaan päätteeseenne — näin näette nopeimmin, mitä verkossa todella siirtyy.
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 responsePienimmän mahdollisen keskustelusilmukan rakentaminen
Nyt voitte rakentaa minimaalisen keskustelusilmukan: säilyttäkää viestiluettelo, lisätkää siihen jokainen vuoro, lähettäkää koko luettelo ja toistakaa. Tämä yksinkertainen malli toimii kaikkien API:n keskustelusovellusten perustana. Koodi näyttää, miten se tehdään.
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.')Pikatarkistus
Testatkaa tämän oppitunnin AI Engineering -käsitteiden ymmärtämistänne.
Oppitunnin yhteenveto
Opitte keskustelujen perustan: viestitaulukko ohjaa keskustelua, ja vastaus sisältää sisällön, finish_reason-arvon sekä tokenimäärät. Seuraavaksi: parametrit.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Chat Completions -päätepiste” ilmainen?
Kyllä – oppitunnin ”Chat Completions -päätepiste” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko AI Engineering Academy-kurssin, päivitä CoddyKit PROhon. AI Engineering Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Chat Completions -päätepiste”?
Ymmärrätte system-, user- ja assistant-rooleja sisältävän messages-taulukon, laaditte ensimmäisen promptinne ja tulkitsette API:lta palautuvan response-olion. Harjoittelet AI Engineering Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni AI Engineering Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin AI Engineering Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Chat Completions -päätepiste”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä AI Engineering Academy-oppitunnilla?
Kyllä. Jokainen AI Engineering Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Python-ympäristön määrittäminen
- Chat Completions -päätepiste
- Mallin toiminnan ohjaaminen parametreilla
- Virheenkäsittely ja nopeusrajoitukset