Тема использования JSON в ответах OpenAI API звучала в анонсах примерно год назад и до некоторой степени описана в документации. В частности, Сэм Альтман на презентации одного из крупных релизов говорил о том что о такой фиче активно просили разработчики. Однако с тех пор мне не удалось найти целостных описаний решений, сценариев и паттернов, которые выглядели бы как практически полезные и на основе которых можно было бы быстро составить целостное понимание. Те материалы, которые попадались мне до сих пор, показались мне довольно абстрактными, недостаточно целостными, оторванными от реальности, иногда перегруженными техническими подробностями, за которыми теряется общая картина.
Вчера (6 августа) OpenAI выпустила обновление этого функционала и вместе с ним заметно обновила и дополнила документацию в этой части. С одной стороны, в новой версии документации стало больше конкретных и наглядных примеров. С другой, - в дополнение к понятию Function calling добавилось еще новое понятие Structured Outputs, которое для начинающего пользователя на первых шагах может усложнить понимание.
В этой статье я хотел на небольшом примере дать краткий поверхностный обзор того как, на мой взгляд, можно задействовать JSON-ответы для конкретной задачи. Сразу скажу, что мой пример оказался крайне примитивным (чуть сложнее чем "Hello, World!"). Я старался достичь наглядности за счет демонстрации всего цикла от идеи "продукта", до его рабочего прототипа. Свою задачу я реализовал в трех вариантах (по мере возрастания сложности): "Чат без Function calling", "Чат с Function calling" и "Assistant Function calling". Возможно, кто-то найдет для себя в этом что-то полезное.
Читать далее