Tekoälyn prompt engineering · Oppitunti

Kehotteiden suorituskyvyn seuranta tuotannossa

Viiveen, kustannusten, laatupisteiden ja virhetiheyksien seuranta kunkin kehoteversion osalta

Oppitunti 4/413 vaihetta

Kehotteiden suorituskyvyn seuranta tuotannossa on ilmainen Tekoälyn prompt engineering-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Tekoälyn prompt engineering-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.

Miksi kehotteiden suorituskykyä seurataan?

Tuotantoon julkaistu kehote ei ole ”valmis”. Mallin toiminta muuttuu päivitysten myötä, käyttäjien syötteet muuttuvat ajan mittaan ja kustannukset voivat kasvaa odottamatta. Jatkuva seuranta havaitsee taantumat ennen kuin ne haittaavat käyttäjiä ja pitää kulut ennakoitavina.

Keskeiset mittarit kehoteversiota kohden

Seuratkaa tuotannossa näitä viittä mittaria kunkin kehoteversion osalta:

  • Keskimääräinen viive: aika pyynnöstä täydelliseen vastaukseen (P50, P95, P99)
  • Kustannus kutsua kohden: syötetunnisteet × hinta + tulostunnisteet × hinta
  • Laatupisteet: automaattinen arviointi (LLM-arvioija tai tehtäväkohtainen mittari)
  • Virheprosentti: API-virheet + jäsennettävän virheellisen tulosteen aiheuttamat epäonnistumiset
  • Käyttäjätyytyväisyys: peukaloarvio, uudelleenyritysten määrä, istunnon keskeyttämiset

Instrumentointi: mittareiden tallentaminen

Ympäröikää jokainen LLM-kutsu instrumentoinnilla, joka tallentaa kaikki keskeiset mittarit aikasarjatietokantaan tai muuhun tietokantaan myöhempää analysointia ja hälytysten muodostamista varten.

import time
import openai

client = openai.OpenAI(api_key='YOUR_API_KEY')

def instrumented_call(prompt_id, version, messages, model):
    start = time.time()
    error = False
    response = None
    try:
        response = client.chat.completions.create(
            model=model,
            messages=messages
        )
    except Exception as e:
        error = True
        raise
    finally:
        latency_ms = (time.time() - start) * 1000
        usage = response.usage if response else None
        record_metric({
            'prompt_id': prompt_id,
            'version': version,
            'latency_ms': latency_ms,
            'input_tokens': usage.prompt_tokens if usage else 0,
            'output_tokens': usage.completion_tokens if usage else 0,
            'error': error,
            'timestamp': time.time()
        })
    return response

Kutsukohtaisen kustannuksen laskeminen

Kustannus kutsua kohden = syötetunnisteet × syötteen hinta + tulostunnisteet × tulosteen hinta. Kun raakamuotoiset tunnistemäärät tallennetaan, kustannus voidaan laskea uudelleen aina hintojen muuttuessa.

# pricing.py — model pricing table (per 1M tokens)
PRICING = {
    'gpt-4o': {'input': 2.50, 'output': 10.00},
    'gpt-4o-mini': {'input': 0.15, 'output': 0.60},
    'claude-3-5-sonnet-20241022': {'input': 3.00, 'output': 15.00},
}

def cost_usd(model, input_tokens, output_tokens):
    p = PRICING.get(model)
    if not p:
        return None
    cost = (input_tokens / 1_000_000) * p['input'] \
         + (output_tokens / 1_000_000) * p['output']
    return round(cost, 6)

# Example
c = cost_usd('gpt-4o-mini', input_tokens=800, output_tokens=200)
print(f'Cost per call: ${c}')   # Cost per call: $0.000240

# Daily cost estimate
calls_per_day = 50_000
print(f'Daily cost: ${round(c * calls_per_day, 2)}')  # $12.00

Automaattinen laadun arviointi

