# RAG selitti: alkuperä ja perusasiat

Tämä sarja näyttää, miten RAG syntyi, miten se toimii konepellin alla ja miten tuotantojärjestelmiä rakennetaan. Semanttisesta hausta tekoälyyn perustuvaksi Q&A:ksi, jossa on lainauksia – kaikki joissa on toimivia C#-koodiesimerkkejä.

<datetime class="hidden">2025-11-22T09:00</datetime>

<!-- category -- AI, RAG, Machine Learning, Semantic Search, LLM, AI-Article -->
# Johdanto

**Sarjan navigaatio:** Tämä on Reggion (Retroval-Augmented Generation) -sarjan 1 osa:

- **Osa 1: Aluekehitys ja perusasiat** (tämä artikkeli) - Mitä upotukset ovat, miksi niillä on merkitystä
- [Osa 2: Arkkitehtuuri ja sisätilat](/blog/rag-architecture) - Nuuskaaminen, sulauttaminen, vektoritietokannat
- [Osa 3: Aluetuki käytännössä](/blog/rag-practical-applications) - Kokonaisten RAG-järjestelmien rakentaminen
- [Osa 4a: ONNX & Qdrantin toteutus](/blog/semantic-search-with-onnx-and-qdrant) - CPU-ystävällinen semanttinen hakusäätiö
- [Osa 4b: Semanttinen haku toiminnassa](/blog/semantic-search-in-action) - Typeahead, hybridihaku ja UI-komponentit
- [Osa 5: Hybridihaku ja autoindeksointi](/blog/rag-hybrid-search-and-indexing) - Tuotannon integraatiomallit
- [Osa 6: GraphRAG](/blog/graphrag-knowledge-graphs-for-rag) - Tietokäyrät korporaatiotason ymmärtämiseen

RAG (Retrieval-Augmented Generation) kehitettiin tekemään tekoälystä älykkäämpi, jotta LLM:t saisivat käyttöönsä tietoja, joita he eivät ole kouluttaneet. Mutta tässä on mielenkiintoista: teknologia avaa mahdollisuuksia paljon pidemmälle kuin tekoälyn chatbotit. Se mahdollistaa semanttisen haun nettisivuilta, sisältösuosituksista, kirjoitusavusta ja tiedonhallinnasta.

**Kaksoisluonne:** RAG voi auttaa asiakkaita (parempi haku, tarkat vastaukset lainausmerkeillä) tai käyttää heitä hyväkseen (manipulatiiviset suositukset, negatiivisen arvostelun hautaaminen, ylennyksen paljastaminen). Ero ei ole teknologiassa – sen tarkoitus. Semanttinen haku, joka auttaa käyttäjiä löytämään sen, mitä he todellisuudessa tarvitsevat? Hieno. Se, joka priorisoi sen, mikä tekee sinusta eniten rahaa, kun vaikutat hyödylliseltä? Se on synkkä kuvioalue, ja siksi sen ymmärtäminen, miten tämä toimii, on tärkeää.

**Tässä totuus RAG:stä:** Se kuulostaa pelottavalta. Vektori upottaa muuntautumismalleja, KV-kätköjä? Mutta kuten kaikki muukin ohjelmistossa, kyse on vain sen toiminnan ymmärtämisestä. Sinun ei tarvitse tuntea muuntajien arkkitehtuurien takana olevaa matematiikkaa sen enempää kuin sinun tarvitsee ymmärtää kokoonpanoa kirjoittaaksesi C#:n.

**RAG kolmessa vaiheessa:**

1. Muuta teksti numeroiksi (embeddings)
2. Etsi vastaavat numerot (vektorihaku)
3. Käytä löytämääsi (näyttötuloksia tai syötä LLM:ään)

Loppu on toteutusta koskevia yksityiskohtia.

Tämä sarja näyttää, miten RAG-järjestelmät rakennetaan toimivalla C#-koodilla. Ei käsien heiluttelua. Ei olettamuksia. Vain kappaleet ja niiden sopivuus yhteen.

**Mitä opitte tässä sarjassa:**

- **Osa 1 (tämä artikla)**: Miten RAG syntyi ja miksi sillä on merkitystä
- **2 osa**: Täydellinen tekninen arkkitehtuuri ja LLM-sisätilat
- **3 osa**: Todellisten järjestelmien rakentaminen koodiesimerkein

