0Pricing
AI Engineering Academy · บทเรียน

การแจ้งเตือนเวลาแฝง ต้นทุน และคุณภาพที่ลดลง

กำหนดเกณฑ์แจ้งเตือนสำหรับเวลาแฝง p99 ต้นทุนต่อคำขอ และคะแนนคุณภาพอัตโนมัติ พร้อมส่งการแจ้งเตือนไปยัง Slack หรือ PagerDuty เมื่อกระบวนการ LLM ของคุณมีคุณภาพลดลง

การแจ้งเตือนเวลาแฝง ต้นทุน และคุณภาพที่ลดลง เป็นบทเรียน AI Engineering Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Engineering Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดการแจ้งเตือนจึงสำคัญต่อระบบ LLM

แอปพลิเคชัน LLM มักมีปัญหาในลักษณะที่ละเอียดอ่อนและค่อย ๆ เกิดขึ้น การเปลี่ยนพรอมต์อาจทำให้เวลาแฝงเฉลี่ยเพิ่มขึ้น 30% การปรับปรุงการดึงข้อมูลอาจทำให้คุณภาพคำตอบลดลงเล็กน้อย หรือการใช้งานที่พุ่งสูงขึ้นอาจทำให้ค่าใช้จ่ายรายวันสูงกว่างบประมาณถึง 5 เท่า หากไม่มีการแจ้งเตือนเชิงรุก คุณจะพบปัญหาเหล่านี้ก็ต่อเมื่อผู้ใช้ร้องเรียนหรือเมื่อได้รับใบเรียกเก็บเงินรายเดือน การแจ้งเตือนเปลี่ยนการแก้ปัญหาเฉพาะหน้าให้เป็นการปฏิบัติการเชิงรุก

สามประเภทของการแจ้งเตือน

การแจ้งเตือนของแอปพลิเคชัน LLM แบ่งออกเป็นสามประเภท การแจ้งเตือนเวลาแฝงจะทำงานเมื่อเวลาตอบสนองเกินเกณฑ์ประสบการณ์ผู้ใช้ (เช่น p99 > 10 วินาที) การแจ้งเตือนค่าใช้จ่ายจะทำงานเมื่อต้นทุนต่อคำขอหรือค่าใช้จ่ายรายวันเกินเกณฑ์งบประมาณ เพื่อป้องกันค่าใช้จ่ายพุ่งเกินคาด การแจ้งเตือนคุณภาพจะทำงานเมื่อตัวชี้วัดคุณภาพอัตโนมัติ เช่น คะแนนจาก LLM ในบทบาทผู้ตัดสิน อัตราความพึงพอใจของผู้ใช้ หรือคะแนนความสอดคล้องกับข้อเท็จจริง ลดลงต่ำกว่าระดับขั้นต่ำที่ยอมรับได้ แต่ละประเภทต้องใช้การตรวจวัดและช่องทางการแจ้งเตือนที่แตกต่างกัน

from dataclasses import dataclass

@dataclass
class AlertThresholds:
    # Latency (milliseconds)
    p50_latency_ms: int = 2000    # median should be under 2s
    p99_latency_ms: int = 10000   # 99th percentile under 10s
    # Cost (USD)
    max_cost_per_request: float = 0.05  # alert if one request costs > 5 cents
    max_daily_spend: float = 50.00      # alert if daily spend exceeds $50
    # Quality (0.0 to 1.0 scale)
    min_quality_score: float = 0.75     # alert if rolling avg drops below 75%
    min_faithfulness: float = 0.80      # alert if RAGAS faithfulness drops below 80%

DEFAULT_THRESHOLDS = AlertThresholds()

การรวบรวมตัวชี้วัดเวลาแฝง

หากต้องการแจ้งเตือนเรื่องเวลาแฝง คุณต้องรวบรวมข้อมูลอย่างสม่ำเสมอเสียก่อน ให้แยกวัด องค์ประกอบของเวลาแฝงสามส่วน ได้แก่ เวลาจนกว่าจะได้โทเค็นแรก (TTFT ซึ่งสำคัญต่อประสบการณ์ผู้ใช้แบบสตรีมมิง) เวลาตอบสนองทั้งหมด และเวลาแฝงของแต่ละขั้นตอนสำหรับการดึงข้อมูลกับการสร้างผลลัพธ์ จัดเก็บข้อมูลเหล่านี้เป็นข้อมูลอนุกรมเวลา (หนึ่งจุดข้อมูลต่อคำขอ) เพื่อให้คำนวณเปอร์เซ็นไทล์และค่าเฉลี่ยเคลื่อนที่ย้อนหลังในช่วง N นาทีหรือชั่วโมงได้

