Одна из ключевых проблем LLM в 2024-2025 годах заключается в том, что она больше про "поболтать". Задача классического ИИ не ответить вам, что он чего-то незнает, а что-то ответить, чтобы качественно и вовлеченно поддержать диалог. Такая критика современных LLM (Large Language Models) с нашей стороны справедлива. Давайте разберём эту проблему подробнее и обсудим её аспекты:
1. Корень проблемы:
- LLM (большие языковые модели) оптимизированы для генерации правдоподобного текста, а не для поиска истины.
- Цель ИИ с которым вы "ведете диалог" — продолжить диалог максимально естественно, а не сказать "не знаю".
- Нет чёткого разделения между знанием и вымыслом внутри архитектуры базовых моделей.
2. Почему это происходит:
- Обучающие данные содержат миллионы примеров, где люди уверенно рассуждают, даже если ошибаются.
- Нет механизмов количественной оценки уверенности модели.
- Тренировка на предсказании следующего токена (буквально этим занимается ИИ когда генерит вам текст внутри ветви диалога / чата) не учит оценивать достоверность.
3. Последствия:
- Проблема "галлюцинаций" — модель выдаёт ложную информацию с уверенностью.
- Пользователи переоценивают возможности ИИ.
- Риск распространения дезинформации.
4. Возможные решения (которые разрабатываются):
- Внедрение механизмов оценки уверенности.
- Явное разделение "знаю/не знаю" в архитектуре.
- Использование внешних баз знаний для проверки.
- Системы ретрайвала (поиска актуальной информации).
5. Философский аспект:
Модель вообще "не знает" в человеческом понимании — она лишь предсказывает вероятности. Вопрос: должно ли ИИ имитировать человеческое незнание ("я не уверен" / возможно.. ) или нужен принципиально иной подход ("указанные сведения отсутствуют / прерывание диалога..")?
Пример диалога вызовом галлюцинации:
Пользователь: "Кто был 15-м президентом Марса?".
Плохой ответ: "15-м президентом Марса был Иван Иванов в 2150 году" (очевидный вымысел).
Лучший ответ: "Марс не имеет президентов, так как не является живой планетой или независимым государством с такой формой правления"
/// Далее рассматриваем подробнее, для специалистов в области ИИ:
Обучение модели говорить «не знаю» — это комплексная задача, требующая изменений на этапах обучения, инференса и интеграции внешних механизмов. Вот основные технические подходы:
1. Доработка данных обучения
- Явная разметка:
Включать в датасет примеры, где правильный ответ — «не знаю» (например, на абсурдные или непроверяемые запросы).
{"question": "Сколько весит мысль?", "answer": "Не знаю, это научно не измерено."}
- Контроль уверенности:
Аннотировать ответы метаданными о достоверности (например, «известный факт», «предположение», «нет данных»).
2. Изменение архитектуры модели
- Добавление токена уверенности:
Ввести специальный токен (например,<UNCERTAIN>) и обучать модель его использовать при недостатке информации. - Двухэтапная генерация:
- Модель сначала оценивает, может ли ответить (бинарный классификатор).
- Только при уверенности генерирует ответ.
3. Постобработка и калибровка
- Порог уверенности:
Рассчитывать вероятность токенов (logits) и отклонять ответы, если максимальная вероятность ниже порога (например,< 0.7).
if max(probs) < threshold:
return "Не знаю"
- Калибровка модели:
Использовать методы вроде Temperature Scaling или Platt Scaling, чтобы вероятности отражали реальную уверенность.
4. Интеграция внешних систем
- RAG + валидация:
Если модель не находит информацию в прикрепленных документах (через Retrieval-Augmented Generation), возвращает «не знаю». - Факт-чекинг:
Сверять ответы с внешними базами знаний (например, Wikidata) перед генерацией.
5. Правила на уровне промптов
- Жесткие инструкции:
В системный промпт добавить требования:
"Если информация отсутствует или недостоверна, говори 'Не знаю'. Не выдумывай факты."
- Few-shot learning:
Показать модели примеры корректных отказов:
Вопрос: "Кто изобрел время?"
Ответ: "Не знаю, время — это абстрактное понятие, его не изобретали."
6. Оценка и обратная связь
- Human-in-the-loop:
Разметка ошибок, где модель должна была сказать «не знаю» (например, через RLHF). - Метрики:
Отслеживать Precision@K (доля правильных ответов среди данных) и Rate of Abstention (частота отказов).
Пример реализации (псевдокод)
def generate_answer(question, threshold=0.8):
documents = retrieve_documents(question) # Поиск в RAG
if not documents:
return "Не знаю"
probs = model.calculate_confidences(question, documents)
if max(probs) < threshold:
return "Не уверен в ответе"
return model.generate(question, context=documents)
Проблемы:
- Ложные отказы: Может пропускать корректные ответы из-за заниженного порога.
- Контекстная зависимость: В диалоге сложно определить границы «незнания».
- Доверие пользователей: Частые «не знаю» могут раздражать (баланс между честностью и полезностью).
Для еще более глубокого разбора советуем изучить конкретные архитектуры, например, Meta’s Atlas или Google’s SIDE, где подобное решение реализовано.








