Discourse AI теперь использует структурированный вывод для контента, однако поддержка структурированного вывода доступна далеко не у всех провайдеров API. Почти все поставщики ИИ в моей стране, такие как DeepSeek или Qwen, не поддерживают эту функцию. Использование структурированного вывода приводит к крайне ограниченному выбору API — остаются лишь несколько основных провайдеров.
Я считаю, что если Discourse AI хочет преодолеть текущие ограничения в выборе провайдеров, отказ от структурированного вывода необходим. Без него ничего по-настоящему не сломается. В качестве решения можно использовать простые уникальные разделители или просто просить ИИ генерировать JSON на основе предоставленной схемы JSON или примеров, но без использования структурированного вывода. Почему бы и нет?
Попробуйте Moonshot AI Kimi K2 через их API-эндпоинты для Китая?
Похоже, базовый URL API — https://api.moonshot.cn/v1.
Мы внедрили требование структурированного вывода, потому что я столкнулся с тысячами жалоб на такие проблемы, как добавление моделями фраз вроде «Вот ваше резюме» или сбои при парсинге при получении списка предложенных заголовков для ИИ-помощника и т. д. Теперь, с переводом, это стало ещё более серьёзной проблемой, когда нужно быть уверенным, что миллионы вызовов LLM не добавят ничего лишнего в ваш вывод.
Учитывая необходимость надёжности и общую доступность структурированного вывода, мы приняли это решение для провайдеров, где это поддерживается, но я открыт к PR, который добавит флажок для отключения структурированного вывода в запросе API для провайдера OpenAI.
Это было бы здорово. Я не могу и не имею права требовать этого от команды Discourse, поэтому просто предлагаю некоторые идеи.
Используя старое решение с «разделителями» для более надежного парсинга, можно использовать сырое содержимое в стиле XML, например:
<SUMMARY_START>
Содержимое резюме.
<SUMMARY_END>
<SUGGESTIONS_START>
<SUGGESTION_START>
Предложение 1
<SUGGESTION_END>
<SUGGESTION_START>
Предложение 2
<SUGGESTION_END>
...
<SUGGESTIONS_END>
Затем, игнорируя всё, что находится вне тегов <START> и <END>, я считаю, что даже самая некомпетентная производственная модель ИИ сможет корректно обрабатывать метки.
Также стоит попросить ИИ не добавлять лишних описаний, а затем предупредить администраторов о возможных проблемах при включении этого флажка.
Я не знаю, как выглядит тело запроса, сгенерированное Discourse AI. Но если это не так, просто поместите системные промпты в первое сообщение от роли system, результат запроса к векторной базе данных — в следующее сообщение от роли system с префиксом вроде Важное прошлое содержимое:\n, а содержимое поста или другие фактические данные — в сообщения от роли user.