import time
from collections import deque
from statistics import quantiles

class LatencyTracker:
    def __init__(self, window_size=100):
        self.window = deque(maxlen=window_size)  # rolling window of latencies

    def record(self, latency_ms: float):
        self.window.append(latency_ms)

    def p50(self) -> float:
        if not self.window:
            return 0
        return quantiles(self.window, n=100)[49]

    def p99(self) -> float:
        if not self.window:
            return 0
        return quantiles(self.window, n=100)[98]

    def check_alert(self, thresholds: AlertThresholds) -> list[str]:
        alerts = []
        if self.p99() > thresholds.p99_latency_ms:
            alerts.append(f'p99 latency {self.p99():.0f}ms exceeds {thresholds.p99_latency_ms}ms')
        if self.p50() > thresholds.p50_latency_ms:
            alerts.append(f'p50 latency {self.p50():.0f}ms exceeds {thresholds.p50_latency_ms}ms')
        return alerts

latency_tracker = LatencyTracker()

การติดตามและแจ้งเตือนค่าใช้จ่าย

การตรวจสอบค่าใช้จ่ายต้องติดตามการใช้จ่ายในหลายระดับ ได้แก่ ค่าใช้จ่ายต่อคำขอ (เพื่อจับคำค้นที่มีค่าใช้จ่ายสูงผิดปกติ) ยอดรวมรายชั่วโมงและรายวัน (เพื่อจับการใช้งานที่พุ่งสูงขึ้น) และค่าใช้จ่ายแยกตามฟีเจอร์ (เพื่อระบุว่าส่วนใดของแอปพลิเคชันมีค่าใช้จ่ายสูงที่สุด) แจ้งเตือนทันทีเมื่อพบความผิดปกติของค่าใช้จ่ายต่อคำขอ และใช้การตรวจสอบตามเวลาที่กำหนดสำหรับขีดจำกัดงบประมาณรายวัน

from datetime import datetime, date
import threading

class CostTracker:
    def __init__(self):
        self._lock = threading.Lock()
        self._daily_spend = {}  # date -> total USD
        self._per_request = []  # list of (timestamp, cost)

    def record(self, cost_usd: float) -> list[str]:
        today = date.today().isoformat()
        alerts = []
        
        with self._lock:
            # Track daily spend
            self._daily_spend[today] = self._daily_spend.get(today, 0) + cost_usd
            self._per_request.append((datetime.now(), cost_usd))
        
        # Alert on expensive single requests
        if cost_usd > DEFAULT_THRESHOLDS.max_cost_per_request:
            alerts.append(f'Expensive request: ${cost_usd:.4f} (threshold: ${DEFAULT_THRESHOLDS.max_cost_per_request})')
        
        # Alert on daily budget exceeded
        daily_total = self._daily_spend[today]
        if daily_total > DEFAULT_THRESHOLDS.max_daily_spend:
            alerts.append(f'Daily budget exceeded: ${daily_total:.2f} > ${DEFAULT_THRESHOLDS.max_daily_spend}')
        
        return alerts

cost_tracker = CostTracker()

การแจ้งเตือนคะแนนคุณภาพ

การแจ้งเตือนคุณภาพเป็นประเภทที่ซับซ้อนที่สุด เนื่องจากไม่สามารถวัดคุณภาพได้จากตัวชี้วัดโครงสร้างพื้นฐานเพียงอย่างเดียว แต่ต้องใช้การประเมินเชิงความหมาย แนวทางที่ขยายรองรับได้ดีที่สุดคือ การประเมินอัตโนมัติจากตัวอย่าง โดยสุ่มคำขอจากระบบจริง (5-10%) เรียกใช้ตัวประเมิน LLM ในบทบาทผู้ตัดสินแบบไม่พร้อมกัน จัดเก็บคะแนน และคำนวณค่าเฉลี่ยเคลื่อนที่ ให้แจ้งเตือนเมื่อค่าเฉลี่ยเคลื่อนที่ลดลงต่ำกว่าระดับคุณภาพขั้นต่ำ

import random
from openai import OpenAI

client = OpenAI()

def evaluate_response_quality(question: str, answer: str) -> float:
    judge_prompt = f'''Rate the quality of this AI assistant response on a scale from 0 to 1.

Question: {question}
Answer: {answer}

Return only a JSON object: {{"score": 0.85, "reason": "brief reason"}}

Scoring guide:
1.0 = Perfect, accurate, helpful
0.75 = Good, minor issues
0.5 = Acceptable but incomplete
0.25 = Poor, major gaps
0.0 = Completely wrong or harmful'''
    
    response = client.chat.completions.create(
        model='gpt-4o-mini',  # cheaper model for evaluation
        messages=[{'role': 'user', 'content': judge_prompt}],
        response_format={'type': 'json_object'}
    )
    import json
    result = json.loads(response.choices[0].message.content)
    return float(result['score'])

