Sztuczna inteligencja w aplikacjach mobilnych. Jak i kiedy zintegrować SwiftUI z API OpenAI?

Sztuczna inteligencja w aplikacjach mobilnych. Jak i kiedy zintegrować SwiftUI z API OpenAI?

Integracja z modelami językowymi to obecnie jedno z najciekawszych zastosowań AI w aplikacjach mobilnych.

Coraz częściej pojawiają się w nich inteligentne funkcje, które potrafią prowadzić rozmowę z użytkownikiem czy pomagać mu w codziennych zadaniach.

Sprawdź, kiedy warto rozważyć integrację API OpenAI z aplikacją mobilną w SwiftUI i dowiedz się, jak można ją łatwo przeprowadzić, by stworzyć czatbota.

Dlaczego warto połączyć aplikację mobilną z AI?

Wdrożenia AI w firmach są coraz częstsze. Według raportu PwC aż 79% ankietowanych reprezentujących kadrę wyższego szczebla deklaruje, że rozwiązania AI są już stosowane w ich przedsiębiorstwach, a dwie trzecie z nich odnotowuje dzięki temu poprawę wydajności.

Sztuczna inteligencja staje się bardziej dostępna również dla użytkowników aplikacji mobilnych. Częściej oczekują oni, że aplikacje będą ich lepiej „rozumieć” — a to właśnie umożliwiają algorytmy oparte na uczeniu maszynowym i modelach językowych, takich jak GPT-4.1 albo o4-mini. AI lepiej rozwiązuje też ich codzienne problemy.

Dzięki AI aplikacje mogą lepiej przewidywać potrzeby użytkowników, automatyzować rutynowe zadania, wspierać w podejmowaniu decyzji i dostarczać spersonalizowane treści.

Dają dostęp do wielu rozwiązań – od automatycznego rozpoznawania tekstu, przez rekomendacje produktów, po naturalną konwersację z użytkownikiem. W efekcie aplikacja może głębiej angażować użytkownika i dawać większą satysfakcję z korzystania z produktu.

Korzyści z integracji aplikacji z modelem GPT

Powszechnie znany ChatGPT to czatbot bazujący na zaawansowanym modelu językowym, oparty na architekturze GPT (Generative Pre-trained Transformer). Został opracowany przez firmę OpenAI. Działa na zasadzie przewidywania kolejnych słów w zdaniu, tworząc spójne i (zazwyczaj) logiczne odpowiedzi.

Potrafi między innymi prowadzić konwersacje, odpowiadać na pytania, tłumaczyć teksty, podsumowywać dokumenty czy generować pomysły. To możliwe, bo był trenowany na ogromnej ilości treści. Dzięki temu może być użyteczny zarówno w aplikacjach edukacyjnych, biznesowych, jak i rozrywkowych.

Co daje integracja aplikacji mobilnej z AI?

  • oszczędność czasu – praca nad projektem może trwać krócej dzięki automatyzacji procesów rejestracji, zgłaszania błędów czy uzyskiwania wsparcia z wykorzystaniem AI
  • obniżenie kosztów obsługi klienta i wsparcia technicznego
  • zwiększenie zaangażowania i personalizacja doświadczeń – klienci częściej wracają do aplikacji, gdy mają poczucie, że odpowiada ona na ich potrzeby, a zastosowanie AI pomoże w ich przewidywaniu i opracowywaniu rozwiązań, które powinny się spodobać użytkownikom
  • obsługa wielu języków – dzięki AI możesz szybko przekazywać informacje czy publikować treści w różnych językach
  • lepsza komunikacja – z pomocą modeli AI możesz stworzyć interfejs czatu, usprawnić poruszanie się po aplikacji i ulepszyć proces przekazywania informacji; całodobowy asystent będzie odpowiadał na pytania użytkowników bez potrzeby angażowania Twojego zespołu.

