Parte 2 di 5: Generazione Aumentata da Recupero
Bentornato! Oggi ci immergiamo nei sistemi RAG — uno dei modi più pratici per rendere l'IA utile per le tue esigenze aziendali specifiche.
Che cos'è esattamente RAG?
Ti spiego RAG con una semplice analogia. Immagina di fare un esame a libro aperto. Invece di affidarti solo a quello che hai memorizzato, puoi consultare i tuoi libri di testo per dare risposte migliori e più accurate. È essenzialmente quello che RAG fa per i modelli di IA.
RAG = Modello di IA + La tua base di conoscenze personalizzata
Il modello di IA fornisce l'"intelligenza" per comprendere le domande e generare risposte simili a quelle umane, mentre la tua base di conoscenze fornisce informazioni specifiche e aggiornate sulla tua azienda.
Perché dovresti preoccuparti di RAG?
Ecco il punto sui modelli linguistici di grandi dimensioni come ChatGPT — sono incredibilmente intelligenti, ma non sanno nulla della tua azienda specifica. Non possono dire ai clienti quali sono le tue ultime funzioni di prodotto, le tue politiche aziendali, o rispondere a domande utilizzando la tua documentazione interna.
RAG risolve questo:
- Rendendo le risposte dell'IA più accurate e rilevanti per la tua azienda
- Mantenendo le informazioni aggiornate (basta aggiornare i tuoi documenti, non è necessario un nuovo addestramento)
- Fornendo trasparenza (puoi vedere quali documenti l'IA ha utilizzato per rispondere)
- Essendo conveniente (molto meno costoso dell'ottimizzazione di modelli di grandi dimensioni)
Costruiamone uno insieme
Ti mostrerò come creare un sistema RAG utilizzando Gemini AI di Google. Creeremo un sistema che può rispondere a domande su "MyNextDeveloper". Ecco il processo passo dopo passo:
Passaggio 1: Installa gli strumenti necessari
!pip install -q -U google-generativeai langchain-google-genai langchain faiss-cpu pypdf langchain-community
Queste librerie gestiranno il lavoro pesante per noi:
- google-generativeai: Accesso ai modelli Gemini di Google
- langchain-google-genai: Integrazione di Gemini con LangChain
- LangChain: Framework per costruire applicazioni di IA
- FAISS: Ricerca di somiglianza rapida (trovare documenti rilevanti)
Passaggio 2: Configura l'API di Google AI
import os from google.colab import userdata import google.generativeai as genaiGOOGLE_API_KEY = userdata.get('GOOGLE_API_KEY') genai.configure(api_key=GOOGLE_API_KEY)
Avrai bisogno di ottenere una chiave API gratuita da Google AI Studio e aggiungerla al tuo ambiente.
Passaggio 3: Prepara la tua base di conoscenze
raw_text = """ MyNextDeveloper (MND) is a remote-first tech company founded in 2022 in Mumbai. They focus on supplying pre-vetted, highly skilled developers to startups. Their mission is to solve the trust gap between startups and engineers by emphasizing empathy, communication, and transparency.The company promotes agile practices, test-driven development, and POSH-compliant culture. MND offers services like staff augmentation, API and web development, UI/UX design, and AI/ML solutions. Their tech stack includes Angular, React, Next.js, Node.js, Django, Python, Docker, and AWS. Clients appreciate their transparency and delivery quality. Project pricing starts at $10,000 with hourly rates between $25 and $49. MND claims startups can save up to 30% through their freelance model. They operate globally, serving startups, Y Combinator and Techstars alumni. It is headquartered in Malabar Hill, Mumbai. """# Converti in documento LangChain from langchain_core.documents import Document documents = [Document(page_content=raw_text)] print(f"Loaded {len(documents)} document(s).")
In un'applicazione reale, questa sarebbe la tua documentazione di prodotto, FAQ, politiche aziendali o qualsiasi informazione testuale sulla tua azienda.
Passaggio 4: Dividi le informazioni in blocchi
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter( chunk_size=300, chunk_overlap=50, length_function=len, add_start_index=True, )
chunks = text_splitter.split_documents(documents)
print(f"Split into {len(chunks)} chunks.")
Perché dividiamo il testo? I modelli di IA funzionano meglio con pezzi di informazione più piccoli e focalizzati. chunk_overlap=50 garantisce che non perdiamo contesto ai confini dei blocchi, mentre add_start_index=True ci aiuta a tracciare da dove provengono le informazioni.
Passaggio 5: Crea gli embedding e l'archivio vettoriale
from langchain_google_genai import GoogleGenerativeAIEmbeddings from langchain_community.vectorstores import FAISS
embeddings = GoogleGenerativeAIEmbeddings( model="models/embedding-001", google_api_key=GOOGLE_API_KEY )
print("Creating FAISS vector store...")
vector_store = FAISS.from_documents(chunks, embeddings)
print("FAISS vector store created.")
Il passaggio più importante. Ogni blocco di testo viene convertito in un "vettore" (rappresentazione numerica). Quando qualcuno pone una domanda, troviamo i blocchi con vettori più simili al vettore della domanda.
Passaggio 6: Configura il sistema di domande e risposte
from langchain_google_genai import ChatGoogleGenerativeAI from langchain.chains import RetrievalQA from langchain_core.prompts import PromptTemplate
retriever = vector_store.as_retriever(search_kwargs={"k": 3})
llm = ChatGoogleGenerativeAI( model="gemini-1.5-flash", temperature=0.3, google_api_key=GOOGLE_API_KEY )
prompt_template = """ You are an AI assistant that answers questions based on the provided context. If the answer is not available in the context, politely state that you don't know.
Context:
{context}
Question:
{question}
Answer: """ RAG_PROMPT = PromptTemplate.from_template(prompt_template)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True,
chain_type_kwargs={"prompt": RAG_PROMPT}
)
temperature=0.3 mantiene le risposte focalizzate e fattuali, mentre search_kwargs={"k": 3} significa che recupereremo i 3 blocchi più rilevanti per ogni domanda.
Passaggio 7: Prova
questions = [ "What does MyNextDeveloper (MND) do?", "Where is MND headquartered?", "What services does MND offer?", "What technologies does MND use?", "How does MND help startups save money?", "What is the capital of France?" # This should trigger "I don't know" ]
for i, question in enumerate(questions):
print(f"nQuestion {i+1}: {question}")
response = qa_chain.invoke({"query": question})
print(f"Answer: {response['result']}")
if 'source_documents' in response:
print("Source Documents:")
for doc in response['source_documents']:
print(f"- Content (truncated): {doc.page_content[:150]}...")
Output di esempio:
Question 1: What does MyNextDeveloper (MND) do? Answer: MyNextDeveloper (MND) is a remote-first tech company that supplies pre-vetted, highly skilled developers to startups. They offer services such as staff augmentation, API and web development, UI/UX design, and AI/ML solutions. Their goal is to bridge the trust gap between startups and engineers through empathy, communication, and transparency.
Question 6: What is the capital of France? Answer: I'm sorry, but I don't know the capital of France. The provided text is about a company called MND and doesn't contain information about France's capital.
Nota come il sistema risponda correttamente alle domande su MND ma educatamente si rifiuti di rispondere a domande al di fuori della sua base di conoscenze.
Google Colab
Ecco il link di Google Colab di questo articolo che può essere eseguito con un clic: link
Applicazioni nel mondo reale
Ecco alcuni modi pratici in cui puoi utilizzare i sistemi RAG:
Supporto ai clienti: Carica le tue FAQ, i manuali dei prodotti e i ticket di supporto. Lascia che l'IA gestisca le domande comuni 24/7.
Base di conoscenze interna: Carica le politiche aziendali, le procedure e la documentazione. I dipendenti possono porre domande in linguaggio naturale invece di cercare nei file.
Assistente di vendita: Carica le specifiche dei prodotti, i prezzi e i case study. Il tuo team di vendita ottiene accesso istantaneo a qualsiasi informazione di cui ha bisogno durante le chiamate.
Creazione di contenuti: Carica i tuoi contenuti esistenti, i post del blog e i materiali di marketing. Genera nuovi contenuti coerenti con la voce del tuo marchio.
I limiti (Siamo sinceri)
RAG non è perfetto:
- La qualità dipende dai tuoi dati: Spazzatura dentro, spazzatura fuori
- Può allucinare: A volte l'IA potrebbe inventare informazioni che suonano plausibili
- Richiede manutenzione: Devi mantenere aggiornata la tua base di conoscenze
- Considerazioni sui costi: Le chiamate API possono accumularsi con un uso intensivo
Intuizioni chiave sull'implementazione
Dal nostro esempio funzionante, ecco alcune importanti considerazioni tecniche:
La dimensione del blocco è importante: Abbiamo usato 300 caratteri con sovrapposizione di 50 caratteri. Questo equilibra la preservazione del contesto con la precisione del recupero.
Qualità dell'embedding: Il modello embedding-001 di Google fornisce buoni embedding di uso generale, ma potresti aver bisogno di embedding specifici del dominio per contenuti specializzati.
Strategia di recupero: Il parametro k=3 significa che recuperiamo i 3 blocchi più rilevanti. Puoi regolare questo in base al tuo caso d'uso.
Ingegneria dei prompt: Il nostro prompt dice esplicitamente all'IA di dire "Non so" quando le informazioni non sono disponibili. Questo previene le allucinazioni.
Suggerimenti per il successo
- Inizia in piccolo: Inizia con un caso d'uso specifico piuttosto che cercare di coprire tutto
- Mantieni i documenti aggiornati: Le informazioni obsolete portano a utenti frustrati
- Testa in modo estensivo: Prova molte domande diverse per capire dove il tuo sistema funziona bene e dove no
- Monitora l'utilizzo: Tieni d'occhio quali domande le persone stanno ponendo per migliorare la tua base di conoscenze
- Itera sulla dimensione del blocco: Sperimenta diverse dimensioni di blocco e valori di sovrapposizione per il tuo contenuto specifico
Qual è il prossimo passo
Nel nostro prossimo articolo, esploreremo l'ottimizzazione — prendere un modello di IA esistente e addestrarlo specificamente per il tuo caso d'uso. Mentre RAG dà all'IA accesso alle tue informazioni, l'ottimizzazione in realtà cambia il modo in cui l'IA "pensa" al tuo dominio.
RAG è spesso il miglior punto di partenza perché è più semplice, più trasparente e più facile da mantenere. Ma a volte hai bisogno di quel livello extra di personalizzazione che solo l'ottimizzazione può fornire.
Prossimamente: Articolo 3 — "Ottimizzazione degli LLM: Insegnare all'IA a Parlare la Tua Lingua"


