LoginSignup
8
7

More than 1 year has passed since last update.

ChatGPT APIをSwiftで使ってみる。

Posted at

はじめに

最近、ChatGPT APIがリリースされたので、さっそく使ってみました。

今回リリースされたモデルは、以前のGPT-3.5系のモデルよりも1/10のコストで利用できるみたいです。
以下、Introducing ChatGPT and Whisper APIsより。

The ChatGPT model family we are releasing today, gpt-3.5-turbo, is the same model used in the ChatGPT product. It is priced at $0.002 per 1k tokens, which is 10x cheaper than our existing GPT-3.5 models.

前回text-davinci-003を利用したChatGPTライクな音声対話アプリを作ったのですが、今回はChatGPTに搭載されている言語モデルのgpt-3.5-turboを利用したサンプルアプリを作ってみます。

サンプルアプリはGitHubに公開していますので、興味ある方はご覧ください。

サンプルアプリ

GitHub

ChatGPT APIの実装

まず、Alamofireを利用してChatGPT APIと連携します。(OpenAISwiftにgpt-3.5-turboのモデル選択が見当たらず、Alamofireで実装しています。)

公式ドキュメントのリクエストのフォーマット通りに、Alamofireでパラメータ設定を行います。

let headers: HTTPHeaders = [
    "Content-type": "application/json",
    "Authorization":"Bearer \(token)" // OpenAIのAPI_KEYを指定
]

let parameters: [String: Any] = [
    "model": "gpt-3.5-turbo",
    "messages": messages
]

AF.request(
    "https://api.openai.com/v1/chat/completions",
    method: .post,
    parameters: parameters,
    encoding: JSONEncoding.default,
    headers: headers
).responseData(completionHandler: { response in
    switch response.result {
    case .success(let data):
        // 成功後の処理
        break
    case .failure(let error):
        // 失敗後の処理
        break
    }
})

parameters内のmodelには、gpt-3.5-turboを、messagesには、roleとcontentからなるmessageオブジェクトの配列を渡します。roleはuser, system, assistantのいずれかを指定します。

実際に以下のような例を考えると、

チャットの例
user: こんにちは。
assistant: こんにちは。
user: Swiftについて教えて。

messagesは以下のように記述されます。

let messages = [
    ["role": "user", "content":"こんにちは。"],
    ["role": "assistant", "content":"こんにちは。"],
    ["role": "user", "content":"Swiftについて教えて。"]
]

さらに次のように、systemを指定することで、アシスタントのふるまいを設定することも可能なようです。以下の例では、アシスタントに「人間と会話するチャットボット」のように振る舞ってもらえるはずです。

let messages = [
    ["role": "system", "content":"あなたは人間と会話するチャットボットです。"],
    ["role": "user", "content":"こんにちは。"],
    ["role": "assistant", "content":"こんにちは。"]
]

上記のように、アシスタントとユーザーの会話の履歴ごと、APIに渡すことで、アシスタントと会話を続けることが可能になります。会話の履歴がないとsingle-turnな単調な一問一答になります。

最後に

今回は、ChatGPT APIを使ってサンプルアプリを作ってみました。

最近、ChatGPTをよく使いますが本当に便利ですね。ただChatGPTをより良く使うには、使う側の能力(適切な質問を行うなど)も重要だなと実感しています。最近では、Prompt Engineeringといった言葉も耳にしますし。
私は質問を考えるのに時間がかかるので、ChatGPTへの質問を考えるAIみたいなのもあれば嬉しいですね。

Whisper APIもリリースされたので、そっちも使ってみようと思います。

参考URL

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7