🤖

Gemini 2.0 Flash API の使用方法を、実装しながら解説

2025/01/22に公開
20

「Gemini 2.0 flash」のAPIでの使い方について、Google Colaboratory で実装しながら解説します。

以前の「Gemini 1.5」とは利用ライブラリなどが異なるため、その点も踏まえて解説します。

記事の最後では、実際にアプリケーション(AI-Agentもどき)に導入するアーキテクチャについても簡単に紹介いたします。

(執筆:小川 雄太郎)



本記事では最初に「Gemini 2.0 Flash」で動作させるための「設定系」について解説します。

その後、会話を1回実行する場合、会話を往復させる場合、そして会話履歴の続きから会話させる場合について、それぞれ実装しながら解説します。


本記事で紹介する実装コード(Google ColaboratoryのNotebook)は以下のリポジトリに置いています。

link: Gemini_2_Yutaro_Ogawa_20250114.ipynb


本記事の目次です

  1. Google Colaboratory上で動くものを作成
    1.1 概要
    1.2 ライブラリのインストール
    1.3 GeminiのClientを作成
    1.4 Gemini使用に際する各種設定を実施
     1.4.1 model_idの指定
     1.4.2 コンテンツセーフティの設定
     1.4.3 システムプロンプトの設定
    1.5 会話を1回実行する場合
    1.6 会話を往復させる場合
    1.7 会話履歴の続きから会話させる場合

  2. 「Gemini 2.0」をAI-Agent(もどき)に実装する
    2.1 Chat部分のアーキテクチャ構成図
    2.2 動作の様子・動画
    2.3 実装技術の簡易解説
    2.4 Python系のマネジメントツール周りについて

  3. さいごに


1. Google Colaboratory上で動くものを作成

1.1 概要

本記事の前半では、「Gemini 2.0 Flash」をAPI利用し、Google Colaboratory上で動作するように実装します。


なお本記事の執筆に際しては「npaka様」および「クラスメソッド石川様」のブログを参考にさせていただきました。

  • 「Google Colab で Gemini 2.0 の Multimodal Live API を試す」 [link]
  • 「Gemini 2.0 Flash Live API (試験運用版)を使ってAIと日本語で会話してみた」 [link]


1.2 ライブラリのインストール

最初にライブラリ(パッケージ)として、「Google Gen AI SDK」[pypi_link] をインストールします。

似た名前のパッケージが多いので注意です。「google-genai」 です。2024年12月18日にリリースされたばかりになります。

2025年1月21日現在のバージョンは「0.5.0」です。


以下のコマンドにて、ライブラリ(パッケージ)をインストールします。

!pip install google-genai==0.5.0


1.3 GeminiのClientを作成

「Gemini 2.0 Flash」を使用する方法は、以下に示すように、大きく4通りです。
本記事の前半では【2】を、後半では【4】を使用します。


【1】GUI画面で操作:ChatGPTのGUIアプリと似た感じです
link: https://gemini.google.com/
link: https://aistudio.google.com/

【2】API-Key を取得して使用:クラウド環境として「Google Cloud」を使用しないプロジェクトなど、単独でGeminiを使用する場合。「Google AI Studio」からAPIキーを取得します
link: https://aistudio.google.com/app/apikey

【3】「Google Cloud」の「Vertex AI」プロジェクトを認証させる方法:「Google Cloud」を使用しているプロジェクトで、ひとまず「Vertex AI」経由で認証させたい場合(手作業でのログイン操作になります)

【4】「Google Cloud」の「Vertex AI」のUser権限をサービスアカウントに権限を与える方法:「Google Cloud」の別サービス(本記事の後半ですと、「Cloud Run Function」)にサービスアカウントを作成して紐づけ、そのサービスアカウントに「Vertex AI」のユーザー権限を与える方法。本番環境ではこの手法が一番多いかと思います


今回は、上記のうち、【2】API-Key を取得して使用、を行いたいです。

