0Pricing
AI Agents · Pelajaran

Alur Kerja Asinkron dan Pekerjaan Latar Belakang

Agen yang berjalan lama memerlukan antrean (Celery, RQ, Temporal)—kembalikan id pekerjaan, lalu periksa statusnya secara berkala.

Alur Kerja Asinkron dan Pekerjaan Latar Belakang adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Saat Siklus Permintaan Terlalu Lambat

Beberapa tugas agen memerlukan waktu 30 detik, 5 menit, atau berjam-jam. Anda tidak dapat membiarkan koneksi HTTP tetap terbuka. Pindahkan tugas tersebut ke pekerjaan latar belakang asinkron.

Polanya

  1. Klien mengirim POST tugas -> server membuat pekerjaan dan mengembalikan job_id
  2. Pekerja mengambil pekerjaan dari antrean
  3. Klien melakukan polling GET /jobs/{id} untuk memeriksa status
  4. Setelah selesai, server mengembalikan hasilnya

Submit Endpoint

from uuid import uuid4

@app.post('/jobs')
def submit(req: AgentRequest):
    job_id = str(uuid4())
    redis.hset(f'job:{job_id}', mapping={'status': 'queued', 'user_id': req.user_id})
    queue.enqueue('run_agent_job', job_id, req.query)
    return {'job_id': job_id, 'status': 'queued'}

Status Endpoint

@app.get('/jobs/{job_id}')
def status(job_id: str):
    data = redis.hgetall(f'job:{job_id}')
    if not data:
        raise HTTPException(404)
    return {
        'status': data['status'],
        'result': data.get('result'),
        'error': data.get('error')
    }

Pekerja

Proses terpisah mengonsumsi antrean:

def run_agent_job(job_id, query):
    redis.hset(f'job:{job_id}', 'status', 'running')
    try:
        result = run_agent(query)
        redis.hset(f'job:{job_id}', mapping={'status': 'done', 'result': result})
    except Exception as e:
        redis.hset(f'job:{job_id}', mapping={'status': 'failed', 'error': str(e)})

Pilihan Antrean

  • RQ (Redis Queue) — Python minimalis
  • Celery — Python klasik dengan banyak fitur
  • Temporal — alur kerja tahan lama, percobaan ulang, dan observabilitas
  • Dramatiq — alternatif Celery
  • Cloud-native — Cloud Tasks, SQS, Pub/Sub

Temporal untuk Alur Kerja Tahan Lama

Alur kerja agen bersifat stateful. Model eksekusi tahan lama milik Temporal sangat cocok:

import temporalio

@temporalio.workflow.defn
class AgentWorkflow:
    @temporalio.workflow.run
    async def run(self, query: str) -> str:
        plan = await workflow.execute_activity(plan_step, query, schedule_to_close_timeout=timedelta(minutes=2))
        results = await workflow.execute_activity(execute_step, plan, schedule_to_close_timeout=timedelta(minutes=10))
        return await workflow.execute_activity(synthesise_step, results)

Pembaruan Parsial dengan Pengaliran

Pekerjaan yang berjalan lama mendapatkan manfaat dari pembaruan kemajuan. Gunakan Server-Sent Events atau WebSockets:

@app.get('/jobs/{job_id}/stream')
def stream_progress(job_id):
    def gen():
        while True:
            update = redis.brpop(f'updates:{job_id}', timeout=30)
            if not update:
                yield 'data: {"status": "timeout"}\n\n'
                break
            yield f'data: {update[1].decode()}\n\n'
            if 'done' in update[1].decode():
                break
    return StreamingResponse(gen(), media_type='text/event-stream')

TTL Pekerjaan

Jangan menyimpan catatan pekerjaan selamanya:

redis.expire(f'job:{job_id}', 86400)   # 1 day

Percobaan Ulang

Kegagalan sementara dicoba ulang secara otomatis; kegagalan permanen dikirim ke DLQ untuk ditinjau manusia:

import time

def retry(retries=3, retry_backoff=True):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for attempt in range(1, retries + 1):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    print(f'attempt {attempt} failed: {e}')
                    if attempt == retries:
                        raise
            return None
        return wrapper
    return decorator

attempts = {'n': 0}

@retry(retries=3, retry_backoff=True)
def run_agent_job(job_id):
    attempts['n'] += 1
    if attempts['n'] < 3:
        raise RuntimeError('transient error')
    return f'job {job_id} done'

print(run_agent_job('job-1'))

Batas Konkurensi

Untuk mengendalikan biaya GPU/API, batasi jumlah pekerja yang berjalan secara bersamaan:

rq worker --burst --max-jobs 1000 --queue agent

# Or per-queue concurrency in Temporal worker config.

Kuota per Pengguna

Lacak pekerjaan yang sedang berjalan untuk setiap pengguna:

key = f'inflight:{user_id}'
if redis.scard(key) >= 5:
    raise HTTPException(429, 'Too many in-flight jobs')
redis.sadd(key, job_id)

Observabilitas

Lacak setiap pekerjaan dari awal hingga akhir. Beri tag pada span dengan job_id dan user_id. Pekerjaan yang gagal harus otomatis membuat tiket atau memicu peringatan.

Pola Pemeriksaan Status Berkala

Mengapa menggunakan pola pengiriman/pemeriksaan status untuk agen yang berjalan lama?

Ringkasan

Kirim pekerjaan dengan POST, kembalikan id, pekerja memprosesnya dari antrean, lalu klien melakukan polling. RQ/Celery untuk kebutuhan sederhana; Temporal untuk alur kerja stateful. TTL, percobaan ulang, kuota, dan pelacakan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Alur Kerja Asinkron dan Pekerjaan Latar Belakang” gratis?

Ya — teks lengkap “Alur Kerja Asinkron dan Pekerjaan Latar Belakang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Alur Kerja Asinkron dan Pekerjaan Latar Belakang”?

Agen yang berjalan lama memerlukan antrean (Celery, RQ, Temporal)—kembalikan id pekerjaan, lalu periksa statusnya secara berkala. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Alur Kerja Asinkron dan Pekerjaan Latar Belakang” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menyajikan Agen melalui API
  2. Alur Kerja Asinkron dan Pekerjaan Latar Belakang
  3. Pembatasan Laju dan Pengelolaan Kuota
  4. Penerapan Blue-Green dan Canary untuk Agen
← Kembali ke AI Agents