250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

IOS - ChatGPT 연결 본문

Swift 실습

IOS - ChatGPT 연결

스윞남 2024. 3. 5. 16:41
728x90
반응형
SMALL

안녕하세요! 이번 포스팅은 OpenAI의 ChatGPT를 연결시켜 사용해 보겠습니다!

 

 

기록하며 실시간으로 궁금한 점에 대해 생성형 AI에게 물어보는 서비스를 개발 중인데, 챗GPT를 연결시켜 보는 실습을 진행해 보았습니다!

 

1. OpenAI 사이트 접속/로그인/회원가입


https://openai.com/

 

OpenAI

Introducing Sora: Creating video from text

openai.com

2. OpenAI API를 사용하기 위한 앱키 발급!

 

API를 사용하기 위해 앱키를 발급받습니다. 앱키는 유출되면 안 되니 조심히 사용해 주세요! 저는 앱키가 한번 유출당했어서 OpenAI 측에서 메일로 앱키를 강제 삭제 시킨 적이 있습니다. 여러분들도 주의하세요!

앱키를 발급받으셨다면, API 사용한도를 설정해 주세요! 토큰당 저렴한 가격으로 결제가 되지만, 저는 1달러로 제한을 두고 넘으면 메일이 오게 설정해두었습니다. OpenAI 측에서 약 12달러 정도는 무료로 하고 있으나, 혹시 모르니 설정해주세요!

 

3. playground 확인해 보기!!⭐️

저는 처음에 연결을 시킬 때 분명 원하는 조건을 다 맞추었지만, 되지 않았던 경험이 있었는데요! 그럴 때 연결시키기 전 꼭 playground에서 한번 실행해 보는 걸 추천드립니다. playground에서 잘 작동이 된다면, 코드 상으로 필요한 조건을 다 갖추었다는 가정하에 연결이 잘 될 거예요!

 

728x90

4. Xcode에서 코드 작성

먼저 ChatGPT로부터 받아오는 형식의 Model을 작성해 줍니다.

import Foundation

struct ChatServiceModel : Codable {
    let choices : [Choice]
}
struct Choice : Codable {
    let message: Message
}
struct Message: Codable {
    let content: String
}

 

그 후 GPT를 이용할 서비스 코드를 만들어 줍니다. 저는 Alamofire 라이브러리를 사용해서 통신을 진행했습니다. 

func requestChat(searchTitle : ChatModel) -> Observable<ChatServiceModel> {
        return Observable.create { observer in
            let apiKey = ""
            let url = "https://api.openai.com/v1/chat/completions"
            let parameters: [String: Any] = [
                            "model": "gpt-3.5-turbo",
                            "messages": [
                                ["role": "system", "content": "About the SearchInfo I am searching for, please tell me 1. Theoretical definition 2. Examples used in real life 3. Basic problems and answers using the theory. You must answer in Korean."],
                                ["role": "user", "content": "SearchInfo : \(searchTitle.searchTitle)"]
                            ]
                        ]
            AF.request(url, method: .post ,parameters: parameters, encoding: JSONEncoding.default, headers: ["Authorization" : "Bearer \(apiKey)", "Content-Type" : "application/json"])
                .validate()
                .responseDecodable(of: ChatServiceModel.self){ response in
                    switch response.result {
                    case .success(let data):
                        observer.onNext(data)
                        observer.onCompleted()
                    case .failure(let error):
                        observer.onError(error)
                    }
                }
            return Disposables.create()
        }
    }

 

 통신할 때 필요한 발급받은 apiKey, url을 위와 같이 설정해 주고, 3.5 터보 모델을 사용해 post로 파라미터를 위와 같이 설정해 주었습니다. 제가 원하는 형식으로 챗 에게 역할을 부여해 주었고, 헤더값에는 인증에 "Bearer" + 앱키, Content-Type은 application/json으로 설정해주었습니다.

5. 마무리!

검색 결과를 바탕으로 저는

1. 이론적 정의

2. 실생활 예시

3. 문제점과 해결책

을 알려달라고 AI에게 정의를 내렸습니다.

 

아래의 이미지와 같이 생성형 AI에게 전달받은 글을 뷰로 잘 보이는 것을 확인할 수 있습니다.

 

 

이번 포스팅에서는 chatGPT를 연결해 보는 실습을 해보았고요 다음 포스팅에서는 더 유익한 글로 돌아오겠습니다!

 

 

728x90
반응형
LIST