Коли-небудь шукали "подорожене керівництво" і нічого не знайшли, навіть якщо є стаття про "виставлення у виробництво"? RAG (Retrival- Augmented Generation) вирішує це за допомогою розуміння значення, а не лише ключових слів. Ця серія показує вам, як виникає RAG, як вона працює під каптуром і як будувати системи виробництва. Від семантичного пошуку до AI- A& з applicationsall з прикладами роботи C #.
Навігація: Це перша частина серії "ПАГ" (Retrieval-Augaled Generation):
RAG (Retrival-Augmented Generation) було розроблено для того, щоб зробити AI розумніше ♫ LLM доступ до інформації, якою вони не були навчені. Але ось що цікаво: технологія відкриває можливості далеко за межами ШІ chatbots.
Подвійна природа. RAG може допомогти клієнтам (кращого пошуку, точніших відповідей з посиланнями) або використати їх (рекомендації щодо маніпуляції, приховування негативних відгуків, трансплантації контенту). Різниця полягає не в технології, а в семантичному пошуку, що допомагає користувачам знайти те, що їм насправді потрібно?
Ось вам правда про РСГ: Звучить лячно. Вбудовування векторів? Моделі перетворення? Кешів KV? Але, як і у всьому іншому програмному забезпеченні, йдеться лише про розуміння того, як це працює. Вам не потрібно знати математику за архітектурою трансформатора більше, ніж вам потрібно зрозуміти збір для написання C#.
RAG у три кроки:
Решта - це реалізація деталей.
У цій серії статей показано, як будувати системи RAG з кодом, що працює на C#. Без ручної обробки. Без припущень. Тільки елементи і спосіб їх розташування.
Чого ви навчитеся з цієї серії статей:
Пізніше я також покажу вам, як будувати цілі системи RAP, зокрема:
Покоління, отримане за умови отримання: Знайдіть відповідну інформацію і скористайтеся нею.
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
Без RAG: Користувач запитує → LLM здогадається з пам' яті → може галюцинувати
З RAG: Користувач запитує → Знайти відповідні документи → Відповіді LLM за допомогою цих документів → на основі
// 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
Прозорість ключа: Відокремлювати сховище знань (пошук) від логіки (LM). Оновити ваші документи, пошук залишиться поточним. Не потрібно повторення.
Розуміння цієї історії допомагає вам зрозуміти, чому RAG сконструйований так, як він є, і які проблеми він вирішує.
Пошук за ключовими словами:
Проблема: Відповідні символи, не означаєПошук "матиме оркестрування" і ви не знайдете "Дукер Рурм," якщо не побачите точних слів. Вони могли працювати з помилками, але не семантичними.
Watson (IBM, 2011):
Читання прикладів розуміння:
Перетворення (2017): "Увага - це все, що вам потрібно"
BERT (2008):
GPT- 2/ 3 (209/2020):
Відображення вектора за дзижчею:
BART (Facebook AI, жовтень 2019):
M2M- 100 (Facebook AI, жовтень 2020 року):
Приклад реального світу: Мій Інструмент для перекладу нейронних машин Використовуйте BART як модель зворотного перекладу, якщо основні послуги недоступні, показуючи, як ці моделі трансформаторів стали практичними будівельними блоками для виробничих систем.
Похмура газета " (англ.).Покоління, присвячене отриманню завдань NLP для інтеграції знань" Патрік Льюїс et al. (Дослідження Facebook AI) формально представив РАГ, будуючи прямо на BART:
Що вони об'єднали:
Результати: RAG-системи вийшли з ладу набагато більші моделі у завданнях, що впливають на пізнання, і водночас були ефективнішими та актуальнішими. Ви могли б оновити базу знань без повторного тренування моделі.
ChatGPT, GPT- 4 та Клод зробили RAG важливим:
Сьогодні (2024-25): RAG - це фактичний стандарт для систем штучного інтелекту виробництва, які потребують точності та перевірки.
Перед тим, як зануритися глибоко в технічні деталі (які ми розглянемо у частині 2), давайте зрозуміємо робочий процес високого рівня.
Система RAG працює у трьох фазах:
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
Що відбувається:
Концепція ключа: Подібні значення утворюють подібні вектори, так що " місткість докера " і "вміщаюча платформа" стають ближчими разом у векторному просторі.
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
Що відбувається:
Чому це працює: "Як я можу розкривати контейнери?" (запит) семантично подібний до шматків про докерів, навіть якщо вони відрізняються.
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
Що відбувається:
Магія: LLM не може галюцинувати факти, яких немає в контексті. Він може лише синтезувати і пояснювати те, що надано.
Давайте прослідкуємо запит через систему:
Запит користувача: "Як я буду користуватися Docker Compose?"
Крок 1 - Отримання:
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)
Крок 2 - Створення:
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]..."
Результат: Точна відповідь з неявними посиланнями з вашої документації.
Щоб зрозуміти, коли використовувати RAG (і якщо ні), потрібно порівняти його з варіантами.
Дівка-ТунхіллCity in Hawaii USA (optional, probably does not need a translation) |--------|-----|-------------| | Оновлення знань ♪ (просто оновлює базу знань) * * * | Вартість ♫ далі (сторінка + Вбудовування) } Висока (час тренування GPU) | Точність дріт у виходах з джерел ♪Can chopucinate} | Налаштування Перед нами - центральна модель. | З' єднання з поясненням ♪GAGE (скан = джерельні джерела)} − низ (чорний квадратик) ♪ | Найкраще для }Мід-інтентивні/медіативна адаптація}
Коли використовувати Коротке налаштування:
При використанні RAG:
Можете об'єднати обох? Так! Умовне налаштування стилю, RAG з фактами.
У сучасних LLM можна бачити величезні контекстні вікна (GPT- 4: 128K жетонів, Claw: 200K- маркерів). Чому б просто не викинути всі ваші документи у контекст?
Проблеми з довгим контекстом:
Коли довгий контекст має сенс:
Коли RAG має сенс:
Найкраща вправа: Скористайтеся RAG для вибору найвідповіднішого вмісту, а потім скористайтеся довгостроковим контекстом для цієї підмножини.
Вибір декількох результатів (наведення прикладів з командного рядка) є простим базовим рядком.
Запит прикладу:
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]
Обмеження:
Покращення RAG:
Ви можете думати про РАГ як про "автоматизовану незначну кількість збігів на шкалі."
Ви можете комбінувати RAG з традиційним повнотекстовим пошуком за допомогою Reciprocal Rank Fusion (RRF).
Чому гібрид?
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;
}
Тепер, коли ви розумієте, що таке РАГ, звідки він походить, і як він співвідноситься з альтернативами, ось чому це важливо:
1. демократизація комп' ютерного гравця
Практична точність
3. Завжди вгору- на- Date
4) Конфіденційність і контроль
5. Коштовний рівень
6. Універсальні програми
Ми дослідили еволюцію РАГ:
Ключові думки з частини 1:
Психічна модель трьох кроків:
Все інше оптимізоване.
Тепер ви розумієте що RAG - це, чому це має значення, і where Але як він працює під капотом?
Вхід **Частина 2: Архітектура і внутрішні властивості RAG**Ми занурюємось глибоко в технічні деталі.
Повнофункціональний канал RUG:
Внутрішні елементи LLM:
Технічні занурення:
Продовжити до частини 2: архітектура і внутрішні властивості →
Після другої частини Ви будете готові до створення реальних систем, вирішення спільних викликів, та дослідження таких складних технологій, як HyDE, мультиquery RAG, і контекстуального стиснення.
Фундаментальні папери:
Подальше читання:
Далі у цій серії:
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.