3,583 papers
arXiv:2512.08213 73 8 дек. 2025 г. FREE

Package Hallucination: LLM выдумывают несуществующие библиотеки

КЛЮЧЕВАЯ СУТЬ
LLM выдумывают несуществующие библиотеки при генерации команд установки. Исследование показало: облегчённые модели (квантованные — сжатые для экономии памяти) галлюцинируют до 98% пакетов против 40-50% у оригинальных. Фишка: раздели генерацию и проверку в одном промпте. Попроси не просто предложи пакет, а дай ссылку на репозиторий и подтверди существование. Модель переключается в режим верификации — снижается процент галлюцинаций.
Адаптировать под запрос

TL;DR

LLM часто выдумывают несуществующие пакеты и библиотеки при генерации команд установки. Исследование на моделях Qwen показало, что облегчённые версии моделей (квантованные — сжатые для экономии памяти) галлюцинируют ещё чаще: до 98% выдуманных пакетов против 40-50% у оригинальных версий. ChatGPT и Claude используют полноразмерные модели, но принцип универсален.

Модели генерируют правдоподобные, но фейковые названия. Например, github.com/username/parser — путь выглядит реально, формат правильный, но репозитория не существует. Причина: LLM не проверяют реальные репозитории во время генерации — они собирают название из паттернов, которые видели в обучающих данных, как конструктор из знакомых частей. Более того, даже среди тех пакетов, что действительно существуют, процент содержащих известные уязвимости растёт у облегчённых моделей (до 20%).

Решение для пользователя чата: разделяй генерацию и проверку в одном промпте. Попроси модель не просто предложить пакет, а дать прямую ссылку на репозиторий, указать версию и подтвердить существование. Когда модель должна верифицировать свой ответ явно, она переключается в режим проверки и реже выдаёт галлюцинации.

🚀

Пример применения

⚠️ Метод работает для задач, где нужны внешние зависимости: установка библиотек, настройка окружения, подключение инструментов. Для чистой логики или текста не применим.

Задача: Настроить Python для парсинга данных с Wildberries и Ozon — собрать цены и остатки товаров для мониторинга конкурентов.

Промпт:

Мне нужно настроить Python для парсинга Wildberries и Ozon — 
собирать цены и остатки товаров.

Предложи необходимые библиотеки для этой задачи.

Для каждой библиотеки укажи:
1. Прямую ссылку на PyPI или GitHub
2. Последнюю стабильную версию
3. Дату последнего обновления
4. Подтверждение, что пакет активно поддерживается

Если не уверен в существовании пакета — скажи прямо.

Результат: Модель выдаст список библиотек с проверяемыми ссылками (например, requests, beautifulsoup4, selenium). Если она выдумает пакет типа wildberries-api-parser — отсутствие ссылки или несуществующий URL на PyPI сразу выдадут галлюцинацию. Ты сможешь проверить каждую ссылку до установки.

🧠

Почему это работает

LLM не имеют доступа к реальным репозиториям во время генерации текста. Они работают как конструктор: берут знакомые паттерны из обучающих данных (github.com + популярное_слово + правдоподобное_название) и собирают из них новое имя. Результат выглядит реально — правильный формат, осмысленное название — но может не существовать в природе. Это как если бы ты назвал книгу "Психология продаж в digital" от издательства МИФ — звучит правдоподобно, но такой книги нет.

Слабость: LLM генерируют по паттернам, а не проверяют факты. Особенно это проявляется для малоизвестных или узкоспециализированных пакетов — модель не видела их достаточно раз в данных, чтобы "запомнить", и начинает импровизировать.

Сильная сторона: LLM умеют проверять сами себя при явном запросе. Когда ты просишь не просто "предложи библиотеку", а "дай ссылку и подтверди существование", модель переключается в режим верификации — анализирует свой ответ более критически, опираясь на более надёжные паттерны (реальные URL, известные версии).

Принцип: Раздели генерацию и проверку внутри одного промпта. Сначала "предложи варианты", потом "для каждого подтверди реальность". Двухшаговая инструкция заставляет модель пропустить ответ через дополнительный фильтр.

📋

Шаблон промпта

Мне нужно {описание задачи, требующей библиотек или инструментов}.

Предложи необходимые пакеты/библиотеки/инструменты.

Для каждого укажи:
1. Прямую ссылку на официальный репозиторий или реестр (GitHub, PyPI, npm и т.д.)
2. Последнюю стабильную версию
3. Дату последнего обновления
4. Подтверждение, что пакет активно поддерживается

Если не уверен в существовании — скажи прямо.

Что подставлять: - {описание задачи} — что нужно сделать: "парсить данные с сайтов", "работать с API Тинькофф", "автоматизировать Excel-отчёты", "обрабатывать изображения для маркетплейса"

⚠️

Ограничения