Arvioikaa tulosteen laatua automaattisesti tuotantomittakaavassa LLM-arvioijan avulla. Arvioikaa laadun säilyttämiseksi hallittavina 5–10 % kutsuista.

import random

JUDGE_SAMPLE_RATE = 0.05  # score 5% of calls

JUDGE_PROMPT = '''Rate the quality of this AI response on a scale of 1-5.
1=Very poor, 3=Acceptable, 5=Excellent.
Return only the integer score.

User input: {input}
AI response: {output}'''

def maybe_score_quality(user_input, ai_output, model='gpt-4o-mini'):
    if random.random() > JUDGE_SAMPLE_RATE:
        return None  # not sampled

    judge_messages = [{'role': 'user', 'content':
        JUDGE_PROMPT.format(input=user_input, output=ai_output)}]
    response = client.chat.completions.create(
        model=model, messages=judge_messages, max_tokens=5
    )
    try:
        score = int(response.choices[0].message.content.strip())
        return max(1, min(5, score))  # clamp to 1-5
    except ValueError:
        return None

Mittareiden tallentaminen aikasarjatietokantaan

Aikasarjatietokannat (InfluxDB, TimescaleDB tai jopa yksinkertainen PostgreSQL-taulu, jossa on aikaleimaindeksi) tallentavat kutsukohtaiset mittarit tehokkaasti ja tukevat koontikyselyitä koontinäyttöjä varten.

-- TimescaleDB / PostgreSQL schema for prompt metrics
CREATE TABLE prompt_metrics (
  ts              TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  prompt_id       VARCHAR(100),
  version         VARCHAR(20),
  model           VARCHAR(50),
  latency_ms      FLOAT,
  input_tokens    INT,
  output_tokens   INT,
  cost_usd        FLOAT,
  quality_score   FLOAT,   -- NULL if not sampled
  error           BOOLEAN DEFAULT FALSE
);

-- Convert to hypertable (TimescaleDB)
SELECT create_hypertable('prompt_metrics', 'ts');

-- Query: hourly P95 latency by version
SELECT
  date_trunc('hour', ts) AS hour,
  version,
  PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY latency_ms) AS p95_latency
FROM prompt_metrics
WHERE prompt_id = 'summarize-article'
  AND ts > NOW() - INTERVAL '24 hours'
GROUP BY 1, 2
ORDER BY 1;

Mittarikoontinäytön rakentaminen

Koontinäytöt tuovat viisi keskeistä mittaria näkyviin reaaliajassa. Käyttäkää Grafanaa (TimescaleDB-tietolähteellä) tai mukautettua verkkokoontinäyttöä. Keskeiset paneelit:

  • Viiveen P50/P95/P99 ajan mittaan jaoteltuna version mukaan
  • Kutsukohtaisen kustannuksen kehitys (päivittäin/viikoittain)
  • Virheprosentti
  • Laatupisteiden liukuva keskiarvo
  • Käyttäjätyytyväisyyspisteet
# Simple dashboard query aggregation in Python
def get_dashboard_stats(conn, prompt_id, hours=24):
    with conn.cursor() as cur:
        cur.execute('''
            SELECT
              version,
              COUNT(*) AS calls,
              AVG(latency_ms) AS avg_latency,
              PERCENTILE_CONT(0.95)
                WITHIN GROUP (ORDER BY latency_ms) AS p95_latency,
              AVG(cost_usd) AS avg_cost,
              AVG(quality_score) FILTER (WHERE quality_score IS NOT NULL) AS avg_quality,
              SUM(error::int)::float / COUNT(*) AS error_rate
            FROM prompt_metrics
            WHERE prompt_id = %s
              AND ts > NOW() - INTERVAL %s
            GROUP BY version
            ORDER BY MAX(ts) DESC
        ''', (prompt_id, f'{hours} hours'))
        return cur.fetchall()

Kehotetaantumien poikkeamien havaitseminen

