آیا تا به حال با خروجیهای متنی بدون ساختار از یک مدل زبان درگیر شدهاید؟ 🤖 از یک هوش مصنوعی میخواهید یک دستور پخت غذا را تولید کند و در مقابل، یک متن طولانی و یکپارچه دریافت میکنید. چالش اصلی از اینجا شروع میشود که چگونه این اطلاعات را به یک آبجکت تمیز و قابل استفاده در اپلیکیشن خود تبدیل کنید، مثلاً یک ساختار Recipe با خصوصیات مجزای name، ingredients و instructions. آیا مجبور به نوشتن کدهای پیچیدهی پردازش رشته و عبارات منظم هستید؟ دیگر نه.
با معرفی iOS 26، فریمورک Foundation Models اپل در حال ایجاد انقلابی در این فرآیند است. این فریمورک دو ماکروی جدید و فوقالعاده قدرتمند به نامهای @Generable و @Guide را ارائه میدهد که برای سادهسازی تبدیل مستقیم متن بدون ساختار به آبجکتهای ساختاریافتهی سوئیفت طراحی شدهاند.
در این راهنما، بررسی خواهیم کرد که چگونه میتوانید از این ابزارها برای ساخت اپلیکیشنهای هوشمندتر و پویاتر بهره ببرید.
دمو: یک اپلیکیشن کوئیز تعاملی
برای مشاهدهی عملکرد این ماکروها در عمل، یک اپلیکیشن ساده کوئیز خواهیم ساخت. این اپلیکیشن از مدل زبان روی دستگاه برای تولید سؤالات چندگزینهای واژگان برای زبانآموزان انگلیسی استفاده میکند. پاسخ هوش مصنوعی صرفاً یک متن نخواهد بود؛ بلکه بهطور خودکار به یک آبجکت سوئیفت با ساختار کامل تبدیل میشود که آمادهی نمایش در رابط کاربری است.

این مثال نشان میدهد که توسعهدهندگان چگونه میتوانند فراتر از چتباتهای ساده رفته و از Foundation Models برای ایجاد محتوای ساختاریافته و تعاملی به صورت آنی استفاده کنند.
استفاده از @Generable و @Guide
بیایید با تعریف ساختار داده برای سؤال کوئیزمان شروع کنیم. ما نیاز داریم خود سؤال، لیستی از گزینهها، پاسخ صحیح و یک توضیح را ذخیره کنیم. در سوئیفت، این کار با یک ساختار ساده به شکل زیر انجام میشود:
struct Question {
let text: String
let choices: [String]
let answer: String
let explanation: String
}
جادو زمانی اتفاق میافتد که ماکروهای Foundation Models را معرفی میکنیم. برای سازگار کردن این ساختار با مدل هوش مصنوعی، کافی است آن را با @Generable نشانهگذاری کنید. سپس، میتوانید از ماکروی @Guide برای دادن دستورالعملهای مشخص به مدل در مورد چگونگی تولید داده برای هر خصوصیت استفاده کنید.
import FoundationModels
@Generable
struct Question {
@Guide(description: "The quiz question")
let text: String
@Guide(.count(4)) // ما دقیقاً ۴ گزینه چندگزینهای میخواهیم
let choices: [String]
let answer: String
@Guide(description: "A brief explanation of why the answer is correct.")
let explanation: String
}
ماکروی `@Guide` بسیار انعطافپذیر است. شما میتوانید یک `description` متنی برای ارائه زمینه یا محدودیتهایی برای آرایهها مانند `.count(4)`، `.minimumCount(3)` یا `.maximumCount(100)` تعیین کنید. این کار تضمین میکند که خروجی مدل قابل پیشبینی بوده و با نیازمندیهای اپلیکیشن شما مطابقت دارد.
نکته مهم: ترتیب خصوصیات اهمیت دارد! مدل زبان مقادیر را به صورت متوالی تولید میکند. در مثال ما، `explanation` باید بعد از `answer` بیاید زیرا محتوای آن به پاسخ صحیح وابسته است.
ساخت منطق اپلیکیشن کوئیز
حالا بیایید این منطق را در ویوی اپلیکیشن خود ادغام کنیم. در `ContentView`، یک `LanguageModelSession` راهاندازی میکنیم. این آبجکت تعامل با مدل روی دستگاه را مدیریت میکند. حتی میتوانیم با دستورالعملهای سیستمی مانند «شما یک معلم انگلیسی دبیرستان هستید» به آن یک شخصیت بدهیم.
import FoundationModels
struct ContentView: View {
@State private var session = LanguageModelSession(instructions: "You are a high school English teacher.")
@State private var question: Question?
// ... بدنه ویو ...
func generateQuestion() async throws -> Question {
let response = try await session.respond(to: "Create a vocabulary quiz...", generating: Question.self)
return response.content
}
}
خط کلیدی `session.respond(to: …, generating: Question.self)` است. در اینجا، ما یک پرامپت ارائه میدهیم و ساختار `@Generable` خود، یعنی `Question.self` را به عنوان نوع خروجی مورد نظر مشخص میکنیم. فریمورک بقیه کارها را انجام میدهد و به طور خودکار پاسخ هوش مصنوعی را به یک آبجکت `Question` تبدیل میکند. نیازی به هیچگونه پردازش دستی نیست!
نمایش سؤال
ویوی `QuestionView` مسئول نمایش سؤال، گزینهها و بازخورد است. این ویو از خصوصیات `@State` برای ردیابی انتخاب کاربر و اینکه آیا به سؤال پاسخ داده شده است یا نه، استفاده میکند که به رابط کاربری اجازه میدهد به صورت پویا بهروز شود. وقتی کاربر یک پاسخ را انتخاب میکند، ویو بازخورد فوری با ایموجیها (✅ یا ❌) ارائه میدهد و توضیح را نمایش میدهد.

خلاصه
ماکروهای @Generable و @Guide در فریمورک Foundation Models برای توسعهدهندگان iOS تحولآفرین هستند. آنها وظیفه پیچیده و مستعد خطای پردازش متن بدون ساختار را حذف میکنند و یک گردش کار یکپارچه برای تولید دادههای ساختاریافته و ایمن از نظر نوع (type-safe) مستقیماً از مدلهای زبان روی دستگاه فراهم میکنند. این قابلیت، دری را به روی نسل جدیدی از اپلیکیشنهای هوشمند، پویا و متمرکز بر حریم خصوصی باز میکند.
منبع: appcoda.com