⚠️ Только для задач с зависимостями: Метод работает, когда нужны внешние библиотеки, пакеты, плагины. Для чистой логики, текстовых задач или анализа без установки софта — не применим.

⚠️ Не защищает от тонких ошибок: Модель может дать реальный пакет, но устаревшую или уязвимую версию. Исследование показало: даже среди существующих пакетов, предложенных облегчёнными моделями, до 20% имеют известные уязвимости. Наличие ссылки ≠ безопасность.

⚠️ Требует финальной проверки вручную: Промпт снижает риск, но не устраняет полностью. Перед установкой всё равно стоит погуглить пакет или проверить через специализированные сервисы (например, Snyk для уязвимостей).

🔍

Как исследовали

Команда из Университета Северной Каролины взяла семейство моделей Qwen (от 0.5 до 14 миллиардов параметров) и сжала их двумя методами: 8-bit и 4-bit квантование — это техника уменьшения точности весов модели для экономии памяти и ускорения работы. Затем прогнали все версии (оригинальные и сжатые) через три датасета: вопросы со Stack Overflow про Go, задачи на генерацию кода из MBPP и парафразированные описания из каталога популярных Go-пакетов. Всего получили около 8000 примеров для каждой комбинации модель-датасет.

Для каждой сгенерированной команды установки (например, go get github.com/user/package) проверяли: существует ли пакет реально — делали сетевой запрос к указанному URL. Если 404 или недоступен — галлюцинация. Для существующих пакетов проверяли уязвимости через API базы OSV.

Почему результаты получились такими: Оказалось, что 4-bit квантование катастрофически ломает "память" модели о реальных пакетах. Маленькая модель 0.5B при 4-bit сжатии начала галлюцинировать в 98% случаев — она просто потеряла способность отличать реальные имена от выдуманных. Даже большие модели (7B, 14B) сильно деградировали. При этом 8-bit сжатие показало умеренный эффект — галлюцинации выросли на 2-5%, что терпимо.

Что удивило: Большая модель 7B при 4-bit сжатии на датасете SO _улучшила_ результат с 34% до 10% галлюцинаций — аномалия, которую авторы объясняют возможным "схлопыванием" модели к более консервативным, частым паттернам. Но на других датасетах та же модель показала рост галлюцинаций.

Инсайт для практики: Если ты используешь локальные или облегчённые модели (например, в IDE, в мобильных приложениях) — они могут галлюцинировать в разы чаще, чем полноразмерные ChatGPT/Claude. Всегда проверяй конкретные названия и ссылки, особенно для малоизвестных инструментов.

💡

Адаптации и экстраполяции

🔧 Техника: Обобщение принципа → другие типы фактов

Исследование про пакеты, но принцип применим шире: LLM галлюцинируют любые конкретные факты — названия книг, имена малоизвестных экспертов, статистику, названия компаний. Адаптируй промпт:

Предложи {варианты решения задачи}.

Для каждого варианта:
1. Укажи конкретный источник или ссылку
2. Дай проверяемый факт (дата, автор, версия)
3. Если не уверен — скажи прямо

Пример: "Посоветуй 5 книг по переговорам для B2B-продаж" → добавь "для каждой укажи автора, год издания, издательство и ссылку на Озон/Лабиринт".


🔧 Техника: Двухэтапная проверка → раздели на два запроса

Если задача сложная, раздели на два отдельных запроса вместо одного составного:

Запрос 1:

Предложи библиотеки Python для парсинга Wildberries и Ozon.

Запрос 2 (скопируй ответ из первого):

Вот список библиотек, которые ты предложил:
[вставить список]

Для каждой дай прямую ссылку на PyPI, последнюю версию, дату обновления.
Если какая-то библиотека не существует — скажи.

Разделение заставляет модель пересмотреть свой первый ответ критически во втором запросе — эффект "проверки домашки".

🔗

Ресурсы

Secure or Suspect? Investigating Package Hallucinations of Shell Command in Original and Quantized LLMs | Авторы: Md Nazmul Haque, Elizabeth Lin, Lawrence Arkoh, Biruk Tadesse, Bowen Xu | Университет Северной Каролины, США


📋 Дайджест исследования

Ключевая суть

LLM выдумывают несуществующие библиотеки при генерации команд установки. Исследование показало: облегчённые модели (квантованные — сжатые для экономии памяти) галлюцинируют до 98% пакетов против 40-50% у оригинальных. Фишка: раздели генерацию и проверку в одном промпте. Попроси не просто предложи пакет, а дай ссылку на репозиторий и подтверди существование. Модель переключается в режим верификации — снижается процент галлюцинаций.

Принцип работы

LLM не имеют доступа к реальным репозиториям во время генерации. Они работают как конструктор: берут паттерны из обучающих данных и собирают из них новое имя. Результат выглядит правдоподобно — github.com/username/parser — правильный формат, осмысленное название, но репозитория не существует. Когда ты явно просишь верифицировать ответ (дать ссылку, версию, дату обновления), модель анализирует свой ответ более критически.

Почему работает

LLM генерируют по паттернам, не проверяют факты. Особенно для малоизвестных пакетов — модель не видела их достаточно в данных и начинает импровизировать. Жесть — облегчённые модели галлюцинируют до 98% пакетов против 40-50% у оригинальных. Среди существующих пакетов до 20% содержат известные уязвимости. Двухшаговая инструкция (предложи вариантыподтверди реальность) заставляет модель пропустить ответ через дополнительный фильтр. Даже если модель не может проверить реально, она опирается на более надёжные паттерны — известные URL, популярные версии.

Когда применять

Применяй для задач с внешними зависимостями → установка библиотек Python/Node.js, настройка окружения для разработки, подключение API-клиентов. Особенно критично для узкоспециализированных или малоизвестных пакетов (парсеры для локальных маркетплейсов, библиотеки для банковских API, инструменты для автоматизации). НЕ подходит для чистой логики или текстовых задач без установки софта.

Мини-рецепт

1. Опиши задачу конкретно: парсить данные с Wildberries, работать с API Тинькофф, автоматизировать Excel-отчёты

2. Запроси верификацию явно: для каждого пакета требуй прямую ссылку на PyPI/GitHub/npm, последнюю версию, дату обновления, подтверждение активной поддержки

3. Добавь условие честности: Если не уверен в существовании — скажи прямо. Даёшь модели выход вместо импровизации

4. Проверь ссылки до установки: наличие URL ≠ безопасность. Погугли пакет или проверь через Snyk для уязвимостей

Примеры

[ПЛОХО] : Предложи библиотеки для парсинга Wildberries и Ozon
[ХОРОШО] : Мне нужно парсить Wildberries и Ozon — собирать цены и остатки товаров. Предложи библиотеки. Для каждой укажи: 1) прямую ссылку на PyPI/GitHub, 2) последнюю стабильную версию, 3) дату обновления, 4) подтверждение активной поддержки. Если не уверен в существовании — скажи прямо.
Источник: Secure or Suspect? Investigating Package Hallucinations of Shell Command in Original and Quantized LLMs
ArXiv ID: 2512.08213 | Сгенерировано: 2026-01-09 00:10
📖 Простыми словами

Package Hallucination: LLM выдумывают несуществующие библиотеки

arXiv: 2512.08213

Нейросети не знают, какие программы реально существуют в интернете, они просто угадывают вероятные названия. Когда ты просишь модель выдать команду для терминала, она не лезет в репозиторий проверять наличие софта, а работает как автозамена на стероидах. Она видит контекст задачи и лепит название пакета из кусков слов, которые чаще всего встречались в её обучении. В итоге получается команда, которая выглядит идеально правильно, но ведет в пустоту, потому что такого софта никогда не было.

Это как если бы ты спросил дорогу у очень уверенного в себе таксиста в незнакомом городе. Он не признается, что не знает путь, а с умным видом скажет: "Поворачивай на улицу Гоголя, там точно есть этот магазин". Ты приезжаешь, а там пустырь. Галлюцинация пакетов — это тот самый таксист, который строит маршрут по названиям, которые звучат логично, но на карте их нет. Чем меньше «мозгов» у таксиста, тем увереннее он врет.

Исследование на моделях Qwen показало пугающую разницу: если оригинальные тяжелые модели лажают в 40-50% случаев, то их сжатые версии — квантованные модели — превращаются в генераторы бреда с частотой до 98% ошибок. Квантование, которое делают ради экономии памяти, буквально вымывает из нейронки знания о редких названиях. В итоге она помнит структуру команды pip install, но вместо реальной библиотеки подставляет выдуманную фигню, которая просто похожа по смыслу на твой запрос.

Этот принцип универсален для любой работы с кодом и системным администрированием. Тестировали на командах оболочки, но та же беда ждет тебя при поиске библиотек для Python, плагинов для софта или специфических драйверов. SEO-оптимизированный бред проникает везде: модель видит знакомый паттерн и достраивает его до конца, игнорируя реальность. Если ты используешь локальные «легкие» модели на своем компе, риск поймать несуществующий пакет возрастает в разы по сравнению с облачными гигантами вроде ChatGPT.

Главный вывод: никогда не копируй команды из чата в терминал без проверки, особенно если модель маленькая и быстрая. 98% галлюцинаций — это не просто погрешность, это гарантия того, что ты пытаешься установить воздух. Самое опасное здесь даже не ошибка, а риск захвата имен: хакеры могут специально создать пакеты с теми названиями, которые чаще всего выдумывает AI, и тогда твоя команда установит реальный вирус вместо воображаемой утилиты. Кто не проверяет названия, тот рано или поздно сломает себе систему.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с