Что такое галлюцинации нейросетей: как MCP-сервер запрещает модели считать в уме
Галлюцинация (когда нейросеть уверенно выдаёт цифру, которой нет в данных) остаётся главной причиной, по которой авторы и аналитики не доверяют языковым моделям работу с таблицами, и команда русскоязычного проекта показала конкретный способ это исправить, дав модели инструменты вместо права считать в уме.

Проблема не в том, что модель глупая, а в том, что она достраивает текст токен за токеном и не отличает таблицу от художественного рассказа. Пока модель «считает» сама, она будет врать. Решение: забрать у неё арифметику и отдать движку, который не ошибается по определению.
Большие языковые модели (LLM, нейросети, которые генерируют текст) до сих пор ломаются на простых задачах с данными. Вы кладёте CSV-файл с 50 тысячами строк, спрашиваете среднюю выручку по регионам и получаете красивое, но выдуманное число. Авторы русскоязычного проекта на базе Claude Desktop и открытого MCP-сервера (Model Context Protocol, протокол, через который модель вызывает внешние инструменты) разобрали, почему так происходит, и собрали обвязку, которая заставляет модель не импровизировать, а пользоваться проверяемыми инструментами.
Почему модель врёт на таблицах?
Любая LLM генерирует ответ, подбирая следующий токен (минимальный кусочек текста). Таблица для неё такой же текст, как роман или новость. Если данных не хватило или вопрос чуть в сторону, модель не скажет «не знаю». Она допишет то, что выглядит правдоподобно.
Прямой путь «отдать CSV и попросить посчитать» именно поэтому не работает. Модель с удовольствием выдаст число, иногда даже близкое к правде, но воспроизводимости ноль: тот же вопрос приводит к разной логике расчёта от запуска к запуску.
Что понадобится
- Claude Desktop или другая модель с поддержкой MCP (протокола вызова внешних инструментов).
- DuckDB (встраиваемый аналитический движок, читает CSV, Parquet и JSON без отдельного сервера).
- Python 3.10+ и библиотеки: pandas, numpy, scipy, statsmodels, matplotlib.
- FastMCP для бэкенда MCP-сервера, Next.js с ai-sdk для фронта (если нужен интерфейс).
- Ваш датасет в CSV или Parquet.
- Примерно 2 часа на первую настройку, если вы знакомы с Python.
Пошаговая инструкция
-
Установите DuckDB и убедитесь, что он читает ваш файл. Проверьте простым запросом:
sql SELECT count(*) FROM read_csv_auto('ваш_файл.csv');Если число строк совпало с реальным, движок подключён верно. -
Заблокируйте модели доступ к записи. При создании соединения с DuckDB запретите автозагрузку расширений и заморозьте конфигурацию:
sql SET autoinstall_known_extensions=false; SET autoload_known_extensions=false; SET lock_configuration=true;После последней строки настройки уже не изменить внутри сессии. -
Добавьте валидатор SQL-запросов. Функция
validate_read_only()в файлеmcp_server/duckdb_utils.pyрежет всё, что меняет данные: INSERT, UPDATE, DELETE, DROP, CREATE, ALTER, ATTACH. Она также блокирует функцииglob(),sqlite_scan(),postgres_query(), которые обходят изоляцию файловой системы. Проверка идёт по очищенному SQL без комментариев и строковых литералов, чтобы фильтр нельзя было обмануть. -
Ограничьте вывод и предупредите модель об усечении. Если результат запроса длиннее 200 строк, покажите первые и последние, а к ним приложите предупреждение прямо в ответе инструмента:
WARNING: показаны 200 из 5000 строк. Агрегации по этому выводу будут неверны — используйте SQL-агрегацию.Без этой строки модель получит 200 строк, решит, что это полная таблица, и «усреднит» только их, забыв про оставшиеся 4800. -
Настройте песочницу для Python-кода. Для задач, которые не ложатся на SQL (сложная статистика, прогнозы, нестандартные преобразования), поднимите изолированный контейнер. Код исполняется под непривилегированным пользователем. Модель формулирует код, песочница его запускает и возвращает результат. Принцип тот же: считает среда, не модель.
-
Опишите схему данных явно. Модель не должна гадать, что внутри таблицы. Передайте ей описание колонок, типов и допустимых значений до первого вопроса. Без этого она начнёт выдумывать имена полей.
-
Подключите внешние базы через federation (если нужно). DuckDB умеет подключаться к PostgreSQL, MySQL, SQLite без копирования данных:
sql ATTACH 'host=... dbname=...' AS pg (TYPE postgres, READ_ONLY);Подключение всегдаREAD_ONLYи всегда in-memory: данные живут на диске или во внешней базе, DuckDB поднимает их в память только на время запроса.
Задача: узнать среднюю выручку по регионам из CSV на 50 000 строк.
Без MCP-сервера (модель считает сама): Промпт: «Посчитай среднюю выручку по регионам из файла sales.csv». Результат: модель выдала три региона с красивыми круглыми числами. При ручной проверке ни одно число не совпало с реальным, а один регион был выдуман.
С MCP-сервером (модель пишет SQL, считает DuckDB): Модель сгенерировала запрос:
SELECT region, AVG(revenue) AS avg_revenue
FROM read_csv_auto('sales.csv')
GROUP BY region
ORDER BY avg_revenue DESC;
DuckDB выполнил запрос и вернул точные числа. Модель получила результат и пересказала его без искажений. Все цифры совпали с ручной проверкой в Excel.
- Не ограничивать вывод. Модель получает 200 строк из 5000 и считает их полной выборкой. Без явного предупреждения об усечении она агрегирует неполные данные и выдаёт ложные средние.
- Давать модели произвольный SQL. Без валидатора модель может сгенерировать DROP TABLE или INSERT, это путь к потере данных. Каждый запрос проходит через гейт.
- Не описывать схему. Если модель не знает названия колонок и типов, она додумает их сама. Галлюцинация на уровне структуры данных опаснее, чем на уровне чисел: вы даже не заметите подмену поля.
- Надеяться на одну попытку. Даже с MCP-сервером модель может написать неоптимальный SQL. Проверяйте результат простым контрольным запросом (например,
SELECT count(*)перед агрегацией). - Игнорировать изоляцию песочницы. Python-код от модели должен исполняться в контейнере под непривилегированным пользователем. Запуск на хост-машине с правами администратора это не аналитика, а уязвимость.
Что делать с этим прямо сейчас, по ролям
Автору Дзена. Если вы пишете обзоры с цифрами (статистика, рейтинги, сравнения товаров), подход «модель плюс CSV» приводит к публикации выдуманных данных, а это удар по доверию аудитории. Проверяйте каждое число, которое модель выдала по таблице, или используйте связку с DuckDB, где считает движок.
Маркетологу. Отчёты по рекламным кампаниям, которые LLM «прочитала» из выгрузки, могут содержать фантомные метрики. Прежде чем нести цифры руководству, прогоните тот же вопрос через SQL-запрос к реальной базе.
Предпринимателю в РФ. Claude Desktop доступен с ограничениями, но DuckDB и FastMCP работают локально и не зависят от внешних сервисов. Из российских аналогов для базовой аналитики можно использовать YandexGPT или GigaChat, но MCP-протокол они пока не поддерживают, поэтому связка DuckDB плюс открытая модель (опенсорс) через собственный сервер остаётся наиболее воспроизводимым вариантом.
Подход, описанный в этом кейсе, по сути делает из языковой модели не калькулятор, а переводчика с человеческого на SQL. Это честная роль: модель хорошо понимает вопрос на естественном языке и хорошо формулирует запрос, а считает тот, кто не ошибается.
По моим наблюдениям, главная ловушка для новичков не техническая, а психологическая: модель отвечает уверенно, с точностью до копейки, и хочется ей верить. Предупреждение об усечении данных прямо в ответе инструмента, простая, но гениальная вещь: оно действует не на человека, а на саму модель, возвращая её к реальности.
Честная оговорка: авторы проекта сами признают, что проблемы остаются. Модель может написать неоптимальный SQL, неверно интерпретировать результат или выбрать не тот разрез данных. Это не волшебная кнопка «без галлюцинаций», а инженерная обвязка, которая сокращает пространство для вранья. Контрольная проверка по-прежнему на вас.
Тем, кто работает с данными каждый день, стоит попробовать эту связку на своём датасете: DuckDB бесплатен, MCP-сервер собирается за пару часов, а разница между «модель посчитала» и «модель попросила движок посчитать» это разница между галлюцинацией и фактом.
Попробуйте нейроредактор dzen.guru
Проверяйте тексты с цифрами до публикации и не дайте галлюцинациям модели попасть к читателю.
Попробовать бесплатно
Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также
Как устроена инфраструктура данных для ИИ систем
Компания Bright Data, платформа для сбора веб-данных, описала концепцию нового инфраструктурного слоя, который должен обеспечить ИИ-системам доступ к свежей…

Профессии, связанные с ИИ: 5 уже исчезают, вот как оценить свою за вечер
Мне нужно написать how-to статью о профессиях, которые ИИ заменяет и создаёт. Текст должен быть практическим, с пошаговой инструкцией по оценке своей позиции…

Graphify строит граф зависимостей проекта: статический анализ кода Python без облака
Библиотека Graphify анализирует Python-проект локально, без облака и без ключей к API, строит из кода граф знаний и показывает, какие модули связаны, где…
Комментарии