# Componenti del Progetto
Questa sezione documenta i principali componenti del codebase.
Agent (`agent/`)
Agent (`agent/agent.py`)
Classe principale che orchestra l'intero sistema conversazionale.
Metodi principali:
class Agent:
def __init__(self):
# Inizializza l'agent con i percorsi ai modelli e knowledge base
def load_models(self):
# Carica FastText e modello Intent Classifier
def load_knowledge(self):
# Carica rules e responses dalla knowledge base
def predict(self, text):
# Predice intent ed entitร da un testo
# Returns: dict con intent, confidence, entities
def get_response(self, intent_name, slots):
# Genera risposta basata su intent e slot
def chat(self):
# Avvia loop conversazionale interattivoSession Manager (`agent/session_manager.py`)
Gestisce le sessioni conversazionali utilizzando il pattern Singleton.
Classe: ConversationSession
@dataclass
class ConversationSession:
session_id: str
created_at: datetime
updated_at: datetime
history: list
context: dict
metadata: dict
waiting_for_slot: dict | NoneClasse: SessionManager
class SessionManager:
def create_session(self, user_id=None, metadata=None) -> str
def get_session(self, session_id) -> ConversationSession
def delete_session(self, session_id) -> bool
def get_active_sessions(self) -> listAnswer Manager (`agent/answer_manager.py`)
Gestisce la generazione delle risposte basata su regole.
class AnswerManager:
def resolve(self, intent: str, slots: dict) -> dict
def get_response(self, intent: str, slots: dict, responses: dict) -> tuple[str, str | None]Operatori supportati:
eq: Ugualeneq: Non ugualegt: Maggiore dilt: Minore dicontains: Contienefilled: Slot valorizzatonot_filled: Slot non valorizzato
Entity Manager (`agent/entity_manager.py`)
Gestisce le entitร estratte dalla conversazione.
API (`api/`)
Auth (`api/auth.py`)
Endpoint per l'autenticazione JWT.
@router.post("/token")
def login(form_data: OAuth2PasswordRequestForm = Depends()):
# Restituisce JWT tokenChatbot (`api/chatbot.py`)
Endpoint per l'invio di messaggi.
@router.post("/message")
def send_message(chat_message: ChatMessage, current_user: User = Depends(get_current_user)):
# Restituisce risposta del chatbotIntellective (`intellective/`)
Intent Classifier (`intellective/intent_classifier.py`)
Modello PyTorch che combina classificazione intenti e NER.
Architettura:
- Embedding Layer (FastText inizializzato)
- BiGRU (bidirezionale)
- Attention Layer
- FC Layer per classificazione
- CRF Layer per NER
class IntentClassifier(nn.Module):
def __init__(self, vocab_size, embed_dim, hidden_dim, output_dim,
dropout_prob, fasttext_model_path, num_ner_tags=None,
freeze_embeddings=False)
def forward(self, x, ner_tags=None, mask=None) -> tuple
def predict(self, text) -> dict
def _extract_entities(self, tokens, ner_tags) -> listTraining (`intellective/train_intent_classifier.py`)
Script per l'addestramento del classificatore.
class IntentDataset(Dataset):
def __getitem__(self, idx) -> tuple
def collate_fn(batch) -> tuple
def train_model(model, dataloader, epochs, lr, device) -> None
def train_main_model() -> NoneFastText Training (`intellective/train_fast_text.py`)
Script per l'addestramento del modello FastText.
Doping Preprocessor (`intellective/doping_preprocessor.py`)
Sistema per migliorare il riconoscimento aggiungendo informazioni contestuali all'input.
Classes (`classes/`)
Simple Tokenizer (`classes/simple_tokenizer.py`)
Tokenizer basato su FastText.
NER Tag Builder (`classes/ner_tag_builder.py`)
Gestisce i tag NER in formato BIO.
NER Markup Parser (`classes/ner_markup_parser.py`)
Parser per le annotazioni NER nel formato [testo](TIPOLOGIA).
Dataset Generator (`classes/dataset_generator.py`)
Genera dataset di training.
Intent Normalizer (`classes/intent_normalizer.py`)
Normalizza gli intenti per il training.
Pipeline (`pipeline/`)
Pipeline Principale (`pipeline/__main__.py`)
def run_full_pipeline():
# Esegue tutti gli step di trainingIntent Builder (`pipeline/intent_builder.py`)
Costruisce i dati di training dagli intenti.
Merge Data (`pipeline/merge_data.py`)
Unisce dati da diverse fonti.
Tokenize for FastText (`pipeline/tokenize_for_fast_text.py`)
Tokenizza i dati per FastText.
Modelli
Modelli Addestrati
models/fasttext_model.bin: Modello FastTextmodels/intent_model_fast.pth: Modello PyTorch per classificazione intenti
Dati
data/intent_dict.json: Dizionario intentidata/tokenized_data.npy: Dati tokenizzatidata/fast-text.txt: Dati per training FastText