Näytän myöhemmin myös, miten kokonaisia RAG-järjestelmiä rakennetaan, mukaan lukien:

- [CPU-ystävällinen semanttinen haku ONNX-kytkimillä](/blog/semantic-search-with-onnx-and-qdrant) (osa 4)
- [Omatoimiset vektoritietokannat Qdrantilla](/blog/semantic-search-with-onnx-and-qdrant) (osa 4)
- [Hybridihaku ja automaattinen indeksointi](/blog/rag-hybrid-search-and-indexing) (osa 5)

[TOC]

# Mikä on RAG?

**Hakijasukupolvi:** Etsi merkityksellisiä tietoja ja käytä niitä.

```mermaid
flowchart LR
    A[User Question] --> B[Retrieve Relevant Info]
    B --> C[Retrieved Documents/Context]
    C --> D[Generate Response]
    A --> D
    D --> E[Grounded, Accurate Answer]

    style B stroke:#f9f,stroke-width:2px
    style D stroke:#bbf,stroke-width:2px
```

**Ilman aluetukia:** Käyttäjä kysyy → LLM-arvauksia muistista → saattaa hallusinoida

**RAG:n kanssa:** Käyttäjä kysyy → Etsi relevantteja dokumentteja → LLM-vastauksia käyttämällä näitä dokumentteja → ground in reality

```csharp
// Without RAG: Hope the LLM knows
var answer = await llm.GenerateAsync("How do I deploy Docker?");
// Risk: Might make up outdated or wrong steps

// With RAG: Give it the docs
var relevantDocs = await vectorSearch.FindSimilar("How do I deploy Docker?");
var context = string.Join("\n", relevantDocs.Select(d => d.Text));
var answer = await llm.GenerateAsync($"Context: {context}\n\nQuestion: How do I deploy Docker?");
// Result: Answer based on YOUR actual Docker deployment docs
```

**Avainymmärrys:** Erillinen tietovarasto (haku) päättelystä (LLM). Päivitä dokumentit, haku pysyy nykyisellään. Uudelleenkoulutusta ei tarvita.

# Mistä RAG tuli?

RAG perustuu vuosikymmeniä kestäneeseen haku- ja NLP-tutkimukseen. Historian ymmärtäminen auttaa ymmärtämään, miksi RAG on suunniteltu sellaiseksi kuin se on - ja millaisia ongelmia se ratkaisee.

## Perinteinen haku (ennen vuotta 2010)

**Avainsanahaku:**

- **TF-IDF**: Termitaajuus × käänteisen asiakirjan taajuus - tavallisilla sanoilla vähemmän merkitystä
- **BM25**: Todennäköinen sijoitus - yhä avainsanahaun perusta
- **Fuzzy-yhteensopiva**:
  - **Soundex**: Foneettinen algoritmi ("Smith" vastaa "Smythea")
  - **Levenshteinin etäisyys**: Muokkaa etäisyyttä (miten monta lisäystä/poistoa/korvausta)
  - **N-gramit**: Osittaisen täsmäytyksen merkki- tai sanasarjat

**Ongelma:** Nämä sopivat yhteen *hahmot*, ei *merkitys*. Etsi "kontti orkestraatio" ja et löydä "Docker Swarmia", jos nuo tarkat sanat eivät tule näkyviin. He voivat käsitellä kirjoitusvirheitä, mutta eivät semantiikkaa.

## Varhaiskyselyvastaus (2010-luku)

**Watson (IBM, 2011):**

- Yhdistetty haku ja sääntöperustelu
- Won Jeopardy! vaati kuitenkin massiivista käsityöosaamista
- Luotti yhä vahvasti avainsanojen täsmäytykseen

**Lukemismallit:**

- Voi poimia vastauksia tarjotuista kappaleista
- Mutta sinun piti ensin antaa heille oikea reitti.
- Ei semanttisia etsintöjä tuon läpimenon löytämiseksi

## Syväoppimisen vallankumous (2017+)

**Transformers (2017):** "[Huomio on kaikki mitä tarvitset](https://arxiv.org/abs/1706.03762)"