Przykładowe zastosowania czatów AI w aplikacjach

  • E-commerce: czatbot-asystent zakupowy sugeruje produkty, odpowiada na pytania o dostawę i przyjmuje reklamacje
  • Edukacja: interaktywny tutor odpowiadający na pytania z kursu i pomagający w nauce
  • Zdrowie: przypomnienia, monitorowanie objawów, odpowiedzi na częste pytania pacjentów
  • Usługi finansowe: AI doradca tłumaczący działanie produktów bankowych i inwestycyjnych prostym językiem.

Wybór modelu

Wybór najnowszego modelu językowego nie zawsze będzie dobrą decyzją. Należy zastanowić się, jakie są Twoje priorytety i planowane zastosowanie. Musisz rozważyć, które aspekty są dla Ciebie kluczowe: koszty, wydajność, czas odpowiedzi czy ich jakość.

Przykład nr 1:

Model gpt-3.5-turbo

Zalety: bardzo niski koszt, jakość wystarczająca dla prostych czatów, FAQ, wsparcie klienta

Wady: słabsze rozumienie kontekstu, gorsza jakość w dłuższych rozmowach

Przykład nr 2:

Opcją zapewniającą wysoką jakość konwersacji (np. przy terapeutach AI czy zaawansowanych asystentach) jest model GPT-4o.

Zalety: lepsze rozumienie niuansów, bardziej naturalne i szybkie odpowiedzi

Wady: wyższy koszt

Można również zastosować opcje mieszaną, gdzie model jest dynamicznie przełączany. Np. możesz domyślnie używać gpt-3.5, ale w  przypadku trudniejszych zapytań lub płacących użytkowników (wersja premium) przełączasz się na gpt-4o.

Pamiętaj Rozwiązania AI nie są nieomylne. Gdy zadajesz pytanie, model analizuje sekwencje słów i próbuje wygenerować najbardziej prawdopodobną kontynuację, ale nie rozumie on ich prawdziwego znaczenia, a jedynie operuje na wzorcach językowych. Dlatego czasem gdy brakuje mu odpowiednich informacji, “zgaduje” odpowiedź, przedstawiając wymyślone fakty. W żargonie sztucznej inteligencji takie zjawisko nazywamy halucynacjami. Należy podjąć wszelkie możliwe działania, aby zabezpieczyć się przed podawaniem błędnych odpowiedzi.

SwiftUI jako nowoczesne narzędzie do tworzenia UI

SwiftUI to framework Apple. Dzięki deklaratywnemu podejściu pozwala on tworzyć przejrzysty i wydajny kod, który łatwo testować i rozwijać. SwiftUI świetnie integruje się z asynchronicznymi operacjami sieciowymi, a to kluczowe przy komunikacji z API AI.

SwiftUI oferuje także bogaty ekosystem narzędzi deweloperskich, integrację z Combine i Swift Concurrency, oraz wsparcie dla nowoczesnych wzorców projektowych (np. MVVM). Wszystko to sprawia, że SwiftUI jest doskonałym wyborem dla aplikacji wykorzystujących sztuczną inteligencję.

Sprawdź, jak zintegrować SwiftUI z GPT.

Konfiguracja projektu SwiftUI z integracją GPT

Konfiguracja środowiska

Zanim zaczniesz pisać kod, musisz przygotować aplikację do pracy z zewnętrznym API:

a) Importy

Upewnij się, że masz w pliku odpowiednie importy:

import SwiftUI
import Foundation

b) Uprawnienia sieciowe

Aby aplikacja mogła łączyć się z internetem i serwerem OpenAI, musisz dodać wpis do pliku Info.plist. Najprostszy sposób (na potrzeby testów) to:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
Na produkcji zaleca się ograniczyć wyjątki tylko do domeny api.openai.com, np.:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>api.openai.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
    </dict>
</dict>

 

 

Budowanie interfejsu czatu w SwiftUI

Ten etap polega na stworzeniu wizualnej części aplikacji – widoku czatu, w którym użytkownik wpisuje wiadomości, a aplikacja na nie odpowiada.

Kod poniżej tworzy podstawowy czat tekstowy:

struct ChatMessage: Identifiable {
  let id = UUID()
  let content: String
  let isUser: Bool
}
struct ChatView: View {
  @State private var messages: [ChatMessage] = []
  @State private var inputText: String = ""

  var body: some View {
    VStack {
      ScrollView {
        ForEach(messages) { message in
          HStack {
            if message.isUser {
              Spacer()
              Text(message.content).padding().background(Color.blue).cornerRadius(8)
                .foregroundColor(.white)
            } else {
              Text(message.content).padding().background(Color.gray.opacity(0.2)).cornerRadius(8)
              Spacer()
            }
          }.padding(.horizontal)
        }
      }
      HStack {
        TextField("Wpisz wiadomość...", text: $inputText)
        Button("Wyślij") {
          sendMessage()
        }
      }.padding()
    }
  }

  func sendMessage() {
    let userMessage = ChatMessage(content: inputText, isUser: true)
    messages.append(userMessage)
    inputText = ""

    fetchResponse(prompt: userMessage.content) { response in
      DispatchQueue.main.async {
        let botMessage = ChatMessage(content: response, isUser: false)
        messages.append(botMessage)
      }
    }
  }
}

Połączenie z API OpenAI

Ten etap to serce logiki aplikacji. Na czym polega? Programista tworzy funkcję fetchResponse, która wysyła zapytanie do OpenAI, a następnie odbiera odpowiedź. W tym momencie aplikacja łączy się z serwerem sztucznej inteligencji i przekazuje odpowiedź użytkownikowi.

Oto przykładowa funkcja wysyłająca zapytanie:

func fetchResponse(prompt: String, completion: @escaping (String) -> Void) {
  let url = URL(string: "https://api.openai.com/v1/chat/completions")!
  var request = URLRequest(url: url)
  request.httpMethod = "POST"
  request.addValue("Bearer TWÓJ_KLUCZ_API", forHTTPHeaderField: "Authorization")
  request.addValue("application/json", forHTTPHeaderField: "Content-Type")

  let body: [String: Any] = [
    "model": "gpt-3.5-turbo",
    "messages": [["role": "user", "content": prompt]],
  ]

  request.httpBody = try? JSONSerialization.data(withJSONObject: body)

  URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data,
      let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
      let choices = json["choices"] as? [[String: Any]],
      let message = choices.first?["message"] as? [String: Any],
      let content = message["content"] as? String
    else {
      completion("Brak odpowiedzi od modelu.")
      return
    }
    completion(content.trimmingCharacters(in: .whitespacesAndNewlines))
  }.resume()
}

Funkcja fetchResponse(prompt:completion:) wysyła zapytanie tekstowe do modelu językowego GPT przez API OpenAI i zwraca wygenerowaną odpowiedź w postaci tekstu.

W kodzie znajdzie się fragment:

request.addValue("Bearer TWÓJ_KLUCZ_API", forHTTPHeaderField: "Authorization")

Umożliwia to integrację funkcjonalności sztucznej inteligencji w aplikacjach SwiftUI np. w celu stworzenia inteligentnego asystenta użytkownika.

Pamiętaj

Dla bezpieczeństwa nie trzymaj klucza API bezpośrednio w kodzie aplikacji. Możesz:

  • trzymać go w osobnym pliku .plist,
  • przechowywać w Keychain,
  • lub korzystać z serwera pośredniczącego (proxy API), który ukrywa klucz przed aplikacją kliencką.

Sygnatura:

func fetchResponse(prompt: String, completion: @escaping (String) -> Void)

Parametry:

  • prompt: String
    Treść pytania lub wiadomości, którą użytkownik chce wysłać w czacie.
  • completion: @escaping (String) -> Void
    Blok wykonujący się asynchronicznie po otrzymaniu odpowiedzi z API. Zwraca tekstową odpowiedź modelu lub komunikat błędu.

Utworzenie URL i żądania HTTP

let url = URL(string: "https://api.openai.com/v1/chat/completions")!
var request = URLRequest(url: url)
request.httpMethod = "POST"

Dodanie nagłówków