そこで、「Google AI Studio」からAPIキーを取得し、それをNotebookに張り付けてください(※本記事は ”簡易実装版” なのでAPIキーを直書きしていますが、本来はSecretとして安全に利用してください)。

link: https://aistudio.google.com/app/apikey


実装

from google import genai

# [1] APIキーの設定
os.environ['GOOGLE_API_KEY'] = "hogehoge"  # こちらに取得したAPIキーを入力してください

# [2] clientのインスタンス化
client = genai.Client(api_key=os.environ.get('GOOGLE_API_KEY'))


1.4 Gemini使用に際する各種設定を実施

1.4.1 model_idの指定

最初に使用するモデルを指定します。今回は「Gemini 2.0 Flash」の「実験バージョン」になります。

model_id = 'gemini-2.0-flash-exp'


1.4.2 コンテンツセーフティの設定

続いて、非常に重要な内容である 「コンテンツセーフティの設定」 を行います。

コンテンツセーフティ設定により、相応しくない生成をさせないように制御をかけます。
より詳細は、以下の画像とリンク先をご覧ください。

link: https://ai.google.dev/gemini-api/docs/safety-settings


今回は、「ほとんどをブロック」してくれる、一番制限が厳しいセーフティで実装します。


from google.genai import types


my_safety_settings = [types.SafetySetting(
    category="HARM_CATEGORY_HATE_SPEECH",
    threshold="BLOCK_LOW_AND_ABOVE"
), types.SafetySetting(
    category="HARM_CATEGORY_DANGEROUS_CONTENT",
    threshold="BLOCK_LOW_AND_ABOVE"
), types.SafetySetting(
    category="HARM_CATEGORY_SEXUALLY_EXPLICIT",
    threshold="BLOCK_LOW_AND_ABOVE"
), types.SafetySetting(
    category="HARM_CATEGORY_HARASSMENT",
    threshold="BLOCK_LOW_AND_ABOVE"
)]


1.4.3 システムプロンプトの設定

システムプロンプト(システムインストラクション)のプロンプトを記入します。

のちほど、この変数system_instructionを使用します。

system_instruction = """
あなたはユーザーを助けるAgentです。
あなたの名前はHAROです。
"""


1.4.4 設定内容をGenerateContentConfigにまとめる

最後にここまでの設定内容と、その他の設定内容を「GenerateContentConfig」に設定します。

my_generate_content_config = types.GenerateContentConfig(
    temperature=0.1,
    top_p=0.95,
    max_output_tokens=2048,
    response_modalities=["TEXT"],
    safety_settings=my_safety_settings,  # [1-4-2] で設定
    system_instruction=[types.Part.from_text(
        system_instruction)],  # [1-4-3] で設定
)


以上で Gemini 2.0 Flash の使用前の設定が完了です。


1.5 会話を1回実行する場合

最初にこちらから1回だけ会話を送り、回答を取得するケースを実装します。

はじめに会話内容を作成します。

from google.genai.types import (
    Content,
    Part,
)


input_text = "あなたのお名前は?"

my_contents = [Content(role="user", parts=[Part.from_text(input_text)])]



上記の内容を送って、回答を取得します。

response = client.models.generate_content(
    model=model_id,  # [1-4-1] で設定
    contents=my_contents,
    config=my_generate_content_config  # [1-4-4]で設定をまとめた
)

print(response.text)


実行結果は以下のようになります。システムプロンプトで与えた自分の名前である、「HARO」ときちんと答えているのが確認できます。


1.6 会話を往復させる場合

続いて会話を何往復もさせるケースの実装を解説します。

この場合は、「client.chats」を利用します。

最初の会話でこちらの名前を教えます。
そして次の会話で名前を憶えているか(会話履歴を保持しているか)を確認します。

実装

input_text = "私の名前は小川雄太郎です。"

chat = client.chats.create(
    model=model_id,  # [1-4-1] で設定
    config=my_generate_content_config  # [1-4-4]で設定をまとめた
)

response = chat.send_message(input_text)
print(response.text)


