Swift se encuentra con la inteligencia artificial: por qué es importante ahora mismo
\n\nImagine: está escribiendo una aplicación para iOS y, de repente, su usuario puede simplemente preguntarle: «¿Cómo preparar pasta carbonara?» — y obtener no un enlace a Wikipedia, sino una respuesta viva y detallada. O pedirle: «Escribe una carta al jefe sobre el aplazamiento de la fecha límite» — y en un segundo el borrador está listo. ¿Suena a magia? No, es Swift + ChatGPT.
\n\nEn 2024, la integración de modelos de lenguaje en aplicaciones móviles ha dejado de ser cosa de gigantes. Ahora cualquier desarrollador de Swift puede añadir inteligencia artificial a su aplicación en una tarde. Y hoy les mostraré cómo hacerlo — con código real, sin rodeos y entendiendo lo que sucede bajo el capó.
\n\nPor cierto, si recién está comenzando su camino en Swift y quiere profundizar en los fundamentos, PythonLib es un excelente lugar para reforzar la base antes de sumergirse en la IA. Y ahora, al grano.
\n\nPaso 1. Preparando el entorno: qué se necesita para trabajar con ChatGPT en Swift
\n\nAntes de escribir código, asegurémonos de que tiene todo lo necesario. Necesitará:
\n\n- \n
- Xcode 15.0 o superior (preferiblemente la última versión) \n
- iOS 16.0+ (para usar
async/awaitsin muletas) \n - Clave API de OpenAI (regístrese en platform.openai.com, cree una clave) \n
- Biblioteca para trabajar con la red — usaremos
URLSession, así que no se necesitan dependencias externas \n
Consejo importante: nunca guarde la clave API directamente en el código. Use archivos .xcconfig o un proxy de servidor. En los ejemplos mostraré cómo leer la clave desde Info.plist, pero en producción asegúrese de cifrarla o usar un backend.
Paso 2. Creando la estructura de la solicitud a ChatGPT
\n\nChatGPT usa la API de OpenAI, que recibe JSON y devuelve la respuesta del modelo. Vamos a crear una estructura simple pero funcional para enviar mensajes.
\n\nModelos de datos
\n\n// Modelo de mensaje\nstruct Message: Codable {\n let role: String // "system", "user" o "assistant"\n let content: String\n}\n\n// Modelo de solicitud\nstruct ChatGPTRequest: Codable {\n let model: String\n let messages: [Message]\n let temperature: Double?\n}\n\n// Modelo de respuesta\nstruct ChatGPTResponse: Codable {\n struct Choice: Codable {\n let message: Message\n }\n let choices: [Choice]\n}\n\n\nObserve el temperature — es el parámetro de creatividad. El valor 0.0 hace las respuestas estrictas y factuales, 1.0 las hace creativas. Para un chatbot ponga 0.7, para generación de ideas 0.9.
Servicio para trabajar con la 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 // Leemos la clave desde Info.plist (¡solo para pruebas!)\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: "Eres un asistente útil para desarrolladores iOS. Responde brevemente, en español."),\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