Макросы Swift предоставляют мощный механизм для генерации кода, позволяя разработчикам сокращать объём шаблонного кода и улучшать читаемость. Фреймворк FoundationModels предлагает новые макросы, упрощающие генерацию данных для моделей с использованием языковых моделей.
@Generable: генерация экземпляров моделей
Макрос @Generable применяется к структуре Swift, чтобы указать, что её экземпляры могут быть сгенерированы языковой моделью. Компилятор автоматически синтезирует необходимые реализации протоколов и методы для поддержки потоковой генерации.
Например, структура ShoppingItem становится совместимой с автоматической генерацией. Каждый её экземпляр ожидается как структурированный вывод языковой модели.
Можно указать описание, задающее контекст или цель генерации. Это помогает языковой модели выдавать более точные и релевантные результаты.
@Guide: управление генерацией на уровне свойств
Для тонкой настройки интерпретации отдельных полей используется макрос @Guide. Его можно применить к конкретному свойству, чтобы задать инструкции по его заполнению.
Каждая аннотация @Guide служит подсказкой для языковой модели, направляя генерацию значений в соответствии с ожидаемым содержанием.
Интеграция в приложение
После применения @Generable модель можно использовать в LanguageModelSession для запроса данных. Типичный сценарий — запуск генерации в ответ на ввод пользователя.
Метод streamResponse(generating:prompt:) инициирует потоковый запрос массива экземпляров ShoppingItem. По мере поступления данных они обрабатываются и добавляются в состояние интерфейса.
Заключение
Макрос @Generable предлагает декларативный способ интеграции генерации на основе языковых моделей в Swift-приложения. В паре с @Guide он обеспечивает гибкий и структурированный контроль над генерацией — как на уровне модели, так и на уровне отдельных свойств.