본문 바로가기

iOS

(iOS) Chat GPT 사용해보기

728x90
반응형
SMALL

먼저 api key 를 만들어야합니다요.

https://platform.openai.com/ 여기서 로그인하고

아주 쉽게 만들 수 있습니다.

 

그리고 Alamofire가 필요한데!!

*** Alamofire란? ***

Swift로 작성된 HTTP 클라이언트 라이브러리로, API 호출 및 JSON 파싱 등의 작업을 쉽게 수행할 수 있도록 지원합니다.

따라서, iOS 프로젝트에서 OpenAI API 사용하려면, Alamofire 라이브러리를 사용하여 API 호출 JSON 파싱을 구현하면 됩니다. Podfile에는 다음과 같이 Alamofire 추가할 있습니다.

 

그리고 Pod install 이후 확장자 .xcodeproj  이 아니라 .xcworkspace로 프로젝트를 열어서

 

API를 핸들링 할 소스 코드를 만드시면 됩니다.

 

관련 문서 - https://platform.openai.com/docs/api-reference/making-requests

//
//  APIHandler.swift
//  chatGPTtest
//
//  Created by Byeon jinha on 2023/04/12.
//

import Alamofire

struct ChatCompletion: Decodable {
    let id: String
    let object: String
    let created: Int
    let model: String
    let usage: Usage
    let choices: [Choice]
    
    struct Usage: Decodable {
        let prompt_tokens: Int
        let completion_tokens: Int
        let total_tokens: Int
    }
    
    struct Choice: Decodable {
        let message: Message
        let finish_reason: String
        let index: Int
        
        struct Message: Decodable {
            let role: String
            let content: String
        }
    }
}

func callAPI(userInput: String, completion: @escaping (String) -> Void) {
    if let apiKey = Bundle.main.infoDictionary?["API_KEY"] as? String {
        let headers: HTTPHeaders = [
            "Content-Type": "application/json",
            "Authorization": "Bearer \(apiKey)"
        ]
        
        let parameters: [String: Any] = [
            "model": "gpt-3.5-turbo",
            "messages": [
                ["role": "user", "content": userInput]
            ],
            "temperature": 0.7
        ]
        
        AF.request("https://api.openai.com/v1/chat/completions", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
            .validate(statusCode: 200..<300)
            .responseDecodable(of: ChatCompletion.self) { response in
                switch response.result {
                case .success(let chatCompletion):
                    if let text = chatCompletion.choices.first?.message.content {
                        completion(text)
                    }
                case .failure(let error):
                    print(error.localizedDescription)
                }
            }
    }
}

 

그리고 API KEY를 관리할 Configuration Settings File을 만드신 다음

이렇게 api key를 저장해 주시면 됩니다.

 

그리고 빌드 페이지에서 API_KEY 파일 설정 해주시면 됩니다. 

 

그리고 메인 뷰에서 API를 호출하면

//
//  ContentView.swift
//  chatGPTtest
//
//  Created by Byeon jinha on 2023/04/12.
//

import SwiftUI

struct ContentView: View {
    @State private var userInput: String = ""
    @State private var chatResponse: String = ""
    
    var body: some View {
        NavigationView {
            VStack {
                TextField("메시지를 입력하세요", text: $userInput)
                    .padding()
                Button(action: {
                    callAPI(userInput: userInput) { text in
                        chatResponse = text
                    }
                }) {
                    Text("API 호출하기")
                        .padding()
                        .background(Color.blue)
                        .foregroundColor(.white)
                        .font(.headline)
                        .cornerRadius(10)
                }
                Text(chatResponse)
                    .padding()
            }
            .navigationBarTitle("ChatGPT")
        }
    }
}

 

짜잔!!! 버튼을 눌리면 ChatGPT 가 답변해줍니다!!! :) 화이팅!!

 

이미지 호출까지 실험해본 결과!!! 잘 뜹니다!!!

나머진 시간날 때 한번씩 써봐도 재밌을 것 같아요. :)

 

728x90
반응형
LIST

'iOS' 카테고리의 다른 글

Content hugging과 Compression resistance  (0) 2023.04.12
intrinsicContentSize  (0) 2023.04.12
컬렉션 뷰에서 데이터를 사용할 때 struct?, class?  (0) 2023.04.11
Static dispatch, Dynamic dispatch  (0) 2023.04.11
iOS APP 화면 구성  (0) 2023.04.11