การตรวจติดตามประสิทธิภาพพรอมต์ในระบบจริง
ติดตามเวลาแฝง ต้นทุน คะแนนคุณภาพ และอัตราความล้มเหลวของแต่ละเวอร์ชันพรอมต์
การตรวจติดตามประสิทธิภาพพรอมต์ในระบบจริง เป็นบทเรียน AI Prompt Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Prompt Engineering และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องติดตามประสิทธิภาพของพรอมต์
พรอมต์ที่นำไปใช้งานในระบบจริงยังไม่ถือว่า “เสร็จสมบูรณ์” พฤติกรรมของโมเดลเปลี่ยนแปลงไปตามการอัปเดต ข้อมูลนำเข้าของผู้ใช้เปลี่ยนไปตามเวลา และค่าใช้จ่ายอาจพุ่งสูงขึ้นโดยไม่คาดคิด การติดตามอย่างต่อเนื่องช่วยตรวจจับการถดถอยก่อนที่จะส่งผลเสียต่อผู้ใช้ และช่วยให้คาดการณ์ค่าใช้จ่ายได้
เมตริกสำคัญสำหรับแต่ละเวอร์ชันพรอมต์
ให้ติดตามเมตริกห้ารายการต่อเวอร์ชันพรอมต์ในระบบจริง:
- เวลาแฝงเฉลี่ย: เวลาตั้งแต่ส่งคำขอจนได้รับผลลัพธ์ทั้งหมด (P50, P95, P99)
- ค่าใช้จ่ายต่อการเรียกใช้: โทเค็นขาเข้า × ราคาขาเข้า + โทเค็นขาออก × ราคาขาออก
- คะแนนคุณภาพ: การประเมินอัตโนมัติ (LLM เป็นผู้ตัดสินหรือเมตริกของงาน)
- อัตราข้อผิดพลาด: ข้อผิดพลาดจากเอพีไอ + การแยกวิเคราะห์ผลลัพธ์ที่มีรูปแบบไม่ถูกต้องล้มเหลว
- ความพึงพอใจของผู้ใช้: คะแนนการกดถูกใจหรือไม่ถูกใจ อัตราการลองใหม่ และการยุติช่วงการใช้งานกลางคัน
การวัดและบันทึก: การบันทึกเมตริก
ห่อหุ้มการเรียก LLM ทุกครั้งด้วยการวัดและบันทึกที่จัดเก็บเมตริกสำคัญทั้งหมดลงในแหล่งเก็บข้อมูลอนุกรมเวลาหรือฐานข้อมูล เพื่อใช้วิเคราะห์และแจ้งเตือนในภายหลัง
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การคำนวณค่าใช้จ่ายต่อการเรียกใช้
ค่าใช้จ่ายต่อการเรียกใช้ = โทเค็นขาเข้า × ราคาขาเข้า + โทเค็นขาออก × ราคาขาออก การจัดเก็บจำนวนโทเค็นดิบช่วยให้คำนวณค่าใช้จ่ายใหม่ได้ทุกครั้งที่มีการเปลี่ยนแปลงราคา
# 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การให้คะแนนคุณภาพอัตโนมัติ
ใช้ LLM เป็นผู้ตัดสินเพื่อให้คะแนนคุณภาพของผลลัพธ์โดยอัตโนมัติในระดับการใช้งานจริง ให้สุ่มตัวอย่างการเรียกใช้ 5-10% เพื่อให้คะแนนคุณภาพและควบคุมค่าใช้จ่ายให้อยู่ในระดับที่จัดการได้
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การจัดเก็บเมตริกในฐานข้อมูลอนุกรมเวลา
ฐานข้อมูลอนุกรมเวลา (InfluxDB, TimescaleDB หรือแม้แต่ตาราง PostgreSQL แบบง่าย ๆ ที่มีดัชนีเวลา) จัดเก็บเมตริกต่อการเรียกใช้ได้อย่างมีประสิทธิภาพ และรองรับคำค้นเพื่อรวมข้อมูลสำหรับแผงควบคุม
-- 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;การสร้างแผงควบคุมเมตริก
แผงควบคุมจะแสดงเมตริกสำคัญห้ารายการแบบทันที ใช้กราฟานา (พร้อมแหล่งข้อมูล TimescaleDB) หรือแผงควบคุมเว็บที่สร้างขึ้นเอง แผงข้อมูลสำคัญมีดังนี้:
- เวลาแฝง P50/P95/P99 ตามช่วงเวลา แยกตามเวอร์ชัน
- แนวโน้มค่าใช้จ่ายต่อการเรียกใช้ (รายวัน/รายสัปดาห์)
- เปอร์เซ็นต์อัตราข้อผิดพลาด
- ค่าเฉลี่ยเคลื่อนที่ของคะแนนคุณภาพ
- คะแนนความพึงพอใจของผู้ใช้
# 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()การตรวจจับความผิดปกติสำหรับการถดถอยของพรอมต์
การตรวจสอบแผงควบคุมด้วยตนเองอาจพลาดการถดถอยที่เกิดขึ้นอย่างช้า ๆ การตรวจจับความผิดปกติอัตโนมัติจะเปรียบเทียบช่วงข้อมูลเลื่อนกับค่าพื้นฐานในอดีต และส่งสัญญาณเตือนเมื่อความเบี่ยงเบนเกินเกณฑ์
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')กฎและเกณฑ์การแจ้งเตือน
กำหนดกฎการแจ้งเตือนเป็นโค้ด เพื่อให้ควบคุมเวอร์ชันและตรวจทานได้ กฎการแจ้งเตือนสำหรับการติดตามพรอมต์ที่พบได้บ่อยมีดังนี้:
- อัตราข้อผิดพลาด > 5% ติดต่อกัน 5 นาที
- เวลาแฝง P95 > 10 วินาที เป็นเวลา 3 นาที
- ค่าใช้จ่ายต่อวัน > 2 เท่าของค่าเฉลี่ยรายสัปดาห์ (ค่าใช้จ่ายพุ่งสูงขึ้น)
- คะแนนคุณภาพลดลง > 20% จากค่าพื้นฐาน
# 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}'สัญญาณความพึงพอใจของผู้ใช้
เมตริกอัตโนมัติไม่สามารถสะท้อนทุกสิ่งได้ ให้รวบรวมสัญญาณจากผู้ใช้ทั้งโดยตรงและโดยอ้อมเพื่อเสริมคะแนนคุณภาพ:
- คะแนนการกดถูกใจหรือไม่ถูกใจ: ผู้ใช้กด 👍/👎 ให้กับคำตอบจากปัญญาประดิษฐ์โดยตรง
- อัตราการลองใหม่: ผู้ใช้ส่งคำค้นเดิมอีกครั้งทันที (เป็นสัญญาณความไม่พึงพอใจโดยอ้อม)
- อัตราการคัดลอก/นำไปใช้: ผู้ใช้คัดลอกผลลัพธ์จากปัญญาประดิษฐ์ (เป็นสัญญาณความพึงพอใจโดยอ้อม)
- อัตราการแก้ไข: ผู้ใช้แก้ไขผลลัพธ์จากปัญญาประดิษฐ์ก่อนนำไปใช้
# 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}รายงานเปรียบเทียบเวอร์ชัน
เมื่อประเมินว่าจะเลื่อนระดับหรือย้อนกลับการทดสอบแบบคานารีหรือไม่ ให้สร้างการเปรียบเทียบเมตริกทั้งหมดแบบเคียงข้างกันระหว่างเวอร์ชันใหม่กับค่าพื้นฐาน รายงานนี้ใช้ประกอบการตัดสินใจเลื่อนระดับ
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%)การตรวจสอบอย่างรวดเร็ว
คุณต้องการตรวจจับการถดถอยของคุณภาพโดยอัตโนมัติโดยไม่ต้องตรวจสอบแผงควบคุมด้วยตนเอง วิธีใดเหมาะสมที่สุดสำหรับงานนี้
สรุปการติดตาม
การติดตามพรอมต์ในระบบจริงจำเป็นต้องติดตามห้ามิติในแต่ละเวอร์ชัน:
- เวลาแฝง (P50/P95/P99) — ประสบการณ์ของผู้ใช้
- ค่าใช้จ่ายต่อการเรียกใช้ — สุขภาพทางการเงิน
- คะแนนคุณภาพ — การสุ่มตัวอย่างเพื่อประเมินโดย LLM เป็นผู้ตัดสิน
- อัตราข้อผิดพลาด — ความน่าเชื่อถือ
- ความพึงพอใจของผู้ใช้ — คะแนนการกดถูกใจหรือไม่ถูกใจ การลองใหม่ และสัญญาณการคัดลอก
จัดเก็บเมตริกในฐานข้อมูลอนุกรมเวลา แสดงผลในแผงควบคุม และส่งสัญญาณเตือนเมื่อเกินเกณฑ์ รายงานเปรียบเทียบเวอร์ชันช่วยประกอบการตัดสินใจเลื่อนระดับและย้อนกลับ
คำถามที่พบบ่อย
บทเรียน “การตรวจติดตามประสิทธิภาพพรอมต์ในระบบจริง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การตรวจติดตามประสิทธิภาพพรอมต์ในระบบจริง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Prompt Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การตรวจติดตามประสิทธิภาพพรอมต์ในระบบจริง”
ติดตามเวลาแฝง ต้นทุน คะแนนคุณภาพ และอัตราความล้มเหลวของแต่ละเวอร์ชันพรอมต์ คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Prompt Engineering หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Prompt Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การตรวจติดตามประสิทธิภาพพรอมต์ในระบบจริง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Prompt Engineering นี้ได้ไหม
ได้ บทเรียน AI Prompt Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สถาปัตยกรรมทะเบียนพรอมต์
- การควบคุมเวอร์ชันสำหรับพรอมต์
- กลยุทธ์การนำไปใช้งานและย้อนกลับ
- การตรวจติดตามประสิทธิภาพพรอมต์ในระบบจริง