チャット プロンプト リクエストを送信する(Gemini)

このページでは、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 モデルカードを選択します。

Model Garden に移動


モバイルアプリやウェブアプリから 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_contentstream パラメータを使用します。

  response = model.generate_content(contents=[...], stream = True)
  

非ストリーミング レスポンスの場合は、パラメータを削除するか、パラメータを False に設定します。

サンプルコード

import vertexai

from vertexai.generative_models import GenerativeModel, ChatSession

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"
vertexai.init(project=project_id, location=location)
model = GenerativeModel(model_name="gemini-1.0-pro-002")
chat = model.start_chat()

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat, prompt))

prompt = "What are all the colors in a rainbow?"
print(get_chat_response(chat, prompt))

prompt = "Why does it appear when it rains?"
print(get_chat_response(chat, prompt))

C#

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある C# の設定手順を完了してください。詳細については、Vertex AI C# API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


using Google.Cloud.AIPlatform.V1;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

public class MultiTurnChatSample
{
    public async Task<string> GenerateContent(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.0-pro"
    )
    {
        // Create a chat session to keep track of the context
        ChatSession chatSession = new ChatSession($"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}", location);

        string prompt = "Hello.";
        Console.WriteLine($"\nUser: {prompt}");

        string response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        prompt = "What are all the colors in a rainbow?";
        Console.WriteLine($"\nUser: {prompt}");

        response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        prompt = "Why does it appear when it rains?";
        Console.WriteLine($"\nUser: {prompt}");

        response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        return response;
    }

    private class ChatSession
    {
        private readonly string _modelPath;
        private readonly PredictionServiceClient _predictionServiceClient;

        private readonly List<Content> _contents;

        public ChatSession(string modelPath, string location)
        {
            _modelPath = modelPath;

            // Create a prediction service client.
            _predictionServiceClient = new PredictionServiceClientBuilder
            {
                Endpoint = $"{location}-aiplatform.googleapis.com"
            }.Build();

            // Initialize contents to send over in every request.
            _contents = new List<Content>();
        }

        public async Task<string> SendMessageAsync(string prompt)
        {
            // Initialize the content with the prompt.
            var content = new Content
            {
                Role = "USER"
            };
            content.Parts.AddRange(new List<Part>()
            {
                new() {
                    Text = prompt
                }
            });
            _contents.Add(content);

            // Create a request to generate content.
            var generateContentRequest = new GenerateContentRequest
            {
                Model = _modelPath,
                GenerationConfig = new GenerationConfig
                {
                    Temperature = 0.9f,
                    TopP = 1,
                    TopK = 32,
                    CandidateCount = 1,
                    MaxOutputTokens = 2048
                }
            };
            generateContentRequest.Contents.AddRange(_contents);

            // Make a non-streaming request, get a response.
            GenerateContentResponse response = await _predictionServiceClient.GenerateContentAsync(generateContentRequest);

            // Save the content from the response.
            _contents.Add(response.Candidates[0].Content);

            // Return the text
            return response.Candidates[0].Content.Parts[0].Text;
        }
    }
}

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);
  

サンプルコード

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function createStreamChat(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  // Instantiate the model
  const generativeModel = vertexAI.getGenerativeModel({
    model: model,
  });

  const chat = generativeModel.startChat({});
  const chatInput1 = 'How can I learn more about that?';

  console.log(`User: ${chatInput1}`);

  const result1 = await chat.sendMessageStream(chatInput1);
  for await (const item of result1.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

このサンプルを試す前に、Vertex AI クイックスタートの Java の設定手順を実施してください。詳細については、Vertex AI Java SDK for Gemini リファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

ストリーミング レスポンスと非ストリーミング レスポンス

モデルがストリーミング レスポンスを生成するか、非ストリーミング レスポンスを生成するかを選択できます。ストリーミングでは、プロンプトが生成されたときにそれに対するレスポンスの受信を伴います。つまり、モデルが出力トークンを生成するとすぐに出力トークンが送信されます。プロンプトに対する非ストリーミング レスポンスは、すべての出力トークンが生成された後にのみ送信されます。

ストリーミング レスポンスの場合は、generateContentStream メソッドを使用します。

  public ResponseStream generateContentStream(Content content)
  

非ストリーミング レスポンスの場合は、generateContent メソッドを使用します。

  public GenerateContentResponse generateContent(Content content)
  

サンプルコード

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ChatSession;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class ChatDiscussion {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.0-pro";

    chatDiscussion(projectId, location, modelName);
  }

  // Ask interrelated questions in a row using a ChatSession object.
  public static void chatDiscussion(String projectId, String location, String modelName)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerateContentResponse response;

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      // Create a chat session to be used for interactive conversation.
      ChatSession chatSession = new ChatSession(model);

      response = chatSession.sendMessage("Hello.");
      System.out.println(ResponseHandler.getText(response));

      response = chatSession.sendMessage("What are all the colors in a rainbow?");
      System.out.println(ResponseHandler.getText(response));

      response = chatSession.sendMessage("Why does it appear when it rains?");
      System.out.println(ResponseHandler.getText(response));
      System.out.println("Chat Ended.");
    }
  }
}

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?"))
  

