Ricerca nel sito web

CrewAI: Guida pratica all'orchestrazione degli agenti basata sui ruoli


Introduzione

CrewAI è un framework Python leggero e fulmineo per orchestrare agenti AI autonomi che lavorano insieme come un "equipaggio" per completare un compito. CrewAI è stato costruito da zero, senza astrazioni pesanti, ed è completamente indipendente da LangChain o da qualsiasi altra libreria di agenti. CrewAI offre agli sviluppatori semplicità a livello elevato e controllo a livello basso. È ottimizzato per workflow multi-agente pronti per la produzione che pongono attenzione a affidabilità, osservabilità ed efficienza dei costi.

Questo corso intensivo ti guida da “hello world” a un flusso di lavoro multi-agente pronto per la produzione con CrewAI. Verranno introdotti i concetti chiave, impostato un progetto, codificato un flusso di lavoro reale, collegati alcuni strumenti potenti e apprese le migliori pratiche per l’affidabilità e il monitoraggio. Al termine, saprai come decidere se CrewAI è adatto al tuo caso d’uso e come si confronta con framework simili come LangGraph e AutoGen. Iniziamo!

Punti Chiave

  • CrewAI è progettato per la produzione, non per le demo. CrewAI dà priorità all'affidabilità, all'osservabilità e al controllo dei costi. È leggero e funziona in modo indipendente da LangChain, quindi è ideale per sistemi multi-agente nel mondo reale.
  • Gli agenti basati sui ruoli migliorano la chiarezza e la scalabilità. Agenti vengono assegnati a ruoli espliciti (Ricercatore, Scrittore, Manager, ecc.) invece di un singolo prompt monolitico. I ruoli supportano una decomposizione dei compiti chiara e scalabile e la collaborazione tra agenti.
  • Il modello mentale di base è semplice e potente. Il modello mentale di CrewAI si basa su quattro elementi fondamentali: Agenti, Compiti, Strumenti e Squadra. Questo approccio produce flussi di lavoro semplici e coerenti, facili da comprendere, estendere e debuggare.
  • La flessibilità dichiarativa e programmatica accelera l'iterazione. I flussi di lavoro di CrewAI possono essere dichiarati in modo dichiarativo in YAML per un'iterazione rapida, quindi aggiornati a API Python programmatiche per un'orchestrazione avanzata, logica personalizzata e un controllo più approfondito quando necessario.
  • Una solida disciplina ingegneristica è essenziale. I sistemi CrewAI efficaci si basano su linee guida, tra cui specifiche chiare dei compiti, delega limitata, limiti di iterazione, supporto degli strumenti e adeguata osservabilità, per prevenire cicli ripetitivi, allucinazioni e superamenti di costo.

Cos'è CrewAI?

CrewAI è un framework multi-agente basato sui ruoli per Python. Ti permette di dichiarare più agenti alimentati da LLM con una competenza e uno scopo definiti, e di organizzarli per collaborare in un flusso di lavoro strutturato. I membri di una squadra lavorano in modo semi-autonomo nelle loro aree di specializzazione, e può essere creato anche un processo di coordinamento separato (agente manager) per gestire il flusso di lavoro.

Organizzare gli agenti AI in un team con ruoli chiaramente definiti permette di evitare che un singolo agente faccia tutto, come avviene nei sistemi più semplici. Ad esempio, un agente può eccellere nella ricerca, un altro nella scrittura, un altro nel prendere decisioni. CrewAI gestisce la messaggistica e l'organizzazione tra gli agenti, consentendo loro di collaborare su vari sotto-compiti per ottenere un risultato finale.

Installazione

Prerequisiti: Python 3.10 fino a 3.13. CrewAI richiede Python >=3.10 e <3.14. Assicurati di essere all'interno di questo intervallo (verifica con python3 --version). In caso contrario, aggiorna prima Python. Nota inoltre che CrewAI utilizza l'API di OpenAI, quindi devi avere a disposizione una chiave API di OpenAI (o una chiave di qualsiasi altro fornitore di LLM).

Passo 1: Installa CrewAI. CrewAI è distribuito tramite PyPI. La libreria principale può essere installata tramite pip. Questo installa il pacchetto e il CLI di CrewAI.

pip install crewai

Se vuoi il supporto completo per gli strumenti, puoi anche installare il pacchetto opzionale degli strumenti. Questo ti assicura di avere la libreria di strumenti predefiniti di CrewAI.

pip install crewai[tools]

Nota: CrewAI ha il proprio gestore di ambiente chiamato UV, che si occupa anche delle dipendenze per te. Questo è opzionale, ma consigliato dalla documentazione di CrewAI.

  • Installa UV (una tantum): su macOS/Linux, esegui:
curl \-LsSf https://astral.sh/uv/install.sh

Questo installa il comando uv.

  • Quindi, installa CrewAI tramite lo strumento UV: uv tool install crewai. Questo fa la stessa cosa di pip, ma configura automaticamente anche un ambiente isolato e uno strumento CLI.

Dopo l'installazione, puoi verificare se tutto funziona controllando la versione. Dovresti vedere un output come crewai v0.x.x che conferma che è installato.

crewai --version

Passo 2: Crea una struttura di progetto CrewAI. CrewAI include una CLI per creare la struttura di un nuovo progetto con l'organizzazione consigliata. In un terminale esegui:

crewai create crew my_project_name

