SwiftでOpenAIのAPI検証環境を最短で構築する方法
概要
OpenAIのAPIではチャットや画像生成、音声からテキスト、テキストから音声に加えて複数の画像からテキストなど様々な機能を提供しています。
このAPIを使用することで自分のアプリにも簡単にAIを注入することができます。
今回はこのOpenAIのAPIを最短で検証する方法を紹介します。
準備
まず以下を準備します。
- OpenAIのAPIを使用できる環境構築
OpenAIのAPIを使用するにあたり、アカウントの作成、API keyの発行、課金の設定(Chat-GPTの有料とは別物でAPIを利用するために先にクレジットを購入する必要があります。)などを行う必要があります。
登録などについては以下参考になりそうなサイトを参照ください。
実装
準備ができたら実装していきます。
今回は値(テキスト)を送って、値(テキスト)を受け取る所までを(おそらく現状)最短で実装していきます。
OpenAI API Client Library
直接URLSessionを使用してHTTPリクエストを送信し、OpenAIのAPIを叩くことはできます。
https://platform.openai.com/docs/quickstart?context=curl
ただいくつかOpenAI API Client Libraryがあるので今回はそちらを使用して実装したいと思います。
ハンドリングや様々なモデルを検証したい場合も環境が揃っているので非常に楽に実装できます。
ライブラリとしては現在以下の二つが際立っってメジャーな印象です。
今回は現時点で
- スターやフォークがもっとも多い
- 様々なモデルに対応している(最新モデルへの対応も早そう)
- 依存ライブラリがない
という理由からMacPaw/OpenAI
のが良さそうなのでこちらを利用します。
(選定時に参考にした記事[1])
実装
はじめにSwift Package Managerを利用してライブラリを追加します。
Add Package Dependencies から追加します。
リポジトリのURLはhttps://github.com/MacPaw/OpenAI
です。
追加したら以下のコードをContentViewにコピペします。
import SwiftUI
import OpenAI
struct ContentView: View {
@State private var responseText: String = "Loading..."
var body: some View {
VStack {
Text(responseText)
.padding()
}
.textSelection(.enabled)
.task {
await fetchOpenAIResponse()
}
}
@MainActor
func fetchOpenAIResponse() async {
let openAI = OpenAI(apiToken: "YOUR_API_KEY")
guard let message = ChatQuery.ChatCompletionMessageParam(role: .user, content: "こんにちは!API検証の為にリクエストを投げてみたので何か反応してください!") else { return }
let query = ChatQuery(messages: [message], model: .gpt4_o)
do {
let result = try await openAI.chats(query: query)
if let firstChoice = result.choices.first {
switch firstChoice.message {
case .assistant(let assistantMessage):
await MainActor.run {
responseText = assistantMessage.content ?? "No response"
}
default:
break
}
}
} catch {
await MainActor.run {
responseText = "エラー: \(error.localizedDescription)"
}
}
}
}
YOUR_API_KEY
の部分を各々で発行したAPI keyに変更します。
以上です。
contentに送りたいテキストを渡しているので変更したい方は自由に変更してください。
実装が完了したら以下のような画像になります。
最後に
今回は現状考えられるOpenAIのAPI検証環境を最短で構築する方法を紹介しましたがMacPaw/OpenAIにはDemoディレクトリにデモ用のUIも用意されていそうなので今後はこの辺りも触ってみたいと思います。
Discussion