4
1

Gemini Pro APIをiOSで

Last updated at Posted at 2023-12-14

Gemini Pro API公開されましたね

精度的にはGemini Ultraからかなり機能が絞られているだけあってGPT-4よりは劣ることが公式ベンチマークなどからもわかっていますが、一方で以下のようなメリットもあると思います。

  • Google AI Studioですぐ試せる
  • プレビュー版なのでまだ無料(ただし商用利用は不可)
  • 画像を使ったマルチモーダルプロンプトも無料で試せる
  • 各プラットフォームのライブラリとクイックスタートガイドが日本語で用意されている

最も注目すべきはもちろん一番最後、各プラットフォームのライブラリとクイックスタートガイドが日本語で用意されているというところです!

image.png

これは試しやすさに関して200点満点!

というわけで早速試してみたところを簡単に共有します。

動作の様子

アプリとしてはSwiftDataやSwiftUIを使ってプロンプトを実行したり、その結果を保存したりできる形にしました。

やり方

やり方は公式のドキュメントがすでに充実しているのでそちらにお任せします。

工夫ポイント・つまりポイント

とりあえず自分のコードがこちら

Geminiの呼び出し部分は、画像のある無しでモデルを変える必要があったため以下のようにしました。

func execute(_ parts: [PartsRepresentable], hasImage: Bool) async throws -> String? {
    let modelName = hasImage ? "gemini-pro-vision" : "gemini-pro"
    let model = GenerativeModel(name: modelName, apiKey: GeminiAPIKey.default)
    let response = try await model.generateContent(parts)
    print(response.candidates)
    print("FB: ", response.promptFeedback ?? "none")
    return response.text
}

また、APIからの一個のプロンプトは合わせて4MB以下にする必要があるため、画像は以下のように圧縮して持つようにし

.onChange(of: selectedItems) {
    Task {
        selectedImages.removeAll()
        
        var datas = [Data]()
        for item in selectedItems {
            if let imageData = try? await item.loadTransferable(type: Data.self),
               let uiImage = UIImage(data: imageData),
               let compressionData = uiImage.jpegData(compressionQuality: 0.25) {
                selectedImages.append(Image(uiImage: uiImage))
                datas.append(compressionData)
            }
        }
        promptImages = datas
    }
}

また編集画面に今のサイズをステータス表示するようにしています。

image.png

実際はさまざまなPayload含めて4MBなのでギリギリを攻めることはできませんでした。

まとめ

以上めちゃくちゃクイックにですが、iOSでGemini Pro APIを使ったら、を紹介しました。
速度重視記事ということで最低限の内容でしたが、参考にしてもらえれば嬉しいです。

4
1
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
4
1