Koontinäyttöjen manuaalinen tarkastelu ei havaitse hitaita taantumia. Automaattinen poikkeamien havaitseminen vertaa liukuvaa ikkunaa historialliseen vertailutasoon ja lähettää hälytyksen, kun poikkeama ylittää kynnysarvon.

import statistics

def detect_anomaly(recent_values, baseline_values, threshold_std=2.0):
    if len(baseline_values) < 10:
        return False  # not enough data
    baseline_mean = statistics.mean(baseline_values)
    baseline_std = statistics.stdev(baseline_values)
    recent_mean = statistics.mean(recent_values)

    if baseline_std == 0:
        return False
    z_score = abs(recent_mean - baseline_mean) / baseline_std
    return z_score > threshold_std

# Example: detect quality regression
baseline_quality = [4.1, 4.0, 4.2, 4.1, 4.0, 3.9, 4.1, 4.2, 4.0, 4.1]
recent_quality   = [3.2, 3.1, 3.4, 3.0]

if detect_anomaly(recent_quality, baseline_quality):
    print('ALERT: Quality score anomaly detected!')
    # fire_pagerduty_alert(...)
else:
    print('Quality within normal range')

Hälytyssäännöt ja kynnysarvot

Määritelkää hälytyssäännöt koodina, jotta ne ovat versionhallittuja ja tarkistettavissa. Yleisiä kehotteiden seurantahälytyksiä:

  • Virheprosentti > 5 % viiden peräkkäisen minuutin ajan
  • P95-viive > 10 s kolmen minuutin ajan
  • Päivittäinen kustannus > 2 × viikoittainen keskiarvo (kustannuspiikki)
  • Laatupisteet laskevat > 20 % vertailutasosta
# alerts.yaml (Grafana alerting or custom)
alerts:
  - name: HighErrorRate
    condition: error_rate > 0.05
    for: 5m
    severity: critical
    message: 'Prompt {prompt_id} error rate {error_rate:.1%} exceeds 5%'

  - name: HighLatencyP95
    condition: p95_latency_ms > 10000
    for: 3m
    severity: warning
    message: 'P95 latency {p95_latency_ms}ms exceeds 10s for {prompt_id}'

  - name: CostSpike
    condition: daily_cost_usd > weekly_avg_daily_cost * 2
    for: 1h
    severity: warning
    message: 'Daily cost ${daily_cost_usd:.2f} is 2x the weekly average'

  - name: QualityRegression
    condition: rolling_quality_avg < baseline_quality_avg * 0.80
    for: 15m
    severity: critical
    message: 'Quality dropped {pct_drop:.0%} for prompt {prompt_id}'

Käyttäjätyytyväisyyden signaalit

Automaattiset mittarit eivät kerro kaikkea. Kerätkää laadun arviointien tueksi käyttäjiltä sekä suoraa että epäsuoraa palautetta:

  • Peukaloarvio: käyttäjän suora 👍/👎-arvio tekoälyn vastauksesta
  • Uudelleenyritysten määrä: käyttäjä lähettää saman kyselyn heti uudelleen (epäsuora tyytymättömyyden merkki)
  • Kopiointi- ja käyttöaste: käyttäjä kopioi tekoälyn tuottaman tulosteen (epäsuora tyytyväisyyden merkki)
  • Korjausaste: käyttäjä muokkaa tekoälyn tulostetta ennen sen käyttämistä
# feedback_collector.py
def record_feedback(prompt_id, version, call_id, signal_type, value):
    '''
    signal_type: 'thumbs' | 'retry' | 'copy' | 'edit'
    value: for thumbs: 1 (up) or -1 (down); others: 1 (occurred)
    '''
    db.execute(
        'INSERT INTO prompt_feedback '
        '(prompt_id, version, call_id, signal_type, value, ts) '
        'VALUES (%s, %s, %s, %s, %s, NOW())',
        (prompt_id, version, call_id, signal_type, value)
    )