サンプルコード

import (
	"context"
	"encoding/json"
	"fmt"

	"cloud.google.com/go/vertexai/genai"
)

var projectId = "PROJECT_ID"
var region = "us-central1"
var modelName = "gemini-1.0-pro-vision"

func makeChatRequests(projectId string, region string, modelName string) error {
	ctx := context.Background()
	client, err := genai.NewClient(ctx, projectId, region)
	if err != nil {
		return fmt.Errorf("error creating client: %v", err)
	}
	defer client.Close()

	gemini := client.GenerativeModel(modelName)
	chat := gemini.StartChat()

	r, err := chat.SendMessage(
		ctx,
		genai.Text("Hello"))
	if err != nil {
		return err
	}
	rb, _ := json.MarshalIndent(r, "", "  ")
	fmt.Println(string(rb))

	r, err = chat.SendMessage(
		ctx,
		genai.Text("What are all the colors in a rainbow?"))
	if err != nil {
		return err
	}
	rb, _ = json.MarshalIndent(r, "", "  ")
	fmt.Println(string(rb))

	r, err = chat.SendMessage(
		ctx,
		genai.Text("Why does it appear when it rains?"))
	if err != nil {
		return err
	}
	rb, _ = json.MarshalIndent(r, "", "  ")
	fmt.Println(string(rb))

	return nil
}

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-002gemini-1.5-pro-preview-0409 で使用できます。モデルのパフォーマンスを向上させるための指示。たとえば、「できるだけ簡潔に答えてください」や「結果を JSON 形式で出力してください」などです。
  • TEMPERATURE: 温度は、レスポンス生成時のサンプリングに使用されます。レスポンス生成は、topPtopK が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が 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 コンソールのチャット プロンプトを送信するには、次の操作を行います。

  1. Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Studio] の [言語] セクションに移動します。

    Vertex AI Studio に移動

  2. [テキスト チャット] をクリックします。
  3. モデルとパラメータを構成します。

    • リージョン: 使用するリージョンを選択します。
    • モデル: [Gemini Pro] を選択します。
    • 温度: スライダーまたはテキスト ボックスを使用して、温度の値を入力します。

      温度は、レスポンス生成時のサンプリングに使用されます。レスポンス生成は、topPtopK が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が 0 の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。

      モデルが返すレスポンスが一般的すぎる、短すぎる、あるいはフォールバック(代替)レスポンスが返ってくる場合は、温度を高く設定してみてください。

    • トークンの上限: スライダーまたはテキスト ボックスを使用して、最大出力の上限値を入力します。

      レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。

      レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。

    • 停止シーケンスを追加: 停止シーケンスを入力します。これは文字列(スペースを含む)で、モデルがこれに接するとレスポンスの生成を停止します。このシーケンスはレスポンスには含まれません。停止シーケンスは 5 つまで追加できます。
  4. 省略可: 詳細パラメータを構成するには、[詳細] をクリックして、次のように構成します。

    クリックして詳細構成を開く

    • トップ K: スライダーまたはテキスト ボックスを使用して、トップ K の値を入力します。

      トップ K は、モデルが出力用にトークンを選択する方法を変更します。トップ K が 1 の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。トップ K が 3 の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。

      トークン選択のそれぞれのステップで、最も高い確率を持つトップ K のトークンがサンプリングされます。その後、トークンはトップ P に基づいてさらにフィルタリングされ、最終的なトークンは温度サンプリングを用いて選択されます。

      ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。

    • トップ P: スライダーまたはテキスト ボックスを使用して、トップ P の値を入力します。確率の合計がトップ P の値と等しくなるまで、最も確率が高いものから最も確率が低いものの順に、トークンが選択されます。結果を最小にするには、Top-P を 0 に設定します。
  5. Google Cloud コンソールはストリーミングのみをサポートしています。ストリーミングでは、生成されたときにプロンプトのレスポンスを受信します。メッセージ ボックスにメッセージを入力して、モデルとの会話を開始する準備ができました。

    モデルは、以前のメッセージを新しいレスポンスのコンテキストとして使用します。

  6. 省略可: プロンプトを [マイプロンプト] に保存するには、[ 保存] をクリックします。
  7. 省略可: プロンプトの Python コードまたは curl コマンドを取得するには、[コードを取得] をクリックします。
  8. 省略可: 以前のメッセージをすべて消去するには、[ 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 曲を箇条書きでリストしてください。

次のステップ