def maybe_evaluate(question: str, answer: str, sample_rate=0.1):
    if random.random() < sample_rate:
        score = evaluate_response_quality(question, answer)
        quality_tracker.record(score)
        return score
    return None

ค่าเฉลี่ยเคลื่อนที่สำหรับตรวจจับแนวโน้ม

คำตอบที่ผิดพลาดเพียงครั้งเดียวไม่ได้บ่งชี้ถึงปัญหาที่เกิดขึ้นทั้งระบบ ให้ใช้ ค่าเฉลี่ยเคลื่อนที่ในช่วงเวลาใดเวลาหนึ่ง (เช่น 1 ชั่วโมงล่าสุดหรือ 100 คำขอล่าสุด) เพื่อตรวจจับแนวโน้ม ค่าเฉลี่ยเคลื่อนที่ที่ข้ามเกณฑ์แล้วคงอยู่เหนือเกณฑ์เป็นเวลา 10 นาทีขึ้นไปบ่งชี้ถึงปัญหาจริง ขณะที่การพุ่งขึ้นชั่วครู่อาจเป็นเพียงสัญญาณรบกวน ค่าเฉลี่ยเคลื่อนที่แบบถ่วงน้ำหนักเอ็กซ์โพเนนเชียล (EWMA) ตอบสนองต่อการเปลี่ยนแปลงล่าสุดได้เร็วกว่าค่าเฉลี่ยเคลื่อนที่ทั่วไป

class RollingQualityMonitor:
    def __init__(self, window=50, alert_threshold=0.75, ewma_alpha=0.1):
        self.scores = []
        self.window = window
        self.alert_threshold = alert_threshold
        self.alpha = ewma_alpha  # EWMA decay factor
        self.ewma_score = None

    def record(self, score: float):
        self.scores.append(score)
        if len(self.scores) > self.window:
            self.scores.pop(0)
        
        # Update exponentially weighted moving average
        if self.ewma_score is None:
            self.ewma_score = score
        else:
            self.ewma_score = self.alpha * score + (1 - self.alpha) * self.ewma_score

    def should_alert(self) -> bool:
        if len(self.scores) < 10:  # not enough data yet
            return False
        return self.ewma_score < self.alert_threshold

    def summary(self) -> dict:
        if not self.scores:
            return {}
        return {
            'rolling_avg': sum(self.scores) / len(self.scores),
            'ewma': self.ewma_score,
            'sample_count': len(self.scores),
            'alert': self.should_alert()
        }

quality_tracker = RollingQualityMonitor()

การกำหนดเส้นทางการแจ้งเตือน: Slack และ PagerDuty

การแจ้งเตือนจะมีประโยชน์ก็ต่อเมื่อส่งถึงบุคคลที่เหมาะสมผ่านช่องทางที่เหมาะสม กำหนดเส้นทางการแจ้งเตือนตามระดับความรุนแรง โดยส่งการแจ้งเตือนคุณภาพที่ลดลงและการแจ้งเตือนงบประมาณค่าใช้จ่ายไปยังช่อง Slack ที่ทีมของคุณตรวจสอบในเวลาทำการ ส่วนการแจ้งเตือนเวลาแฝงที่เกินเกณฑ์วิกฤต (เช่น p99 > 30 วินาที) และค่าใช้จ่ายที่พุ่งขึ้นฉับพลัน (เช่น สูงกว่าปกติ 10 เท่าภายใน 5 นาที) ให้ส่งไปยัง PagerDuty เพื่อยกระดับไปยังผู้รับผิดชอบเวรทันที

import requests

def send_slack_alert(message: str, severity: str, webhook_url: str):
    color = {'critical': '#ff0000', 'warning': '#ff9900', 'info': '#36a64f'}[severity]
    payload = {
        'attachments': [{
            'color': color,
            'title': f'LLM Alert [{severity.upper()}]',
            'text': message,
            'footer': 'AI Pipeline Monitor'
        }]
    }
    requests.post(webhook_url, json=payload)

def send_pagerduty_alert(title: str, details: str, routing_key: str):
    payload = {
        'routing_key': routing_key,
        'event_action': 'trigger',
        'payload': {
            'summary': title,
            'severity': 'critical',
            'source': 'ai-pipeline-monitor',
            'custom_details': {'details': details}
        }
    }
    requests.post('https://events.pagerduty.com/v2/enqueue', json=payload)

