Spring на русском
Подписаться
Самокорректирующий структурированный выход в Spring AI 2.0
Большие языковые модели, хотя и мощные, испытывают трудности с структурированными данными для интеграции программного обеспечения. Структурированный вывод Spring AI устраняет этот пробел, позволяя моделям производить текст, соответствующий определенной схеме, который затем парсируется в типизированные объекты. Spring AI 2.0 вводит два ключевых улучшения: структурированный вывод, родной для провайдера, и самокорректирующуюся валидацию схемы. Существующий код остается совместимым из-за неизменных значений по умолчанию.Для генерации структурированного вывода разработчики определяют запись Java, а затем используют метод .entity(), чтобы указать целевой тип. Этот процесс внутренне генерирует схему JSON из записи, добавляет ее к подсказке и парсит JSON-ответ модели обратно в желаемый объект. До Spring AI 2.0 этот процесс не имел гарантий, что приводило к потенциальным ошибкам парсинга, если модели отклонялись от схемы.Переключатель .validateSchema() активирует самокорректирующуюся петлю повторных попыток, автоматически проверяя ответ модели на соответствие схеме и повторно выдавая подсказку с конкретной обратной связью об ошибках, если проверка не проходит. Для более сильных гарантий .useProviderStructuredOutput() использует функции API, специфичные для провайдера, для обеспечения соответствия схеме на уровне источника. Это минимизирует неправильно сформированный вывод, предотвращая выпуск недопустимых ответов с самого начала.Эти две функции можно объединить для максимальной устойчивости, с родным выводом провайдера в качестве основного ограничения и валидацией схемы в качестве резервного варианта. Для общих типов, таких как списки и карты, вместо простого класса используется ParameterizedTypeReference. Метод .responseEntity() позволяет получить доступ как к парсированному объекту, так и к сырому ChatResponse для метаданных.Когда встроенные конвертеры недостаточны, пользовательские реализации StructuredOutputConverter могут обрабатывать нетипичную обертку JSON или совершенно другие форматы, такие как YAML или CSV. Это обеспечивает дополнительную гибкость для различных потребностей интеграции.