- Neuraaliverkot, jotka voivat ymmärtää kontekstin
- Perusta kaikelle, mitä seurasi

**BERT (2018):**

- Kielen ymmärtäminen kontekstissa
- "Pankki" tarkoittaa eri asioita "jokipankissa" ja "säästöpankissa"
- Voi luoda syvennyksiä, jotka vangitsevat merkityksen

**GPT-2/3 (2019-2020):**

- Suuret kielimallit, jotka voisivat luoda yhtenäisen tekstin
- Mutta vain heidän koulutustietoihinsa
- Hallusinaatio-ongelmia ilmeni

**Ankkurivektorin kuvaukset:**

- Teksti → merkityksellisiä numeroita suurulotteisessa tilassa
- Samanlaisia merkityksiä → läheiset vektorit
- Tämä mahdollisti semanttisen etsinnän

**BART (Facebook AI, lokakuu 2019):**

- Kaksisuuntainen ja Auto-Regressive Transformer by Mike Lewis et al.
- Yhdistetty BERT-kooderi ja GPT-dekooderi
- Rekonstruoidaan automaattikoodaaja, joka on koulutettu turmelemalla tekstiä, ja rekonstruoidaan se
- Erinomainen tekstin tuottamis- ja ymmärtämistehtäviin
- Hänestä tuli RAG:n perusta

**M2M-100 (Facebook AI, lokakuu 2020):**

- Ensimmäinen monikielinen käännösmalli
- Suora käännös 100 kielen välillä ilman englanninkielistä pivottia
- 2200 kieliohjetta (10 kertaa enemmän kuin edelliset mallit)
- Näytetyt muuntajat pystyisivät hoitamaan massiivisia ylikielisiä tehtäviä

