AI Engineering Academy · Oppitunti

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.

Oppitunti 2/413 vaihetta

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

Oikean 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 tokens

Viestien 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 response

Pienimmä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.

Aloita maksutta

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

  1. Python-ympäristön määrittäminen
  2. Chat Completions -päätepiste
  3. Mallin toiminnan ohjaaminen parametreilla
  4. Virheenkäsittely ja nopeusrajoitukset
← Takaisin: AI Engineering Academy