def route_alert(alert_text: str, severity: str):
    send_slack_alert(alert_text, severity, SLACK_WEBHOOK_URL)
    if severity == 'critical':
        send_pagerduty_alert(alert_text, alert_text, PAGERDUTY_ROUTING_KEY)

วงรอบการประเมินการแจ้งเตือน

ตรรกะการแจ้งเตือนควรทำงานเป็นวงรอบตามกำหนดเวลา ไม่ใช่ทำงานแทรกอยู่ในกระบวนการประมวลผลคำขอ การตรวจสอบการแจ้งเตือนแบบไม่พร้อมกันช่วยป้องกันไม่ให้เพิ่มเวลาแฝงแก่คำขอในระบบจริง เธรดเบื้องหลังหรืองานตามกำหนดเวลาที่ทำงานทุก 60 วินาทีก็เพียงพอสำหรับความต้องการด้านการแจ้งเตือนส่วนใหญ่ รวบรวมตัวชี้วัดในเส้นทางคำขอ แล้วประเมินเกณฑ์ในวงรอบเบื้องหลัง

import threading
import time

def alert_evaluation_loop(interval_seconds=60):
    while True:
        try:
            # Check latency
            latency_alerts = latency_tracker.check_alert(DEFAULT_THRESHOLDS)
            for alert in latency_alerts:
                route_alert(f'LATENCY: {alert}', 'warning')
            
            # Check quality
            quality_summary = quality_tracker.summary()
            if quality_summary.get('alert'):
                msg = f'QUALITY DEGRADATION: Rolling avg {quality_summary["ewma"]:.2f} below threshold {DEFAULT_THRESHOLDS.min_quality_score}'
                route_alert(msg, 'warning')
            
            print(f'Alert check complete. Quality: {quality_summary.get("ewma", "N/A")}')
        except Exception as e:
            print(f'Alert evaluation error: {e}')
        
        time.sleep(interval_seconds)

# Start in background thread
alert_thread = threading.Thread(target=alert_evaluation_loop, daemon=True)
alert_thread.start()

ความล้าจากการแจ้งเตือนและการปรับแต่งเกณฑ์

ความล้าจากการแจ้งเตือนเกิดขึ้นเมื่อการแจ้งเตือนทำงานบ่อยจนทีมเริ่มเพิกเฉย ป้องกันปัญหานี้โดยเริ่มจากเกณฑ์ที่ระมัดระวัง (สูง) แล้วค่อยปรับให้เข้มงวดขึ้นเมื่อเข้าใจค่าพื้นฐานของระบบ กำหนดให้การแจ้งเตือนต้องคงอยู่ตลอดหลายรอบการประเมินก่อนทำงาน รวมการแจ้งเตือนที่เกี่ยวข้องไว้ในการแจ้งเตือนเดียว และทบทวนกับยกเลิกการแจ้งเตือนที่ไม่เคยนำไปสู่การดำเนินการที่มีความหมายเป็นประจำ

class AlertDebouncer:
    def __init__(self, required_consecutive_fires=3):
        self.required = required_consecutive_fires
        self.fire_counts = {}  # alert_name -> consecutive fires
        self.already_firing = set()  # alert_names currently active

    def should_fire(self, alert_name: str, condition: bool) -> bool:
        if condition:
            self.fire_counts[alert_name] = self.fire_counts.get(alert_name, 0) + 1
            if self.fire_counts[alert_name] >= self.required and alert_name not in self.already_firing:
                self.already_firing.add(alert_name)
                return True  # fire the alert (first time condition sustained)
        else:
            if self.fire_counts.get(alert_name, 0) > 0:
                self.fire_counts[alert_name] = 0
                self.already_firing.discard(alert_name)  # condition cleared
        return False  # either not sustained or already firing (no duplicate alert)

debouncer = AlertDebouncer(required_consecutive_fires=3)

การตรวจสอบความผิดปกติของค่าใช้จ่ายด้วยวิธีการทางสถิติ

การแจ้งเตือนด้วยเกณฑ์ธรรมดาอาจพลาดความผิดปกติของค่าใช้จ่ายที่ละเอียดอ่อน เช่น ค่าใช้จ่ายเพิ่มขึ้นทีละน้อย 50% ภายในสองวัน ให้ใช้การตรวจจับความผิดปกติทางสถิติ โดยคำนวณค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานเคลื่อนที่ของค่าใช้จ่ายรายชั่วโมง แล้วแจ้งเตือนเมื่อค่าใช้จ่ายของชั่วโมงปัจจุบันสูงกว่าค่าเฉลี่ยเกิน N ส่วนเบี่ยงเบนมาตรฐาน (การแจ้งเตือนด้วยคะแนน Z) วิธีนี้จะปรับตามรูปแบบการใช้งานตามธรรมชาติ เช่น ปริมาณการใช้งานในวันทำงานกับวันหยุดสุดสัปดาห์โดยอัตโนมัติ