1回目の会話を往復した回答結果は以下のようになっています。


続いて、1回目の会話を覚えているか(きちんと何往復もできるか)を確認します。

# 会話の履歴が残っているかチェック
response = chat.send_message("あれ、私の名前はなんでしたっけ")
print(response.text)

実行結果は以下の通りです。最初の会話で送ったこちらの名前を保持しており、会話が往復できています。


【会話履歴を取得したい場合】

会話を往復させていたり、ステートレスでこれまでの会話の履歴を利用する場合などは、以前(Gemini 1.5)であれば、chat.historyで取得できた(ような気がするのですが)、通りません。

「Gemini 2.0」(google-genaiライブラリ)の場合は、chat._curated_history で無理やり取りに行きます(内部変数にアクセスするのは美しくないのですが…)


以下、動作の様子です。


1.7 会話履歴の続きから会話させる場合

本章の最後です。

ステートレスにAPI利用使用する場合は会話履歴も送り、その続きの会話を取得する必要があります。

そこで会話履歴を作成し、その続きの返答を取得するケースを実装します。

# 履歴をhistoryとして作成
my_history = [
    Content(role="user", parts=[Part.from_text("私の好きな食べ物はみかんです。")]),
    Content(role="model", parts=[Part.from_text("そうなんですか。私はリンゴが好きです")]),
]


新しい「Chat」インスタンスを作成します。ここに上記のmy_historyを与えます。

chat2 = client.chats.create(
    model=model_id,  # [1-4-1] で設定
    config=my_generate_content_config,  # [1-4-4]で設定をまとめた
    history=my_history  # 上記の作成した会話履歴です
)

この履歴の続きで返答を取得します。なお上記の会話履歴は「私はみかん、Geminiはリンゴが好き」という設定でした。

# 会話の履歴が残っているかチェック
response = chat2.send_message("あれ、私の好きな食べ物はなんでしたっけ")
print(response.text)

response = chat2.send_message("あなたの好きな食べ物は?")
print(response.text)


実行結果は以下の通りです。きちんと history の続きから会話ができていることが確認できました。


以上、第1章では、Google Colaboratory上で「Gemini 2.0 Flash」をAPI利用で「単独」で動くように実装し、3種類のケースでの使用方法を確認しました。

なお「Gemini 2.0」はLLM(Large Language Model)でもありますが、マルチモーダルに画像や音声・動画などを扱えるLMM(Large Multimodal Model)です。


本記事ではテキスト以外の扱いは解説はいたしませんが、その他のモーダルの利用や、「thinking mode」 などの使用方法については、公式のDocsに加え、以下のGoogle公式の「サンプルNotebook」が分かりやすく、おすすめです。


notebook_samplesに置いてある、「intro_gemini_2_0_flash.ipynb」、「intro_gemini_2_0_flash_rest_api.ipynb」、「intro_gemini_2_0_flash_thinking_mode.ipynb」あたりがおすすめです


以上、本記事の第1章は終了です。

第1章で解説・実装したコード(Google ColaboratoryのNotebook)を以下のリポジトリに置いています。

link: Gemini_2_Yutaro_Ogawa_20250114.ipynb


2. 「Gemini 2.0」を AI-Agent(もどき)に実装する

執筆者が普段から使用している「AI-Agent(もどき)」の、 全体像・アーキテクチャ概要・技術概要 は、以下の記事の第4章で解説しています。

link: AI系の情報収集手法を紹介(ビジネス・開発・研究)【2025年版】


本記事では「Gemini 2.0 Flash」を使用した会話部分のみを紹介します。


2.1 Chat部分のアーキテクチャ構成図

本記事で対象としている、「Gemini 2.0」とのChat部分のおおまかな「アーキテクチャ構成図(的なもの)」は、以下となります。

最初に「Cloud Run Function」にアクセスし、「Cloud Run Function」が「Vertex AI」の「Gemini 2.0 Flash」とやりとりします。

