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 – обычно про порно): борьба с нежелательным содержимым. Система определяет заблокировать ли запрос вообще или как-то его переформулировать в соответствии с правилами “сообщества” и законодательством. Аналогично проверка сгенерированного ответа.
- борьба с галлюцинациями: перепроверяет является ли ответ модели адекватным или нет (обычно с помощью другой модели).
Понятно, что обертки добавляют задержки и стоимость.