Interview Preparation Assistant with CrewAI

Link Progetto

Introduzione al Progetto

L'AI Interview Preparation Assistant è un'applicazione che utilizza agenti AI per aiutare gli utenti a prepararsi per colloqui di lavoro. Il progetto combina un'interfaccia utente Streamlit con il framework CrewAI per creare un'esperienza completa di preparazione ai colloqui, dalla ricerca sull'azienda alla simulazione di interviste con feedback in tempo reale.

Questo progetto è nato seguendo il corso "Build AI Agents with CrewAI" di Zero to Mastery, tenuto da Diogo Resende che ho esteso e personalizzato attraverso una ricostruzione che ha:

  1. Implementato un'interfaccia utente Streamlit completa
  2. Ottimizzato l'architettura del progetto con file YAML per la configurazione
  3. Utilizzato strumenti moderni come uv per la gestione delle dipendenze
  4. Incorporato considerazioni sulla privacy e sulla sicurezza

Dal Corso alla Ricostruzione: Il Mio Percorso

Fondamenta: Il Corso ZTM

Il punto di partenza è stato il corso di Zero to Mastery, che ha fornito una solida introduzione a CrewAI. Il corso ha illustrato:

  • I concetti fondamentali degli agenti AI
  • Come orchestrare agenti multipli con CrewAI
  • L'integrazione con API esterne per la ricerca

Ricostruzione con la Documentazione Ufficiale

Dopo il completamento del corso, ho intrapreso una ricostruzione significativa del progetto utilizzando la documentazione ufficiale di CrewAI, che mi ha permesso di:

  • Approfondire le capacità del framework
  • Implementare pattern più avanzati per la gestione degli agenti
  • Scoprire e utilizzare uv come alternativa moderna a pip per la gestione delle dipendenze

Vantaggi di uv

L'utilizzo di uv ha portato diversi vantaggi al progetto:

  • Velocità di installazione 10-100x superiore rispetto a pip
  • Risoluzione delle dipendenze più intelligente e deterministico
  • Migliore gestione degli ambienti virtuali
  • Supporto migliorato per progetti complessi con molte dipendenze

Strutturazione con YAML

Un'innovazione significativa nella ricostruzione è stata l'adozione di file YAML per la configurazione, che ha portato:

  1. Maggiore manutenibilità: Separazione netta tra codice e configurazione
  2. Flessibilità: Possibilità di modificare il comportamento degli agenti senza toccare il codice
  3. Internazionalizzazione: Supporto nativo per contenuti in italiano e altre lingue

Ecco un esempio dalla configurazione degli agenti:

<code>research_agent:
  role: >
    Agente di Ricerca
  goal: >
    Condurre ricerche approfondite su {company} e {interviewer}
  backstory: >
    Sei un ricercatore specializzato che eccelle nel trovare informazioni dettagliate su 
    aziende e individui. Il tuo obiettivo è raccogliere dati completi che aiuteranno 
    i candidati a prepararsi per i colloqui. IMPORTANTE: Devi sempre generare il tuo output 
    in lingua italiana, anche se le informazioni trovate sono in inglese o altre lingue.</code>Code language: YAML (yaml)

Architettura Tecnica

Componenti Principali

Il sistema è composto da tre componenti chiave:

  1. Interfaccia Utente (Streamlit): Gestisce l'interazione con l'utente attraverso quattro pagine principali:
    • Welcome: Introduzione all'applicazione
    • Research: Raccolta di informazioni e generazione di domande
    • Practice: Simulazione di colloquio con feedback in tempo reale
    • Reports: Visualizzazione e download dei contenuti generati
  2. Backend (CrewAI): Orchestra gli agenti AI che eseguono compiti specifici:
    • Research Agent: Raccoglie informazioni sulle aziende e gli intervistatori
    • Interview Coach: Genera domande personalizzate e fornisce feedback
    • Interview Agent: Simula un intervistatore reale
  3. Gestore di Sessione (InterviewManager): Mantiene lo stato dell'applicazione e gestisce la persistenza dei dati:
    • Caricamento e salvataggio di domande
    • Gestione dei feedback
    • Sanitizzazione degli input per prevenire iniezioni

Flusso di Dati

