Проблема LLM: знания, галлюцинации и контекст

Этот урок объясняет, какие фундаментальные ограничения LLM делают RAG необходимым.

LLM (большая языковая модель) — модель, обученная предсказывать следующий токен по огромному корпусу текста. Она знает только то, что встретила во время обучения.

Четыре стены, в которые упирается чистая LLM

Языковые модели поражают тем, как складно говорят. Но как только нужно ответить про конкретный факт из вашей компании или про вчерашнюю новость, всплывают четыре проблемы.

1. Устаревшие знания (knowledge cutoff)

Модель видела данные до определённой даты — это её cutoff. Всё, что появилось после, для неё не существует. Спросите про релиз, вышедший на прошлой неделе, и модель либо честно скажет, что не знает, либо начнёт фантазировать.

2. Галлюцинации

Модель не хранит факты как база данных — она моделирует вероятности слов. Когда фактов не хватает, она всё равно генерирует правдоподобный текст. Так появляются выдуманные API, несуществующие цитаты и ложные номера статей закона. Текст звучит уверенно, но он неверен.

3. Нет доступа к приватным данным

Внутренняя документация, тикеты поддержки, ваши PDF, база знаний компании — ничего этого в обучающем корпусе не было. Модель в принципе не может знать содержимое ваших файлов.

4. Лимит контекста

У модели есть контекстное окно — сколько токенов она может прочитать за раз. Даже если окно большое, засунуть туда всю корпоративную вики нельзя: это дорого, медленно и качество падает. Нужен способ подавать только релевантное.

Почему «просто дообучить» — не всегда ответ

Кажется логичным: дообучим модель на наших данных. Но дообучение дорогое, требует данных и времени, и оно плохо подходит для фактов, которые часто меняются. Каждое обновление прайса или регламента — новый цикл дообучения. К сравнению вернёмся в отдельном уроке.

Маленькая иллюстрация галлюцинации

Представим «модель», которая просто продолжает фразу по шаблону, не сверяясь с фактами. Она всегда выдаёт уверенный ответ — даже когда данных нет.

facts = {"столица Франции": "Париж"}

def confident_model(question):
    # «модель» всегда отвечает уверенно, даже если не знает
    if question in facts:
        return facts[question]
    return "Точно знаю: это Лион"  # выдумка, поданная уверенно

for q in ["столица Франции", "столица Австралии"]:
    print(q, "->", confident_model(q))

Вывод:

столица Франции -> Париж
столица Австралии -> Точно знаю: это Лион

Второй ответ — галлюцинация: уверенно и неправильно (столица Австралии — Канберра). Реальные LLM сложнее, но механизм тот же: при нехватке знаний модель не молчит, а достраивает правдоподобное. RAG борется ровно с этим — даёт модели реальный источник под рукой.

Итог

  • Чистая LLM ограничена: cutoff, галлюцинации, нет приватных данных, лимит контекста.
  • Галлюцинация — не баг, а следствие того, что модель генерирует вероятный текст, а не сверяется с фактами.
  • Дообучение дорого и плохо подходит для быстро меняющихся фактов.
Проверьте себя
1. Что такое knowledge cutoff у LLM?
AМаксимальная длина ответа модели
BДата, после которой модель не видела данных при обучении
CЛимит на число запросов в минуту
DРазмер словаря токенизатора
2. Почему LLM галлюцинирует?
AОна специально обманывает пользователя
BОна генерирует вероятный текст, а не сверяется с базой фактов
CУ неё закончилась память
DИз-за опечаток в запросе
3. Какая проблема LLM напрямую мешает отвечать по внутренней документации компании?
AЛимит контекста
BОтсутствие приватных данных в обучающем корпусе
CМедленная генерация
DСлишком большой словарь
Поддержать проект