Sostituisci my_project_name con il nome che vuoi dare al tuo progetto. Questo genererà una cartella my_project_name/ con un modello pronto all'uso:

my_project_name/
├── .gitignore
├── pyproject.toml
├── README.md
├── .env                # for API keys and config
├── knowledge/          # (optional knowledge base)
└── src/
   └── my_project_name/
       ├── crew.py     # Crew orchestration code
       ├── main.py     # Entry point to run your crew
       ├── agents.yaml # Define your agents here
       ├── tasks.yaml  # Define tasks/workflows here
       └── tools/      # Custom tools (with __init__.py and example tool file)

Questo scaffold ti offre un punto di partenza strutturato. I file agents.yaml e tasks.yaml sono dove puoi specificare in modo dichiarativo la configurazione del tuo team (ruoli, obiettivi, sequenza delle attività, ecc.), mentre main.py e crew.py sono i punti di accesso in Python nel caso preferissi una configurazione basata sul codice. Il file .env è dove conserverai le chiavi API (ad esempio, OPENAI_API_KEY=…) in modo che non siano hardcoded.

Passo 3: Installa le dipendenze del progetto. All'interno della directory del tuo progetto, esegui:

crewai install

Questo comando eseguirà la CLI di CrewAI per installare eventuali dipendenze necessarie al progetto (configurando l'ambiente, assicurandosi che il pacchetto crewai-tools sia installato, ecc.). Se il tuo progetto richiede l'installazione di pacchetti Python aggiuntivi, puoi specificarli usando 'uv add <package>' (UV) o tramite 'pip install' normalmente.

Passo 4: Esegui il tuo primo equipaggio. Ora sei pronto per eseguire l'equipaggio di esempio predefinito. Basta eseguire:

crewai run

Questo eseguirà l’equipaggio definito nel tuo scaffold (di default, potrebbe eseguire un semplice esempio di collaborazione tra due agenti). Se tutto funziona, dovresti vedere gli agenti pensare/agire nella console.

Problemi comuni durante l'installazione*:*

  • Versione di Python – Installa su una versione supportata (3.10–3.13), poiché l'installazione potrebbe non riuscire su versioni precedenti di Python a causa di un problema di dipendenze.
  • Versione SDK di OpenAI – CrewAI potrebbe richiedere una versione minima dell'SDK Python di OpenAI (ad esempio, openai >= 1.13.3 è un requisito per CrewAI 0.175.0). Se riscontri errori di importazione relativi a OpenAI, assicurati di aggiornare il pacchetto OpenAI.
  • Strumenti di compilazione per Windows – Se riscontri un errore di compilazione per chroma-hnswlib su Windows, devi installare i Visual Studio C++ Build Tools (CrewAI usa Chroma per la memoria; la soluzione è avere disponibili gli strumenti di compilazione C++).
  • UV non presente nel PATH – Se il comando uv non viene trovato dopo l'installazione, esegui uv tool update-shell per aggiornare il tuo PATH.

Modello Mentale di CrewAI: Agenti, Compiti, Strumenti e Squadra

Vale la pena esaminare i quattro principali elementi costitutivi di CrewAI. Un flusso di lavoro di CrewAI è costituito da 4 componenti principali: Agenti, Compiti, Strumenti e lo stesso Crew (un orchestratore che combina agenti e compiti).

Agenti: Lavoratori LLM Basati sui Ruoli

Un agente in CrewAI è un lavoratore basato su LLM con un ruolo specifico, un obiettivo da raggiungere e (facoltativamente) un po' di contesto di background. Gli agenti lavorano in modo autonomo, prendendo decisioni ritenute capaci nel loro campo di competenza. Ad esempio, potresti avere un agente con il ruolo di Analista di Ricerca il cui obiettivo è condurre ricerche, e un altro agente con il ruolo di Scrittore il cui obiettivo è fornire un rapporto. Crei un agente specificando il suo ruolo, l'obiettivo e altri parametri. Ecco un esempio:

from crewai import Agent

researcher = Agent(
    role="Senior Research Analyst",
    goal="Identify emerging AI trends and their business implications",
    backstory="You have 10 years of experience in AI research...",
    llm=your_llm_instance,         # (Optional) use a specific LLM for this agent
    tools=[web_search_tool, document_loader_tool],
    memory=True,                   # Enable short/long-term memory for this agent
    verbose=True                   # Log the agent's thought process and decisions
)

Caratteristiche principali di un agente:

  • ruolo: Il nome o l'insieme di competenze dell'agente (questo può influenzare il comportamento; ad esempio, “Consulente Finanziario”, “Analista di Database SQL”).
  • obiettivo: Un obiettivo di alto livello che l'agente deve raggiungere.
  • retroscena: Contesto o persona di riferimento. Questo può aiutare a migliorare la qualità del prompt fornendo all'agente un punto di vista o un tono (ad esempio, “Hai 10 anni di esperienza nella cybersicurezza…”).
  • strumenti: Un elenco di strumenti (funzioni/API) che l'agente può utilizzare per aiutarlo nel suo lavoro.
  • llm: Puoi assegnare un LLM specifico a ciascun agente. Ad esempio, potresti usare un modello più economico per compiti semplici basati su ricerca o parole chiave, e un modello GPT-5 più potente per compiti più complessi per aiutare a ottimizzare i compromessi di performance.
  • memoria: Se True, l'agente manterrà la memoria tra i compiti (consentendogli di ricordare il passato, ad esempio interazioni/domande/scoperte precedenti).
  • verbose: Se impostato su True, l'agente stamperà log dettagliati della sua attività (utile per il debug/tracciamento delle decisioni).

Compiti: Unità di Lavoro Specifiche

Un Task in CrewAI rappresenta un'unità di lavoro da svolgere da un agente, comprese le istruzioni e il risultato atteso. Puoi pensarlo come assegnare un'attività a uno dei tuoi agenti. Ecco come definire un Task nel codice:

from crewai import Task

analysis_task = Task(
    description="Analyze the top 5 AI trends in 2025 and assess their market potential.",
    expected_output="A structured analysis including each trend's name, market size, key players, and growth forecast.",
    agent=researcher,
    async_execution=False,      # False = this task runs synchronously (waits for previous tasks if any)
    output_file="analysis.md",  # save the output to a file
    depends_on=[research_task]  # (Optional) task dependency: run after research_task
)

Caratteristiche principali di un'attività:

  • descrizione: Istruzioni per il compito (cosa deve fare l'agente).
  • expected_output: Una descrizione di come dovrebbe apparire l'output (questo aiuterà anche l'agente a formattare e strutturare il suo output).
  • agente: Quale agente utilizzare per questo compito (che abbiamo definito in precedenza).
  • async_execution: Se True, il compito può essere eseguito in parallelo con altri compiti (utile quando i compiti sono indipendenti). Per impostazione predefinita, è False per l'esecuzione sequenziale.
  • output_file: Se fornito, CrewAI scriverà l'output dell'agente in questo file sul disco.
  • depends_on: Una lista di altri compiti che devono essere completati prima che questo compito possa iniziare. Questo ti permette di creare dipendenze e, di conseguenza, garantire un ordine corretto di esecuzione (se necessario).

Strumenti: Capacità dell'Agente

Gli strumenti sono il modo in cui fornisci agli agenti capacità aggiuntive. Uno strumento è fondamentalmente una funzione o un'integrazione API che un agente può chiamare come parte del suo processo di ragionamento. Ad esempio, uno strumento di ricerca web permetterebbe a un agente di interrogare Internet, uno strumento per database permetterebbe a un agente di recuperare dati, e così via.

CrewAI include alcuni strumenti integrati e ti permette di definire i tuoi strumenti personalizzati. Allegare strumenti a un agente significa essenzialmente che l'agente può decidere di usare quegli strumenti come ritiene necessario per raggiungere il suo obiettivo.

Ecco un esempio di utilizzo di uno degli strumenti integrati di CrewAI, uno strumento di ricerca sul web, così come degli strumenti di input/output dei file:

from crewai_tools import SerperDevTool, FileReadTool, FileWriteTool

# Initialize some tools
web_search = SerperDevTool()   # web search via Serper (Google)
file_reader = FileReadTool()   # read from files
file_writer = FileWriteTool()  # write to files

# Give our researcher agent the ability to use these tools
researcher.tools = [web_search, file_reader, file_writer]

Uno strumento personalizzato è semplicemente una funzione Python (o classe) decorata con @tool di CrewAI, resa disponibile agli agenti:

from crewai.tools import tool
import json

@tool("Database Query")
def query_database(sql: str) -> str:
    """Execute an SQL query against the company database."""
    # Simple validation example:
    if "DROP" in sql.upper():
        return "Error: Destructive queries are not allowed."
    # (Pretend we run the query and get results)
    results = execute_sql(sql)
    return json.dumps(results)

In questo esempio, abbiamo creato uno strumento chiamato “Database Query”. La docstring e il nome della funzione forniscono al programma il contesto per comprendere la funzione dello strumento. Abbiamo incluso un controllo di sicurezza per eventuali comandi SQL potenzialmente dannosi. L’agente potrebbe invocare query_database("SELECT * FROM Customers") utilizzando questo strumento durante l’esecuzione.

CrewAI supporta diversi tipi di strumenti e interazioni:

  • Strumenti integrati: Ci sono strumenti integrati per vari tipi di ricerca sul web, lettura/scrittura di file, effettuare richieste HTTP, ecc. Sono semplici, basta inserirli come plugin.
  • Strumenti personalizzati: Puoi, naturalmente, estendere le funzionalità con strumenti scritti da te. Questo può essere semplice come l'esempio sopra, oppure puoi creare comportamenti più complessi estendendo la classe BaseTool di CrewAI.
  • Delega: Un agente CrewAI può delegare un compito a un altro agente. Può decidere di aver bisogno dell'assistenza di un altro agente specialista e attivare la creazione di un sotto-compito per quell'agente (CrewAI orchestra le operazioni in background).

Equipaggio: Motore di Orchestrazione

L'equipaggio coordina gli agenti con i compiti e controlla il flusso di esecuzione. Quando si crea un oggetto Crew, è necessario fornire all'equipaggio l'elenco degli agenti, l'elenco dei compiti e la configurazione di come si desidera che il processo venga eseguito. Ad esempio:

from crewai import Crew, Process

crew = Crew(
    agents=[researcher, writer, manager],
    tasks=[research_task, writing_task, review_task],
    process=Process.HIERARCHICAL,  # The manager agent will delegate tasks to the others
    manager_agent=manager,        # Specify which agent is the manager (for hierarchical process)
    memory=True,                  # Enable shared memory among agents (they can see each other's outputs)
    verbose=True                  # Enable detailed logging for debugging
)

result = crew.kickoff(inputs={"topic": "AI Safety"})

In questo esempio, stiamo inizializzando un team con 3 agenti e 3 compiti. Abbiamo anche scelto un processo gerarchico, in cui un agente Manager è responsabile del flusso di lavoro e assegna i compiti agli agenti lavoratori. Viene fornito anche un input (argomento: “Sicurezza dell'IA”), che può essere usato per riempire il segnaposto nelle descrizioni dei compiti o negli obiettivi degli agenti.

Tipi di processo: CrewAI offre diverse strategie di esecuzione tramite l'impostazione Process:

  • Sequenziale: Gli agenti vengono eseguiti uno dopo l'altro nell'ordine specificato (workflow lineare semplice).
  • Gerarchico: Un agente manager (o coordinatore) è responsabile del processo. Può assegnare o delegare dinamicamente compiti ad altri agenti e monitorare i risultati (ideale per flussi di lavoro complessi in cui un agente "capo" controlla i sottocompiti).
  • Personalizzato: Puoi specificare la tua logica di orchestrazione se hai requisiti particolari (per scenari avanzati al di fuori dei processi integrati).

Sotto il cofano, crew.kickoff() indirizzerà il flusso di lavoro in base al tipo di processo:

  • In modalità sequenziale, CrewAI itererà semplicemente sulla lista delle attività.
  • In modalità gerarchica, l'agente manager può determinare l'ordine o creare dinamicamente le attività.
  • Se memory=True, gli agenti avranno accesso a uno spazio di memoria condiviso in cui possono sfruttare i risultati di altri agenti o mantenere il contesto.

Ora che abbiamo coperto le basi dei componenti di CrewAI, vediamo un esempio di flusso di lavoro multi-agente che potresti creare.

Costruisci un vero flusso di lavoro (Progetto guidato)

Supponiamo di voler creare un flusso di lavoro automatizzato per la ricerca e la scrittura di contenuti — ad esempio “Ricercare un argomento e generare un rapporto di sintesi”. Configureremo due agenti: un agente esegue la ricerca (il “Ricercatore”) e un altro utilizza le informazioni scoperte per scrivere un riassunto (lo “Scrittore”). Questo sarà un esempio semplice di un caso d'uso reale che implica collaborazione sequenziale, utilizzo di strumenti (per la ricerca) e passaggio dei risultati tra gli agenti.

Passo 1: Definire gli Agenti. Abbiamo bisogno di un Agente Ricercatore e di un Agente Scrittore. In YAML (agents.yaml) o in Python, specificheremmo:

# agents.yaml
agents:
  - name: researcher
    role: Researcher
    goal: "Gather relevant information on a given topic"
    backstory: "An expert at finding and analyzing information."
    tools: [WebSearchTool]    # allow web search capability
    allow_delegation: false

  - name: writer
    role: Writer
    goal: "Produce a clear, concise summary of the research findings"
    backstory: "Skilled at summarizing information into reports."
    tools: []                 # no external tools, just relies on LLM
    allow_delegation: false

Nota come abbiamo assegnato al Ricercatore uno Strumento di Ricerca Web – un "strumento fittizio" che è un agente con la capacità di effettuare ricerche sul web (ci sono strumenti come SerperApiTool in CrewAI che effettivamente eseguono ricerche su Google tramite un'API – potremmo ottenere una chiave API per quello e configurare lo strumento secondo necessità). Lo Scrittore non ha bisogno di uno strumento; utilizza il LLM sottostante per generare testo. Entrambi hanno allow_delegation: false per semplicità (non reassegneremo compiti ad altri agenti in questo flusso). Potremmo anche specificare memory: true per ogni agente (o solo memory: true a livello del team se vogliamo che tutti gli agenti abbiano quel comportamento – la configurazione del team lo propagherà agli agenti) se volessimo che conservassero le informazioni.

Passo 2: Definire i Compiti e il Processo. Vogliamo che prima lavori il Ricercatore, poi lo Scrittore. Questo è un processo sequenziale: Compito 1 (ricerca) -> Compito 2 (scrittura). In CrewAI, possiamo definire i compiti in un file YAML (tasks.yaml) così:

# tasks.yaml
tasks:
  - id: do_research
    description: "Research the topic: {{topic}}"
    expected_output: "Key points and relevant facts about {{topic}}."
    agent: researcher

  - id: write_report
    description: |
      "Write a summary report on '{{topic}}' using the research findings."
    expected_output: "A well-structured summary of the topic."
    agent: writer
    context: [do_research]  # use output of research task as context
process: sequential

Un paio di cose da tenere a mente: puoi avere segnaposto nella descrizione (ad esempio, {{topic}}) da riempire quando eseguiamo il team con dei parametri. Abbiamo annotato che il compito write_report ha context: [do_research], il che fornirà automaticamente all’agente Writer l’output dell’agente Researcher come input/contesto. Questo è molto importante: è così che i dati/contesto fluiscono tra gli agenti. Abbiamo definito un process: sequential per rendere esplicito l’ordine di esecuzione. I campi expected_output servono a guidare gli agenti (anche a definire delle validazioni).

Fase 3: Scrivi il codice di orchestrazione (crew.py/main.py). Con la configurazione YAML, se eseguiamo crewai run, CrewAI eseguirà l'orchestrazione per noi. Diamo un'occhiata a come appare in Python così possiamo comprendere meglio gli aspetti interni:

# crew.py (conceptual example)
from crewai import Crew, Task, Process

# Import agents and tools definitions (or define inline)
from crewai import Agent
from crewai_tools import WebSearchTool

# Initialize tools
search_tool = WebSearchTool()  # assume configured with API key via .env

# Create Agent instances
researcher = Agent(role="Researcher", goal="Gather relevant info on a topic",
                   tools=[search_tool], allow_delegation=False)
writer = Agent(role="Writer", goal="Summarize research into a report",
               tools=[], allow_delegation=False)

# Define Tasks
research_task = Task(
    description="Research the topic: {topic}",
    agent=researcher,
    expected_output="Key facts about {topic}",
)
write_task = Task(
    description="Write a summary report on '{topic}' using the research findings.",
    agent=writer,
    context=[research_task],  # link output of research_task
    expected_output="Summary report for {topic}"
)

# Create a Crew with sequential process
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, write_task],
    process=Process.sequential,  # sequential execution
    memory=True  # enable memory if we want agents to retain info
)

Ora, per eseguire questo team, chiameremmo crew.kickoff(topic="Impatto dei Cambiamenti Climatici") (ad esempio, fornendo il parametro topic che le descrizioni dei nostri compiti si aspettano). CrewAI farà quindi:

  1. Avvia il compito di ricerca: All'agente Ricercatore viene fornito il prompt "Ricerca sull'argomento: Impatti dei Cambiamenti Climatici.". L'agente Ricercatore dispone della capacità WebSearchTool, il che significa che l'LLM dell'agente può decidere di utilizzare lo strumento (se lo desidera). L'agente potrebbe cercare ad esempio "fatti principali sugli impatti dei cambiamenti climatici" e recuperare alcuni risultati. L'output della chiamata dello strumento (ad esempio un estratto di informazioni) viene restituito all'agente, che l'LLM dell'agente utilizza poi come sua risposta. L'agente produce un output: in questo caso, forse una lista di punti chiave sugli impatti dei cambiamenti climatici. CrewAI memorizza questo output (e lo indicizza anche nella memoria, se l'indicizzazione è abilitata).
  2. Procedi a write_task: L'agente Writer riceve il prompt “Scrivi un rapporto di sintesi su 'Impatto dei Cambiamenti Climatici' utilizzando i risultati della ricerca.” Il contesto che CrewAI fornisce automaticamente è l'output di research_task. All'agente Writer viene presentato l'elenco dei punti chiave del Ricercatore. L'LLM del Writer compone un rapporto di sintesi basato su quei punti chiave.
  3. Fine: CrewAI restituisce quindi l'output finale (il rapporto dello Scrittore), che può essere stampato sulla console o salvato a seconda di come è strutturato main.py. Poiché abbiamo fornito expected_output per ogni compito, CrewAI può anche verificare che gli output soddisfino in modo approssimativo tale aspettativa (non si tratta di una validazione rigorosa, ma solo di una guida).

Fase 4: Esegui e testa il flusso di lavoro. Possiamo invocare crewai run --param topic=“Impatto dei cambiamenti climatici” (se si utilizza la CLI con YAML) oppure chiamare il nostro crew.kickoff(topic=“Impatto dei cambiamenti climatici”) in uno script Python. Monitora l'output della console:

  • Dovresti vedere il processo di pensiero dell’agente Ricercatore (se verbose=True su equipaggio o agenti) – potrebbe stampare qualcosa come “Ricercatore: Sto cercando ‘Fatti chiave sugli impatti del cambiamento climatico’… ”, poi “Ricercatore: Ho trovato dati sull’innalzamento del livello del mare, eventi meteorologici estremi, ecc. ”, e “Ricercatore: Compito di ricerca completato. ”
  • Poi l'output dell'agente Writer potrebbe essere mostrato mentre stende il riassunto.
  • Infine, il testo del rapporto riepilogativo viene prodotto come risultato.

Consigli di produzione per costruire flussi di lavoro:

  • Sii specifico nelle descrizioni dei compiti: Non usare istruzioni ambigue. Ad esempio, nel prompt dello scrittore, abbiamo aggiunto “utilizzando i risultati della ricerca” per chiarire cosa dovesse riassumere. Se avessimo semplicemente scritto “scrivi un riassunto,” avremmo rischiato che generasse contenuti inesatti o trascurasse punti importanti.
  • Usa expected_output per modellare le risposte. Abbiamo fornito un formato previsto (elenco di «Punti chiave», poi «riassunto ben strutturato»). Puoi usarlo come una sorta di specifica o vincolo leggero. Se l’output effettivo dell’agente non corrisponde, potresti dover riformulare il prompt o gestire l’output nel tuo codice.
  • Testa ogni agente singolarmente. Può essere utile provare a far funzionare un agente in isolamento con un prompt per capire il suo comportamento. Ad esempio, testa il prompt del Ricercatore in isolamento per vedere se lo Strumento di Ricerca Web funziona e restituisce informazioni utili. Una volta verificato, integralo nel tuo team.
  • Sfrutta YAML per iterazioni rapide. I file di configurazione YAML di CrewAI ti permettono di modificare ruoli, prompt e altre impostazioni senza cambiare il codice sottostante. Puoi eseguire crewai validate (se installato) per controllare se il tuo YAML è formattato correttamente. Se hai bisogno di logica complessa (cicli, condizioni), puoi invece utilizzare il codice Python (tramite l’SDK di CrewAI) per aggiungere logica aggiuntiva alla tua crew (per esempio, usando istruzioni if per aggiungere compiti in modo condizionale), ma molti flussi di lavoro possono essere specificati in modo dichiarativo.

Estendendo l'esempio: Potresti facilmente espandere questo flusso di lavoro aggiungendo un terzo agente (ad esempio, un agente “Editor” che controlla il rapporto dello Scrittore per qualità o conformità allo stile). Puoi anche aggiungere un agente “FactChecker” che verifica i fatti utilizzando una seconda ricerca sul web. Dovresti aggiungere un compito aggiuntivo, creare i link di contesto necessari e forse consentire all'agente Editor di richiedere revisioni (deleghe) se necessario.

Strumenti e Integrazioni

CrewAI viene fornito con un ampio archivio di strumenti integrati che permettono agli agenti di interagire con file, il web, database, archivi vettoriali e servizi esterni. Di seguito è riportata una tabella che descrive brevemente le principali categorie di strumenti, strumenti di esempio per ciascuna categoria e i casi generali in cui utilizzarli.

CrewAI include una vasta libreria di strumenti integrata che aiuta gli agenti a interagire con file, il web, database, archivi vettoriali e servizi esterni. La tabella sottostante riassume le principali categorie di strumenti, strumenti di esempio e casi d'uso tipici.

Strumento (link di riferimento)Descrizione
StrumentoPerRaccoltaDatiSitoWebEstrae contenuti dai siti web recuperando e analizzando le pagine HTML.
StrumentoSerperDevEsegue ricerche su Google tramite l'API Serper per risultati web in tempo reale.
StrumentoDiLetturaFileLegge contenuti da file locali di diversi tipi.
Strumento RagAbilita la generazione aumentata dal recupero interrogando documenti esterni.
StrumentoDiInterpretazioneCodiceEsegue frammenti di codice Python in modo sicuro all'interno dell'ambiente dell'agente.
DALLETool (DallETool)Genera immagini a partire da descrizioni testuali utilizzando il modello DALL-E di OpenAI.
PGStrumentoDiRicercaInterroga i database PostgreSQL per il recupero dei dati (supporto per la ricerca in stile semantico/RAG).

Integrazioni e Strumenti Avanzati: CrewAI si integra anche con il Model Context Protocol (MCP), un intero ecosistema di strumenti creati dalla comunità accessibili tramite un'interfaccia comune. Abilitare l'integrazione MCP per il tuo agente significherebbe che potrebbe avere accesso a letteralmente migliaia di strumenti in esecuzione sui server MCP (come servizi di elaborazione dati complessi, API specializzate, ecc.). Questo richiede l'installazione del componente aggiuntivo crewai-tools[mcp] e, opzionalmente, l'esecuzione di un server MCP o la connessione a uno esistente.

Modelli di Affidabilità per Workflow Multi-Agente

In produzione, vorrete tenere conto di una varietà di modalità di errore. Agenti che entrano in cicli infiniti, strumenti che si attivano per errore, spirali di costi, ecc. CrewAI fornisce modelli e strumenti integrati per migliorare l'affidabilità. Ecco alcuni modelli importanti da conoscere:

Schema di affidabilitàCosa previene (con breve spiegazione)Come candidarsi su CrewAI (con una breve spiegazione)
Risultati dello strumento con barriera di protezioneAllucinazioni dopo un output corretto dello strumento — il LLM «riformula» e introduce errori anche quando lo strumento restituisce la verità.Per strumenti autorevoli (query su database, calcolatrice, recupero informazioni), configura il flusso di lavoro in modo che l'output dello strumento diventi la risposta finale (o venga copiato letteralmente nella risposta). Inoltre, scrivi compiti che richiedano esplicitamente l'uso dello strumento per ottenere fatti.
Limiti di iterazioneLoop infiniti e consumo di token — gli agenti continuano a riflettere, riprovare o rielaborare i piani senza arrivare a una soluzione.Imposta l'agente max_iter per limitare i cicli di pensiero/strumento. Mantienilo basso per compiti semplici; aumentalo solo per ragionamenti complessi a più passaggi. Considera frequenti eventi di “raggiunto max_iter” come un segnale di problemi nella progettazione del prompt/compito.
Timeout di esecuzioneHung runs — scraping web lento, interruzioni di rete o chiamate a strumenti prolungate bloccano l'intero team.Imposta max_execution_time per agente/attività. All'interno di strumenti personalizzati, applica i timeout (timeout HTTP, limiti di caricamento pagina in Selenium). Preferisci "timeout + riprova" invece di attendere indefinitamente.
Ritenti + retrocessioneFallimenti transienti — limiti di velocità, API instabili, connettività intermittente.Usa max_retry_limit e implementa un backoff esponenziale nel codice dello strumento (ad esempio, attendi 1s → 2s → 4s). Dopo tentativi limitati, restituisci un payload di errore strutturato in modo che i task successivi possano gestirlo in modo deterministico.
Delegazione limitataPing-pong della delega — gli agenti continuano a rimbalzarsi il lavoro senza mai portarlo a termine.Abilita allow_delegation solo per un agente manager/coordinatore; mantieni gli agenti lavoratori non deleganti. Aggiungi regole esplicite di prompt come «delega solo quando mancano dati/accesso a strumenti» e richiedi ai lavoratori di restituire output concreti, non richieste.
Input deterministiciOutput instabili — piccole variazioni nel prompt causano formati/risultati diversi, compromettendo l'automazione a valle.Usa specifiche rigorose per i compiti (expected_output), schemi fissi (JSON) e prompt strutturati. Per gli agenti di estrazione/classificazione, riduci la casualità (temperature più basse) e limita gli output ai campi definiti.
Convalida dei risultatiFallimenti di qualità silenziosi — i risultati sembrano "OK" ma mancano campi richiesti, violano vincoli o contengono contraddizioni.Aggiungi un compito di validatore/revisore che controlli lo schema, le sezioni obbligatorie, le citazioni e i vincoli. Se la validazione fallisce, riesegui con un feedback correttivo mirato (cosa manca + formato esatto previsto).
Controllo dei costiSpese incontrollate — i flussi di lavoro multi-agente amplificano rapidamente i token e le chiamate agli strumenti.Usa modelli più piccoli/economici per i passaggi di routine e riserva modelli più potenti per il ragionamento critico. Limita i passaggi/il tempo, memorizza nella cache i contesti ripetuti e registra i token/costi per ogni attività per individuare le aree di maggiore spesa e ottimizzare prompt/strumenti.

Osservabilità e Debugging

Questa tabella riassume i tre livelli di osservabilità più pratici per i flussi di lavoro di CrewAI. Mostra come iniziare con una semplice visibilità tramite console durante lo sviluppo, per poi evolversi in tracciamento strutturato e monitoraggio esterno per la produzione. Infine, aggiunge hook di debug e valutazioni per migliorare continuamente l'affidabilità e la qualità dei risultati nel tempo.

Area di osservabilitàCosa ti offre (perché è importante)Come usarlo in CrewAI (pratico, orientato alla produzione)
Registrazione di base e verbositàDebugging immediato e leggibile — puoi vedere in tempo reale i passaggi di ragionamento dell'agente, le chiamate agli strumenti e il flusso decisionale. Ideale per lo sviluppo e un rapido esame, ma limitato per l'analisi a lungo termine.Imposta verbose=True sul Crew o su specifici Agents per stampare i log passo-passo (PENSANDO → AZIONE → OSSERVAZIONE). Usalo localmente per riprodurre problemi. In produzione, mantieni la verbosità bassa ed emetti log strutturati (JSON) quando possibile, in modo da poterli aggregare.
Tracciamento + osservabilità esterna + monitoraggio della produzioneTraccia di evidenze strutturate — esecuzione passo-passo registrata con timestamp, input/output, chiamate agli strumenti e ID di esecuzione. Permette analisi post-mortem, ottimizzazione delle prestazioni e gestione dei costi (picchi di token, strumenti lenti).Abilita il tracciamento CrewAI (config/flag/env come da documentazione) in modo che ogni esecuzione generi dati di tracciamento con un identificatore unico. Invia tracce/metriche a un backend di osservabilità (ad esempio, Langfuse per le tracce LLM, Datadog per log/metriche/allarmi, Arize/Phoenix per il monitoraggio dei modelli, LangSmith/LangTrace per il tracciamento unificato, Neatlogs per le registrazioni delle esecuzioni condivisibili). Aggiungi avvisi in caso di errori/latenza, monitora i token e il costo per attività, e controlla il throughput per le decisioni di scaling.
Hook di debug + flussi di lavoro di valutazioneDiagnosi azionabile e controllo della qualità — i hook personalizzati evidenziano schemi (cicli di delega, ripetuti tentativi, errori degli strumenti), mentre la valutazione previene regressioni silenziose nella qualità dei risultati.Usa step_callback per annotare/registrare eventi critici dopo ogni passaggio (delegazione attivata, errore dello strumento, numero di tentativi, violazioni dello schema). Aggiungi una fase di valutazione automatizzata (controlli delle regole + punteggio LLM opzionale) sui risultati finali e conserva i punteggi. Usa le tendenze per affinare prompt/strumenti e per controllare le versioni (miglioramento continuo in stile AgentOps).

CrewAI vs LangGraph vs AutoGen

Diversi agenti possono avere filosofie, architetture o funzionalità diverse che si adattano ai tuoi casi d'uso. I tre framework più popolari sono CrewAI, LangGraph e AutoGen. Confrontiamo brevemente i tre per evidenziare le principali somiglianze e differenze:

AspettoCrewAI (Team basati sui ruoli)LangGraph (Flussi di lavoro grafici)AutoGen (Agenti Conversazionali)
ApproccioAgenti che interpretano ruoli in un equipaggio strutturato; compiti e flussi combinano autonomia e controllo.Grafo aciclico diretto dei passaggi (spesso tramite LangChain); gestione esplicita dello stato.Sessioni di chat multi-agente; comportamento emergente senza un processo fisso di default.
Facilità d'usoModello chiaro per agente/equipaggio/compito; rapido da avviare. La registrazione può essere complicata senza gli strumenti adeguati.Curva di apprendimento più ripida; più codice boilerplate e progettazione iniziale dello stato.Veloce per prototipare, ma richiede una progettazione attenta dei prompt per coordinare gli agenti.
Controllo del flusso di lavoroModalità duali: equipaggi autonomi e flussi deterministici; buon equilibrio tra flessibilità e struttura.Controllo forte tramite grafici; ottimo per ramificazioni complesse, meno adattabile in tempo reale.Controllo integrato limitato; la sequenza emerge dalla conversazione, più difficile da far rispettare.
Stato e MemoriaModuli di memoria integrati (corti/lunghi/entità); robusti fin da subito.Si basa spesso sulla memoria di LangChain; lo stato deve essere predefinito e gestito nel codice.Principalmente, la cronologia delle conversazioni, a meno che tu non implementi una memoria aggiuntiva.
Strumenti e integrazioneOltre 100 strumenti; non legati a LangChain, facile integrare qualsiasi API/strumenti personalizzati; è comunque possibile usare gli strumenti di LangChain se necessario.Accoppiamento stretto a LangChain; molte integrazioni, ma maggiore complessità e sovraccarico di adattamento.Strumenti tramite funzioni e interfaccia di AutoGen Studio; l'uso degli strumenti è modellato da un paradigma conversazionale.
PrestazioneOverhead minimo; core ottimizzato; esecuzione più veloce segnalata in alcuni compiti; efficace per flussi di lavoro piccoli e complessi.Maggiore overhead (LangChain + runtime del grafo); può essere più lento ma efficace per flussi strutturati.Dipende dal numero di turni di conversazione; potrebbe essere più lento se gli agenti effettuano molte iterazioni.
Prontezza alla produzioneProgettato per la produzione: strumenti di osservabilità, funzionalità aziendali, controlli dettagliati, sistemi manutenibili.Produzione possibile con un'attenta progettazione; potrebbe essere necessario del collante extra a causa delle particolarità di LangChain.Più orientato alla ricerca/demo; il consolidamento per la produzione (log, errori, controlli) è in gran parte fai-da-te.
Ideale perWorkflow basati sui ruoli con passaggi noti ma esecuzione flessibile (automazione aziendale, pipeline analitiche, RAG multi-fase con supervisione).Flussi di lavoro statici/prevedibili che richiedono ramificazioni complesse (ad esempio, pipeline ETL/QA), specialmente se già si è investito in LangChain.Risoluzione di problemi aperti tramite conversazione (brainstorming, cicli di critica, chat con intervento umano), dove i passaggi non sono fissi.

Domande frequenti

1. Cos'è CrewAI e in cosa si differenzia dagli agenti AI tradizionali?

CrewAI è un framework progettato per orchestrare più agenti AI che lavorano insieme utilizzando ruoli, obiettivi e responsabilità chiaramente definiti. A differenza dei tradizionali sistemi a singolo agente, CrewAI enfatizza la collaborazione e la delega dei compiti, simile a come operano i team umani. Questo lo rende particolarmente efficace per flussi di lavoro complessi e a più fasi che richiedono pianificazione, esecuzione e validazione.

2. Come funziona l'orchestrazione degli agenti basata sui ruoli in CrewAI?

In CrewAI, a ogni agente viene assegnato un ruolo specifico, come ricercatore, scrittore o revisore, insieme a un obiettivo definito. I compiti sono distribuiti in base a questi ruoli, assicurando che gli agenti si concentrino solo su ciò per cui sono più adatti. Questo approccio strutturato migliora l'efficienza, riduce le ridondanze e produce risultati più coerenti.

3. Quali sono gli usi comuni di CrewAI?

CrewAI è ampiamente utilizzato per la generazione di contenuti, l'automazione della ricerca, le pipeline di analisi dei dati e i flussi di lavoro dei prodotti basati sull'IA. È particolarmente utile in scenari in cui i compiti devono essere completati in modo sequenziale o collaborativo. Esempi includono la creazione di sistemi RAG, l'automazione dei rapporti e il coordinamento di più strumenti basati su LLM.

4. Ho bisogno di conoscenze avanzate di AI o Python per iniziare a usare CrewAI?

Una conoscenza di base di Python e dei grandi modelli linguistici è utile ma non obbligatoria. CrewAI è progettato per essere adatto agli sviluppatori, con astrazioni chiare per agenti, compiti e flussi di lavoro. I principianti possono iniziare con esempi semplici e passare gradualmente a modelli di orchestrazione multi-agente più complessi.

5. CrewAI può essere integrato con strumenti e framework esistenti?

Sì, CrewAI può essere integrato con fornitori di LLM popolari, API e strumenti esterni come database vettoriali e motori di flusso di lavoro. Questa flessibilità gli consente di inserirsi perfettamente nei pipeline AI esistenti. Di conseguenza, i team possono migliorare i sistemi attuali senza dover riscrivere tutto da zero.

Conclusione

CrewAI è più utile quando consideri un “team” come un flusso di lavoro ingegnerizzato, piuttosto che come un esperimento di chat. Assegna ruoli e limiti ai compiti, supporta i passaggi chiave con strumenti, e imposta dei limiti sul comportamento fuori controllo in modo che il sistema non degeneri in cicli, errori o costi imprevisti. Poi monitora tutto—log, tracce e valutazioni leggere—così puoi risolvere rapidamente i problemi e migliorare la qualità release dopo release. Se hai bisogno di automazione multi-step prevedibile con chiara responsabilità e controlli di produzione, CrewAI è una scelta solida. Tuttavia, se il tuo problema riguarda soprattutto logica complessa ramificata o collaborazione conversazionale aperta, LangGraph o AutoGen potrebbero essere più adatti.

Riferimenti

  • Cos'è CrewAI?
  • Inizia con CrewAI - Installa, configura e crea il tuo primo team di intelligenza artificiale
  • Panoramica di un agente
  • Costruire Sistemi Multi-Agente con CrewAI - Un Tutorial Completo
  • Strumenti CrewAI
  • Avvio rapido: Abilita la collaborazione

Grazie per aver imparato con la community di Linux-Console.net.