Ce face Execuție asincronă și pe loturi: kickoff_for_each(), akickoff(), kickoff_async()
Pe lângă kickoff(inputs), clasa Crew are variante pentru liste de intrări și pentru cod asincron. kickoff_for_each(inputs=[...]) rulează echipa secvențial pentru fiecare dicționar din listă și întoarce o listă de rezultate.
Pentru cod asincron există două familii. akickoff() și akickoff_for_each() sunt asincrone native: folosesc async/await pe tot lanțul de execuție, inclusiv task-uri, memorie și knowledge. kickoff_async() și kickoff_for_each_async() sunt bazate pe fire de execuție: învelesc execuția sincronă în asyncio.to_thread.
Pentru încărcări cu multă concurență, documentația recomandă akickoff() și akickoff_for_each().
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
kickoff_for_each(inputs: list[dict]) |
Rulează echipa pentru fiecare intrare, secvențial. |
await akickoff(inputs: dict) |
Asincron nativ. |
await akickoff_for_each(inputs: list[dict]) |
Asincron nativ, pentru fiecare intrare. |
await kickoff_async(inputs: dict) |
Asincron pe fire de execuție (asyncio.to_thread). |
await kickoff_for_each_async(inputs: list[dict]) |
Asincron pe fire de execuție, pentru fiecare intrare. |
Exemple practice
Exemplul 1: Lot asincron nativ
rezultate = await echipa.akickoff_for_each(inputs=[{"url": u} for u in lista_urluri])
for r in rezultate:
print(r.raw)
Exemplul 2: Endpoint FastAPI
@app.post("/analiza")
async def analiza(req: Cerere):
res = await echipa.akickoff(inputs=req.model_dump())
return {"raport": res.raw}
Greșeli frecvente și bune practici
- Alegi
kickoff_async()pentru concurență mare. Este bazat pe fire de execuție; varianta nativă esteakickoff(). - Rulezi loturi mari fără limită de cereri. Setează
max_rpmpeCrewsau pe agenți, ca să nu atingi limitele furnizorului. - Folosești
crewai replaydupă un lot. Se poate relua doar cea mai recentă rulare.