Kehotteiden suorituskyvyn seuranta tuotannossa
Viiveen, kustannusten, laatupisteiden ja virhetiheyksien seuranta kunkin kehoteversion osalta
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 responseKutsukohtaisen 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.00Automaattinen 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 NoneMittareiden 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ä.
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
- Kehoterekisterin arkkitehtuuri
- Kehotteiden versionhallinta
- Julkaisu- ja palautusstrategiat
- Kehotteiden suorituskyvyn seuranta tuotannossa