# Aggregate satisfaction score
def satisfaction_score(prompt_id, version):
    rows = db.fetch(
        'SELECT signal_type, AVG(value) as avg_val FROM prompt_feedback '
        'WHERE prompt_id=%s AND version=%s GROUP BY signal_type',
        (prompt_id, version)
    )
    return {r['signal_type']: round(r['avg_val'], 3) for r in rows}

Versioiden vertailuraportit

Kun arvioitte, otetaanko canary käyttöön laajemmin vai tehdäänkö rollback, laatikaa rinnakkainen vertailu uuden version ja vertailutason kaikista mittareista. Tämä raportti ohjaa käyttöönottoa koskevaa päätöstä.

def version_comparison_report(prompt_id, version_a, version_b, hours=48):
    stats_a = get_dashboard_stats_for_version(prompt_id, version_a, hours)
    stats_b = get_dashboard_stats_for_version(prompt_id, version_b, hours)

    print(f'=== Comparison: {version_a} vs {version_b} ===')
    metrics = ['avg_latency', 'p95_latency', 'avg_cost', 'avg_quality', 'error_rate']
    for m in metrics:
        va = stats_a.get(m, 0)
        vb = stats_b.get(m, 0)
        delta = vb - va
        pct = (delta / va * 100) if va else 0
        direction = '+' if delta > 0 else ''
        print(f'{m:20s}: {va:.4f} -> {vb:.4f}  ({direction}{pct:.1f}%)')

# Example output:
# avg_latency         : 1234.5000 -> 1189.2000  (-3.7%)
# p95_latency         : 3210.0000 -> 3050.0000  (-5.0%)
# avg_cost            : 0.000240 -> 0.000255  (+6.2%)
# avg_quality         : 4.1000 -> 4.3000  (+4.9%)
# error_rate          : 0.0120 -> 0.0080  (-33.3%)

Pikatarkistus

Haluatte havaita laadun taantumat automaattisesti ilman koontinäyttöjen manuaalista tarkistamista. Millä lähestymistavalla tämä onnistuu parhaiten?

Seurannan yhteenveto

Tuotantokehotteiden seurannassa on seurattava viittä ulottuvuutta versiota kohden:

  • Viive (P50/P95/P99) — käyttökokemus
  • Kustannus kutsua kohden — taloudellinen tila
  • Laatupisteet — automaattinen LLM-arvioijan tekemä otanta
  • Virheprosentti — luotettavuus
  • Käyttäjätyytyväisyys — peukaloarviot, uudelleenyritykset ja kopiointisignaalit

Tallentakaa mittarit aikasarjatietokantaan, visualisoikaa ne koontinäytöillä ja lähettäkää hälytyksiä, kun kynnysarvot ylittyvät. Versioiden vertailuraportit tukevat käyttöönottoa ja rollbackia koskevia päätöksiä.

Aloita maksutta

Opi Tekoälyn prompt engineering 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
53
Oppitunnit
199

Usein kysytyt kysymykset

Onko oppitunti ”Kehotteiden suorituskyvyn seuranta tuotannossa” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Tekoälyn prompt engineering-oppimispolun 3 oppituntia, myös oppitunnin “Kehotteiden suorituskyvyn seuranta tuotannossa”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Kehotteiden suorituskyvyn seuranta tuotannossa”?

Viiveen, kustannusten, laatupisteiden ja virhetiheyksien seuranta kunkin kehoteversion osalta Harjoittelet Tekoälyn prompt engineering-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Tekoälyn prompt engineering-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyn prompt engineering-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Kehotteiden suorituskyvyn seuranta tuotannossa”-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ä Tekoälyn prompt engineering-oppitunnilla?

Kyllä. Jokainen Tekoälyn prompt engineering-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. Kehoterekisterin arkkitehtuuri
  2. Kehotteiden versionhallinta
  3. Julkaisu- ja palautusstrategiat
  4. Kehotteiden suorituskyvyn seuranta tuotannossa
← Takaisin: Tekoälyn prompt engineering