このページでは、Google Cloud コンソール、REST API、サポートされている SDK を使用して、Gemini 1.0 Pro(gemini-1.0-pro
)モデルにチャット プロンプトを送信する方法について説明します。Gemini 1.0 Pro は、自然言語タスク、マルチターン テキストとコードチャット、コード生成など、テキストのみの入力によるプロンプトをサポートしています。テキストとコードを出力できます。
Gemini 1.0 Pro の基盤モデルは、言語の理解と生成に優れた大規模言語モデルです。コードの理解と生成においても、Geomini Pro とは、シングルターンのプロンプトとレスポンスで対話することや、マルチターンの連続した会話でチャットすることができます。
Gemini 1.0 Pro でサポートされている言語の一覧については、モデル情報の言語サポートをご覧ください。
コンソールでこのモデルを確認するには、Model Garden で gemini-1.0-pro
モデルカードを選択します。
モバイルアプリやウェブアプリから Gemini を直接使用する場合は、Android、Swift、ウェブ用の Google AI SDK をご覧ください。
チャット プロンプトを送信する
チャット プロンプトのテストと反復処理には、Google Cloud コンソールを使用することをおすすめします。プログラムでプロンプトをモデルに送信するには、REST API、Vertex AI SDK for Python、または次のタブに示すサポートされている他のライブラリや SDK のいずれかを使用します。
Python
Vertex AI SDK for Python のインストールまたは更新方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Vertex AI SDK for Python API のリファレンス ドキュメントをご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するか、非ストリーミング レスポンスを生成するかを選択できます。ストリーミングでは、プロンプトが生成されたときにそれに対するレスポンスの受信を伴います。つまり、モデルが出力トークンを生成するとすぐに出力トークンが送信されます。プロンプトに対する非ストリーミング レスポンスは、すべての出力トークンが生成された後にのみ送信されます。
ストリーミング レスポンスの場合は、generate_content
の stream
パラメータを使用します。
response = model.generate_content(contents=[...], stream = True)
非ストリーミング レスポンスの場合は、パラメータを削除するか、パラメータを False
に設定します。
サンプルコード
C#
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある C# の設定手順を完了してください。詳細については、Vertex AI C# API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Node.js SDK を使用した生成 AI クイックスタートの Node.js の設定手順を実施してください。詳細については、Node.js SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するか、非ストリーミング レスポンスを生成するかを選択できます。ストリーミングでは、プロンプトが生成されたときにそれに対するレスポンスの受信を伴います。つまり、モデルが出力トークンを生成するとすぐに出力トークンが送信されます。プロンプトに対する非ストリーミング レスポンスは、すべての出力トークンが生成された後にのみ送信されます。
ストリーミング レスポンスの場合は、generateContentStream
メソッドを使用します。
const streamingResp = await generativeModel.generateContentStream(request);
非ストリーミング レスポンスの場合は、generateContent
メソッドを使用します。
const streamingResp = await generativeModel.generateContent(request);
サンプルコード
Java
このサンプルを試す前に、Vertex AI クイックスタートの Java の設定手順を実施してください。詳細については、Vertex AI Java SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するか、非ストリーミング レスポンスを生成するかを選択できます。ストリーミングでは、プロンプトが生成されたときにそれに対するレスポンスの受信を伴います。つまり、モデルが出力トークンを生成するとすぐに出力トークンが送信されます。プロンプトに対する非ストリーミング レスポンスは、すべての出力トークンが生成された後にのみ送信されます。
ストリーミング レスポンスの場合は、generateContentStream
メソッドを使用します。
public ResponseStreamgenerateContentStream(Content content)
非ストリーミング レスポンスの場合は、generateContent
メソッドを使用します。
public GenerateContentResponse generateContent(Content content)
サンプルコード
Go
このサンプルを試す前に、Vertex AI クイックスタートの Go の設定手順を実施してください。詳細については、Vertex AI Go SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するか、非ストリーミング レスポンスを生成するかを選択できます。ストリーミングでは、プロンプトが生成されたときにそれに対するレスポンスの受信を伴います。つまり、モデルが出力トークンを生成するとすぐに出力トークンが送信されます。プロンプトに対する非ストリーミング レスポンスは、すべての出力トークンが生成された後にのみ送信されます。
ストリーミング レスポンスの場合は、GenerateContentStream
メソッドを使用します。
iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
非ストリーミング レスポンスの場合は、GenerateContent
メソッドを使用します。
resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
サンプルコード
REST
REST でチャット プロンプトを送信するには、Vertex AI API を使用してパブリッシャー モデル エンドポイントに POST リクエストを送信します。
リクエストのデータを使用する前に、次のように置き換えます。
- GENERATE_RESPONSE_METHOD: モデルに生成させるレスポンスのタイプ。モデルのレスポンスを返す方法を生成するメソッドを選択します。
streamGenerateContent
: レスポンスは生成時にストリーミングされます。ユーザーが遅延を感じることは少なくなります。generateContent
: レスポンスは、完全に生成された後に返されます。
- LOCATION: リクエストを処理するリージョン。使用できる選択肢は以下のとおりです。
クリックして利用可能なリージョンを開く
us-central1
us-west4
northamerica-northeast1
us-east4
us-west1
asia-northeast3
asia-southeast1
asia-northeast1
- PROJECT_ID: 実際のプロジェクト ID。
- MODEL_ID: 使用するマルチモーダル モデルのモデル ID。次のオプションがあります。
gemini-1.0-pro-002
gemini-1.0-pro-vision-001
gemini-1.5-pro-preview-0409
- ROLE: コンテンツに関連付けられた会話におけるロール。単一ターンのユースケースでも、ロールの指定が必要です。指定できる値は以下のとおりです。
USER
: 送信するコンテンツを指定します。MODEL
: モデルのレスポンスを指定します。
- TEXT: プロンプトに含める指示のテキスト。
- SAFETY_CATEGORY: しきい値を構成する安全性カテゴリ。指定できる値は以下のとおりです。
クリックして安全性カテゴリを開く
HARM_CATEGORY_SEXUALLY_EXPLICIT
HARM_CATEGORY_HATE_SPEECH
HARM_CATEGORY_HARASSMENT
HARM_CATEGORY_DANGEROUS_CONTENT
- THRESHOLD: 確率に基づいて、指定された安全性カテゴリに属する可能性のあるレスポンスをブロックするためのしきい値。指定できる値は以下のとおりです。
クリックしてブロックしきい値を開く
BLOCK_NONE
BLOCK_ONLY_HIGH
BLOCK_MEDIUM_AND_ABOVE
(デフォルト)BLOCK_LOW_AND_ABOVE
BLOCK_LOW_AND_ABOVE
はブロック対象が最も多く、BLOCK_ONLY_HIGH
はブロック対象が最も少なくなります。 - SYSTEM_INSTRUCTION: (省略可)
gemini-1.0-pro-002
とgemini-1.5-pro-preview-0409
で使用できます。モデルのパフォーマンスを向上させるための指示。たとえば、「できるだけ簡潔に答えてください」や「結果を JSON 形式で出力してください」などです。 - TEMPERATURE: 温度は、レスポンス生成時のサンプリングに使用されます。レスポンス生成は、
topP
とtopK
が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が0
の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。モデルが返すレスポンスが一般的すぎる、短すぎる、あるいはフォールバック(代替)レスポンスが返ってくる場合は、温度を高く設定してみてください。
- TOP_P: トップ P は、モデルが出力用にトークンを選択する方法を変更します。トークンは、確率の合計がトップ P 値に等しくなるまで、確率の高いもの(トップ K を参照)から低いものへと選択されます。たとえば、トークン A、B、C の確率が 0.3、0.2、0.1 であり、トップ P 値が
0.5
であるとします。この場合、モデルは温度を使用して A または B を次のトークンとして選択し、C は候補から除外します。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。
- TOP_K: トップ K は、モデルが出力用にトークンを選択する方法を変更します。トップ K が
1
の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。トップ K が3
の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。トークン選択のそれぞれのステップで、最も高い確率を持つトップ K のトークンがサンプリングされます。その後、トークンはトップ P に基づいてさらにフィルタリングされ、最終的なトークンは温度サンプリングを用いて選択されます。
ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。
- MAX_OUTPUT_TOKENS: レスポンス内に生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
- STOP_SEQUENCES: レスポンスでいずれかの文字列が検出された場合に、テキストの生成を停止するようモデルに指示する文字列のリストを指定します。レスポンスで文字列が複数回出現する場合、レスポンスでは最初に見つかった箇所が切り捨てられます。文字列では大文字と小文字が区別されます。
たとえば、stopSequences
が指定されていない場合に、次のレスポンスが返されたとします。
public static string reverse(string myString)
この場合に、stopSequences
が["Str", "reverse"]
に設定されているレスポンスは次のとおりです。public static string
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD
リクエストの本文(JSON):
{ "contents": { "role": "ROLE", "parts": { "text": "TEXT" } }, "system_instruction": { "parts": [ { "text": "SYSTEM_INSTRUCTION" } ] }, "safety_settings": { "category": "SAFETY_CATEGORY", "threshold": "THRESHOLD" }, "generation_config": { "temperature": TEMPERATURE, "topP": TOP_P, "topK": TOP_K, "candidateCount": 1, "maxOutputTokens": MAX_OUTPUT_TOKENS, "stopSequences": STOP_SEQUENCES, } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
curl コマンドの例
LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro"
PROJECT_ID="test-project"
GENERATE_RESPONSE_METHOD="generateContent"
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
$'{
"contents": [
{
"role": "user",
"parts": { "text": "Hello!" }
},
{
"role": "model",
"parts": { "text": "Argh! What brings ye to my ship?" }
},
{
"role": "user",
"parts": { "text": "Wow! You are a real-life pirate!" }
}
],
"safety_settings": {
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_LOW_AND_ABOVE"
},
"generation_config": {
"temperature": 0.9,
"topP": 1,
"candidateCount": 1,
"maxOutputTokens": 2048
}
}'
コンソール
Vertex AI Studio を使用して Google Cloud コンソールのチャット プロンプトを送信するには、次の操作を行います。
- Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Studio] の [言語] セクションに移動します。
- [テキスト チャット] をクリックします。
モデルとパラメータを構成します。
- リージョン: 使用するリージョンを選択します。
- モデル: [Gemini Pro] を選択します。
温度: スライダーまたはテキスト ボックスを使用して、温度の値を入力します。
温度は、レスポンス生成時のサンプリングに使用されます。レスポンス生成は、topP
とtopK
が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が0
の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。モデルが返すレスポンスが一般的すぎる、短すぎる、あるいはフォールバック(代替)レスポンスが返ってくる場合は、温度を高く設定してみてください。
トークンの上限: スライダーまたはテキスト ボックスを使用して、最大出力の上限値を入力します。
レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
- 停止シーケンスを追加: 停止シーケンスを入力します。これは文字列(スペースを含む)で、モデルがこれに接するとレスポンスの生成を停止します。このシーケンスはレスポンスには含まれません。停止シーケンスは 5 つまで追加できます。
- 省略可: 詳細パラメータを構成するには、[詳細] をクリックして、次のように構成します。
クリックして詳細構成を開く
トップ K: スライダーまたはテキスト ボックスを使用して、トップ K の値を入力します。
トップ K は、モデルが出力用にトークンを選択する方法を変更します。トップ K が1
の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。トップ K が3
の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。トークン選択のそれぞれのステップで、最も高い確率を持つトップ K のトークンがサンプリングされます。その後、トークンはトップ P に基づいてさらにフィルタリングされ、最終的なトークンは温度サンプリングを用いて選択されます。
ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。
- トップ P: スライダーまたはテキスト ボックスを使用して、トップ P の値を入力します。確率の合計がトップ P の値と等しくなるまで、最も確率が高いものから最も確率が低いものの順に、トークンが選択されます。結果を最小にするには、Top-P を
0
に設定します。
Google Cloud コンソールはストリーミングのみをサポートしています。ストリーミングでは、生成されたときにプロンプトのレスポンスを受信します。メッセージ ボックスにメッセージを入力して、モデルとの会話を開始する準備ができました。
モデルは、以前のメッセージを新しいレスポンスのコンテキストとして使用します。
- 省略可: プロンプトを [マイプロンプト] に保存するには、[ 保存] をクリックします。
- 省略可: プロンプトの Python コードまたは curl コマンドを取得するには、[ コードを取得] をクリックします。
- 省略可: 以前のメッセージをすべて消去するには、[ CLEAR CONVERSATION] をクリックします。
システム指示を使用する
システム指示を使用すると、ユーザーは特定のニーズやユースケースに基づいてモデルの動作を制御できます。システム指示を設定すると、モデルにタスクを理解するための追加のコンテキストが提供され、よりカスタマイズされたレスポンスが可能になります。また、モデルとユーザーのインタラクション全体を特定のガイドラインに準拠して行うことができます。デベロッパーは、エンドユーザーが提供するプロンプトとは別に、システム指示を使用することで、プロダクト レベルの動作を指定できます。
システム指示は、次のような用途で使用できます。
- ペルソナまたはロールの定義(chatbot など)
- 出力形式の定義(マークダウン、YAML など)
- 出力のスタイルとトーンの定義(詳細度、形式、対象読者レベルなど)
- タスクの目標またはルールの定義する(たとえば、説明なしでコード スニペットを返す、など)
- プロンプトの追加のコンテキストの提供(ナレッジ カットオフなど)
システム指示はリクエスト全体に適用されます。プロンプトに含まれている場合、複数のユーザーとモデルのターンで機能します。
システム指示のコードサンプル
次に、Vertex AI Python SDK を使用してシンプルなシステム指示を指定する例を示します。
from vertexai.generative_models import GenerativeModel
model = GenerativeModel(
"gemini-1.0-pro-002",
system_instruction=[
"Don't use technical terms in your response",
],
)
print(model.generate_content("Explain gravity"))
次の例は、curl コマンドにシンプルなシステム指示を追加する例です。
LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro-002"
PROJECT_ID="test-project"
GENERATE_RESPONSE_METHOD="generateContent"
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models:generateContent" -d \
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "randomly select 10 words from a history book"
}
]
}
],
"system_instruction":
{
"parts": [
{
"text": "please print the results in json format."
}
]
},
"generation_config": {
"maxOutputTokens": 2048,
"temperature": 0.4,
"topP": 1,
"topK": 32
}
}
システム指示の例
以下に、モデルの想定動作を定義するシステム指示の例を示します。1 つ目は、フロントエンド コード生成のシステム プロンプト、2 つ目は市場の感情分析のユースケースの例、3 つ目はコンシューマー chatbot です。
コード生成
- システム: あなたは、フロントエンド インターフェースのコードのレンダリングを専門とするコーディングの専門家です。作成するウェブサイトのコンポーネントを説明する際は、作成に必要な HTML と CSS を返してください。このコードの説明は行わないでください。UI デザインも提案してください。
- ユーザー: ページの中央で、選択した画像を回転させ、キャプションを表示するボックスを作成してください。ページの中央にある画像は、目立つように影付きにしてください。また、サイトの別のページにリンクする必要があります。URL は空欄のままにしてください。
市場の感情分析
システム: あなたは、ニュース スニペットから市場の感情を分析する株式市場アナリストです。ニュース スニペットに基づいて、投資家の感情に影響を与える声明を抽出します。
ステートメントごとに JSON 形式でレスポンスを返してください。
- 1~10 のスコアを付け、感情が否定的か肯定的かを推測してください(1 が最も否定的、10 が最も肯定的、5 が中立です)。
- 各ステートメントに同じ処理を繰り返してください。
- 1 文で説明してください。
ユーザー: Mobileye は、ここ数年のサプライチェーンの制約により、トップレベルの顧客で過剰在庫が発生していることを報告しました。Mobileye によると、第 1 四半期の収益は、前年比で 4 億 5,800 万ドルから約 50% 減少すると予想されています。その後、2024 年の残りの期間で収益は正常化すると見込まれています。Mobileye は、2024 年の年間収益を 18 億 3,000 万ドルから 19 億 6,000 万ドルと予測しています。これは、2023 年の予測額である約 20 億 8,000 万ドルから減少しています。
音楽 chatbot
- システム: あなたは、音楽の歴史家として、さまざまな音楽ジャンルに関する包括的な知識を披露し、関連する例を提示します。音楽の楽しさを広めるため、トーンは明るく、熱狂的な雰囲気みにします。質問が音楽に関連していない場合は、「その件については把握しておりません」と回答してください。
- ユーザー: 60 年代に生まれた人が聴いていた音楽のジャンルで最も人気があったのは?5 曲を箇条書きでリストしてください。
次のステップ
- マルチモーダル プロンプト リクエストの送信方法を学習する。
- 責任ある AI のベスト プラクティスと Vertex AI の安全フィルタについて学習する。