Osa 2/5: Retrieval-Augmented Generation
Tervetuloa takaisin! Tänään sukeltaamme RAG-järjestelmiin — yhteen käytännöllisimmistä tavoista tehdä tekoäly hyödylliseksi juuri sinun liiketoimintasi tarpeisiin.
Mitä oikeastaan on RAG?
Selvitän RAG:ia yksinkertaisella vertauksella. Kuvittele, että teet avoimen kirjan kokeesta. Sen sijaan, että luottaisit vain siihen, mitä olet opetellut ulkoa, voit etsiä tietoa oppikirjoistasi parempia ja tarkempia vastauksia varten. Juuri niin RAG toimii tekoälymalleille.
RAG = tekoälymalli + sinun räätälöity tietokanta
Tekoälymalli tarjoaa "älykkyyden" kysymysten ymmärtämiseen ja ihmisenkaltaisten vastausten luomiseen, kun taas tietokantasi tarjoaa spesifisiä, ajantasaisia tietoja liiketoiminnastasi.
Miksi sinun pitäisi välittää RAG:ista?
Tässä on asia suurista kielimalleista kuten ChatGPT:stä — ne ovat uskomattoman älykkäitä, mutta ne eivät tiedä mitään sinun spesifisestä liiketoiminnastasi. Ne eivät voi kertoa asiakkaillesi uusimmista tuoteominaisuuksistasi, yrityksen käytännöistäsi tai vastata kysymyksiin käyttäen sisäistä dokumentaatiotasi.
RAG ratkaisee tämän:
- Tekoälyvastauksista tulee tarkempia ja relevantimpia liiketoiminnallesi
- Tiedon pitäminen ajan tasalla (päivitä vain dokumentit, uudelleenkoulutusta ei tarvita)
- Läpinäkyvyyden tarjoaminen (näet, mitä dokumentteja tekoäly käytti vastauksessa)
- Kustannustehokkuus (paljon halvempaa kuin suurten mallien hienosäätö)
Rakennetaan sellainen yhdessä
Näytän sinulle, kuinka RAG-järjestelmä rakennetaan käyttäen Googlen Gemini AI:ta. Luomme järjestelmän, joka voi vastata kysymyksiin "MyNextDeveloper":ista. Tässä on vaiheittainen prosessi:
Vaihe 1: Asenna vaaditut työkalut
!pip install -q -U google-generativeai langchain-google-genai langchain faiss-cpu pypdf langchain-community
Nämä kirjastot hoitavat raskaan työn puolestamme:
- google-generativeai: Pääsy Googlen Gemini-malleihin
- langchain-google-genai: Gemini-integraatio LangChainin kanssa
- LangChain: Kehys tekoälysovelluksien rakentamiseen
- FAISS: Nopea samankaltaisuushaku (asiaankuuluvien dokumenttien löytäminen)
Vaihe 2: Aseta 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)
Sinun on hankittava ilmainen API-avain Google AI Studiosta ja lisättävä se ympäristöhösi.
Vaihe 3: Valmistele tietokantasi
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. """# Muunna LangChainin dokumentiksi from langchain_core.documents import Document documents = [Document(page_content=raw_text)] print(f"Loaded {len(documents)} document(s).")
Todellisessa sovelluksessa tämä olisi tuotedokumentaatiosi, FAQ, yrityksen käytännöt tai mikä tahansa tekstimuotoinen tieto liiketoiminnastasi.
Vaihe 4: Jaa tieto paloiksi
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.")
Miksi jaamme tekstin? Tekoälymallit toimivat paremmin pienemmillä, fokusoiduilla informaatiopalasilla. chunk_overlap=50 varmistaa, että emme menetä kontekstia palojensa rajoilla, kun taas add_start_index=True auttaa meitä seuraamaan, mistä tieto tuli.
Vaihe 5: Luo upotukset ja vektorivarasto
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.")
Tärkein vaihe. Jokainen tekstipala muutetaan "vektoriksi" (numeerinen esitys). Kun joku esittää kysymyksen, etsimme palat, joiden vektorit ovat eniten samankaltaisia kysymyksen vektorin kanssa.
Vaihe 6: Aseta kysymys-vastaus-järjestelmä
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 pitää vastaukset fokusoiduina ja faktapohjaisina, kun taas search_kwargs={"k": 3} tarkoittaa, että haemme 3 eniten asiaankuuluvaa palaa jokaista kysymystä kohti.
Vaihe 7: Testaa sitä
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]}...")
Näytteen lähtö:
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.
Huomaa, kuinka järjestelmä vastaa oikein MND:tä koskeviin kysymyksiin mutta kohteliaasti kieltäytyy vastaamasta tietokantansa ulkopuolisiin kysymyksiin.
Google Colab
Tässä on tämän artikkelin Google Colab-linkki, jota voi suorittaa yhdellä klikillä: linkki
Todellisen maailman sovellukset
Tässä on joitakin käytännöllisiä tapoja, joilla voit käyttää RAG-järjestelmiä:
Asiakastuki: Lataa FAQ, tuoteoppaat ja tukipyynnöt. Laita tekoäly käsittelemään yleisiä kysymyksiä 24/7.
Sisäinen tietokanta: Lataa yrityksen käytännöt, menettelyt ja dokumentaatio. Työntekijät voivat esittää kysymyksiä luonnollisella kielellä sen sijaan, että kaivaisivat tiedostojen läpi.
Myyntiavustaja: Lataa tuoteominaisuudet, hinnoittelu ja case-tutkimukset. Myyntitiimi saa välittömän pääsyn mihin tahansa tietoon, jota he tarvitsevat puheluiden aikana.
Sisällön luominen: Lataa olemassa oleva sisältösi, blogipostaukset ja markkinointimateriaalit. Luo uutta sisältöä, joka on johdonmukainen brändi-äänesi kanssa.
Rajoitukset (olkaamme rehellisiä)
RAG ei ole täydellinen:
- Laatu riippuu tiedoistasi: Rosaa sisään, rosaa ulos
- Voi hallusinoida: Joskus tekoäly saattaa keksiä tietoa, joka kuulostaa uskottavalta
- Vaatii huoltoa: Sinun on pidettävä tietokantasi ajan tasalla
- Kustannusnäkökulmat: API-kutsut voivat kertyä raskaassa käytössä
Tärkeät implementaation oivallukset
Työesimerkistämme käy ilmi joitakin tärkeitä teknisiä näkökohtia:
Palokoko on tärkeä: Käytimme 300 merkkiä 50 merkin päällekkäisyydellä. Tämä tasapainottaa kontekstin säilyttämisen hakutarkkuuden kanssa.
Upotuksen laatu: Googlen embedding-001 -malli tarjoaa hyvää yleiskäyttöisen upotukset, mutta erikoissisältöä varten saatat tarvita verkkotunnukseen liittyviä upotuksia.
Hakustrategia: k=3 -parametri tarkoittaa, että haemme 3 eniten asiaankuuluvaa palaa. Voit säätää tätä käyttötapauksesi perusteella.
Kehotteiden insinöörityöt: Kehotteet sanovat eksplisiittisesti tekoälylle, että se sano "En tiedä", kun tieto ei ole saatavilla. Tämä estää hallusinaatioita.
Vinkkejä menestykseen
- Aloita pienestä: Aloita yhdestä spesifisestä käyttötapauksesta sen sijaan, että yrittäisit kattaa kaiken
- Pidä dokumentit ajan tasalla: Vanhentunut tieto johtaa turhautuneisiin käyttäjiin
- Testaa laajasti: Yritä paljon erilaisia kysymyksiä ymmärtääksesi, missä järjestelmä toimii hyvin ja missä ei
- Valvo käyttöä: Seuraa, mitä kysymyksiä ihmiset esittävät tietokannan parantamiseksi
- Iteroitu palokokoon: Kokeile erilaisia palokokoja ja päällekkäisyyden arvoja spesifiselle sisällöllesi
Mitä seuraavaksi
Seuraavassa artikkelissa tutkimme hienosäätöä — olemassa olevan tekoälymallin ottaminen ja sen kouluttaminen spesifisesti sinun käyttötapauksillesi. Vaikka RAG antaa tekoälylle pääsyn tietoihisi, hienosäätö muuttaa todella sitä, kuinka tekoäly "ajattelee" alastasi.
RAG on usein paras aloituskohta, koska se on yksinkertaisempi, läpinäkyvämpi ja helpompi ylläpitää. Mutta joskus tarvitset sitä ylimääräistä räätälöinnin tasoa, jonka vain hienosäätö voi tarjota.
Tulossa: Artikkeli 3 — "Fine-Tuning LLMs: Teaching AI to Speak Your Language"


