Вайб-кодинг в 1С, часть 2: как победить галлюцинации

Вайб-кодинг в 1С, часть 2: как победить галлюцинации


Продолжение сериала. В первой части мы открыли ящик Пандоры, а именно прогнали базовый процесс вайб-кодинга в 1С и столкнулись с...  некоторыми проблемами - галлюцинациями. Claude (и другие LLM) уверенно генерировал код с несуществующими методами, путал параметры и изобретал API на ходу.

А вы как представляете себе галлюцинации у 1С-ника?


Сегодня разберем, как эту проблему решить с помощью MCP-сервера.


Напоминание: в чём была проблема

В прошлый раз Cursor сгенерировал нам такой код:

    FTPСоединение = Новый FTPСоединение(
        ПараметрыFTP.АдресСервера,
        ПараметрыFTP.Порт,
        ПараметрыFTP.Пользователь,
        ПараметрыFTP.Пароль
    );
    
    // Отправка файла
    FTPСоединение.ЗаписатьФайл(ИмяВременногоФайла, ИмяФайлаНаСервере);
    
    FTPСоединение.Закрыть();

Выглядит логично. Но есть нюанс: метода ЗаписатьФайл() у FTPСоединение не существует. Модель его выдумала, потому что "так должно быть по логике".

Это классическая галлюцинация — модель не знает точного API, но уверенно создает код, который похож на правильный.


Почему LLM галлюцинируют на 1С

Начнем с того, что LLM галлюцинируют.. всегда. Но если тема, на которую пишет LLM, очень часто встречалась в тренировочных данных, эта галлюцинация совпадает с правдой. К сожалению, 1С - не самая популярная тема в мире программирования. Поэтому именно 1С-ный код очень часто становится жертвой подхода "я художник, я так вижу".


Решение: MCP-сервер с документацией

Вообще, подход с MCP-сервером - это частный случай RAG (Retrieval-Augmented Generation). Идея в том, чтобы дать модели доступ к внешним данным, когда она не уверена в ответе. MCP-сервер в нашем случае как раз работает таким мостиком - от неуверенной LLM к правильным данным.

Я сделал MCP-сервер 1c-helper, который содержит полную документацию по объектной модели 1С:Предприятие 8.3 и выложил его в открытый доступ. Как делать MCP-серверы - отдельная большая тема, возможно, в будущем напишу статью на эту тему. В этом репо - пример реализации на Python.

Вы, кстати, тоже можете воспользоваться моим сервисом, как именно - распишу ниже.


Как это выглядит на практике

Помните, мы делали обработку по отправке остатков через FTP? Сделаем второй подход. Но для начала добавим MCP-сервер в Cursor.

Шаг 1:

В Cursor открываем настройки MCP (Ctrl+Shift+P => печатаем mcp => Open MCP settings => New MCP server) - откроется настроечный файл mcp.json и в него прописываем MCP-сервер 1c-helper, как показано ниже:

{
  "mcpServers": {
    "1c-helper": {
      "type": "sse",
      "url": "http://54.86.57.191:8002/sse",
      "headers": {
        "Authorization": "Bearer <your token>"
      }
    }
  }
}

Перезапускаем Cursor.

Пасхалка: токен можно получить в моем телеграм-канале.

Шаг 2:

Проверим, что сервис подключен. Спросим у агента какую-нибудь дичь, которую не найти даже в интернете, например

Какие значения есть у ТипОтображенияСерииСлояГеографическойСхемы?

Агент должен ответить что-то вроде:

Обратите внимание: надпись типа Ran search ... query ТипОтображенияСерииСлояГеографическойСхемы говорит о том, что агент делал поиск именно через MCP-сервер.

Шаг 3: 

Теперь вернемся к нашей обработке. Повторим промпт, как предыдущий раз.

@ВыгрузкаFTP/Forms/Форма/Ext/Form/Module.bsl Сделай код, который при нажатии на кнопку выгрузки выгрузит остатки склада во временный файл CSV и затем отправит его на указанный адрес через FTPСоединение

Агент отработал с поддержкой MCP-сервера 1c-helper.

Не ручаюсь, что все верно с методической точки зрения, но синтаксически код абсолютно корректен:

Ограничения подхода

Скажем прямо - один этот сервер - только первый шаг по обогащению своего вайб-код инструментария.

Что нужно еще

В следующих частях разберём:

  • Как сделать MCP-сервер с метаданными вашей конфигурации
  • Автоматическая проверка сгенерированного кода
  • Как работать с формами, схемами СКД и прочим не-кодом

Итого

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

Экономия времени на отладке "почему не работает" — существенная. Вместо того чтобы гуглить "1С ПостроительОтчетаАнализаДанных методы", вы получаете рабочий код сразу.





Report Page