Costruisci un assistente che risponde a domande sui tuoi documenti, invece che sulla sua memoria generica.
Un piccolo assistente che legge un documento di testo a tua scelta (i tuoi appunti, una dispensa, un manuale), lo indicizza in un vector database, e risponde alle tue domande basandosi solo su quel contenuto — non su ciò che il modello "ricorda" genericamente.
Spunta ogni passaggio man mano che lo completi: sbloccherai l'attestato del progetto al termine.
Passo 1 — Codice
with open("appunti.txt", "r", encoding="utf-8") as f: testo = f.read() print(f"Documento caricato: {len(testo)} caratteri")
Passo 2 — Codice
def dividi_in_chunk(testo, dimensione=150): parole = testo.split() return [" ".join(parole[i:i+dimensione]) for i in range(0, len(parole), dimensione)] chunk = dividi_in_chunk(testo) print(f"{len(chunk)} chunk creati")
Passo 3 — Codice
import chromadb client = chromadb.Client() collezione = client.create_collection("i_miei_appunti") collezione.add( documents=chunk, ids=[f"chunk_{i}" for i in range(len(chunk))] )
Passo 4 — Codice
def recupera_contesto(domanda, n=3): risultati = collezione.query(query_texts=[domanda], n_results=n) return "\n\n".join(risultati["documents"][0])
Passo 5 — Codice
import anthropic client = anthropic.Anthropic(api_key=chiave) def chiedi(domanda): contesto = recupera_contesto(domanda) prompt = f"""Rispondi alla domanda usando solo queste informazioni. Se non trovi la risposta nel testo, dillo chiaramente. Contesto: {contesto} Domanda: {domanda}""" risposta = client.messages.create( model="claude-sonnet-4-5", max_tokens=400, messages=[{"role": "user", "content": prompt}] ) return risposta.content[0].text
Passo 6 — Codice
while True: domanda = input("\nFai una domanda (o scrivi 'esci'): ") if domanda.lower() == "esci": break print(chiedi(domanda))
Modifica la funzione chiedi() per stampare anche quale chunk è stato usato per rispondere, così puoi verificare la tracciabilità della risposta.
Estendi il progetto per indicizzare 2-3 documenti diversi nella stessa collezione, aggiungendo un campo "fonte" a ogni chunk per sapere da quale documento proviene ogni risposta.
Usando quanto imparato nella guida sul Deployment, trasforma questo chatbot da riga di comando a una piccola app web con Streamlit.
Completa tutti i 6 passaggi per sbloccare il tuo attestato in PDF.