0Pricing
AI Agents · บทเรียน

การลองใหม่ด้วยการหน่วงแบบทวีคูณ

ใช้ tenacity เพื่อลองใหม่เมื่อเกิดความล้มเหลวชั่วคราว โดยเพิ่มเวลาหน่วงแบบทวีคูณและสุ่มค่าเบี่ยงเบน

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

เหตุใดจึงต้องลองใหม่

การเรียกใช้บริการภายนอก เช่น LLM, API ค้นหา และฐานข้อมูลเวกเตอร์ อาจล้มเหลวชั่วคราว การลองใหม่แบบง่ายช่วยกู้คืนจากความไม่เสถียรส่วนใหญ่ได้โดยไม่รบกวนผู้ใช้

สิ่งที่ไม่ควรทำ

อย่าลองใหม่ทันทีในลูปที่ทำงานถี่ ๆ เพราะคุณจะส่งคำขอถล่มบริการ และตัวจำกัดอัตราการเรียกใช้จะปิดกั้นคุณ:

# BAD
for _ in range(10):
    try:
        return call_api()
    except Exception:
        pass

การหน่วงเวลาแบบทวีคูณ

รอให้นานขึ้นหลังจากล้มเหลวแต่ละครั้ง การยกกำลังด้วย 2 เป็นรูปแบบที่ใช้กันทั่วไป:

import time

def call_with_backoff(fn, attempts=5):
    for i in range(attempts):
        try:
            return fn()
        except TransientError:
            if i == attempts - 1:
                raise
            time.sleep(2 ** i)   # 1, 2, 4, 8, 16 seconds

เพิ่มความแปรผันแบบสุ่ม

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

import random
sleep = (2 ** i) + random.uniform(0, 1)
time.sleep(sleep)

ใช้ Tenacity

ไลบรารี tenacity จัดการเรื่องนี้ให้คุณ:

from tenacity import retry, wait_exponential_jitter, stop_after_attempt, retry_if_exception_type
import requests

@retry(
    wait=wait_exponential_jitter(initial=1, max=30),
    stop=stop_after_attempt(5),
    retry=retry_if_exception_type((requests.Timeout, requests.ConnectionError))
)
def search(query):
    return requests.get('https://api.tavily.com/search', timeout=10).json()

ลองใหม่เฉพาะข้อผิดพลาดชั่วคราว

อย่าลองใหม่เมื่อเกิดกรณีต่อไปนี้:

  • ข้อผิดพลาด 4xx (คำขอไม่ถูกต้อง การลองใหม่จะไม่ช่วย)
  • การยืนยันตัวตนล้มเหลว
  • ข้อผิดพลาดในการตรวจสอบความถูกต้อง

ให้ลองใหม่เมื่อเกิดกรณีต่อไปนี้:

  • หมดเวลา
  • ข้อผิดพลาดจากเซิร์ฟเวอร์ 5xx
  • ถึงขีดจำกัดอัตราการเรียกใช้ (โดยรอนานขึ้น)

การลองใหม่โดยคำนึงถึงขีดจำกัดอัตราการเรียกใช้

ปฏิบัติตามส่วนหัว Retry-After:

if response.status_code == 429:
    wait = int(response.headers.get('Retry-After', 5))
    time.sleep(wait)
    continue

จำกัดเวลารวมของการลองใหม่

จำกัดระยะเวลารวมที่ใช้ในการลองใหม่ โดยทั่วไปควรอยู่ที่ 30–60 วินาทีสำหรับการเรียกใช้ที่ผู้ใช้รอผล:

from tenacity import stop_after_delay

@retry(
    wait=wait_exponential_jitter(initial=1, max=10),
    stop=stop_after_delay(60)
)
def call_api():
    ...

ส่วนหัวไอดอมโพเทนซี

สำหรับ API ที่ไม่เป็นไอดอมโพเทนต์ เช่น Stripe ให้ใส่คีย์ไอดอมโพเทนซีในการลองใหม่ทุกครั้ง เพื่อรวมการดำเนินการที่ซ้ำกันเข้าด้วยกัน:

headers = {'Idempotency-Key': f'agent-call-{run_id}-{tool_id}'}

ลองใหม่กับการเรียกใช้ LLM ด้วย

ชุดพัฒนาซอฟต์แวร์ของ OpenAI และ Anthropic จะลองใหม่โดยอัตโนมัติ 1–2 ครั้ง คุณสามารถกำหนดค่าได้:

client = OpenAI(max_retries=5, timeout=30.0)

การลองใหม่แบบอะซิงโครนัส

สำหรับโค้ดแบบอะซิงโครนัส:

from tenacity import AsyncRetrying

async for attempt in AsyncRetrying(wait=wait_exponential_jitter(), stop=stop_after_attempt(5)):
    with attempt:
        result = await call_api()

บันทึกการลองใหม่

การลองใหม่ทุกครั้งควรบันทึกหมายเลขครั้งที่ลอง ระยะเวลาที่หยุดรอ และสาเหตุของข้อผิดพลาด มิฉะนั้นจะไม่สามารถแก้ไขปัญหา "ทำไมจึงช้าจัง" ได้

การลองใหม่กับการกำหนดหมดเวลา

กำหนดเวลาหมดที่สั้นสำหรับแต่ละครั้งที่ลอง เช่น 10 วินาที และกำหนดขีดจำกัดรวมด้วย stop_after_delay เช่น 60 วินาที หากขาดอย่างใดอย่างหนึ่ง การเชื่อมต่อที่ค้างอาจทำให้ระบบหยุดรอไปตลอด

เหตุใดจึงต้องใช้ความแปรผันแบบสุ่ม

เหตุใดจึงควรเพิ่มความแปรผันแบบสุ่มให้กับช่วงเวลาหน่วงก่อนลองใหม่

สรุป

การหน่วงเวลาแบบทวีคูณ + ความแปรผันแบบสุ่ม + การจำกัดเวลารวม + ลองใหม่เฉพาะข้อผิดพลาดชั่วคราว ใช้ tenacity เพื่อลดโค้ดส่วนซ้ำซ้อน

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

บทเรียน “การลองใหม่ด้วยการหน่วงแบบทวีคูณ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การลองใหม่ด้วยการหน่วงแบบทวีคูณ”

ใช้ tenacity เพื่อลองใหม่เมื่อเกิดความล้มเหลวชั่วคราว โดยเพิ่มเวลาหน่วงแบบทวีคูณและสุ่มค่าเบี่ยงเบน คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “การลองใหม่ด้วยการหน่วงแบบทวีคูณ” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เครื่องมือแบบทำซ้ำได้อย่างปลอดภัยและผลข้างเคียง
  2. การลองใหม่ด้วยการหน่วงแบบทวีคูณ
  3. หมดเวลาและตัวตัดวงจร
  4. การตรวจสอบผลลัพธ์เครื่องมือ (Pydantic)
← กลับไปที่ AI Agents