Del 2 av 5: Retrieval-Augmented Generation
Välkommen tillbaka! Idag dyker vi in i RAG-system — ett av de mest praktiska sätten att göra AI användbar för dina specifika affärsbehov.
Vad är RAG egentligen?
Låt mig förklara RAG med en enkel analogi. Föreställ dig att du tar ett tentamen med öppna böcker. Istället för att enbart förlita dig på vad du memorerat kan du slå upp information i dina läroböcker för att ge bättre, mer korrekta svar. Det är i princip vad RAG gör för AI-modeller.
RAG = AI-modell + Din anpassade kunskapsbas
AI-modellen tillhandahåller "intelligensen" för att förstå frågor och generera människoliknande svar, medan din kunskapsbas tillhandahåller specifik, aktuell information om ditt företag.
Varför bör du bry dig om RAG?
Här är saken med stora språkmodeller som ChatGPT — de är otroligt smarta, men de vet ingenting om ditt specifika företag. De kan inte berätta för kunder om dina senaste produktfunktioner, dina företagspolicyer, eller svara på frågor med dina interna dokument.
RAG löser detta genom att:
- Göra AI-svar mer exakta och relevanta för ditt företag
- Hålla information aktuell (uppdatera bara dina dokument, ingen omträning behövs)
- Ge transparens (du kan se vilka dokument AI använde för att svara)
- Vara kostnadseffektivt (mycket billigare än fine-tuning av stora modeller)
Låt oss bygga en tillsammans
Jag visar dig hur du bygger ett RAG-system med Googles Gemini AI. Vi skapar ett system som kan svara på frågor om "MyNextDeveloper". Här är steg-för-steg-processen:
Steg 1: Installera de nödvändiga verktygen
!pip install -q -U google-generativeai langchain-google-genai langchain faiss-cpu pypdf langchain-community
Dessa bibliotek hanterar det tunga arbetet åt oss:
- google-generativeai: Åtkomst till Googles Gemini-modeller
- langchain-google-genai: Gemini-integration med LangChain
- LangChain: Ramverk för att bygga AI-applikationer
- FAISS: Snabb likhetssökning (hitta relevanta dokument)
Steg 2: Ställ in Google AI API
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)
Du behöver få en gratis API-nyckel från Google AI Studio och lägga till den i din miljö.
Steg 3: Förbered din kunskapsbas
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. """# Konvertera till LangChain-dokument from langchain_core.documents import Document documents = [Document(page_content=raw_text)] print(f"Loaded {len(documents)} document(s).")
I en riktigt applikation skulle detta vara din produktdokumentation, FAQ, företagspolicyer, eller någon textbaserad information om ditt företag.
Steg 4: Dela upp informationen i bitar
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.")
Varför delar vi upp texten? AI-modeller fungerar bättre med mindre, fokuserade informationsbitar. chunk_overlap=50 säkerställer att vi inte förlorar sammanhang vid bitgränser, medan add_start_index=True hjälper oss att spåra var informationen kommer från.
Steg 5: Skapa inbäddningar och vektorbutik
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.")
Det viktigaste steget. Varje textbit konverteras till en "vektor" (numerisk representation). När någon ställer en fråga hittar vi bitarna med vektorer mest liknande frågans vektor.
Steg 6: Ställ in frågans-svar-systemet
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 håller svar fokuserade och faktiska, medan search_kwargs={"k": 3} betyder att vi hämtar de 3 mest relevanta bitarna för varje fråga.
Steg 7: Testa det
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]}...")
Exempelutdata:
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.
Lägg märke till hur systemet korrekt svarar på frågor om MND men artig vägrar att svara på frågor utanför dess kunskapsbas.
Google Colab
Här är google colab-länken för denna artikel som kan köras i ett klick: länk
Verkliga tillämpningar
Här är några praktiska sätt du kan använda RAG-system:
Kundsupport: Ladda upp din FAQ, produktmanualer och supportärenden. Låt AI hantera vanliga frågor 24/7.
Intern kunskapsbas: Ladda upp företagspolicyer, procedurer och dokumentation. Anställda kan ställa frågor på naturligt språk istället för att gräva genom filer.
Försäljningsassistent: Ladda upp produktspecifikationer, prissättning och fallstudier. Ditt försäljningsteam får omedelbar åtkomst till all information de behöver under samtal.
Innehållsskapande: Ladda upp ditt befintliga innehål, blogginlägg och marknadsföringsmaterial. Generera nytt innehål som är konsistent med din varumärkesröst.
Begränsningarna (låt oss vara ärliga)
RAG är inte perfekt:
- Kvaliteten beror på dina data: Skräp in, skräp ut
- Kan hallucinera: Ibland kan AI göra upp information som låter trovärdig
- Kräver underhåll: Du behöver hålla din kunskapsbas uppdaterad
- Kostnadsöverväganden: API-anrop kan addera upp vid kraftig användning
Viktiga implementeringsinsikter
Från vårt fungerade exempel, här är några viktiga tekniska överväganden:
Bitstorlek spelar roll: Vi använde 300 tecken med 50-teckens överlappning. Detta balanserar bevarandet av sammanhang med hämtningsnoggrannhet.
Inbäddningskvalitet: Googles embedding-001-modell ger bra allmänna inbäddningar, men du kan behöva domänspecifika inbäddningar för specialiserat innehål.
Hämtningsstrategi: Parametern k=3 betyder att vi hämtar de 3 mest relevanta bitarna. Du kan justera detta baserat på ditt användningsfall.
Snabbprompt-teknik: Vår prompt säger uttryckligen till AI att säga "Jag vet inte" när information inte är tillgänglig. Detta förhindrar hallucinering.
Tips för framgång
- Börja litet: Börja med ett specifikt användningsfall istället för att försöka täcka allt
- Håll dokument uppdaterade: Föråldrad information leder till frustrerade användare
- Testa omfattande: Prova många olika frågor för att förstå där ditt system fungerar väl och där det inte gör det
- Övervaka användning: Håll koll på vilka frågor folk ställer för att förbättra din kunskapsbas
- Iterera på bitstorlek: Experimentera med olika bitstorlekar och överlappningsvärden för ditt specifika innehål
Vad kommer härnäst
I vår nästa artikel utforskar vi fine-tuning — ta en befintlig AI-modell och träna den specifikt för ditt användningsfall. Medan RAG ger AI åtkomst till din information, ändrar fine-tuning faktiskt hur AI "tänker" om din domän.
RAG är ofta den bästa utgångspunkten eftersom det är enklare, mer transparent och lättare att underhålla. Men ibland behöver du den extra nivån av anpassning som bara fine-tuning kan ge.
Kommande: Artikel 3 — "Fine-Tuning LLMs: Teaching AI to Speak Your Language"


