Эмбеддинги и RAG в 2026: от теории к рабочему API для разработчиков
Эмбеддинги (embeddings) и RAG (Retrieval Augmented Generation) — гайд для разработчиков 2026. Что это, как работает, цена через API в рублях, примеры на Python.
Эмбеддинги и RAG в 2026: от теории к рабочему API для разработчиков
Эмбеддинги и RAG — две связанные техники, которые в 2026 году стали стандартом для построения «умных» приложений с LLM. Без них любой production-grade чат-бот, поиск или ассистент работает плохо.
В этом гайде:
- Что такое эмбеддинги простыми словами
- Что такое RAG (Retrieval Augmented Generation) и зачем оно
- Как использовать эмбеддинги через API в России без VPN
- Сравнение моделей (text-embedding-3-small, large, ada-002, multilingual)
- Цены в рублях за 1M токенов
- Пример простой RAG-системы на Python (100 строк)
- Когда RAG избыточен (и что использовать вместо)
Что такое эмбеддинги (embeddings)
Эмбеддинг — это математическое представление текста в виде вектора чисел. Пример:
"Кошка сидит на крыше" → [0.012, -0.034, 0.567, ..., 0.089]
(вектор из 1536 чисел)
Главное свойство: близкие по смыслу тексты дают близкие векторы. Если вы посчитаете расстояние (косинусное сходство) между «Кошка сидит на крыше» и «Кот лежит на коньке», оно будет маленьким (~0.3). А между «Кошка сидит на крыше» и «Курс рубля к доллару» — большим (~0.9).
Это позволяет:
- Семантический поиск — найти статьи похожие на запрос (не по точным словам, а по смыслу)
- Кластеризация — сгруппировать схожие документы
- Рекомендации — найти товары/контент похожие на те что юзер лайкнул
- RAG — найти релевантные куски документации для ответа на вопрос
Что такое RAG
RAG = Retrieval Augmented Generation. Это паттерн использования LLM: «не давай модели ответить из головы — найди релевантный контекст из ваших данных и подсунь его модели».
Без RAG (плохо):
# Юзер: "Каков лимит API на тарифе Pro в RubikBot?"
response = openai.chat.completions.create(
model="gpt-5",
messages=[{"role": "user", "content": "Каков лимит API на тарифе Pro в RubikBot?"}]
)
# Ответ: "Не могу ответить, у меня нет информации о ценах RubikBot..."
# (или галлюцинация — "Лимит 1000 запросов" хотя на самом деле 120)
С RAG (правильно):
# 1. Эмбеддинг вопроса юзера
question_embedding = embed("Каков лимит API на тарифе Pro в RubikBot?")
# 2. Поиск релевантных кусков документации (vector search)
relevant_docs = vector_db.search(question_embedding, k=3)
# Возвращает 3 наиболее похожих документа
# 3. LLM генерирует ответ С этим контекстом
context = "\n".join(d.text for d in relevant_docs)
response = openai.chat.completions.create(
model="gpt-5",
messages=[
{"role": "system", "content": f"Контекст:\n{context}\n\nОтвечай только на основе контекста."},
{"role": "user", "content": "Каков лимит API на тарифе Pro в RubikBot?"}
]
)
# Ответ: "На тарифе Pro лимит API 120 RPM" (точно из документации)
Преимущества RAG
- Точность — модель не выдумывает, отвечает на основе ваших данных
- Свежесть — модель обучена на 2024-2025, но через RAG может ответить про 2026 события
- Конфиденциальность — ваши данные не уходят в обучающий датасет
- Дешевизна vs fine-tuning — RAG в 10-100 раз дешевле чем дообучать модель
Эмбеддинги модели в RubikBot
В RubikBot доступны 3 модели от OpenAI для эмбеддингов:
| Модель | Default dim | Max dim | $/1M tokens | ~₽/1M tokens (95₽/$, 30% markup) |
|---|---|---|---|---|
| text-embedding-3-small | 1536 | 1536 | $0.02 | ~4.75 ₽ |
| text-embedding-3-large | 3072 | 3072 | $0.13 | ~30.88 ₽ |
| text-embedding-ada-002 | 1536 | 1536 (fixed) | $0.10 | ~23.75 ₽ |
Какую выбрать?
- text-embedding-3-small (default рекомендация) — лучшее качество для большинства задач, цена минимальная. Берите это.
- text-embedding-3-large — заметно лучше для тонких семантических различий (например, медицинские, юридические тексты). В 6 раз дороже.
- text-embedding-ada-002 — старая модель 2022, оставлена для backward compat. Не рекомендуем для новых проектов.
Что такое dimensions параметр?
text-embedding-3-* поддерживают сокращение векторов для экономии места в БД:
emb = client.embeddings.create(
model="text-embedding-3-small",
input="text",
dimensions=512 # вместо 1536 default — урезать до 512
)
# Качество немного падает, но БД сжимается в 3 раза
Реалистично: для большинства задач достаточно 512-768. Полные 1536 нужны для очень точных задач.
Пример простой RAG-системы
100 строк Python, индексирует документы в локальный SQLite (без отдельной vector DB), отвечает на вопросы через GPT-5:
import os
import sqlite3
import json
import numpy as np
from openai import OpenAI
client = OpenAI(
api_key=os.environ["RUBIKBOT_API_KEY"],
base_url="https://rubikbot.com/api/v1"
)
# 1. Setup БД
db = sqlite3.connect("knowledge.db")
db.execute("""
CREATE TABLE IF NOT EXISTS docs (
id INTEGER PRIMARY KEY,
text TEXT,
embedding TEXT -- JSON-encoded list of floats
)
""")
def embed(text: str) -> list[float]:
r = client.embeddings.create(model="text-embedding-3-small", input=text)
return r.data[0].embedding
# 2. Индексируем документы
def index_doc(text: str):
emb = embed(text)
db.execute(
"INSERT INTO docs (text, embedding) VALUES (?, ?)",
(text, json.dumps(emb))
)
db.commit()
# 3. Поиск через cosine similarity
def search(query: str, k=3) -> list[str]:
q_emb = np.array(embed(query))
rows = db.execute("SELECT text, embedding FROM docs").fetchall()
scored = []
for text, emb_json in rows:
emb = np.array(json.loads(emb_json))
# Cosine similarity = dot product / norms
sim = float(np.dot(q_emb, emb) / (np.linalg.norm(q_emb) * np.linalg.norm(emb)))
scored.append((sim, text))
scored.sort(reverse=True)
return [text for _, text in scored[:k]]
# 4. RAG-ответ
def rag_answer(question: str) -> str:
relevant = search(question, k=3)
context = "\n\n".join(relevant)
response = client.chat.completions.create(
model="gpt-5-mini",
messages=[
{"role": "system", "content": f"Контекст:\n{context}\n\nОтвечай только из контекста. Если не знаешь — скажи."},
{"role": "user", "content": question}
]
)
return response.choices[0].message.content
# 5. Демо
docs = [
"RubikBot — российская платформа единого доступа к нейросетям.",
"На тарифе Pro 990 ₽/мес лимит API 120 запросов в минуту.",
"Все цены прозрачные: курс ЦБ × наценка 30%.",
"Регистрация бесплатна, при подтверждении email даём 50 ₽ бонусом.",
]
for d in docs:
index_doc(d)
print(rag_answer("Сколько стоит Pro подписка?"))
# → "Pro подписка стоит 990 ₽ в месяц..."
print(rag_answer("Есть ли бесплатный старт?"))
# → "Да, при регистрации даётся 50 ₽ бонусом..."
В production используйте specialized vector DB: Qdrant (российский, рекомендуем), Pinecone, Weaviate, pgvector.
Когда RAG избыточен
Не нужно RAG, если:
- Документы помещаются в context window модели (Claude Sonnet 4.6 = 1M tokens — это десятки книг). Просто передавайте всё в контекст.
- Запрос не требует ваших данных (общие вопросы, креатив, перевод).
- Документация меняется редко и можно сделать fine-tuning один раз.
Нужно RAG, если:
- Объём документов >>> context window (тысячи документов, террабайты текста).
- Данные часто обновляются (новости, регламенты, knowledge base продукта).
- Каждый ответ должен быть строго на основе конкретных документов (compliance, legal).
- Нужна цитата источника (с RAG вы знаете какие именно документы использовались).
Бенчмарки моделей
На MTEB (Multilingual Text Embedding Benchmark) 2026:
| Модель | MTEB English | MTEB Russian | Speed (texts/sec) |
|---|---|---|---|
| text-embedding-3-small | 64.6 | 60.1 | 600 |
| text-embedding-3-large | 67.2 | 63.4 | 250 |
| text-embedding-ada-002 | 60.8 | 56.2 | 800 |
| YandexGPT embeddings (если доступны) | — | ~62 | 400 |
Для русского language text-embedding-3-small — лучший баланс качество/цена/скорость.
Сравнение vector DB для production
| DB | Открытый код | Self-host | Cloud | Цена cloud (1M vectors) |
|---|---|---|---|---|
| Qdrant (РФ-команда) | ✓ MIT | да | да | $40/мес |
| Weaviate | ✓ BSD | да | да | $60/мес |
| Pinecone | нет | нет | только cloud | $70/мес |
| pgvector (Postgres extension) | ✓ | да | через managed Postgres | бесплатно |
| Chroma | ✓ | да | да | $30/мес |
| Milvus | ✓ | да | да (Zilliz) | $50/мес |
Рекомендация для российских проектов:
- Прототип: pgvector (через ваш существующий Postgres)
- Production: Qdrant (российская команда, MIT, есть managed cloud в РФ)
- Энтерпрайз: Milvus или Weaviate для специфических use-cases
FAQ
См. блок FAQ ниже.
Попробуйте
Эмбеддинги через API → Открыть playground → Тарифы →
50 ₽ welcome bonus = индексация ~10 тыс. документов через text-embedding-3-small.
Частые вопросы
Эмбеддинги и RAG — это одно и то же?+
Какая модель эмбеддингов лучшая в 2026?+
Можно ли RAG без отдельной vector DB?+
RAG vs fine-tuning — что выбрать?+
Можно ли получить эмбеддинги для русского текста?+
Автор: Команда RubikBot