生成モデルは、さまざまな問題の解決に効果的です。ただし、次のような制限があります。
- トレーニングが完了すると固定されるため、新しい知識で更新されません。
- 外部データのクエリや変更はできません。
関数呼び出しを使用すると、これらの制限の一部を克服できます。関数呼び出しは、モデルが API や関数などの外部ツールを使用して最終レスポンスを生成できるため、ツールの使用と呼ばれることもあります。
関数呼び出しの詳細については、Google Cloud のドキュメントをご覧ください。関数呼び出しのユースケースのリストも記載されています。
関数呼び出しは、Gemini 1.0 Pro、Gemini 1.5 Pro、Gemini 1.5 Flash でサポートされています。
このガイドでは、このページの次の主要なセクションで説明する例に似た関数呼び出しの設定を実装する方法について説明します。アプリで関数呼び出しを設定するための大まかな手順は次のとおりです。
最終的なレスポンスを生成するためにモデルに必要な情報を提供できる関数を作成します(たとえば、関数で外部 API を呼び出すことができます)。
関数とそのパラメータを表す関数宣言を作成します。
必要に応じて、モデルの初期化時に関数宣言を提供して、モデルが関数を使用する方法を認識できるようにします。
アプリが関数を呼び出すために必要な情報をモデルが送信できるようにアプリを設定します。
関数のレスポンスをモデルに渡して、モデルが最終的なレスポンスを生成できるようにします。
関数呼び出しの例の概要
モデルにリクエストを送信するときに、最終的なレスポンスを生成するために使用できる一連の「ツール」(関数など)をモデルに提供することもできます。これらの関数を活用して呼び出す(「関数呼び出し」)には、モデルとアプリが情報を相互にやり取りする必要があります。そのため、関数呼び出しを使用するには、マルチターン チャット インターフェースを使用することをおすすめします。
ユーザーが「What was the weather in Boston on October 17, 2024?
」のようなプロンプトを入力するアプリがあるとします。
Gemini モデルは、この気象情報を把握していない場合があります。ただし、この情報を提供できる外部気象サービス API があるとします。関数呼び出しを使用すると、その API とその気象情報への経路を Gemini モデルに与えることができます。
まず、次の入力と出力を持つ架空の外部 API とやり取りする関数 fetchWeather
をアプリに記述します。
パラメータ | 型 | 必須 | 説明 |
---|---|---|---|
入力 | |||
location |
オブジェクト | ○ | 天気を取得する都市の名前と州。 米国の都市のみがサポートされています。常に city と state のネストされたオブジェクトにする必要があります。 |
date |
文字列 | ○ | 天気を取得する日付(常に YYYY-MM-DD 形式にする必要があります)。 |
出力 | |||
temperature |
Integer | ○ | 温度(華氏) |
chancePrecipitation |
文字列 | ○ | 降水確率(% 単位) |
cloudConditions |
文字列 | ○ | 雲の状態(clear 、partlyCloudy 、mostlyCloudy 、cloudy のいずれか) |
モデルを初期化するときに、この fetchWeather
関数が存在することと、必要に応じて受信リクエストの処理に使用できることをモデルに伝えます。これは「関数宣言」と呼ばれます。モデルは関数を直接呼び出しません。代わりに、モデルは受信したリクエストを処理するときに、fetchWeather
関数を使用してリクエストに応答できるかどうかを判断します。モデルが関数が実際に有用であると判断した場合、モデルはアプリが関数を呼び出すのに役立つ構造化データを生成します。
受信したリクエスト(What was the weather in Boston on October 17, 2024?
)をもう一度確認します。モデルは多くの場合、fetchWeather
関数がレスポンスの生成に役立つと判断します。モデルは、fetchWeather
に必要な入力パラメータを確認し、関数に次のような構造化された入力データを生成します。
{
functionName: fetchWeather,
location: {
city: Boston,
state: Massachusetts // the model can infer the state from the prompt
},
date: 2024-10-17
}
モデルは、この構造化入力データをアプリに渡します。これにより、アプリは fetchWeather
関数を呼び出すことができます。アプリが API から天気を受け取ると、その情報をモデルに渡します。この気象情報により、モデルは最終処理を完了し、What was the weather in Boston on October 17, 2024?
の最初のリクエストに対するレスポンスを生成できます。
モデルは、次のような最終的な自然言語レスポンスを提供します。On October 17, 2024, in Boston, it was 38 degrees Fahrenheit with partly cloudy skies.
関数呼び出しを実装する
始める前に
まだ行っていない場合は、Vertex AI in Firebase SDK のスタートガイドを完了してください。以下の手順をすべて完了していることを確認します。
Blaze お支払いプランの使用や必要な API の有効化など、新規または既存の Firebase プロジェクトを設定します。
アプリを Firebase に接続します。アプリの登録や Firebase 構成のアプリへの追加などを行います。
SDK を追加し、アプリで Vertex AI サービスと生成モデルを初期化します。
アプリを Firebase に接続し、SDK を追加して、Vertex AI サービスと生成モデルを初期化したら、Gemini API を呼び出す準備が整います。
このガイドの残りの手順では、関数呼び出しの例の概要(このページの一番上のセクションを参照)で説明されているワークフローと同様に、関数呼び出しの設定を実装する方法について説明します。
このページの後半で、この関数呼び出しの例の完全なコードサンプルを確認できます。
ステップ 1: 関数を作成する
ユーザーが「What was the weather in Boston on October 17, 2024?
」のようなプロンプトを入力するアプリがあるとします。Gemini モデルはこの気象情報を知らないかもしれませんが、それを提供できる外部の気象サービス API を知っているとします。このガイドの例では、この仮想外部 API を使用します。
架空の外部 API とやり取りし、最終的なリクエストの生成に必要な情報をモデルに提供する関数をアプリに記述します。この天気予報の例では、この仮想の外部 API を呼び出すのは fetchWeather
関数です。
ステップ 2: 関数宣言を作成する
後でモデルに提供する関数宣言を作成します(このガイドの次のステップ)。
宣言では、関数とそのパラメータの説明にできるだけ詳細な情報を含めます。
モデルは関数宣言内の情報を使用して、選択する関数と、実際の関数呼び出しのパラメータ値を指定する方法を決定します。モデルが関数を選択する方法と、その選択を制御する方法については、このページのその他の動作とオプションをご覧ください。
指定するスキーマについて、次の点に注意してください。
関数宣言は、OpenAPI スキーマと互換性のあるスキーマ形式で指定する必要があります。Vertex AI では、OpenAPI スキーマのサポートが制限されています。
サポートされている属性は、
type
、nullable
、required
、format
、description
、properties
、items
、enum
です。属性
default
、optional
、maximum
、oneOf
はサポートされていません。
デフォルトでは、Vertex AI in Firebase SDK では、
optionalProperties
配列で省略可能として指定しない限り、すべてのフィールドが必須と見なされます。これらの省略可能なフィールドの場合、モデルはフィールドにデータを入力することも、フィールドをスキップすることもできます。これは、Vertex AI Gemini API のデフォルトの動作とは逆です。
名前や説明に関するヒントなど、関数の宣言に関するベスト プラクティスについては、Google Cloud ドキュメントのベスト プラクティスをご覧ください。
関数宣言の記述方法は次のとおりです。
ステップ 3: モデルの初期化時に関数宣言を指定する
リクエストで指定できる関数宣言の最大数は 128 です。モデルが関数を選択する方法と、その選択を制御する方法(toolConfig
を使用して関数呼び出しモードを設定する)については、このページのその他の動作とオプションをご覧ください。
ユースケースとアプリに適した Gemini モデルと、必要に応じてロケーションを選択する方法を学びます。
ステップ 4: 関数を呼び出して外部 API を呼び出す
fetchWeather
関数が最終的なレスポンスを生成するのに役立つとモデルが判断した場合、アプリはモデルから提供された構造化入力データを使用して、その関数を実際に呼び出す必要があります。
モデルとアプリの間で情報をやり取りする必要があるため、関数呼び出しを使用する場合は、マルチターン チャット インターフェースを使用することをおすすめします。
次のコード スニペットは、モデルが fetchWeather
関数を使用することをアプリに通知する方法を示しています。また、モデルが関数呼び出し(およびその基盤となる外部 API)に必要な入力パラメータ値を提供していることも示しています。
この例では、受信リクエストにプロンプト What was the weather in Boston on October 17, 2024?
が含まれていました。このプロンプトから、モデルは fetchWeather
関数に必要な入力パラメータ(city
、state
、date
)を推論しました。
ステップ 5: 関数の出力をモデルに提供して最終レスポンスを生成する
fetchWeather
関数から天気情報が返されたら、アプリはそれをモデルに渡す必要があります。
次に、モデルは最終的な処理を行い、次のような最終的な自然言語レスポンスを生成します。
On October 17, 2024 in Boston, it was 38 degrees Fahrenheit with partly cloudy skies.
その他の動作とオプション
以下に、コードで対応する必要のある関数呼び出しの追加の動作と、制御できるオプションを示します。
モデルから、関数をもう一度呼び出すか、別の関数を呼び出すよう求められる場合があります。
ある関数呼び出しのレスポンスではモデルが最終的なレスポンスを生成できない場合、モデルは追加の関数呼び出しを要求するか、まったく異なる関数の呼び出しを要求します。後者は、関数宣言リストでモデルに複数の関数を指定した場合にのみ発生します。
アプリは、モデルが追加の関数呼び出しを要求する可能性があることを考慮する必要があります。
モデルは、複数の関数を同時に呼び出すよう求める場合があります。
関数宣言リストでモデルに指定できる関数は最大 128 個です。そのため、モデルは最終的なレスポンスを生成するために複数の関数が必要であると判断する場合があります。また、これらの関数の一部を同時に呼び出すこともできます。これを並列関数呼び出しと呼びます。
アプリは、モデルが同時に実行されている複数の関数を要求する可能性に対応する必要があります。また、アプリは関数からのすべてのレスポンスをモデルに返す必要があります。
並列関数呼び出しは、Gemini 1.5 Pro と Gemini 1.5 Flash でサポートされています。
モデルが関数の呼び出しをリクエストする方法とリクエストするかどうかを制御できます。
モデルが提供する関数宣言の使用方法と使用の有無に制約を課すことができます。これを関数呼び出しモードの設定と呼びます。次に例を示します。
モデルに即時自然言語によるレスポンスと関数呼び出しのどちらかを選択させるのではなく、常に関数呼び出しを使用するように強制できます。これは強制関数呼び出しと呼ばれます。
複数の関数宣言を指定する場合は、指定された関数のサブセットのみを使用するようにモデルを制限できます。
これらの制約(またはモード)を実装するには、プロンプトと関数宣言とともにツール構成(toolConfig
)を追加します。ツールの構成では、次のいずれかのモードを指定できます。最も便利なモードは ANY
です。
モード | 説明 |
---|---|
AUTO |
デフォルトのモデル動作。関数呼び出しと自然言語レスポンスのどちらを使用するかは、モデルが決定します。 |
ANY |
モデルは関数呼び出し(「強制関数呼び出し」)を使用する必要があります。モデルを関数のサブセットに制限するには、allowedFunctionNames で許可される関数名を指定します。 |
NONE |
モデルは関数呼び出しを使用しないでください。この動作は、関連する関数宣言のないモデル リクエストと同じです。 |
関数呼び出しモードは、Gemini 1.5 Pro と Gemini 1.5 Flash でサポートされています。
他にできること
Gemini API の他の機能を試す
- マルチターンの会話(チャット)を構築します。
- テキストのみのプロンプトからテキストを生成します。
- マルチモーダル プロンプト(テキスト、画像、PDF、動画、音声など)からテキストを生成します。
コンテンツ生成を制御する方法
- プロンプトの設計を理解する。ベスト プラクティス、戦略、プロンプトの例などをご覧ください。
- 温度や最大出力トークンなどのモデル パラメータを構成します。
- 安全性設定を使用すると、有害と見なされる可能性のある回答が生成される可能性を調整できます。
Gemini モデルの詳細
さまざまなユースケースで利用可能なモデルと、その割り当てと料金について学習する。Vertex AI in Firebase の使用感に関するフィードバックを送信する