Sarcini Condiționate & Branching în CrewAI în CrewAI & Sisteme Multi-Agent

Orchectare și Fluxuri CrewAI 0.80+

Crearea de fluxuri adaptive multi-agent cu ramificații logice în funcție de rezultatele sau clasificările returnate de agenții anteriori.

Sintaxă & invocare Python
ConditionalTask(condition=..., task=...)

În fluxurile simple CrewAI, sarcinile sunt executate într-o secvență liniară (`Process.sequential`) sau ierarhică (`Process.hierarchical`). Cu toate acestea, scenariile din producție impun flexibilitate decizională: dacă un agent de audit detectează o vulnerabilitate critică, fluxul trebuie să declanșeze imediat o sarcină de remediere de urgență; dacă nu se găsesc erori, acea sarcină este omisă complet.

Funcționalitatea de Sarcini Condiționate (ConditionalTask) permite definirea unor funcții predicat în Python care evaluează ieșirea sarcinii precedente. În funcție de valoarea returnată (True/False), sarcina asociată este programată pentru execuție sau complet sărită.

Această arhitectură reduce masiv timpul total de execuție și consumul de tokeni prin eliminarea sarcinilor redundante și conferă echipei de agenți un comportament adaptiv orientat pe cazuri de utilizare reale.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
ConditionalTask Clasa specializată ce leagă o sarcină de o funcție condițională de validare.
condition_func(output) Funcția Python care inspectează obiectul `TaskOutput` și returnează un boolean.
TaskOutput.pydantic Accesarea datelor structurate validate pentru luarea de decizii tipizate sigure.
Branching Strategy Mecanismul de ramificare prin care un agent ‘Router’ direcționează fluxul către echipe de specialiști.

Exemple practice și configurații

Exemplul 1: Implementarea unei sarcini de alertă de securitate condiționată în Python

Dacă auditorul găsește probleme severe, agentul de securitate este trezit să trimită alertă.

from crewai import Agent, Crew, Task, Process
from crewai.tasks.conditional_task import ConditionalTask

def contine_vulnerabilitati(output):
    # Evaluează rezultatul structurat al sarcinii de scanare
    return "CRITICAL" in output.raw.upper()

auditor = Agent(role="Security Scanner", goal="Găsește breșe în cod", llm="claude-3-5-sonnet")
alertor = Agent(role="Incident Responder", goal="Trimite alerte PagerDuty", llm="claude-3-5-haiku")

task_scanare = Task(
    description="Scanează dependentele din repo pentru breșe CVE.",
    expected_output="Raport de securitate cu severitate indicată.",
    agent=auditor
)

task_urgenta = ConditionalTask(
    description="Transmite alerta critică pe Slack și declanșează PagerDuty.",
    expected_output="Confirmarea expedierii alertei către echipă.",
    agent=alertor,
    condition=contine_vulnerabilitati
)

echipa = Crew(agents=[auditor, alertor], tasks=[task_scanare, task_urgenta])
echipa.kickoff()

Rezultat & Impact

Task-ul de urgență rulează exclusiv dacă au fost detectate vulnerabilități critice reale.

Greșeli frecvente și bune practici

  • Parsarea ne-robustă a textului liber returnat de agent în predicatul de condiție, generând `False` din cauza unei mici variații sintactice; folosiți întotdeauna output structurat Pydantic.
  • Crearea de cicluri infinite de condiții între doi agenți care depind reciproc de starea celuilalt.

Ghiduri și noțiuni înrudite