🧠

SwiftでOpenAIのAPI検証環境を最短で構築する方法

2024/05/30に公開

概要

​OpenAIのAPIではチャットや画像生成、音声からテキスト、テキストから音声に加えて複数の画像からテキストなど様々な機能を提供しています。
このAPIを使用することで自分のアプリにも簡単にAIを注入することができます。
今回はこのOpenAIのAPIを最短で検証する方法を紹介します。

準備

まず以下を準備します。

  1. OpenAIのAPIを使用できる環境構築
    OpenAIのAPIを使用するにあたり、アカウントの作成、API keyの発行、課金の設定(Chat-GPTの有料とは別物でAPIを利用するために先にクレジットを購入する必要があります。)などを行う必要があります。
    登録などについては以下参考になりそうなサイトを参照ください。

https://zenn.dev/umi_mori/books/chatbot-chatgpt/viewer/how_to_use_openai_api#apiの発行方法

https://qiita.com/Isaka-code/items/b50983796636503b44c5

実装

準備ができたら実装していきます。
今回は値(テキスト)を送って、値(テキスト)を受け取る所までを(おそらく現状)最短で実装していきます。

OpenAI API Client Library

直接URLSessionを使用してHTTPリクエストを送信し、OpenAIのAPIを叩くことはできます。
​https://platform.openai.com/docs/quickstart?context=curl

ただいくつかOpenAI API Client Libraryがあるので今回はそちらを使用して実装したいと思います。
ハンドリングや様々なモデルを検証したい場合も環境が揃っているので非常に楽に実装できます。
ライブラリとしては現在以下の二つが際立っってメジャーな印象です。

https://github.com/adamrushy/OpenAISwift

https://github.com/MacPaw/OpenAI

今回は現時点で

  • スターやフォークがもっとも多い
  • 様々なモデルに対応している(最新モデルへの対応も早そう)
  • 依存ライブラリがない

という理由から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に送りたいテキストを渡しているので変更したい方は自由に変更してください。

実装が完了したら以下のような画像になります。

altテキスト

最後に

今回は現状考えられるOpenAIのAPI検証環境を最短で構築する方法を紹介しましたがMacPaw/OpenAIにはDemoディレクトリにデモ用のUIも用意されていそうなので今後はこの辺りも触ってみたいと思います。
https://github.com/MacPaw/OpenAI/tree/main/Demo

参考一覧

OpenAI documentation
https://github.com/adamrushy/OpenAISwift
https://github.com/MacPaw/OpenAI
https://zenn.dev/shu223/articles/gpt4o-multimodal

脚注

脚注
  1. https://zenn.dev/shu223/articles/gpt4o-multimodal#iosで使えるopenai-apiクライアント ↩︎

Discussion