RAG или MCP: в чём разница и что выбрать для доступа модели к данным
RAG кладёт найденные куски в промпт, MCP даёт модели инструменты, которые она вызывает сама. Разбираем, чем они отличаются, сколько стоит каждый и как их сочетать.
6 мин · · сравнение · агенты
«RAG или MCP» звучит как выбор из двух конкурирующих технологий, но это сравнение разных уровней. RAG это схема: перед вопросом система сама находит нужные куски данных и кладёт их в запрос. MCP это протокол, по которому модели подключают инструменты: модель сама решает, какой инструмент вызвать и с какими аргументами. Ниже разбираем, чем отличаются эти подходы к доступу модели к данным, сколько стоит каждый и когда они работают вместе.
Что делает RAG
Retrieval-Augmented Generation устроен в три шага:
- Приложение получает вопрос пользователя.
- Приложение само ищет фрагменты в вашей базе (полнотекстовый или векторный поиск, подробнее в статье RAG-пайплайн на своих данных).
- Найденное кладётся в запрос, модель отвечает за один вызов.
Решение «что искать» принимает код приложения, а не модель. Вызов один, поведение предсказуемо.
Что делает MCP
MCP (Model Context Protocol) стандартизирует подключение внешних возможностей: сервер MCP предлагает набор инструментов (и другие сущности вроде ресурсов), а клиент, например Claude Code или ваше приложение, передаёт их описания модели. Модель в ходе диалога сама просит вызвать инструмент, клиент вызывает его и возвращает результат, модель продолжает. Это цикл из нескольких запросов. Общая картина в статье что такое MCP-сервер.
Важно, что MCP не является способом поиска. Это способ подключить функцию. Функция может искать в базе знаний, выполнять SQL, читать тикеты в трекере или создавать файл.
Главные отличия
| Критерий | RAG | MCP |
|---|---|---|
| Кто решает, какие данные нужны | код приложения | модель |
| Число вызовов модели на вопрос | один | несколько, цикл |
| Задержка | меньше | больше из-за шагов |
| Стоимость вопроса | предсказуема | зависит от числа шагов |
| Данные | текстовые куски из статичной базы | живые системы, API, БД |
| Действия (записать, создать) | нет, только чтение | да, если инструмент это позволяет |
| Контроль | полный | зависит от формулировки инструментов |
| Источник для цитирования | известен | известен, если инструмент возвращает ссылки |
Сколько стоит каждый вариант
Посчитаем один вопрос. Допущения: описания инструментов и системный промпт занимают 1 500 токенов, вопрос 500, результат каждого вызова инструмента 1 200 токенов, вызов инструмента с аргументами 150 выходных токенов, финальный ответ 500.
RAG. Один вызов: вход 3 000 токенов (пять фрагментов по 500 и вопрос 500), выход 500.
MCP, цикл из четырёх вызовов. История растёт: после каждого шага к ней добавляется вызов инструмента (150 токенов) и его результат (1 200).
| Вызов | Вход | Выход |
|---|---|---|
| 1 | 2 000 | 150 |
| 2 | 2 000 + 150 + 1 200 = 3 350 | 150 |
| 3 | 3 350 + 1 350 = 4 700 | 150 |
| 4 | 4 700 + 1 350 = 6 050 | 500 |
| Итого | 16 100 | 950 |
Цены Zukko на 18 октября 2026 за 1M токенов, без кэша.
claude-sonnet-5-5(вход 0.4, выход 2). RAG: 0,003 × 0,4 + 0,0005 × 2 = 0,0012 + 0,001 = $0.0022. MCP: 0,0161 × 0,4 + 0,00095 × 2 = 0,00644 + 0,0019 = $0.00834.deepseek-v4.1-flash(вход 0.013, выход 0.038). RAG: 0,003 × 0,013 + 0,0005 × 0,038 = 0,000039 + 0,000019 = $0.000058. MCP: 0,0161 × 0,013 + 0,00095 × 0,038 = 0,000209 + 0,000036 = $0.000245.
На 10 000 вопросов в месяц с claude-sonnet-5-5: RAG 10 000 × 0,0022 = $22, MCP 10 000 × 0,00834 = $83.4. Цикл стоит дороже потому, что один и тот же префикс отправляется на каждом шаге заново. Для Claude в Anthropic-формате (/v1/messages) повторяющееся начало диалога читается из кэша по более низкой цене, и разрыв сокращается; в OpenAI-формате Claude идёт целиком по цене входа. Пошаговый расчёт с кэшем в статье о стоимости агента. Допущения условные: число шагов у MCP зависит от модели и инструментов, а описания 30 инструментов легко займут больше 1 500 токенов.
Один код для обоих подходов
Поисковую функцию можно написать один раз и использовать двояко. Вот заготовка для RAG:
from openai import OpenAI
client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_ваш_ключ")
def search_docs(query: str, k: int = 5) -> list[str]:
... # ваш поиск: SQLite FTS5, pgvector, что угодно
def answer_with_rag(question: str) -> str:
chunks = search_docs(question)
context = "\n\n".join(chunks)
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[
{"role": "system", "content": "Отвечай только по фрагментам. Если ответа нет, скажи об этом."},
{"role": "user", "content": f"Фрагменты:\n{context}\n\nВопрос: {question}"},
],
)
return resp.choices[0].message.contentИ та же функция как MCP-инструмент. Пример на официальном Python SDK для MCP (проверьте импорты и запуск по документации SDK вашей версии):
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("docs")
@mcp.tool()
def search_docs(query: str) -> str:
"""Поиск по базе документов компании. Возвращает до 5 фрагментов."""
return "\n\n".join(search_docs_impl(query))
if __name__ == "__main__":
mcp.run()Здесь search_docs_impl это ваша реализация поиска. Сервер подключается к Claude Code или другому клиенту с поддержкой MCP по инструкции этого клиента.
Если вы строите агента не через MCP, а напрямую через API, ту же функцию можно описать как инструмент в формате tool use: см. полный цикл вызова инструментов.
Когда что выбирать
RAG подходит, если:
- данные это относительно стабильный набор документов: регламенты, справка, база знаний;
- каждый вопрос требует одного поиска, а не цепочки действий;
- важны предсказуемая цена и задержка;
- нужно показать пользователю источник.
MCP подходит, если:
- данные живые: заказы, тикеты, остатки, метрики, их нельзя заранее разрезать на фрагменты;
- вопрос требует нескольких шагов: найти клиента, получить его заказы, посчитать сумму;
- модели нужно что-то сделать, а не только прочитать: создать задачу, отправить запрос;
- инструментов много, и заранее неизвестно, какой понадобится.
Сочетание. Часто работает такая схема: поиск по базе знаний оформлен как один MCP-инструмент, и модель вызывает его сама, когда считает нужным. Данные остаются в RAG, а MCP выступает способом подключения. Если ответ всегда нужен из базы знаний, надёжнее выполнять поиск в коде всегда, не оставляя это на усмотрение модели.
Подводные камни MCP
- Описания инструментов расходуют контекст. Каждый подключённый сервер добавляет описания в каждый запрос; отключайте ненужные.
- Доверие к результатам инструментов. Текст, который вернул инструмент (веб-страница, тикет, письмо), может содержать инструкции, написанные не вами. Не давайте агенту права, которые не готовы потерять, и ограничивайте действия записи.
- Расход. Цикл без ограничения шагов может тратить много: поставьте на ключ дневной лимит в кабинете и ограничьте число шагов в коде.
Частые вопросы
RAG и MCP это одно и то же?
Нет. RAG это схема «найти и подставить в промпт», MCP это протокол подключения инструментов. Поиск для RAG можно предоставить через MCP, но можно обойтись без него.
Что дешевле?
Для одного вопроса обычно RAG: один вызов и небольшой вход. Цикл MCP отправляет историю на каждом шаге, поэтому стоит дороже, хотя кэш это смягчает. В расчёте выше $0.0022 против $0.00834 на claude-sonnet-5-5.
Можно ли заменить RAG на MCP?
Для живых данных да, для большой статичной базы знаний обычно нет: модель будет тратить шаги на поиск. Практичнее оставить поиск в коде или упаковать его в один инструмент.
Какие модели Zukko подходят для MCP?
Любые, которые поддерживают вызов инструментов в вашем клиенте. Проверьте выбранную модель на нескольких реальных вопросах: цена, контекст и индекс силы в каталоге помогают выбрать кандидатов, а проверка на своих задачах решает.
Чтобы попробовать, создайте ключ в кабинете Zukko и запустите пример с RAG; затем добавьте инструмент.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Claude Desktop или Claude Code: в чём разница и что выбратьДесктопное приложение и консольный агент делят один движок, но входят в систему по-разному. Сравниваем сценарии, доступ к моделям и стоимость.
- opencode или Codex CLI: какой консольный агент выбратьОба агента открыты, оба читают AGENTS.md и работают со своим API. Различия в провайдерах, режимах и в том, как считается кэш. Сравниваем и считаем сессию.
- Function calling или MCP: в чём разница и что выбрать для агентаЭто не два конкурирующих способа, а два уровня одной задачи. Разбираем, кто описывает инструмент, кто его запускает и когда нужен MCP.
- Claude Code локально: что реально работает с локальной модельюClaude Code можно запустить на модели, которая работает на вашем компьютере. Разбираем, как это настроить, чем это отличается от облачных моделей и когда считать деньги, а не железо.