少し前にiOSアプリにサクッとOpenAIのチャット機能を埋め込む方法と言う記事を書かせていただきましたが、その時点ではまだChatGPT APIはリリースされていませんでした。
上記の記事で紹介していた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の様々な活用法が出てきて、目まぐるしい変化が沢山表れていますね!
次はどんなものが出てくるだろう?と言う楽しみもありますが、自分でも色々と楽しいものを作れたらと思います。