Il sistema opera secondo questo flusso:

  1. L'utente inserisce informazioni sull'azienda e sulla posizione
  2. Il Research Agent conduce ricerche approfondite utilizzando API esterne
  3. L'Interview Coach genera domande personalizzate
  4. L'utente si esercita rispondendo alle domande
  5. L'Interview Coach fornisce feedback dettagliato
  6. I risultati vengono salvati per consultazione futura

Gestione delle Dipendenze

Il progetto utilizza un approccio moderno alla gestione delle dipendenze:

<code><em># setup.py</em>
setup(
    name="interview_prep",
    version="0.1.0",
    description="AI Interview Preparation using CrewAI",
    author="Veronica Schembri",
    author_email="veronicaschembri@gmail.com",
    packages=find_packages(),
    include_package_data=True,
    install_requires=[
        "crewai>=0.118.0",
        "crewai-tools>=0.42.2",
        "python-dotenv>=1.1.0",
        "streamlit>=1.45.0",
        "pysqlite3-binary"
    ],
)</code>Code language: Python (python)

CrewAI vs LangChain: Analisi Comparativa

Durante lo sviluppo, ho avuto l'opportunità di confrontare CrewAI con LangChain, un altro framework popolare per lo sviluppo di applicazioni AI.

Similitudini

  1. Orchestrazione di LLM: Entrambi i framework forniscono astrazioni per lavorare con modelli linguistici
  2. Integrazione di Tool: Entrambi supportano l'uso di strumenti esterni come API di ricerca
  3. Chaining delle Operazioni: Entrambi permettono di concatenare operazioni in sequenze logiche

Differenze Chiave

Filosofia di Design

  • CrewAI: Focalizzato sulla simulazione di "crew" di agenti specializzati che collaborano, ispirato alle strutture organizzative umane
  • LangChain: Centrato sul concetto di "chain" (catene) di operazioni, con un'enfasi sulla composizione funzionale

Strutture Principali

  • CrewAI:
    • Agents (Agenti): Entità autonome con ruoli, obiettivi e backstory
    • Tasks (Compiti): Azioni specifiche assegnate agli agenti
    • Crew (Squadre): Gruppi di agenti che collaborano su un insieme di compiti
  • LangChain:
    • Chains: Sequenze di operazioni che trasformano input in output
    • Tools: Funzionalità specifiche che possono essere invocate dalle catene
    • Workflows: Orchestrazione più complessa di catene multiple

Implementazione nel Progetto

In questo progetto, ho utilizzato CrewAI per il suo modello mentale intuitivo basato su agenti collaborativi:

<code>@agent
def research_agent(self) -> Agent:
    """Create a research agent with tools."""
    agent = Agent(
        config=self.agents_config['research_agent'],
        verbose=True
    )
    agent.tools = [SerperDevTool(), ScrapeWebsiteTool()]
    return agent

@task
def research_company_task(self) -> Task:
    """Create a task to research the company."""
    return Task(
        config=self.tasks_config['research_company_task']
    )

@crew
def crew(self) -> Crew:
    """Creates the Interview Preparation crew"""
    return Crew(
        agents=self.agents,
        tasks=self.tasks,
        process=Process.sequential,
        verbose=True,
    )</code>Code language: Python (python)

Se avessi utilizzato LangChain, l'implementazione avrebbe seguito un pattern differente:

<code><em># Approccio equivalente in LangChain (pseudocodice concettuale)</em>
from langchain.agents import initialize_agent, Tool
from langchain.chains import LLMChain

research_chain = LLMChain(
    llm=OpenAI(),
    prompt=PromptTemplate(
        input_variables=["company", "country"],
        template="Ricerca informazioni su {company} in {country}"
    )
)

tools = [
    Tool(
        name="WebSearch",
        func=serper_search.run,
        description="Ricerca informazioni sul web"
    ),
    Tool(
        name="WebScraper",
        func=web_scraper.run,
        description="Estrae informazioni da pagine web"
    )
]

research_agent = initialize_agent(
    tools, 
    llm, 
    agent="zero-shot-react-description",
    verbose=True
)

<em># Combinazione di agenti in una pipeline</em>
def interview_workflow(company, interviewer, job_position):
    company_info = research_agent.run(f"Trova informazioni su {company}")
    interviewer_info = research_agent.run(f"Trova informazioni su {interviewer}")
    questions = question_generator_chain.run(
        company=company_info,
        interviewer=interviewer_info,
        job_position=job_position
    )
    return questions</code>Code language: PHP (php)

