Creare una Knowledge Base ottimizzata per un agente AI che supporta il team della Megaditta nel rispondere a domande su progetti, panelisti e metodologie di ricerca.
~6 ore per completare tutti i task. Puoi scegliere di:
- Completare tutti e 3 i task (ideale)
- Fare Task 1 e 2 completi + Task 3 solo strategia documentata (accettabile)
API Key OpenAI: Ti verrà fornita una API key dedicata per generare embeddings nel Task 3. Usala responsabilmente.
| Task | Deliverable | Formato |
|---|---|---|
| 1 - DB Design | schema.sql o schema_diagram.png/pdf + DESIGN_CHOICES.md |
SQL / immagine + Markdown |
| 2 - ETL | Script ETL + dati puliti + data_quality_report.md |
Python/altro + CSV/JSON/Parquet/SQLite + Markdown |
| 3 - RAG KB | Script preparazione + knowledge_base.jsonl + EMBEDDING_STRATEGY.md |
Python/altro + JSONL + Markdown |
Tutti i deliverable vanno salvati in expected_output/.
Progetta uno schema di database normalizzato (almeno 3NF) che:
- Elimini ridondanze e anomalie
- Gestisca correttamente le relazioni tra entità
- Sia ottimizzato per query frequenti dell'agente AI
Criteri di accettazione:
- Lo schema è almeno in terza forma normale (3NF)
- Entità chiave identificate e separate (progetti, panelisti, interazioni, agenti, ...)
- Relazioni con cardinalità corrette e chiavi esterne definite
- Tipi di dato appropriati per ogni colonna
- Le scelte progettuali sono documentate e motivate
Deliverable:
- File
schema.sqloschema_diagram.png/pdf - Breve documento
DESIGN_CHOICES.mdche spiega le tue decisioni
Implementa una pipeline di estrazione, trasformazione e caricamento che:
- Pulisca e normalizzi i dati grezzi
- Gestisca duplicati, inconsistenze e dati mancanti
- Anonimizzi eventuali dati sensibili (GDPR compliance)
- Validi la qualità dei dati processati
Hint sulle inconsistenze da cercare:
- Formati di data non uniformi tra i record
- Tipi di dato incoerenti per lo stesso campo (stringhe vs numeri)
- Valori nulli rappresentati in modi diversi
- Duplicati non banali (stesso record con variazioni minime)
- Inconsistenze di case e formattazione
- Valori fuori range o logicamente impossibili
Criteri di accettazione:
- Tutti i formati di data sono normalizzati (ISO 8601 consigliato)
- I duplicati sono identificati e gestiti con strategia documentata
- I dati sensibili (email, telefono, nomi) sono anonimizzati
- Il report di qualità include statistiche su record processati, scarti, e problemi trovati
- La pipeline è riproducibile (eseguibile da zero senza intervento manuale)
Deliverable:
- Script (es.
etl_pipeline.py) - Dati puliti in formato strutturato (CSV, JSON, Parquet, SQLite, ...)
- File
data_quality_report.mdcon statistiche e issue trovati
Prepara i dati per retrieval semantico:
- Genera embeddings per i contenuti testuali (usa API key OpenAI fornita o modelli open-source come sentence-transformers)
- Scegli strategia di chunking appropriata per preservare contesto semantico
- Crea metadata utili per filtering/routing delle query
- Prepara output in formato ottimale per vector database
Nota importante: Se preferisci, puoi documentare solo la strategia (chunking approach, metadata design, scelta modello) senza generare gli embeddings effettivi - sarà discusso nel colloquio tecnico.
Criteri di accettazione:
- Strategia di chunking motivata e appropriata per i diversi tipi di contenuto
- Metadata strutturati che permettano filtering per source, categoria, data
- Embeddings generati con modello dichiarato e dimensioni documentate
- Output JSONL valido e ben strutturato
Deliverable:
- Script (es.
prepare_knowledge_base.py) - Output in formato JSONL con struttura:
{
"id": "unique_id",
"content": "text chunk",
"embedding": [0.1, 0.2, ...],
"metadata": {
"source": "projects|interactions|faq",
"category": "...",
"created_at": "ISO timestamp",
...
}
}- Documento
EMBEDDING_STRATEGY.mdche spiega le tue scelte
Esempio di output atteso (1 record):
{
"id": "faq-methodology-001",
"content": "CAWI sta per Computer Assisted Web Interviewing. È un metodo di raccolta dati tramite questionari online auto-compilati. I panelisti ricevono un link via email e completano il sondaggio sul proprio dispositivo. Vantaggi: costi ridotti, tempi rapidi, possibilità di includere contenuti multimediali. Tempi medi di completamento: 15-20 minuti per sondaggi standard.",
"embedding": [0.023, -0.041, 0.089, "... (384 o 1536 dimensioni a seconda del modello)"],
"metadata": {
"source": "faq",
"category": "metodologie",
"subcategory": "CAWI",
"language": "it",
"created_at": "2024-04-01T00:00:00Z"
}
}expected_output/
├── task1/
│ ├── schema.sql (o schema_diagram.png/pdf)
│ └── DESIGN_CHOICES.md
├── task2/
│ ├── etl_pipeline.py (o altro linguaggio)
│ ├── cleaned_data/
│ │ ├── projects.csv (o .json, .parquet, .sqlite)
│ │ ├── interactions.csv
│ │ └── ...
│ └── data_quality_report.md
└── task3/
├── prepare_knowledge_base.py
├── knowledge_base.jsonl
└── EMBEDDING_STRATEGY.md
- Multi-tenancy: I dati contengono un campo
workspace_idche identifica l'azienda proprietaria. Progetta la Knowledge Base e/o l'agente in modo che le query siano isolate per workspace: un utente del workspace WS-001 non deve mai ricevere dati di WS-002. Come garantiresti l'isolamento dei dati in un contesto RAG multi-tenant? - Implementa un semplice retrieval test (query di esempio + risultati)
- Aggiungi monitoring/logging alla pipeline
- Aggiungi unit tests
- Dockerizza la pipeline per riproducibilità
I dati contengono inconsistenze intenzionali - parte dell'assessment è identificarle e gestirle correttamente. Non tutti gli errori sono ovvi: alcuni richiedono analisi cross-field o cross-record.
Se qualcosa non è chiaro, fai assunzioni ragionevoli e documentale nel README del tuo fork. Valutiamo anche la capacità di prendere decisioni autonome.