import statistics

def compute_z_score(recent_value: float, historical_values: list[float]) -> float:
    if len(historical_values) < 5:
        return 0  # not enough data
    mean = statistics.mean(historical_values)
    stdev = statistics.stdev(historical_values)
    if stdev == 0:
        return 0
    return (recent_value - mean) / stdev

def check_cost_anomaly(current_hour_cost: float, historical_hourly_costs: list[float]) -> str | None:
    z = compute_z_score(current_hour_cost, historical_hourly_costs)
    if z > 3.0:  # more than 3 standard deviations above mean
        mean = statistics.mean(historical_hourly_costs)
        return f'Cost anomaly: ${current_hour_cost:.2f} this hour (normal: ${mean:.2f}, z={z:.1f})'
    return None

การสร้างแดชบอร์ดการปฏิบัติการ

การแจ้งเตือนเป็นชั้นตอบสนองต่อเหตุการณ์ ส่วนแดชบอร์ดการปฏิบัติการแบบถ่ายทอดสดเป็นชั้นเชิงรุก สร้างแดชบอร์ดแบบเรียบง่ายที่แสดงตัวชี้วัดแบบเรียลไทม์ ได้แก่ เวลาแฝง p50/p99 ปัจจุบัน จำนวนคำขอต่อนาที คะแนนคุณภาพปัจจุบัน (EWMA เคลื่อนที่) ค่าใช้จ่ายรายวันจนถึงปัจจุบันเทียบกับงบประมาณ และคำขอที่มีค่าใช้จ่ายสูงสุด 5 รายการในชั่วโมงล่าสุด วิธีนี้ช่วยให้ทีมมองเห็นสถานะของระบบได้อย่างรวดเร็วโดยไม่ต้องรอให้การแจ้งเตือนทำงาน

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับการแจ้งเตือนตัวชี้วัดของแอปพลิเคชัน LLM จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า หมวดหมู่การแจ้งเตือนสามประเภท ครอบคลุมระบบ LLM ได้แก่ เวลาแฝง ค่าใช้จ่าย และคุณภาพ ซึ่งแต่ละประเภทต้องใช้การเก็บข้อมูลตรวจวัดที่แตกต่างกัน ค่าเฉลี่ยเคลื่อนที่และ EWMA ตรวจจับการเสื่อมลงของคุณภาพอย่างค่อยเป็นค่อยไปได้ดีกว่าการตรวจสอบค่าเกณฑ์ของคำขอแต่ละรายการ และ การหน่วงการแจ้งเตือน ช่วยป้องกันความเหนื่อยล้าจากการแจ้งเตือน โดยกำหนดให้เงื่อนไขเกิดขึ้นต่อเนื่องหลายรอบการประเมินก่อนจึงจะแจ้งเตือน บทถัดไป เราจะเจาะลึกการโจมตีแบบฉีดพรอมต์และความปลอดภัยของ AI

คำถามที่พบบ่อย

บทเรียน “การแจ้งเตือนเวลาแฝง ต้นทุน และคุณภาพที่ลดลง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแจ้งเตือนเวลาแฝง ต้นทุน และคุณภาพที่ลดลง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Engineering Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแจ้งเตือนเวลาแฝง ต้นทุน และคุณภาพที่ลดลง”

กำหนดเกณฑ์แจ้งเตือนสำหรับเวลาแฝง p99 ต้นทุนต่อคำขอ และคะแนนคุณภาพอัตโนมัติ พร้อมส่งการแจ้งเตือนไปยัง Slack หรือ PagerDuty เมื่อกระบวนการ LLM ของคุณมีคุณภาพลดลง คุณปฏิบัติ AI Engineering Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Engineering Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Engineering Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การแจ้งเตือนเวลาแฝง ต้นทุน และคุณภาพที่ลดลง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Engineering Academy นี้ได้ไหม

ได้ บทเรียน AI Engineering Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดแอป LLM จึงแก้ไขข้อผิดพลาดได้ยาก
  2. การติดตามด้วย LangSmith
  3. Langfuse สำหรับการสังเกตการณ์ที่ไม่ขึ้นกับโมเดล
  4. การแจ้งเตือนเวลาแฝง ต้นทุน และคุณภาพที่ลดลง
← กลับไปที่ AI Engineering Academy