RAG в 2026: retrieval + generation, hosted file search, vector stores, grounded answers, citations и отличие от fine-tuning и long-context-only.
RAG в 2026 полезно понимать не как “векторная база рядом с LLM”, а как runtime-подключение внешних знаний к генерации ответа. Модель не должна отвечать только по pretraining-памяти: она сначала получает релевантный контекст из ваших документов, баз знаний или hosted retrieval layer, а уже потом формирует grounded answer.
Именно поэтому современный RAG уже не сводится к одной самописной схеме embeddings + vector DB + prompt. Сегодня есть как custom retrieval stacks, так и hosted paths вроде vector stores и file_search, где часть retrieval-логики уже управляется платформой.
Обычная LLM отвечает по памяти. RAG сначала даёт ей открыть нужную папку с документами, найти релевантные фрагменты и только потом попросить ответить. Поэтому результат меньше зависит от догадок и лучше привязан к вашим данным.
RAG не равен “засунули в prompt побольше текста”. Если retrieval плохой, чанки шумные или в контекст попало слишком много лишнего, модель будет grounded в мусоре, а не в полезных данных.
Вопрос: «Какой срок возврата электроники?»
Retrieved context:
- «Возврат электроники возможен в течение 7 дней с момента покупки»
- «Для оформления возврата нужен чек или номер заказа»
Ответ модели
Электронику можно вернуть в течение 7 дней с момента покупки. Для оформления возврата понадобится чек или номер заказа.
Если вы строите custom stack, для этого используют embeddings и vector database. Если идёте в hosted path, платформа может сама chunk-ить, embed-ить и индексировать файлы в vector_store.
from openai import OpenAI
client = OpenAI()
vector_store = client.vector_stores.create(name="Support FAQ")
client.vector_stores.files.upload_and_poll(
vector_store_id=vector_store.id,
file=open("faq.txt", "rb"),
)
results = client.vector_stores.search(
vector_store_id=vector_store.id,
query="Какой срок возврата электроники?",
)
formatted = "\n\n".join(
part.text
for item in results.data
for part in item.content
)
response = client.responses.create(
model="gpt-5-mini",
input=[
{
"role": "developer",
"content": "Отвечай только по найденным источникам. Если ответа нет, так и скажи.",
},
{
"role": "user",
"content": f"Источники:\n{formatted}\n\nВопрос: Какой срок возврата электроники?",
},
],
)
print(response.output_text)
Если нужен ещё более managed path, можно дать модели file_search tool и подключить vector_store_ids прямо в Responses API.