**Oikean maailman esimerkki:** Minun [Neural Machine Translation Tool](https://github.com/scottgal/mostlyucid-nmt) BARTia käytetään varakäännösmallina silloin, kun peruspalveluja ei ole saatavilla, mikä osoittaa, kuinka näistä muuntajapohjaisista malleista tuli käytännön rakennuspalikoita tuotantojärjestelmille.

## Nykyaikaisten aluetukiohjelmien synty (toukokuu 2020)

Seminaalipaperi "[Hakijasukupolvea osaamisintensiivisille NLP-tehtäville](https://arxiv.org/abs/2005.11401)"Patrick Lewis et al. (Facebook AI Research) esitteli virallisesti RAG:n, joka perustuu suoraan BART:iin:

**Se, mitä he yhdistivät:**

- Dense Passage Retrieval (DPR) - oppinut vektorikuvaus, ei avainsanoja
- BART-generaattori - seuraava 2seq-malli vuodelta 2019
- End-to-end-differentiaaliarkkitehtuuri - noutakaa ja luokaa yhdessä

**Tulokset:** RAG-järjestelmät ylittivät paljon suuremmat mallit osaamisvaltaisissa tehtävissä ja olivat samalla tehokkaampia ja ajan tasalla. Osaamispohjaa voisi päivittää ilman mallin uudelleenarviointia.

## Miksi RAG räjähti (2023-läsnä)

ChatGPT, GPT-4 ja Claude tekivät RAGista olennaisen:

1. **Hallusinaatio-ongelma** - LLM:t muodostavat faktat itsevarmasti. RAG perustelee vastauksia oikeilla asiakirjoilla.
2. **Tiedon loppuminen** - Vuoden 2021 dataan koulutetut LLM:t eivät tiedä vuoden 2024 tapahtumista. RAG käyttää nykyisiä asiakirjoja.
3. **Yksityistietoja** - LLM:t eivät pääse yrityksesi sisäisiin dokumentteihin.
4. **Kustannukset** - Hienosäätö LLM:t ovat kalliita ($10K-100K +). RAG on halpa (tallennus + upotukset).
5. **Selittävyys** - RAG voi mainita lähteet, mikä tekee siitä auditoitavan ja luotettavan.

**Tänään (2024-2025):** RAG on tarkkuutta ja auditifioitavuutta tarvitsevien tuotannon tekoälyjärjestelmien tosiasiallinen standardi. Jokainen suuri tekoälyyritys tarjoaa RAG-työkaluja.

# Miten RAG toimii: The Big Picture

Ennen kuin sukellamme syvälle teknisiin yksityiskohtiin (joita käsittelemme osassa 2), ymmärretään korkeatasoista työnkulkua.

## Kolme vaihetta

RAG-järjestelmät toimivat kolmessa eri vaiheessa:

### Vaihe 1: Indeksointi (yksinkertainen asennus)

```mermaid
flowchart LR
    A[Your Documents] --> B[Split into Chunks]
    B --> C[Generate Embeddings]
    C --> D[Store in Vector DB]

    style C stroke:#f9f,stroke-width:2px
    style D stroke:#bbf,stroke-width:2px
```

**Mitä tapahtuu:**

1. Ota tietopohjasi (docs, blogikirjoitukset, ohjekirjat)
2. Jaettava hallittaviksi kappaleiksi (kappaleet, kappaleet)
3. Muunna jokainen pala vektoriksi upotettavaksi (lukujen säde)
4. Tallenna samankaltaisuushakuun optimoidussa tietokannassa olevat vektorit

**Avainkäsite:** Samanlaiset merkitykset tuottavat samanlaisia vektoreja, joten "Docker container" ja "containerization platform" päätyvät lähelle toisiaan vektoriavaruudessa.

### Vaihe 2: Retryval (Every Query)

```mermaid
flowchart LR
    A[User Question] --> B[Generate Query Embedding]
    B --> C[Search Vector DB]
    C --> D[Top K Most Similar Chunks]

    style B stroke:#f9f,stroke-width:2px
    style C stroke:#bbf,stroke-width:2px
```

**Mitä tapahtuu:**

1. Käyttäjä esittää kysymyksen
2. Muunna kysymys vektoriksi (samaa mallia käytetään indeksointiin)
3. Samankaltaisia vektoreita löytyy tietokannasta
4. Palauta K:n tärkeimmät kappaleet (yleensä 3-10)

**Miksi se toimii:** "Miten otan kontit käyttöön?" (query) on semanttisesti samanlainen kuin Dockerin sijoittamisesta kertovat kappaleet, vaikka sanat eroavatkin toisistaan.

### Vaihe 3: Generation (Every Query)

```mermaid
flowchart TB
    A[User Question] --> B[Build Prompt]
    C[Retrieved Context] --> B
    B --> D[LLM]
    D --> E[Generated Answer with Citations]

    style B stroke:#f9f,stroke-width:2px
    style D stroke:#bbf,stroke-width:2px
```

**Mitä tapahtuu:**

1. Ota käyttäjän kysymys
2. Ota noudetut kontekstipalikat
3. Muodosta kehotus: "Kun annat tämän asiayhteyden, vastaa tähän kysymykseen..."
4. Lähetä LLM:ään sukupolveksi
5. LLM tuottaa vastauksen, joka perustuu toimitettuun asiayhteyteen

**Taikuus:** LLM ei voi hallusinoida asioita, jotka eivät ole yhteydessä. Se voi vain syntetisoida ja selittää, mitä on tarjolla.

## Yksinkertainen esimerkki

Jäljitetään kysely järjestelmän kautta:

**Käyttäjä kysyy:** "Miten käytän Docker Composea?"

**Vaihe 1 - Nouto:**

```
Query embedding: [0.234, -0.891, 0.567, ...]

Search vector DB for similar embeddings...

Retrieved chunks:
1. "Docker Compose is a tool for defining multi-container applications..." (similarity: 0.92)
2. "To use Docker Compose, create a docker-compose.yml file..." (similarity: 0.87)
3. "The docker-compose up command starts all services..." (similarity: 0.83)
```

**Vaihe 2 - Sukupolvi:**

```
Prompt to LLM:
"Context:
[1] Docker Compose is a tool for defining multi-container applications...
[2] To use Docker Compose, create a docker-compose.yml file...
[3] The docker-compose up command starts all services...

Question: How do I use Docker Compose?

Answer (use the context above):"

LLM Response:
"To use Docker Compose [1], start by creating a docker-compose.yml file [2] that
defines your services. Then run 'docker-compose up' to start all services [3]..."
```

**Tulos:** Tarkka vastaus implisiittisillä viittauksilla asiakirjoihinne.

# RAG vs. muut lähestymistavat

Se, milloin RAG:tä (ja milloin ei) käytetään, edellyttää sen vertaamista vaihtoehtoihin.

## RAG vs. fine-Tuning

TARKOITUS LAAJENTUMISEKSI
|--------|-----|-------------|
| **Tietopäivityksiä** Välitön (päivität vain tietopohjan) Vaatii uudelleenkoulutusta
| **Kustannukset** Alhainen (varastointi + upotus) Korkea (koulutusaika GPU)
| **Tarkkuus** Maaperällä olevat lähteet voivat hallusinoida
| **Räätälöinti** Rajoitettu haku Deep-malliin sopeutumiseen
| **Selittävyys** Korkea (voin mainita lähteet) Alhainen (musta laatikko)
| **Paras** Osaamisintensiiviset tehtävät Tyyliin/muotoon sopeutuminen

**Milloin Fine-Tuningia käytetään:**

- Tarvitset mallia oppiaksesi tietyn **tyyli** tai **muoto**
- Sinulla on iso, puhdas aineisto
- Mallin sisäistämiseen tarvitaan **kuviot**, ei faktoja
- Esimerkki: Saamaan GPT:n kirjoittamaan Shakespearen tavoin

**Milloin RAG:tä käytetään:**

- Tarvitset **faktatarkkuus** jossa on lainausmerkkejä
- Tietopohjasi muuttuu usein
- Sinulla on yksityisiä/asianomaisia tietoja
- Kustannukset ja yksinkertaisuus
- Esimerkki: Asiakastuki chatbot (yritykseni dokumentit vaihtuvat viikoittain)

**Voitko yhdistää molemmat?** Hienostunut tyyliin, RAG faktoihin.

## RAG vs. Long Context Windows

Modernit LLM:t ylpeilevät valtavilla kontekstiikkunoilla (GPT-4: 128K, Claude: 200K). Miksei vain kaada kaikkia asiakirjoja kontekstiin?

**Pitkän kontekstin ongelmat:**

1. **Kustannukset**: Hinnoittelu vaa'at rahakkeilla - 10-100 dollaria per kysely lisää nopeasti
2. **Latenssi**: 100K:n rahakkeiden käsittely vie aikaa
3. **Eksynyt keskelle**: LLM:t kamppailevat tiedonkäytöstä pitkien kontekstien keskellä
4. **Laimennus**: Asiaankuuluvat tiedot haudataan meluun
5. **Käytännölliset rajat**Et voi sovittaa koko yrityksesi dokumentteja asiayhteyteen

**Kun pitkässä kontekstissa on järkeä:**

- Yksi iso asiakirja (esim. sopimuksen analysointi)
- Kaikki on merkityksellistä (ei tarvitse suodattaa)
- Kustannukset eivät ole ongelma
- Alhainen kyselytilavuus

**Kun RAG:ssä on järkeä:**

- Suuri tietopohja (miljoonaa asiakirjaa)
- Merkityksellisen osajoukon löytäminen
- Suuri kyselymäärä (kustannusasiat)
- Reaaliaikaiset päivitykset tietoon

**Parhaita käytäntöjä:** Käytä RAG:tä valitaksesi olennaisimman sisällön, ja käytä sen jälkeen pitkää kontekstia kyseiselle alaryhmälle.

## RAG vs. Esimerkkien näyttäminen

Harvasanainen yllytys (esimerkkinä nopeassa) on yksinkertainen lähtökohta.

**Esimerkki:**

```
Examples:
Q: What is Docker?
A: Docker is a containerization platform...

Q: How does Kubernetes work?
A: Kubernetes orchestrates containers...

Q: What is my new question?
A: [LLM generates answer]
```

**Rajoitukset:**

- Rajoitettu siihen, mikä sopii kontekstiikkunaan
- Esimerkkien manuaalinen kuratoiminen
- Ei skaalaudu suuriin tietolähteisiin
- Ei semanttista hakua - valitset esimerkkejä manuaalisesti

**Aluekehitys:**

- Löydät automaattisesti parhaat esimerkit (samankaltaisuushaun kautta)
- Skaalat rajattomiin esimerkkeihin (vain LLM:lle lähetetty top K)
- Mukautuu kyselyyn (eri kyselyt hakevat eri esimerkkejä)

Voit ajatella RAG:tä "automatisoituna muutaman laukauksen ärsykkeenä mittakaavassa".

## Hybridihaku: RAG + Perinteinen haku

Voit yhdistää RAG:n perinteiseen täystekstihakuun Reciprocal Rank Fusion (RRF) -sovelluksella.

**Miksi hybridi?**

- **Semanttinen etsintä**: Hyvä käsitteellisiin otteluihin ("terror holding" löytää "poikkeuksenhallinnan")
- **Avainsanahaku**Hyvä tarkoille termeille ("Docker Compose", "Entity Framework")
- **Hybridi**: Paras molemmista maailmoista

```csharp
public async Task<List<SearchResult>> HybridSearchAsync(string query)
{
    // Run both searches in parallel
    var semanticTask = SemanticSearchAsync(query, limit: 20);
    var keywordTask = KeywordSearchAsync(query, limit: 20);

    await Task.WhenAll(semanticTask, keywordTask);

    var semanticResults = await semanticTask;
    var keywordResults = await keywordTask;

    // Combine using Reciprocal Rank Fusion
    return ApplyRRF(semanticResults, keywordResults);
}

private List<SearchResult> ApplyRRF(
    List<SearchResult> list1,
    List<SearchResult> list2,
    int k = 60)
{
    var scores = new Dictionary<string, double>();

    // Score from first list
    for (int i = 0; i < list1.Count; i++)
    {
        var id = list1[i].Id;
        scores[id] = scores.GetValueOrDefault(id, 0) + 1.0 / (k + i + 1);
    }

    // Score from second list
    for (int i = 0; i < list2.Count; i++)
    {
        var id = list2[i].Id;
        scores[id] = scores.GetValueOrDefault(id, 0) + 1.0 / (k + i + 1);
    }

    // Merge and sort by combined score
    var allResults = list1.Concat(list2)
        .GroupBy(r => r.Id)
        .Select(g => g.First())
        .OrderByDescending(r => scores[r.Id])
        .ToList();

    return allResults;
}
```

# Miksi RAG-asiat

Nyt kun ymmärrät, mikä RAG on, mistä se on peräisin ja miten sitä verrataan vaihtoehtoihin, niin miksi sillä on merkitystä:

**1. tekoälyn demokratisointi**

- Et tarvitse 100 000 dollarin hienosäätöbudjettia
- Et tarvitse tiimiä ML-insinöörejä
- Kuka tahansa kehittäjä voi rakentaa RAG-järjestelmiä olemassa olevilla työkaluilla

**2. Käytännöllinen tarkkuus**

- Hallusinaatio on #1 ongelma LLMs tuotannossa
- Aluetukialue ratkaisee sen asettamalla vastaukset oikeisiin asiakirjoihin
- Lainaukset tekevät siitä auditoitavan ja luotettavan

**3. Aina ajan tasalla**

- Perinteinen tekoäly: Juna kerran, tieto jäätyy
- RAG: Päivitä dokumentit, tietopäivitykset välittömästi
- Kriittinen nopeasti liikkuville verkkotunnuksille (tekniikka, uutiset, asetukset)

**4. Yksityisyys ja valvonta**

- Tietosi pysyvät infrastruktuurissasi
- Voidaan ajaa kokonaan paikallisesti (paikalliset upotukset + paikallinen LLM + paikallinen vektori DB)
- OpenAI:lle tai muille pilvipalveluntarjoajille ei lähetetä dataa

**5. Kustannus-hyötysuhde**

- Varastointi on halpaa (penniä per GB)
- Upotus on halpaa (jakaantuminen prosenttia 1000 asiakirjasta)
- Paljon halvempia kuin hienosäätö- tai pitkät konteksti-ikkunat

**6. Monipuoliset sovellukset**

- Semanttinen etsintä (ei LLM:tä tarvita!)
- Q&A-järjestelmät, joissa on lainausmerkkejä
- Sisällyssuositus
- Avustajien kirjoittaminen
- Osaamisen hallinta
- Dokumentoinnin avustajat
- Tutkimusavustajat

# Johtopäätös: Historiasta täytäntöönpanoon

Olemme jäljittäneet RAG:n evoluution:

- **Pre-2010-luku**: Avainsanahaku (merkit, ei merkitys)
- **2010-luku**: Lukeminen ymmärtäminen (tarvitsee oikean kohdan)
- **2017-2020**: Muuntajat ja upotukset (eli → vektorit)
- **2020**: Nykyaikainen aluetukialue (hakekaa + luo)
- **2023-oleskelu**: Tuotantostandardi (hallinointi + kustannukset + yksityisyys)

**Osa 1: Tärkeimmät näkemykset:**

- RAG-alueet eroavat toisistaan **tietovarasto** (vektori DB) alkaen **päättely** (LLM)
- Se ratkaisee hallusinaatio-ongelman asettamalla vastaukset oikeisiin asiakirjoihin
- Se on halvempaa ja joustavampaa kuin hienosäätö
- Se toimii paremmin kuin pitkät olosuhteet suurille tietokannoille
- Se on lähinnä "automatisoitu muutama laukaus saa aikaan mittakaavassa"

**Kolmivaiheinen henkinen malli:**

1. Muuta teksti numeroiksi (embeddings)
2. Etsi vastaavat numerot (vektorihaku)
3. Käytä löytämääsi (näyttö tai syötä LLM: lle)

Kaikki muu on optimointia.

# Jatka osaan 2: Arkkitehtuuri ja sisätilat

Ymmärrät nyt **mitä** RAG on, **miksi** sillä on merkitystä, ja **jossa** Mutta miten se oikeasti toimii konepellin alla?

Sisään **[Osa 2: Arkkitehtuuri ja sisätilat](/blog/rag-architecture)**Sukellamme syvälle teknisiin yksityiskohtiin:

**Täydellinen RAG-putki:**

- Vaihe 1: Indeksointi (tekstinlouhinta, porausstrategiat, upotustuotanto, vektorivarasto)
- Vaihe 2: nouto (pyydykset, samankaltaisuusmittarit, uudelleen ranking)
- Vaihe 3: Generation (pikarakentaminen, LLM-parametrit, jälkikäsittely)

**LLM-sisätilat:**

- Mitkä ovat kuponkeja ja miksi niillä on merkitystä aluetukisuuntaviivojen kannalta?
- KV- välimuisti: Miten LLM:t muistavat kontekstin
- Kontekstiikkunat ja symbolinhallintastrategiat
- Aluetukisuuntaviivojen optimointi nimellistehokkuutta ja kustannuksia varten

**Tekniset syväsukellukset:**

- Vektoritietokannat ja samankaltaisuushakualgoritmit
- Upotusmallit ja normalisointi
- Kontekstin säilyttävät nuuskimisstrategiat
- Käytännöllisiä koodiesimerkkejä C#:ssä

**[Jatka osaan 2: Arkkitehtuuri ja sisätilat →](/blog/rag-architecture)**

Osan 2 jälkeen olet valmis 3. osaan, jossa rakennamme todellisia järjestelmiä, ratkaisemme yhteisiä haasteita ja tutkimme kehittyneitä tekniikoita, kuten HyDE:tä, monivalintaista RAG:tä ja kontekstimaista pakkausta.

## Resurssit

**Peruskirjat:**

- [Hakijasukupolvea osaamisintensiivisille NLP-tehtäville](https://arxiv.org/abs/2005.11401) - Alkuperäinen RAG-lehti
- [Ankkuripassin hakeminen avoimelle verkkokyselyvastaukselle](https://arxiv.org/abs/2004.04906) - DPR (hakusäätiö)
- [Huomio on kaikki, mitä tarvitset](https://arxiv.org/abs/1706.03762) - Muuntajat (kehittävät perustukset)

**Lue lisää:**

- [Miten hermokonekäännös toimii](/blog/how-neural-machine-translation-works) - Ymmärtää tekoälymallit upotusten takana

**Seuraava tässä sarjassa:**

- [Osa 2: Arkkitehtuuri ja sisätilat](/blog/rag-architecture) - Tekninen syväsukellus
- [Osa 3: Aluetuki käytännössä](/blog/rag-practical-applications) - Todellisten järjestelmien rakentaminen

**[Jatka kohtaan 2 →](/blog/rag-architecture)**