Swift يلتقي الذكاء الاصطناعي: لماذا هذا مهم الآن
\n\nتخيل: أنت تكتب تطبيقًا لنظام iOS، وفجأة يمكن لمستخدمك أن يسأله ببساطة: «كيفية تحضير باستا كاربونارا؟» — ويحصل ليس على رابط لويكيبيديا، بل على إجابة حية ومفصلة. أو يطلب: «اكتب رسالة للمدير حول تأجيل الموعد النهائي» — وبعد ثانية تكون المسودة جاهزة. يبدو كالسحر؟ لا، هذا هو Swift + ChatGPT.
\n\nفي عام 2024، توقف دمج نماذج اللغة في التطبيقات المحمولة عن كونه حكرًا على الشركات العملاقة. الآن يمكن لأي مطور Swift إضافة الذكاء الاصطناعي إلى تطبيقه في أمسية واحدة. واليوم سأريكم كيف تفعلون ذلك — بكود حقيقي، بدون حشو، ومع فهم ما يحدث تحت الغطاء.
\n\nبالمناسبة، إذا كنت قد بدأت للتو رحلتك مع Swift وتريد التعمق في الأساسيات، فإن PythonLib هو مكان ممتاز لتقوية القاعدة قبل الغوص في الذكاء الاصطناعي. والآن — إلى العمل.
\n\nالخطوة 1. تجهيز البيئة: ما تحتاجه للعمل مع ChatGPT في Swift
\n\nقبل كتابة الكود، دعنا نتأكد من أن لديك كل ما تحتاجه. ستحتاج إلى:
\n\n- \n
- Xcode 15.0 أو أحدث (يفضل أحدث إصدار) \n
- iOS 16.0+ (لاستخدام
async/awaitبدون حلول بديلة) \n - مفتاح API من OpenAI (سجل في platform.openai.com، وأنشئ مفتاحًا) \n
- مكتبة للعمل مع الشبكة — سنستخدم
URLSession، لذا لا حاجة لأي تبعيات خارجية \n
نصيحة مهمة: لا تخزن مفتاح API مباشرة في الكود أبدًا. استخدم ملفات .xcconfig أو بروكسي خادم. في الأمثلة سأريكم كيفية قراءة المفتاح من Info.plist، ولكن في الإنتاج يجب عليكم تشفيره أو استخدام خلفية.
الخطوة 2. إنشاء هيكل الطلب إلى ChatGPT
\n\nيستخدم ChatGPT واجهة برمجة تطبيقات OpenAI، التي تستقبل JSON وتعيد رد النموذج. دعنا ننشئ هيكلًا بسيطًا لكنه عملي لإرسال الرسائل.
\n\nنماذج البيانات
\n\n// نموذج الرسالة\nstruct Message: Codable {\n let role: String // "system" أو "user" أو "assistant"\n let content: String\n}\n\n// نموذج الطلب\nstruct ChatGPTRequest: Codable {\n let model: String\n let messages: [Message]\n let temperature: Double?\n}\n\n// نموذج الرد\nstruct ChatGPTResponse: Codable {\n struct Choice: Codable {\n let message: Message\n }\n let choices: [Choice]\n}\n\n\nلاحظ temperature — هذه هي معلمة الإبداع. القيمة 0.0 تجعل الردود صارمة وواقعية، و1.0 تجعلها إبداعية. للدردشة الآلية اضبطها على 0.7، لتوليد الأفكار على 0.9.
خدمة العمل مع API
\n\nclass ChatGPTService {\n \n private let apiKey: String\n private let baseURL = "https://api.openai.com/v1/chat/completions"\n \n init() {\n // نقرأ المفتاح من Info.plist (للاستخدام التجريبي فقط!)\n guard let key = Bundle.main.object(forInfoDictionaryKey: "OPENAI_API_KEY") as? String else {\n fatalError("API Key not found")\n }\n self.apiKey = key\n }\n \n func sendMessage(_ text: String) async throws -> String {\n let messages = [\n Message(role: "system", content: "أنت مساعد مفيد لمطور iOS. أجب بإيجاز، باللغة العربية."),\n Message(role: "user", content: text)\n ]\n \n let requestBody = ChatGPTRequest(\n model: "gpt-3.5-turbo",\n messages: messages,\n temperature: 0.7\n )\n \n var request = URLRequest(url: URL(string: baseURL)!)\n request.httpMethod = "POST"\n request.setValue("application/json", forHTTPHeaderField: "Content-Type")\n request.setValue("Bearer \\(apiKey)", forHTTPHeaderField: "Authorization")\n request.httpBody = try JSONEncoder().encode(requestBody)\n \n let (data, _) = try await URLSe