Perché Ho Scelto CrewAI

Ho scelto CrewAI per questo progetto per diverse ragioni:

  1. Modello Mentale Intuitivo: La metafora di "agenti collaborativi" si allinea perfettamente con il concetto di preparazione ai colloqui, dove diversi esperti (ricercatore, coach, intervistatore) collaborano
  2. Configurazione Dichiarativa: I file YAML rendono il comportamento degli agenti facilmente configurabile
  3. Supporto Nativo per Input Umani: CrewAI gestisce elegantemente l'interazione umana all'interno del flusso degli agenti
  4. Flessibilità nella Composizione delle Crew: Possibilità di creare crew specializzate per compiti specifici (ricerca, feedback, ecc.)

Considerazioni sulla Sicurezza e Privacy

Un aspetto fondamentale del progetto è stata l'attenzione alla sicurezza e alla privacy:

Gestione dei Dati

L'applicazione è progettata per garantire che i dati degli utenti non persistano tra sessioni diverse:

<code>def clear_all_data():
    """
    Cancella completamente tutti i dati generati nella directory di output.
    Garantisce che nessun dato rimanga accessibile ad altri utenti.
    """
    <em># Ottieni il percorso della directory di output</em>
    output_dir = get_session_path()

    try:
        <em># 1. Cancella tutti i file nella directory principale</em>
        for filename in os.listdir(output_dir):
            <em># Implementazione della pulizia dei dati</em>
            <em># ...</em></code>Code language: HTML, XML (xml)

Conclusioni e Lezioni Apprese

Lo sviluppo di questo progetto mi ha permesso di approfondire diversi aspetti dello sviluppo di applicazioni AI:

  1. Orchestrazione di Agenti: Ho imparato come far collaborare efficacemente modelli linguistici in ruoli specializzati
  2. Architettura Modulare: L'importanza di separare configurazione, logica di business e interfaccia utente
  3. UX nell'AI: Come progettare interfacce utente intuitive per applicazioni basate su AI
  4. Gestione di Dipendenze Moderne: L'uso di strumenti come uv per un processo di sviluppo più efficiente

Sviluppi Futuri

Questo progetto ha diverse direzioni interessanti per sviluppi futuri:

  1. Personalizzazione per Settori Specifici: Creare versioni specializzate per settori come tecnologia, sanità, finanza
  2. Integrazione con ATS: Collegamento con sistemi di tracciamento dei candidati per feedback ancora più personalizzati
  3. Supporto Multilingue Avanzato: Estendere il supporto linguistico oltre l'italiano e l'inglese
  4. Analisi Video: Aggiungere feedback sulla comunicazione non verbale tramite analisi video

Riflessione Finale

Questo progetto dimostra come i framework moderni per lo sviluppo di applicazioni AI, come CrewAI, possano essere utilizzati per creare soluzioni pratiche che affrontano problemi reali. La combinazione di agenti specializzati con un'interfaccia utente intuitiva crea un'esperienza che va oltre le semplici chatbot, offrendo un valore concreto agli utenti nel loro percorso di preparazione professionale.

Schermata di esempio dell'applicativo AI Interview Preparation

Related Projects

Marzo 18, 2025
Dog Breed Classifier

Panoramica del Progetto Ho recentemente completato il corso "Machine Learning and Data Science Bootcamp" di Zero To Mastery Academy e ho sviluppato un'estensione del progetto finale - un classificatore di razze canine chiamato "Dog Vision". Mentre il corso richiedeva la creazione di un modello di deep learning con TensorFlow 2.0 capace di classificare oltre 100 […]

Maggio 1, 2025
NutriCHOice - Sistema multi-agente

Introduzione al Progetto NutriCHOice rappresenta un'innovativa soluzione nell'ambito della nutrizione personalizzata, sviluppata come progetto finale del Bootcamp AI di Edgemony. Il sistema utilizza un approccio "Generate then Fix" (Genera e Correggi) per creare ricette personalizzate che rispettano specifici obiettivi nutrizionali, con particolare attenzione al contenuto di carboidrati (CHO). Evoluzione del Progetto: Da RAG a "Generate […]

veronicaschembri
Copyright © Veronica Schembri

Privacy Policy
Cookie Policy