iOSアプリでサクッとChatGPT APIを利用する方法

2023.03.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

少し前にiOSアプリにサクッとOpenAIのチャット機能を埋め込む方法と言う記事を書かせていただきましたが、その時点ではまだChatGPT APIはリリースされていませんでした。

iOSアプリにサクッとOpenAIのチャット機能を埋め込む方法

上記の記事で紹介していたOpenAI導入ライブラリのOpenAISwiftがChatGPT内部で使用されているgpt-3.5-turboモデルに対応していたので利用方法を紹介します。

環境

  • Xcode 14.2
  • iOS 16.1
  • OpenAISwift 1.2.0

はじめに

SDK導入については、iOSアプリにサクッとOpenAIのチャット機能を埋め込む方法で記載しているので省略させていただきます。

AIの回答を取得

OpenAIサイトにサインアップ後に取得したAPIキーを使用して、OpenAISwiftを生成してsendChatメソッドを使用するだけでAIの回答を取得することが出来ます。

func generatedAnswer(from chatMessages: [ChatMessage]) async throws -> String {
    let openAI = OpenAISwift(authToken: "authtoken0123456789")
    let result = try await openAI.sendChat(with: chatMessages)

    return result.choices.first?.message.content ?? ""
}

前回までのOpenAIモデルの使用と違う点は、sendChatの実行とChatMessage配列を引数として渡すようになっています。

sendChat

func sendChat(with messages: [ChatMessage], model: OpenAIModelType = .chat(.chatgpt), maxTokens: Int? = nil) async throws -> OpenAI<MessageResult>

デフォルトのモデルは.chatgptになっており、gpt-3.5-turboを指します。

public enum Chat: String {

    /// > Model Name: gpt-3.5-turbo
    case chatgpt = "gpt-3.5-turbo"

    /// > Model Name: gpt-3.5-turbo-0301
    case chatgpt0301 = "gpt-3.5-turbo-0301"
}

使用モデル

最新モデル 説明 最大リクエスト 訓練データ
gpt-3.5-turbo 最も有能なGPT-3.5 モデルで、チャット用に最適化されており、コストはtext-davinci-003の10分の1です。最新モデルのイテレーションで更新されます。 4,096トークン 2021年9月まで
gpt-3.5-turbo-0301 2023年3月1日からのスナップショット。gpt-3.5-turboとは異なり、このモデルは更新を受け取らず、2023 年6月1日に終了する。3か月間のみサポートされます。 4,096トークン 2021年9月まで

ChatMessage

ChatMessageの構造体は、下記の2点からなります。

  • 役割を表すrole
  • 内容を表すcontent
public struct ChatMessage: Codable {
    public let role: ChatRole
    public let content: String

    public init(role: ChatRole, content: String) {
        self.role = role
        self.content = content
    }
}

ChatRole

public enum ChatRole: String, Codable {
    case system, user, assistant
}
  • systemは前提条件のようなものを設定
  • userはユーザーの回答
  • assistantはAIアシスタントの回答

実際に使ってみましょう

下記のチャットのやり取りを作成し、generateAnswerメソッドに渡してみました。

do {
    let chatMessages = [
        ChatMessage(role: .system, content: "こちらではAIアシスタントのだっちゃんが会話を行います。だっちゃんは語尾に必ずだっちゃを付けます。可愛くて愛情たっぷりな表現をするのが得意です。"),
        ChatMessage(role: .assistant, content: "私の名前はだっちゃんだっちゃ。はじめてですが、愛に溢れているのでお裾分けしてあげるだっちゃ。よろしくだっちゃ"),
        ChatMessage(role: .user, content: "これからよろしくね!会話を楽しもう!")
    ]
    let answer = try await generatedAnswer(from: chatMessages)
    print(answer)
} catch {
    // Some Error Handling
    print(error)
}

出力結果

// 出力
わーい、ありがとうだっちゃ!私も会話を楽しめるので、どんな話題でも話してくれると嬉しいだっちゃ。

簡単にChatGPT APIの出力結果を取得することが出来ました。

まとめ

  • サクッとChatGPT APIを利用出来る
  • 利用料が10分の1になって、お手軽に利用出来るようになった

おわりに

ChatGPTの様々な活用法が出てきて、目まぐるしい変化が沢山表れていますね!

次はどんなものが出てくるだろう?と言う楽しみもありますが、自分でも色々と楽しいものを作れたらと思います。

参考