Google Cloud内で完結するので「1.3節」で紹介しました、
【4】「Google Cloud」の「Vertex AI」のUser権限をサービスアカウントに権限を与える方法
を使用しています。

UI部分はReact.jsで作成し、APIアクセスでGeminiとの会話のやりとりを送信・取得して、画面更新しています。


2.2 動作の様子・動画

以下にAI-Agent(もどき)「Gemini 2.0 Flash」と会話している様子を画像と動画で紹介します。


【動画】(最高画質で視聴する場合は、再生時に画質:1080pに設定してください)

https://youtu.be/oqBEd2ugnqk?t=122


2.3 実装技術の簡易解説

Agentとの会話UIコンポーネントの実装には、「chat-ui-kit-react」を使用し、SCSSでChatGPTのような雰囲気の「UI・UX」になるようにデザインを調整しています。

Agentの発言がカタカタとストリーム処理で描画されている部分は、実際はストリーム処理ではなく、一括で取得した発言内容をReact.jsで少しずつ描画しています。

また、文字レベルではなく、HTMLレベルでストリーム処理のように表示させています。

そのための手順として、Gemini からの response の Markdown形式のテキストを、「markdown-it」ライブラリで「HTML形式」に変換し、そのHTML要素を少しずつ描画しています。

今回の実装では、「markdown-it」でDOM単位でコードブロックを検索・抽出し、「React Syntax Highlighter」ライブラリでコード部分にハイライトの配色を加え、そのうえで「dangerouslySetInnerHTML」で出力しています。


2.4 Python系のマネジメントツール周りについて

プロダクト開発においては、「フロントエンド」と「バックエンド」の両方のマネジメントは大変です(本記事のAI-Agentもどきは、個人開発であって商用プロダクトではないですが)。

フロントエンド側のNode.jsは 「npm」 で、React.jsやその他ライブラリのバージョンを管理しています。

問題はバックエンド(正確にはGoogle Cloud Run関数にdeployするPythonプログラムたち)のローカルでの開発方法と開発体制の管理です


Pythonでの開発時には、依存関係やその他の管理のためのマネジメントツールが非常に多岐にわたり、かつ複数サービスを同時に使用する必要がありました。

例えば、pip(パッケージマネジャー)+ pip-tools(ロックファイル管理) + venv(仮想環境管理) + pyenv(Python自体のバージョン管理)、のような使用方法でした。


備考:Pythonでの開発時の管理ツールたち

  • pip: パッケージ(ライブラリ) マネジャー
  • requirements.txt: パッケージのロックファイル(ライブラリ固定)
  • pip-tools: ロックファイルの管理
  • venv:仮想環境を管理
  • pyenv: Python自体のバージョン管理
  • poetry:オールインワンツール。pyproject.tomlで管理
  • uv: オールインワンツールかつ、Python自体のバージョンも管理
  • Conda系:オールインワンツール。商用利用時に注意が必要
  • その他(Pixi、Manba、mise、PDMなどもありますね)


ここ最近は 「uv」 が非常に安定し、日本語情報も増えてきたため、今回は「uv」のみで開発マネジメントを実施してみました。

https://docs.astral.sh/uv/


Pythonでの開発時の管理ツール群の紹介と選定判断に関しては、以下の記事が詳しくおすすめです。

https://nielscautaerts.xyz/python-dependency-management-is-a-dumpster-fire.html


3. さいごに

以上、「Gemini 2.0 flash」のAPIでの使用方法について、Google Colaboratory で実装しながら解説いたしました。

また、記事の後半では、実際にアプリケーション(AI-Agentもどき)に導入する際の、アーキテクチャや技術概要について簡単に紹介しました。

読者のみなさまにとって、「Gemini 2.0」を利用したLLMプロダクト構築などの参考になる点がございましたら、欣幸の至りです。

長文を一読いただき、誠にありがとうございました。


小川 雄太郎
株式会社松尾研究所 シニア・リサーチャー。「知能を創る」PJTに従事

https://matsuo-institute.com/recruit/

20
松尾研究所テックブログ

Discussion