RAG vs CAG vs MCP vs Fine tune для LLM

LLM (Large language model) – общее название для моделей типа ChatGPT или GigaChat.

Они хорошо развиваются, умеют на что-то отвечать, но присутствует 2 проблемы:

  • достаточно редкое обновление (реже раза в год?)
  • далеко не все знания мира в них, тем более, если нужно использовать какие-то непубличные знания

Так приходим к необходимости передавать какие-то знания моделям. Для этого существует несколько подходов:

  • просто “руками” в запрос добавить (например, загрузить текстовый документ и сказать что-то с ним сделать)
  • RAG (Retrieval Augmented Generation) – делаем прослойку, которая улучшает запрос, добавляя автоматически данные из некоторой БД. Подробнее в следующей заметке.
  • Fine tune – собираем данные и дообучаем модель на ней. Подходит только для локальных моделей, облачные как правило нельзя дообучать.
  • CAG (Cache-Augmented Generation) – аналог fine tune для облачных моделей: у них большой контекстное окно, туда загружаются все подготовленные данные и сохраняются (“кешируются”). Это как длинный запрос, но его постоянно руками посылать не нужно и он уже распарсен.
  • MCP (Model Context Protocol) – предоставляем модели возможность вызывать внешние функции. Например, калькулятор или получить курс валюты актуальный. Таким образом можно “скармливать” необходимые данные. Как пример https://context7.com/ : в запросе добавляется “Use context7”, а модель сама получает актуальную информацию о необходимом фреймворке (апи, примеры).

Что и как используется:

  • “руками”: когда разовая задача или все данные помещаются в контекст
  • CAG: все данные помещаются в контекст и задача частая для оптимизации затрат
  • RAG: уже какое-то количество систем построено, но, как по мне, MCP выглядит лучше
  • Fine tune: используется чаще всего для изображений (обучить распознавать какие-то конкретные новые классы объектов (например, определять по листьям точный тип растения) или генерировать изображения с определенными объектами (те же авататары, например) ). В LLM может так же использоваться, например, чтобы обучить определенному стилю общения, но не слишком популярно.
  • MCP: актуальная замена RAG, когда какие-то непубличные данные собраны в некоторую БД, она не помещается в контекст и из-за этого нужно уметь выбирать часть данных, а не все, чтобы модель их могла использовать. С обычными локальными LLM (где-то 14-24b) работает плохо, так что перспективно, но не универсально пока что.

Есть еще класс систем-оберток над LLM:

  • анонимизаторы: задача убрать персональные и другие чувствительные данные при передаче в облачные LLM. Аналогично ответ деанонимизировать: вместо ИМЯ1 подставить опять конкретное имя.
  • NSFW (not suitable for work – обычно про порно): борьба с нежелательным содержимым. Система определяет заблокировать ли запрос вообще или как-то его переформулировать в соответствии с правилами “сообщества” и законодательством. Аналогично проверка сгенерированного ответа.
  • борьба с галлюцинациями: перепроверяет является ли ответ модели адекватным или нет (обычно с помощью другой модели).

Понятно, что обертки добавляют задержки и стоимость.