การจัดการข้อผิดพลาดและรูปแบบความทนทาน
ออกแบบการจัดการข้อผิดพลาด กลไกการลองใหม่ และตัวตัดวงจรที่มีความทนทาน เพื่อให้แอปพลิเคชัน LLM รับมือกับความขัดข้องได้ดียิ่งขึ้น
การจัดการข้อผิดพลาดและรูปแบบความทนทาน เป็นบทเรียน LLM Apps in Production (RAG + Vector DB + Caching) ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน LLM Apps in Production (RAG + Vector DB + Caching) และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส LLM Apps in Production (RAG + Vector DB + Caching) มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
Build Robust LLM Apps
LLM applications, especially those interacting with external APIs, need to be tough!
Resilience is about designing systems that can recover from failures gracefully, without crashing or providing a bad user experience.
In this lesson, we'll learn patterns to make your LLM apps more fault-tolerant.
Typical Failures
What kind of errors can an LLM application face?
- API Rate Limits: Too many requests at once.
- Network Issues: Temporary connection drops.
- LLM Service Unavailability: The LLM provider is down.
- Bad LLM Responses: Model returns invalid JSON or hallucinates.
- Dependency Failures: Vector DB or other services fail.
Standard Try-Catch
The first line of defense is standard error handling using try-catch blocks. This prevents your entire application from crashing when an expected error occurs.
It allows you to log the error, inform the user, or attempt a fallback.
public class Main {
public static void main(String[] args) {
try {
// Simulate an LLM API call that might fail
callLlmApi();
System.out.println("API call successful.");
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
// Log the error, notify user, etc.
}
}
public static void callLlmApi() throws Exception {
// In a real app, this would make an actual API call
if (Math.random() < 0.5) { // 50% chance of failure
throw new RuntimeException("LLM service unavailable.");
}
}
}Why Just Catching Isn't Enough
Some errors are transient, meaning they're temporary and might resolve if you just try again. Think of a brief network glitch or a momentary rate limit.
A simple try-catch just fails immediately. For transient errors, a retry mechanism can significantly improve reliability without user intervention.
Simple Retry Logic
We can implement a basic retry loop. If an error occurs, we wait a bit and try again, up to a maximum number of attempts.
public class Main {
public static void main(String[] args) {
int maxRetries = 3;
int currentRetry = 0;
boolean success = false;
while (currentRetry < maxRetries && !success) {
try {
System.out.println("Attempt " + (currentRetry + 1));
callLlmApi();
System.out.println("API call successful.");
success = true;
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
currentRetry++;
if (currentRetry < maxRetries) {
System.out.println("Retrying in 1 second...");
try { Thread.sleep(1000); } catch (InterruptedException ie) {}
}
}
}
if (!success) {
System.out.println("All retries failed.");
}
}
public static void callLlmApi() throws Exception {
// Simulate an LLM API call with 70% chance of failure
if (Math.random() < 0.7) {
throw new RuntimeException("Transient network error.");
}
}
}Smart Retries: Exponential Backoff
Constant retry delays can overwhelm a struggling service. Exponential backoff is a strategy where the delay between retries increases exponentially.
This gives the remote service more time to recover and prevents your app from hammering it with requests.
- Initial delay: 1s
- Second delay: 2s
- Third delay: 4s
- And so on...
Circuit Breaker Pattern
What if a service is truly down, not just experiencing transient errors? Retrying repeatedly only wastes resources and delays failure detection.
The Circuit Breaker pattern prevents an application from repeatedly trying to invoke a service that is likely to fail, saving resources and allowing the service time to recover.
Circuit Breaker States
A circuit breaker has three main states:
- Closed: Operations proceed normally. If errors exceed a threshold, it trips to Open.
- Open: All requests fail immediately without trying the service. After a timeout, it transitions to Half-Open.
- Half-Open: A limited number of requests are allowed to pass through to test if the service has recovered. If successful, it goes back to Closed; otherwise, back to Open.
Preventing Hung Requests with Timeouts
LLM API calls can sometimes hang indefinitely, waiting for a response that never comes. This can exhaust resources and degrade user experience.
Always configure timeouts for your API calls. This sets a maximum duration your application will wait for a response before giving up and throwing an error.
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
long startTime = System.nanoTime();
long timeoutMillis = 2000; // 2 seconds timeout
try {
System.out.println("Calling LLM API with a timeout...");
callLlmApiWithTimeout(timeoutMillis);
System.out.println("API call completed successfully.");
} catch (Exception e) {
System.out.println("API call failed: " + e.getMessage());
}
long endTime = System.nanoTime();
long duration = TimeUnit.NANOSECONDS.toMillis(endTime - startTime);
System.out.println("Total duration: " + duration + "ms");
}
public static void callLlmApiWithTimeout(long timeoutMillis) throws Exception {
// Simulate a long-running/hung API call
long processingTime = 2500; // 2.5 seconds
if (processingTime > timeoutMillis) {
throw new RuntimeException("Operation timed out after " + timeoutMillis + "ms");
}
try {
Thread.sleep(processingTime);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("API call interrupted.", e);
}
}
}Resilience Check
When should you use a Circuit Breaker pattern instead of just a Retry mechanism?
Recap: Building Resilient LLM Apps
We've covered key patterns for making your LLM applications fault-tolerant:
- Basic Error Handling: Using
try-catchfor immediate failure management. - Retry Mechanisms: For handling transient errors, often with exponential backoff.
- Circuit Breakers: To prevent overwhelming consistently failing services.
- Timeouts: Essential for preventing hung API calls and resource exhaustion.
These patterns are crucial for robust production LLM systems!
เรียนรู้ LLM Apps in Production (RAG + Vector DB + Caching) ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 12
- บทเรียน
- 48
คำถามที่พบบ่อย
บทเรียน “การจัดการข้อผิดพลาดและรูปแบบความทนทาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจัดการข้อผิดพลาดและรูปแบบความทนทาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส LLM Apps in Production (RAG + Vector DB + Caching) ให้อัปเกรดเป็น CoddyKit PRO คอร์ส LLM Apps in Production (RAG + Vector DB + Caching) มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดการข้อผิดพลาดและรูปแบบความทนทาน”
ออกแบบการจัดการข้อผิดพลาด กลไกการลองใหม่ และตัวตัดวงจรที่มีความทนทาน เพื่อให้แอปพลิเคชัน LLM รับมือกับความขัดข้องได้ดียิ่งขึ้น คุณปฏิบัติ LLM Apps in Production (RAG + Vector DB + Caching) ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน LLM Apps in Production (RAG + Vector DB + Caching) หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน LLM Apps in Production (RAG + Vector DB + Caching) บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การจัดการข้อผิดพลาดและรูปแบบความทนทาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน LLM Apps in Production (RAG + Vector DB + Caching) นี้ได้ไหม
ได้ บทเรียน LLM Apps in Production (RAG + Vector DB + Caching) ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การรักษาความปลอดภัยคีย์เอพีไอของ LLM และข้อมูลอ่อนไหว
- การจำกัดอัตราการใช้งานและการป้องกันการใช้งานในทางที่ผิด
- การจัดการข้อผิดพลาดและรูปแบบความทนทาน
- ป้องกันการโจมตีแบบพรอมต์อินเจกชัน