Ненормальное программирование * Управление продуктом * Прототипирование * Искусственный интеллект Кейс Сегодня расскажу, как научил сервис генерировать PDF-файлы, перенёс "мозги" с GPT-4.1-mini на GPT-5.1 с web search, добавил методику анализа в системный промпт, разобрался с Structured Model Output и собрал JSON-схему. Теперь модель возвращает структурированный ответ, стабильно верстается HTML+jinja шаблон, и собирается PDF-документ. Для примера проверил статью с Хабра про недоступность Roblox — получилось, на мой взгляд, неплохо для первой итерации (под спойлером). Скрытый текст Напомню суть эксперимента: все решения придумывает ChatGPT (Plus), а я лишь описываю логику работы, следую инструкциям и копирую-вставляю (код и логи ошибок для отладки). Прошлый этап закончился так: удалось подружить бота с OpenAI, отправлять туда по API запросы, принимать ответы, показывать эти ответы юзеру бота. Все детали — в предыдущих статьях. Генератор PDF Сначала ChatGPT предложил связку xhtml2pdf и reportlab, но они не захотели дружить друг с другом, приложение не собиралось. Потом появилось решение с WeasyPrint, который умеет в CSS, страницы, таблицы, шрифты и т.д. Получилось с третьей попытки из таких запчастей: Новые "мозги" Для экономии времени и денег бот был подключен к модели GPT-4.1-mini, которая не умеет "думать", ходить в интернет и отвечает на основе "знаний", ограниченных 1 июня 2024. Из-за этого даже на простые вопросы модель давала неправильные ответы, например, утверждала, что Джо Байден — действующий президент США. ChatGPT подсказал решение: перейти на более "умную" модель, использовать Responses API и включить web search, скриншот из документации OpenAI: Апдейт накатился с первого раза, и бот обзавёлся новыми мозгами в виде флагманской модели GPT-5.1, которой умеет ходить в интернет. Системный промпт Мозги мозгами, но ими ещё и пользоваться надо. Для этого отправляем модели системный промпт — инструкции и правила, которые она учитывает при обработке каждого пользовательского запроса: Запрос Юзера + Системный Промпт = Полный Промпт Загрузил в ChatGPT документ с методикой анализа и попросил собрать системный промпт, получились такие запчасти: metholodgy.md (подробная методика), rules.md (стиль и подача информации) и system_prompt.txt (структура ответа). Не стал разбираться с разными форматами файлов (в каждом — текст, зачем разный формат), потому что приложение опять собралось с первого раза и отработало весь цикл: запрос, короткий ответ в боте, генерация PDF. Видно, когда появился системный мега-промпт Для справки: за несколько дней тестов на старой модели ушло 3k токенов, а за 1 день на GPT-5.1 сгорело почти 600k токенов. Системный промпт и web search увеличили затраты примерно в 200 раз при сопоставимом количестве запросов. Всё хорошо, только вот модель каждый раз отвечала творчески — это большая проблема, потому что такой ответ нереально стабильно разбирать на части для верстки отчета. JSON-схема Проблема решилась за счёт использования Structured Model Output, подход подробно описан в документации OpenAI. В частности в модель можно отправить JSON-схему, в соответствии с которой она и вернёт ответ — это мне и нужно. Получилось вот так: Полная схема ~350 строк Шаблон отчёта Честно говоря, не ожидал, что с шаблоном будет столько проблем: сначала сервис вообще не собирался, потом вылезли проблемы с генерацией PDF, потом в PDF плыла верстка, потому что WeasyPrint не умеет в динамику. Примерно через 4 часа танцев с бубном ChatGPT предложил финальный фикс, и бот стал генерировать PDF на базе jinja+HTML шаблона: Демка Технически всё работает как надо: бот корректно классифицирует входящий запрос (текст, ссылка, пересланное сообщение), отправляет на анализ в GPT-5.1, мозги шевелятся, ответ приходит в JSON, корректно верстается HTML и собирается PDF-отчёт. Что касается качества анализа — нужно работать дальше: дублируются утверждения, не всегда корректно работает логика обнаружения риторических приёмов и манипуляций, неглубоко анализируются и профилируются источники. Бота можно найти в телеграме по названию (Фактометр) или юзернейму (FaktometrBot). Потыкайте, если интересно. Дальнейшие планы В импровизированном бэклоге: подключение платежей, тарифы, биллинг, бонусная система, и партнерская программа. Спасибо всем, кто проявил любопытство: Теги: Source: https://habr.com/ru/articles/972934/