Slide 1

Slide 1 text

Gemini APIを使ってみよう 2024/02/07 potatotips#86 内山雅由(@umsys_)

Slide 2

Slide 2 text

自己紹介 株式会社ZOZO
 X: @umsys_
 Bluesky: @umsys.bsky.social 
 GitHub: https://github.com/umsys 
 
 内山 雅由
 ● 車の運転とゲームとハリネズミが大好きです 
 ● 最近はポケモンカードにハマっています 
 ● 今月末発売予定のFF7 REBIRTHが楽しみです 
 


Slide 3

Slide 3 text

生成AI使っていますか?

Slide 4

Slide 4 text

世はまさに生成AI戦国時代! ● chatGPT(OpenAI) ● Bard(Google) ● Copilot(Microsoft) ● Rufus(Amazon) などなど

Slide 5

Slide 5 text

Gemini API ● Androidアプリ開発ではGemini APIを使うことで、生成AIを利用したアプリが開発でき ます。 ● Androidだけでなく、様々な言語でも利用可能です。 ○ Python ○ Go ○ Node.js ○ Swift ○ JavaScript ● curl コマンドを使用して Gemini API を試すこともできます。 ○ REST API

Slide 6

Slide 6 text

料金 今のところ無料で使えるプランがあります。

Slide 7

Slide 7 text

Androidアプリで開発してみよう!

Slide 8

Slide 8 text

クイックスタート Android StudioはIguanaかJellyfishの最新プレビュー版を用意してください。

Slide 9

Slide 9 text

クイックスタート Gemini API Starterを選択します。 ※Hedgehogだとこれが出てこない(泣) 誠に遺憾です

Slide 10

Slide 10 text

クイックスタート ここでAPI Keyが必要になります。 Google AI StudioでKeyを作成し、入力してください。 ※Google AI Studioへは「Generate API key with Google AI Studio」から飛ぶことができます。 ※2 API Keyは誰にも教えないように注意しましょう。

Slide 11

Slide 11 text

クイックスタート ビルドしたら動かせます。

Slide 12

Slide 12 text

クイックスタート [File] > [New] > [Import Sample] を選択して 「generative」で検索すると、 他の機能の紹介を兼ねたコードサンプルを Android Studio にインポートできます。

Slide 13

Slide 13 text

クイックスタート マルチモーダル テキストと画像をGeminiに渡して会話できる。

Slide 14

Slide 14 text

クイックスタート チャット テキストだけの会話だが、チャットの履歴を記憶した 状態で会話を続けることができる。 ※テンプレートからビルドできるアプリは毎回記憶が リセットされるワンショット

Slide 15

Slide 15 text

コードを見てみよう

Slide 16

Slide 16 text

GenerativeModelのセットアップ GenerativeModelの引数に各種設定値を渡してセットアップする。 modelName ユースケースに合わせてモデル名を設定。ワンショットとチャットの場合は 「gemini-pro」、マルチモーダルの場合は「 gemini-pro-vision」 apiKey Google AI Studioで作成したKeyを設定。秘匿性を高めるため、 local.propertiesなどに書いておいて、 BuildConfig.apiKeyで呼び出すと良いで すね。 generationConfig 返答のランダム性や、返してほしくない語句の設定(セーフティ機能)などの設 定ができます。サンプルではランダム性だけ設定しています。 引用: https://github.com/google/generative-ai-android/tree/main/generativeai-android-sample

Slide 17

Slide 17 text

ユーザーの入力内容をGeminiに渡している箇所 ● GenerativeModelのgenerateContent()にユーザーの入力内容(prompt)を渡し、Geminiからの返答 を受け取ってUIStateに流している。 引用: https://github.com/google/generative-ai-android/tree/main/generativeai-android-sample

Slide 18

Slide 18 text

すごい簡単。 嬉しいね!

Slide 19

Slide 19 text

もう少し詳しくコードを見てみよう

Slide 20

Slide 20 text

GenerativeModel.generateContent() 引数に応じてpromptの型が3つ用意されています。 ● Stringだけを渡して会話する。 ● 画像だけを渡して会話する。 ● 画像とテキストを複数混合して会話する。 現在はこれらのユースケースが実装されています。 Genimiからの返答はGenerateContentResponseとして返ってきます。 引用: https://github.com/google/generative-ai-android/tree/main/generativeai-android-sample

Slide 21

Slide 21 text

Content Content型はStringやBitmap を複数抱えることができるクラ ス。 ユーザーの入力から画像とテキ ストを複数混合してGeminiに渡 したいときはContent型で promptを渡すことができます。 引用: https://github.com/google/generative-ai-android/tree/main/generativeai-android-sample

Slide 22

Slide 22 text

GenerateContentResponse Genimiからの返答はGenerateContentResponseとして返ってきます。 candidatesはGeminiからの返答リストです。 GenerativeModelのセットアップでgenerationConfig.candidateCountを2以上にしておくと複数返って きます。 promptFeedbackは与えられたpromptに対するフィードバックです。不適切な入力などがあった場合に 返されるようです。(ちょっと BANが怖くて試してません) 引用: https://github.com/google/generative-ai-android/tree/main/generativeai-android-sample

Slide 23

Slide 23 text

Candidate Geminiからの返答を定義したクラスです。 ユーザー入力と同じContentとして返してくるようですね。 その他はセーフティーレーティングなどの付与情報です。 (ここまでコードを見てみると、 AIセーフティに対してかなり慎重になっている姿勢が感じられますね。) 引用: https://github.com/google/generative-ai-android/tree/main/generativeai-android-sample

Slide 24

Slide 24 text

ということは簡単に図示すると

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

公式ドキュメントには書いてなかったけ ど、Gemini APIで画像生成できるので は!?!!?

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

ご清聴ありがとうございました!