Dopo aver installato CrewAI e Ollama e verificato che il nostro modello locale funzioni correttamente, possiamo finalmente entrare nella parte più interessante della guida, ovvero iniziare a costruire i nostri primi agenti intelligenti e farli collaborare tra loro. È proprio in questa fase che iniziamo a comprendere il vero valore di CrewAI, perché smettiamo di pensare all'intelligenza artificiale come a un unico modello che risponde a ogni domanda e iniziamo invece a progettare un sistema composto da più figure specializzate, ognuna con un ruolo preciso.
Questo cambio di prospettiva è fondamentale. Fino a questo momento abbiamo probabilmente utilizzato i modelli linguistici come se fossero un assistente universale capace di fare qualsiasi cosa. Nella pratica, però, i risultati migliori si ottengono quando ogni agente riceve una responsabilità ben definita, un obiettivo chiaro e un contesto limitato. CrewAI nasce proprio con questa filosofia, quella di creare una squadra di agenti che collaborano tra loro. Esattamente come farebbe un gruppo di professionisti impegnati nello stesso progetto.
I componenti fondamentali di CrewAI
Prima di scrivere il codice è importante comprendere il modo in cui CrewAI organizza il lavoro. Tutto ruota attorno a tre elementi fondamentali: gli agenti, i task e la crew.
- L'agente rappresenta una figura specializzata. Possiamo immaginarlo come un professionista virtuale con competenze precise. Possiamo creare uno sviluppatore software, un revisore tecnico, un analista dati, un copywriter oppure un ricercatore. Sebbene tutti utilizzino lo stesso modello linguistico, ciascuno riceve istruzioni differenti che ne influenzano il comportamento durante l'elaborazione.
- Il task rappresenta invece il lavoro da svolgere. Ogni attività descrive un obiettivo concreto che uno specifico agente dovrà portare a termine. Il task contiene generalmente una descrizione, il risultato atteso e l'agente responsabile della sua esecuzione.
- La crew, cioè il gruppo di lavoro che coordina gli agenti e decide come eseguire i vari task. Possiamo considerarla come il direttore del progetto, responsabile dell'ordine di esecuzione e della collaborazione tra tutti i partecipanti.
Questa separazione dei ruoli rende il codice estremamente modulare. Se in futuro vorremo modificare il comportamento di un agente oppure sostituirlo con uno più specializzato, potremo farlo senza dover riscrivere l'intero workflow.
Collegare CrewAI a Ollama
Per iniziare definiamo il collegamento con Ollama. Dal momento che il modello viene eseguito in locale, CrewAI non dovrà comunicare con servizi cloud esterni ma semplicemente inviare le richieste al server locale di Ollama. Questo significa che tutte le elaborazioni rimarranno sul nostro computer, aumentando la privacy dei dati e riducendo la dipendenza da connessioni Internet.
Una volta configurato il modello, possiamo creare il nostro primo agente. Ogni agente possiede alcune proprietà che ne determinano il comportamento. Le più importanti sono il ruolo, che identifica la professione simulata dall'agente, il goal, cioè l'obiettivo principale che dovrà perseguire, e il backstory, ovvero una descrizione del suo background professionale. Quest'ultimo elemento può sembrare secondario, ma in realtà contribuisce a fornire al modello un contesto coerente, migliorando la qualità delle risposte.
Supponiamo di voler costruire un semplice sistema per la produzione di un articolo tecnico. Invece di affidare tutto il lavoro a un solo modello, possiamo suddividere il processo in più fasi. Creiamo un primo agente incaricato della ricerca delle informazioni e un secondo agente responsabile della stesura finale del testo.
Il ricercatore riceverà il compito di individuare gli argomenti principali, raccogliere le informazioni più rilevanti e sintetizzarle in modo ordinato. Lo scrittore, invece, utilizzerà il materiale preparato dal collega virtuale per produrre un testo completo, coerente e facilmente leggibile.
Anche se entrambi utilizzano lo stesso modello linguistico di Ollama, il risultato sarà molto diverso rispetto a una richiesta generica. Ogni agente si concentrerà esclusivamente sulla propria competenza, riducendo la probabilità di errori e aumentando la qualità complessiva dell'elaborazione.
Volendo fare un esempio veloce con del codice, mostriamo in Python:
from crewai import Agent, LLM
# Configurazione del modello locale tramite Ollama
llm = LLM(
model="ollama/llama3.2",
base_url="http://localhost:11434"
)
# Creazione del primo agente
ricercatore = Agent(
role="Ricercatore AI",
goal="Raccogliere informazioni accurate e organizzate sull'argomento assegnato.",
backstory=(
"Sei un ricercatore esperto con ottime capacità di analisi. "
"Il tuo compito è individuare le informazioni più rilevanti e "
"presentarle in modo chiaro e sintetico."
),
llm=llm,
verbose=True
)
# Creazione del secondo agente
scrittore = Agent(
role="Redattore Tecnico",
goal="Trasformare le informazioni raccolte in un articolo completo e ben strutturato.",
backstory=(
"Sei uno scrittore tecnico specializzato nella divulgazione. "
"Scrivi testi chiari, scorrevoli e facilmente comprensibili."
),
llm=llm,
verbose=True
)
In questo esempio il primo elemento che definiamo è l'oggetto LLM, che rappresenta il collegamento tra CrewAI e Ollama. Con il parametro model specifichiamo il modello installato localmente, mentre base_url indica l'indirizzo del server di Ollama, che per impostazione predefinita è in ascolto sulla porta 11434.
Successivamente creiamo due agenti differenti. Entrambi utilizzano lo stesso modello locale, ma assumono comportamenti diversi grazie ai parametri role, goal e backstory. Il ricercatore è specializzato nella raccolta e nell'organizzazione delle informazioni, mentre lo scrittore ha il compito di trasformare quel materiale in un testo completo.
Il parametro verbose=True permette inoltre di visualizzare nel terminale le operazioni svolte dagli agenti durante l'esecuzione del workflow, caratteristica particolarmente utile durante le fasi di sviluppo e debugging.
Questo semplice esempio dimostra uno dei principi fondamentali di CrewAI: non è necessario utilizzare modelli diversi per ottenere comportamenti differenti. È sufficiente assegnare a ogni agente un ruolo, un obiettivo e un contesto specifici affinché lo stesso modello linguistico possa specializzarsi in attività differenti e collaborare efficacemente con gli altri agenti della crew.
CrewAI e la collaborazione tra gli agenti
Uno degli aspetti più sorprendenti durante le prime prove consiste nell'osservare come ogni agente mantenga il proprio comportamento durante tutta l'esecuzione. Il ricercatore continuerà a raccogliere informazioni senza cercare di scrivere l'articolo completo, mentre lo scrittore utilizzerà esclusivamente il materiale ricevuto per costruire un testo coerente.
Questa separazione dei compiti rappresenta uno dei motivi principali per cui i sistemi multi-agente stanno diventando sempre più popolari. Suddividendo problemi complessi in attività più semplici, otteniamo risultati generalmente più accurati, più controllabili e più facili da mantenere.
Naturalmente possiamo aumentare gradualmente il numero di agenti. Possiamo inserire un revisore che controlli eventuali errori grammaticali, un esperto SEO che ottimizzi il contenuto per i motori di ricerca oppure un verificatore incaricato di controllare la correttezza delle informazioni prodotte dagli altri agenti.
A questo punto possiamo creare la crew che riunisce tutti gli agenti e tutti i task definiti. Durante la creazione della crew scegliamo anche il processo di esecuzione.
Il metodo più semplice è quello sequenziale. In questo caso ogni task viene eseguito nell'ordine stabilito. Il primo produce un risultato, il secondo utilizza quel risultato e genera un nuovo output, il terzo continua il lavoro e così via fino al completamento dell'intero workflow.
Questa modalità è ideale per la maggior parte dei progetti iniziali perché permette di seguire facilmente il flusso delle informazioni e comprendere come collaborano gli agenti.
Una volta lanciata la crew, CrewAI inizierà automaticamente a coordinare il lavoro. Non dovremo preoccuparci di inviare manualmente ogni prompt o di copiare il risultato da un agente all'altro. Tutta la comunicazione verrà gestita dalla libreria.
Conclusioni
In questa lezione abbiamo analizzato i concetti di agente, task e crew, comprendendo come ciascun elemento svolga un ruolo preciso all'interno del workflow. Abbiamo inoltre visto come la suddivisione delle responsabilità renda il sistema più modulare, ordinato e facilmente estendibile, permettendoci di progettare applicazioni sempre più complesse senza aumentare inutilmente la difficoltà di gestione del codice.
Nella prossima lezione faremo un ulteriore passo avanti e inizieremo a progettare sistemi multi-agente e comprendendo come organizzare crew in grado di affrontare attività articolate e processi decisionali sempre più complessi. Questa sarà la base per sviluppare, nelle lezioni successive, assistenti AI completi, autonomi e realmente utilizzabili in scenari concreti.
Se vuoi aggiornamenti su Progettare agenti e workflow collaborativi con CrewAI inserisci la tua email nel box qui sotto: