Swift encontra a inteligência artificial: por que isso é importante agora
\n\nImagine: você está escrevendo um aplicativo para iOS e, de repente, seu usuário pode simplesmente perguntar: "Como fazer massa carbonara?" — e receber não um link para a Wikipedia, mas uma resposta viva e detalhada. Ou pedir: "Escreva um e-mail para o chefe sobre o adiamento do prazo" — e em um segundo o rascunho está pronto. Parece mágica? Não, é Swift + ChatGPT.
\n\nEm 2024, a integração de modelos de linguagem em aplicativos móveis deixou de ser privilégio dos gigantes. Agora, qualquer desenvolvedor Swift pode adicionar inteligência artificial ao seu aplicativo em uma noite. E hoje vou mostrar como fazer isso — com código real, sem enrolação e com compreensão do que acontece nos bastidores.
\n\nA propósito, se você está começando no Swift e quer se aprofundar nos fundamentos, o PythonLib é um ótimo lugar para reforçar a base antes de mergulhar na IA. Agora, vamos ao que interessa.
\n\nPasso 1. Preparando o ambiente: o que é necessário para trabalhar com ChatGPT em Swift
\n\nAntes de escrever código, vamos garantir que você tenha tudo o que precisa. Você vai precisar de:
\n\n- \n
- Xcode 15.0 ou superior (de preferência a versão mais recente) \n
- iOS 16.0+ (para usar
async/awaitsem gambiarras) \n - Chave de API da OpenAI (registre-se em platform.openai.com, crie uma chave) \n
- Biblioteca para trabalhar com rede — usaremos
URLSession, então não são necessárias dependências externas \n
Dica importante: nunca armazene a chave de API diretamente no código. Use arquivos .xcconfig ou um proxy de servidor. Nos exemplos, mostrarei como ler a chave do Info.plist, mas em produção, criptografe ou use um backend.
Passo 2. Criando a estrutura da requisição para o ChatGPT
\n\nO ChatGPT usa a API da OpenAI, que recebe JSON e retorna a resposta do modelo. Vamos criar uma estrutura simples, mas funcional, para enviar mensagens.
\n\nModelos de dados
\n\n// Modelo de mensagem\nstruct Message: Codable {\n let role: String // "system", "user" ou "assistant"\n let content: String\n}\n\n// Modelo de requisição\nstruct ChatGPTRequest: Codable {\n let model: String\n let messages: [Message]\n let temperature: Double?\n}\n\n// Modelo de resposta\nstruct ChatGPTResponse: Codable {\n struct Choice: Codable {\n let message: Message\n }\n let choices: [Choice]\n}\n\n\nObserve o temperature — é o parâmetro de criatividade. O valor 0.0 torna as respostas rigorosas e factuais, 1.0 as torna criativas. Para um chatbot, use 0.7; para geração de ideias, 0.9.
Serviço para trabalhar com a 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 // Lê a chave do Info.plist (apenas para testes!)\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: "Você é um assistente útil para desenvolvedores iOS. Responda de forma concisa, em português."),\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