17:01, 19 августа 2024

Aider: большие языковые модели хуже пишут код, если просить возвращать JSON

В начале августа организация OpenAI представила улучшенные функции структурирования ответов своих больших языковых моделей. Обещалось, что теперь модели будут точнее следовать формату JSON в ответах. Проект Aider сравнил качество кода в различных форматах ответов и пришёл к выводу, что любые БЯМ пишут код лучше, если отвечать нужно в plain text.

Читать на сайте
`

В начале августа организация OpenAI представила улучшенные функции структурирования ответов своих больших языковых моделей. Обещалось, что теперь модели будут точнее следовать формату JSON в ответах. Проект Aider сравнил качество кода в различных форматах ответов и пришёл к выводу, что любые БЯМ пишут код лучше, если отвечать нужно в plain text.

В начале августа реддитор нашёл в недрах бета-версии операционной системы macOS 15.1 текст, похожий на системные промпты функции Apple Intelligence. Речь идёт про показанную на конференции разработчиков WWDC этого 2024 года концепцию искусственного интеллекта. ИИ от Apple должен быть тесно интегрирован в операционную систему и помогать в повседневных задачах: предлагать варианты ответа на электронные письма, сжато описывать переписку в мессенджерах и самостоятельно монтировать фотографии в памятный видеоролик.

Промпты — написанные естественным языком сообщения для модели, в данном случае большой языковой (БЯМ). В обсуждениях находки на Reddit и в микроблогах (1, 2, 3) стиль промптинга Apple вызывал нарекания. Чаще всего критикам казались забавным фразы по типу «не галлюцинируй» и ненужная вежливость «пожалуйста». Немногие высказались, что просьба возвращать валидный JSON приведёт к багам и иногда сломанному форматированию.

Для обработки некоторых запросов Apple Intelligence работает в тесном сотрудничестве с OpenAI. Ещё в ноябре 2023 года на DevDay организация OpenAI представила режим JSON Mode, который помогает модели возвращать правильный формат JSON.

6 августа, уже после находок внутри бета-версии macOS, организация OpenAI объявила о новой функции ответов через API: Structured Outputs. Это дальнейшее развитие JSON Mode. Структурированные ответы помогают задать JSON Schema, чтобы БЯМ возвращала ответ в строго заданном формате.

В блоге OpenAI похвастала, что модель gpt-4o-2024-08-06 с параметром strict=true достигла уровень соответствия формату в 100 %. Для сравнения: через просто промптинг получалось добиться от gpt-4-0613 показателя в лишь 35,9 %. О реальном опыте клиентов объявление ничего не сообщает.

Инструмент Aider — это бесплатный (доступ к API провайдера БЯМ придётся обеспечить самостоятельно) ассистент для написания кода прямо в терминале. Как рассказывает проект, часто пользователи удивлённо спрашивают: почему запросы на редактирование кода ассистент отсылает в виде простого текста?

К примеру, запрос от Aider на редактирование кода может выглядеть так:

greeting.py>>>>>> REPLACE

Как указывают авторы Aider, вопрошающие почему-то ожидают, что лучше было бы обернуть запрос в JSON:

{    "filename": "greeting.py",    "search": "def greeting():\n    print(\"Hello\")\n"    "replace": "def greeting():\n    print(\"Goodbye\")\n"}

Чтобы объяснить свой выбор, проект Aider показывает результаты тестирования и наглядно доказывает, что БЯМ генерируют код хуже, если просить форматировать его в структуре JSON. Также указывается, что ничего удивительного в этом факте и не должно быть. В примере с JSON выше в код примешаны кавычки " и переносы строк \n с экранированием. Легко представить, что это добавляет сложности генерации. Aider спрашивает: а насколько тяжело было бы писать такой код человеку?

Читайте так же:

Тесты со схожими выводами проект Aider уже публиковал в июле 2023 года. На тот момент рассматривать приходилось модели GPT-3.5 и GPT-4. Индустрия давно ушла вперёд, GPT-3.5 уже даже успели закрыть.

Тесты прогоняли на собственном бенчмарке Aider, состоящем из 133 задач по написанию кода на Python из репозитория Exercism. Задачи предназначены не для машин, а для помощи в изучении Python человеку. Каждая задача включает файлы, где отдельно лежат инструкции, заготовка кода с описанием требуемой функции или класса и юнит-тесты. От БЯМ требуется прочитать инструкции, написать код и пройти юнит-тесты.

В тестировании июля 2023 года при возникновении ошибок БЯМ получала результаты юнит-тестов, указание, что тестам нужно верить и что код нужно исправить. Для нового сравнения запросов в plain text и в структуре JSON бенчмарк слегка упростили. В частности, БЯМ давалась всего одна попытка без вторых шансов на исправления ошибок.

Рассмотрено было три стратегии оборачивания кода: