はじめに
仕事の都合で最近は、Geminiばっかりの毎日です。
気になることもあるので、まずはAWS環境からGeminiを呼びだそうと思ったのでハンズオンをしてみます。
Geminiとは?
- 2023年12月に発表されたGoogleの生成AIモデル。
- 特徴として高度なマルチモーダル処理能力を持っており、テキスト、画像、音声、動画、コードなど、様々なデータ形式を処理することが可能です。
2種類のAPIについて
- Geminiに関しては直接GeminiモデルにアクセスするAPIと、Vertex AIプラットフォーム経由でGemini機能にアクセスするためのAPIの2種類が存在します。
- 今回のハンズオンではGemini APIを利用します。
API名 | 内容 | 認証 |
---|---|---|
Gemini API | 直接GeminiモデルにアクセスするAPI | GoogleアカウントとAPIキーを使用して認証 |
Vertex AI API | Vertex AIプラットフォーム経由でGemini機能にアクセスするためのAPI | Google Cloudサービスアカウントを使用して認証 |
参照ドキュメント:Gemini API
参照ドキュメント:Vertex AI API
ハンズオン
1.Google Cloudの準備
1.1.アカウント作成(既にある場合は、既存アカウントを利用でも可)
- 以下リンクを押下して、アカウントを作成します。
1.2.Google Cloudプロジェクト作成
- 以下リンクを押下して、遷移先のドキュメントの「 [リソースの管理]に移動」という青いボタンを押下して画面遷移します。
-
「リソースの管理」ページで、画面上部「プロジェクトを作成」押下します。
-
以下設定を入力して「作成」を押下します。
プロジェクト名 | 場所 |
---|---|
${プロジェクト名} | 組織なし |
1.3.API有効可
-
画面上部の検索バーより「有効なAPIとサービス」と入力して押下します。
-
画面上部の「+ APIとサービスを有効にする」を押下します。
-
APIライブラリの検索バーより「Gemini API」と入力して押下します。
-
Gemini API側を選択します。
-
有効にするを押下します。
1.4.認証情報の取得
-
左ペイン「認証情報」押下(または画面上部の検索バーより「認証情報」と入力して押下)して以下ページへ遷移し、「認証情報を作成」押下します。
-
APIキー を選択します。
-
キーの値 を保存します(後ほど 3.3.2.環境変数で利用します)。
※APIキーが流出すると誰でもAPIの利用が可能となり、思わぬ事態にもつながりかねないため、取り扱いは十分に注意してください。
2.Lambdaレイヤーの準備
2.1.ライブラリのインストール
- マネジメントコンソール右上 [>.] アイコンより、Cloudshellの起動します。
- 以下コマンドを実行します。
# ディレクトリの作成
mkdir python
# 作成したディレクトリにライブラリをインストール
pip install google-genai -t python
# ライブラリをZIP圧縮
zip -r layer.zip python
- コマンド実行後、「アクション > ファイルのダウンロード」をクリックして「layer.zip」をローカルにダウンロードします。
2.2.Lambdaレイヤーの作成
- 「マネジメントコンソール」画面から「Lambda」画面へ遷移します。
- 左ペイン「レイヤー」を選択し「レイヤーの作成」を押下します。
- 以下設定を入力して「作成」を押下します。
名前 | .zipファイルをアップロード | 互換性のあるアーキテクチャ | 互換性のあるランタイム |
---|---|---|---|
${Lambdaレイヤー名} | ダウンロードした「layer.zip」 | x86_64 | Python 3.9 |
3.Lambdaの構築
3.1.Lambda構築
- 「マネジメントコンソール」画面から「Lambda」画面へ遷移します。
- 「関数を作成」押下します。
- 設定画面にて以下設定を入力して「関数の作成」押下します。
関数名 | ランタイム | アーキテクチャ |
---|---|---|
${Lambda関数名} | Python 3.9 | x86_64 |
3.2.コード
- 以下コードソースを上書きして「Deploy」を押下します。
キー | 値 | 選定理由 |
---|---|---|
model | gemini-2.0-flash | 最新モデルのため選定 |
contents | AIの仕事を50文字で教えて | 簡単な質問及び文字数制限で、予想外のトークンを抑える意図 |
import os
from google import genai
def lambda_handler(event, context):
api_key = os.environ.get("API_KEY")
client = genai.Client(api_key=api_key)
response = client.models.generate_content(
model="gemini-2.0-flash",
contents="AIの仕事を50文字で教えて"
)
return {
"statusCode": 200,
"body": response.text
}
3.3.その他Lambdaの設定変更
3.3.1.レイヤー
- 「レイヤーの追加」を押下して、以下設定を行う。
レイヤーソース | レイヤー選択 | バージョン |
---|---|---|
カスタムレイヤー | ${Lambdaレイヤー名} | 1 |
3.3.2.環境変数
- 「設定」の左ペイン「環境変数」を押下して、以下設定を行う。
キー | 値 |
---|---|
API_KEY | ${1.4.認証情報の取得した値} |
※簡易検証のためAPIキーを環境変数に設定しています。ただし本番利用の際は、AWS Secrets Managerなどを利用してセキュアに運用ください。
3.3.3.一般設定
- 「設定」の左ペイン「一般設定」を押下して、以下設定を行う。
タイムアウト |
---|
5分 |
※Geminiへの質問量により、各自適切な値に修正する。
4.実行結果
4.1.Lambdaでの画面
4.2.Googleでの画面
おわりに
得られた知見
- Gemini API を利用するための一連のステップの理解。
- Geminiを呼び出すAPIは2種類が存在すること。
今後の課題
- LambdaでLangChainを利用して、Geminiを呼び出そうとしましたが「No module named ‘google.protobuf’」エラーでハマってしまたため解決をすること。
- Lambdaレイヤーからだけでなく、コンテナイメージを利用したLambdaのデプロイが出来るようになること。