Зачем нужны структурированные выводы?
Агенты по умолчанию возвращают свободный текст, что подходит для чата, но не когда вам нужно использовать вывод программно. Структурированные выводы дают вам типизированные данные, которые вы можете передать непосредственно в логику приложения, базу данных или компоненты UI. Рассмотрим приложение рецептов, где агент ищет в интернете и приносит рецепты. Без структурированных выводов вы получаете свободный текст, который вам нужно было бы разбирать самостоятельно. Со структурированными выводами вы определяете нужную вам форму и получаете типизированные данные, которые можно использовать непосредственно в приложении.Без структурированных выводов
Без структурированных выводов
Со структурированными выводами
Со структурированными выводами
Быстрый старт
Чтобы использовать структурированные выводы, определите JSON Schema, описывающую форму данных, которые вы хотите, затем передайте его вquery() через опцию outputFormat (TypeScript) или output_format (Python). Когда агент завершит работу, сообщение результата включает поле structured_output с валидированными данными, соответствующими вашей схеме.
Пример ниже просит агента исследовать Anthropic и вернуть название компании, год основания и штаб-квартиру как структурированный вывод.
Типобезопасные схемы с Zod и Pydantic
Вместо написания JSON Schema вручную, вы можете использовать Zod (TypeScript) или Pydantic (Python) для определения вашей схемы. Эти библиотеки генерируют JSON Schema для вас и позволяют разобрать ответ в полностью типизированный объект, который вы можете использовать во всей кодовой базе с автодополнением и проверкой типов. Пример ниже определяет схему для плана реализации функции с резюме, списком шагов (каждый с уровнем сложности) и потенциальными рисками. Агент планирует функцию и возвращает типизированный объектFeaturePlan. Затем вы можете получить доступ к свойствам, таким как plan.summary, и перебирать plan.steps с полной типобезопасностью.
- Полный вывод типов (TypeScript) и подсказки типов (Python)
- Валидация во время выполнения с
safeParse()илиmodel_validate() - Лучшие сообщения об ошибках
- Компонуемые, переиспользуемые схемы
Конфигурация формата вывода
ОпцияoutputFormat (TypeScript) или output_format (Python) принимает объект с:
type: Установите на"json_schema"для структурированных выводовschema: Объект JSON Schema, определяющий структуру вашего вывода. Вы можете сгенерировать это из схемы Zod сz.toJSONSchema()или модели Pydantic с.model_json_schema()
enum, const, required, вложенные объекты и определения $ref. Для полного списка поддерживаемых функций и ограничений см. Ограничения JSON Schema.
Пример: агент отслеживания TODO
Этот пример демонстрирует, как работают структурированные выводы с многошаговым использованием инструментов. Агент должен найти комментарии TODO в кодовой базе, а затем найти информацию git blame для каждого. Он автономно решает, какие инструменты использовать (Grep для поиска, Bash для запуска команд git) и объединяет результаты в один структурированный ответ. Схема включает необязательные поля (author и date), так как информация git blame может быть недоступна для всех файлов. Агент заполняет то, что может найти, и опускает остальное.
Обработка ошибок
Генерация структурированного вывода может не удаться, когда агент не может создать валидный JSON, соответствующий вашей схеме. Это обычно происходит, когда схема слишком сложна для задачи, сама задача неоднозначна или агент достигает лимита повторных попыток при попытке исправить ошибки валидации. Когда происходит ошибка, сообщение результата имеетsubtype, указывающий, что пошло не так:
| Subtype | Значение |
|---|---|
success | Вывод был успешно сгенерирован и валидирован |
error_max_structured_output_retries | Агент не смог создать валидный вывод после нескольких попыток |
subtype, чтобы определить, был ли вывод успешно сгенерирован или вам нужно справиться с ошибкой:
- Держите схемы сосредоточенными. Глубоко вложенные схемы со многими обязательными полями сложнее удовлетворить. Начните с простого и добавляйте сложность по мере необходимости.
- Соответствуйте схему задаче. Если задача может не иметь всю информацию, которую требует ваша схема, сделайте эти поля необязательными.
- Используйте четкие приглашения. Неоднозначные приглашения затрудняют для агента понимание того, какой вывод создавать.
Связанные ресурсы
- Документация JSON Schema: изучите синтаксис JSON Schema для определения сложных схем с вложенными объектами, массивами, перечислениями и ограничениями валидации
- API Structured Outputs: используйте структурированные выводы с Claude API непосредственно для однооходовых запросов без использования инструментов
- Custom tools: дайте вашему агенту пользовательские инструменты для вызова во время выполнения перед возвращением структурированного вывода