request.addValue("Bearer TWÓJ_KLUCZ_API", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

Authorization: klucz API uzyskany z OpenAI
Content-Type: typ danych (JSON)

Przygotowanie zapytania

let body: [String: Any] = [
  "model": "gpt-3.5-turbo",
  "messages": [["role": "user", "content": prompt]],
]
request.httpBody = try? JSONSerialization.data(withJSONObject: body)

model: określa wersję modelu (tu: gpt-3.5-turbo)
messages: tablica z wiadomością użytkownika; model pracuje kontekstowo

Wysłanie zapytania i obsługa odpowiedzi

URLSession.shared.dataTask(with: request) { data, response, error in
    // Dekodowanie odpowiedzi z JSON
}.resume()

Funkcja:

  • tworzy żądanie asynchroniczne
  • odczytuje odpowiedź w formacie JSON
  • wyciąga wygenerowaną treść z pierwszego elementu tablicy choices

Obsługa sukcesu i błędów

guard let content = ... else {
  completion("Brak odpowiedzi od modelu.")
  return
}

Rozbudowa aplikacji

Możliwości integracji AI nie kończą się na prostym czacie. Możesz dodać chociażby obsługę treści rozmowy czy skorzystać z alternatywnych modeli i API. Wszystko to pozwoli rozwinąć funkcjonalności aplikacji i dopasować ją do potrzeb użytkowników i biznesu.

Obsługa kontekstu rozmowy

Na początku czatbot odpowiada tylko na jedno pytanie na raz i nie pamięta wcześniejszych wiadomości. To trochę jak rozmowa z kimś, kto za każdym razem zapomina, co było przed chwilą powiedziane.

Aby konwersacja była zapamiętywana, można dodawać kolejne wiadomości do tablicy messages i wysyłać cały kontekst rozmowy przy każdym zapytaniu. Dzięki temu aplikacja zapamiętuje poprzednie pytania i odpowiedzi, a następnie wysyła całą historię rozmowy do modelu AI za każdym razem, gdy użytkownik coś wpisze.

W rezultacie AI lepiej rozumie, o co użytkownik pyta, bo zna już wcześniejsze tematy i nie musi za każdym razem zaczynać od zera. To sprawia, że rozmowa staje się bardziej naturalna.

Inne modele i API

W przyszłości możesz dodać np. poniższe rozwiązania:

  • rozpoznawanie głosu (Speech API)
  • generowanie obrazów (DALL·E)
  • integrację z bazą danych np. Firestore lub CoreData.

Podsumowanie

Integracja sztucznej inteligencji, w tym modeli GPT, z aplikacjami mobilnymi tworzonymi w SwiftUI, otwiera nowe możliwości dla personalizacji i automatyzacji. Pozwala to na usprawnienie procesów, redukcję kosztów i zwiększenie zaangażowania użytkowników. Jednocześnie trzeba jednak pamiętać o uwzględnieniu wyzwań związanych z dokładnością AI.

Chcesz dowiedzieć się, jak wdrożyć rozwiązania AI w Twojej aplikacji? Skontaktuj się z nami, aby omówić możliwości dostosowane do Twoich potrzeb.

 

Portrait of Wojtek, iOS Developer

Wojtek Byczkowski

iOS Developer, który wierzy, że mniej znaczy więcej w tworzeniu oprogramowania. Pracując nad projektem, zawsze stawia wydajność na pierwszym miejscu. Poza pisaniem kodu jego pasją jest sport. Jeśli chcesz porozmawiać o piłce nożnej albo żużlu, Wojtek będzie odpowiednią osobą.

Dowiedz się więcej

Wycena projektu

Opowiedz nam o swoim projekcie i napisz, jak możemy Ci pomóc.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2021

Wygrana w kategorii
ŻYCIE CODZIENNE

Nagroda Legalnych Bukmacherów

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

Mobile Trends Awards logo

Mobile Trends Awards 2023

Wygrana w kategorii
MCOMMERCE ROZWÓJ

24

opinie klientów

Clutch logo