Swift rencontre l'intelligence artificielle : pourquoi c'est important maintenant
\n\nImaginez : vous développez une application pour iOS, et soudain, votre utilisateur peut simplement lui demander : « Comment préparer des pâtes à la carbonara ? » — et obtenir non pas un lien vers Wikipédia, mais une réponse vivante et détaillée. Ou demander : « Écris une lettre au patron concernant le report de la date limite » — et en une seconde, le brouillon est prêt. Cela ressemble à de la magie ? Non, c'est Swift + ChatGPT.
\n\nEn 2024, l'intégration de modèles linguistiques dans les applications mobiles n'est plus réservée aux géants. Désormais, tout développeur Swift peut ajouter de l'intelligence artificielle à son application en une soirée. Et aujourd'hui, je vais vous montrer comment faire — avec du code réel, sans blabla et en comprenant ce qui se passe sous le capot.
\n\nD'ailleurs, si vous débutez tout juste votre parcours avec Swift et souhaitez approfondir les bases, PythonLib est un excellent endroit pour consolider vos connaissances avant de plonger dans l'IA. Et maintenant, passons aux choses sérieuses.
\n\nÉtape 1. Préparer l'environnement : ce dont vous avez besoin pour travailler avec ChatGPT en Swift
\n\nAvant d'écrire du code, assurons-nous que vous avez tout le nécessaire. Vous aurez besoin de :
\n\n- \n
- Xcode 15.0 ou plus récent (de préférence la dernière version) \n
- iOS 16.0+ (pour utiliser
async/awaitsans bricolage) \n - Une clé API d'OpenAI (inscrivez-vous sur platform.openai.com, créez une clé) \n
- Une bibliothèque pour travailler avec le réseau — nous utiliserons
URLSession, donc aucune dépendance externe n'est nécessaire \n
Conseil important : ne stockez jamais la clé API directement dans le code. Utilisez des fichiers .xcconfig ou un proxy serveur. Dans les exemples, je montrerai comment lire la clé depuis Info.plist, mais en production, chiffrez-la ou utilisez un backend.
Étape 2. Créer la structure de la requête vers ChatGPT
\n\nChatGPT utilise l'API OpenAI, qui accepte du JSON et renvoie la réponse du modèle. Créons une structure simple mais fonctionnelle pour envoyer des messages.
\n\nModèles de données
\n\n// Modèle de message\nstruct Message: Codable {\n let role: String // "system", "user" ou "assistant"\n let content: String\n}\n\n// Modèle de requête\nstruct ChatGPTRequest: Codable {\n let model: String\n let messages: [Message]\n let temperature: Double?\n}\n\n// Modèle de réponse\nstruct ChatGPTResponse: Codable {\n struct Choice: Codable {\n let message: Message\n }\n let choices: [Choice]\n}\n\n\nNotez le paramètre temperature — c'est le paramètre de créativité. Une valeur de 0.0 rend les réponses strictes et factuelles, 1.0 les rend créatives. Pour un chatbot, réglez-le sur 0.7, pour la génération d'idées, sur 0.9.
Service pour travailler avec l'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 // Lecture de la clé depuis Info.plist (uniquement pour les tests !)\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: "Tu es un assistant utile pour développeur iOS. Réponds brièvement, en français."),\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