VertexAI Gemini チャット

Vertex AI Gemini API を使用すると、開発者は Gemini モデルを使用して生成 AI アプリケーションを構築できます。Vertex AI Gemini API は、入力および出力のテキストまたはコードとしてマルチモーダルプロンプトをサポートします。マルチモーダルモデルは、イメージ、ビデオ、テキストなどの複数のモダリティからの情報を処理できるモデルです。例: モデルにクッキーの皿の写真を送り、そのクッキーのレシピを教えてもらうことができます。

Gemini は、Google DeepMind によって開発された生成 AI モデルのファミリーであり、マルチモーダルなユースケース向けに設計されています。Gemini API を使用すると、Gemini 1.0 Pro Vision および Gemini 1.0 Pro モデルにアクセスできます。Vertex AI Gemini API モデルの仕様については、モデル情報 を参照してください。

前提条件

  • OS に適した gcloud CLI をインストールします。

  • 次のコマンドを実行して認証します。PROJECT_ID を Google Cloud プロジェクト ID に置き換え、ACCOUNT を Google Cloud ユーザー名に置き換えます。

gcloud config set project <PROJECT_ID> &&
gcloud auth application-default login <ACCOUNT>

自動構成

Spring AI は、VertexAI Gemini チャットクライアント用の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml ファイルに次の依存関係を追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-vertex-ai-gemini-spring-boot-starter</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-vertex-ai-gemini-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

チャットのプロパティ

接頭辞 spring.ai.vertex.ai.gemini は、VertexAI への接続を可能にするプロパティ接頭辞として使用されます。

プロパティ 説明 デフォルト

spring.ai.vertex.ai.gemini.projectId

Google クラウドプラットフォームプロジェクト ID

-

spring.ai.vertex.ai.gemini.location

領域

-

spring.ai.vertex.ai.gemini.credentialsUri

Vertex AI Gemini 資格情報への URI。指定すると、VertexAI を認証するための GoogleCredentials インスタンスを作成するために使用されます。

-

spring.ai.vertex.ai.gemini.apiEndpoint

Vertex AI Gemini API エンドポイント。

-

spring.ai.vertex.ai.gemini.scopes

-

spring.ai.vertex.ai.gemini.transport

API トランスポート。GRPC または REST。

GRPC

プレフィックス spring.ai.vertex.ai.gemini.chat は、VertexAI Gemini チャットのチャットモデル実装を構成できるプロパティプレフィックスです。

プロパティ 説明 デフォルト

spring.ai.vertex.ai.gemini.chat.options.model

使用できる Vertex AI Gemini チャットモデル には、(1.0) gemini-progemini-pro-vision、新しい (1.5) gemini-1.5-pro-preview-0514gemini-1.5-flash-preview-0514 モデルが含まれます。

gemini-pro

spring.ai.vertex.ai.gemini.chat.options.temperature

出力のランダム性を制御します。値の範囲は [0.0,1.0] 以上です。1.0 に近い値は、より多様なレスポンスを生成しますが、0.0 に近い値は、通常、生成からの驚くべきレスポンスが少なくなります。この値は、ジェネレーティブの呼び出し中にバックエンドによって使用されるデフォルトを指定します。

0.8

spring.ai.vertex.ai.gemini.chat.options.topK

サンプリング時に考慮するトークンの最大数。生成では、Top-k サンプリングと核サンプリングを組み合わせて使用します。Top-k サンプリングでは、最も可能性の高い上位 K 個のトークンのセットが考慮されます。

-

spring.ai.vertex.ai.gemini.chat.options.topP

サンプリング時に考慮するトークンの最大累積確率。生成では、Top-k サンプリングと核サンプリングを組み合わせて使用します。nucleus サンプリングでは、確率の合計が少なくとも topP であるトークンの最小セットが考慮されます。

-

spring.ai.vertex.ai.gemini.chat.options.candidateCount

返される生成されたレスポンスメッセージの数。この値は [1 ~ 8] の範囲内である必要があります。デフォルトは 1 です。

-

spring.ai.vertex.ai.gemini.chat.options.candidateCount

返される生成されたレスポンスメッセージの数。この値は [1 ~ 8] の範囲内である必要があります。デフォルトは 1 です。

-

spring.ai.vertex.ai.gemini.chat.options.maxOutputTokens

生成するトークンの最大数。

-

spring.ai.vertex.ai.gemini.chat.options.frequencyPenalty

-

spring.ai.vertex.ai.gemini.chat.options.presencePenalty

-

spring.ai.vertex.ai.gemini.chat.options.functions

単一のプロンプトリクエストでの関数呼び出しを有効にする、名前で識別される関数のリスト。これらの名前の関数は、functionCallbacks レジストリに存在する必要があります。

-

spring.ai.vertex.ai.gemini.chat.options というプレフィックスが付いたすべてのプロパティは、リクエスト固有のランタイムオプションを Prompt 呼び出しに追加することで実行時にオーバーライドできます。

ランタイムオプション

VertexAiGeminiChatOptions.java [GitHub] (英語) は、温度、topK などのモデル構成を提供します。

起動時に、VertexAiGeminiChatModel(api, options) コンストラクターまたは spring.ai.vertex.ai.chat.options.* プロパティを使用してデフォルトのオプションを構成できます。

実行時に、新しいリクエスト固有のオプションを Prompt 呼び出しに追加することで、デフォルトのオプションをオーバーライドできます。たとえば、特定のリクエストのデフォルトの温度をオーバーライドするには、次のようにします。

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        VertexAiPaLm2ChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));
モデル固有の VertexAiChatPaLm2Options に加えて、ChatOptionsBuilder#builder() [GitHub] (英語) で作成されたポータブル ChatOptions [GitHub] (英語) インスタンスを使用できます。

関数呼び出し

2023 年 4 月 30 日現在、Vertex AI Gemini Pro モデルでは関数呼び出しのサポートが大幅に低下しています。この機能はまだ利用可能ですが、本番環境での使用は推奨されません。どうやら、Gemini Pro は関数名を正しく処理できなくなったようです。並列関数呼び出しもなくなりました。

カスタム Java 関数を VertexAiGeminiChatModel に登録すると、Gemini Pro モデルが、登録された関数の 1 つまたは複数を呼び出すための引数を含む JSON オブジェクトの出力をインテリジェントに選択できます。これは、LLM 機能を外部ツールや API に接続するための強力な手法です。Vertex AI Gemini 関数呼び出しについて詳しく参照してください。

マルチモーダル

マルチモダリティとは、テキスト、イメージ、音声、その他のデータ形式を含むさまざまなソースからの情報を同時に理解して処理するモデルの機能を指します。このパラダイムは、AI モデルの大幅な進歩を表しています。

Google の Gemini AI モデルは、テキスト、コード、オーディオ、イメージ、ビデオを理解して統合することにより、この機能をサポートします。詳細については、ブログ投稿 Gemini の導入 (英語) を参照してください。

Spring AI の Message インターフェースは、メディア型を導入することでマルチモーダル AI モデルをサポートします。この型には、生のメディアデータに Spring の org.springframework.util.MimeType および java.lang.Object を使用して、メッセージ内のメディア添付ファイルに関するデータと情報が含まれます。

以下は、VertexAiGeminiChatModelIT.java [GitHub] (英語) から抽出された簡単なコード例で、ユーザーテキストとイメージの組み合わせを示しています。

byte[] data = new ClassPathResource("/vertex-test.png").getContentAsByteArray();

var userMessage = new UserMessage("Explain what do you see o this picture?",
        List.of(new Media(MimeTypeUtils.IMAGE_PNG, data)));

ChatResponse response = chatModel.call(new Prompt(List.of(userMessage)));

サンプルコントローラー

新しい Spring Boot プロジェクトを作成し、spring-ai-vertex-ai-palm2-spring-boot-starter を pom (または gradle) の依存関係に追加します。

src/main/resources ディレクトリに application.properties ファイルを追加して、VertexAi チャットモデルを有効にして構成します。

spring.ai.vertex.ai.gemini.project-id=PROJECT_ID
spring.ai.vertex.ai.gemini.location=LOCATION
spring.ai.vertex.ai.gemini.chat.options.model=vertex-pro-vision
spring.ai.vertex.ai.gemini.chat.options.temperature=0.5
api-key を VertexAI 資格情報に置き換えます。

これにより、クラスに挿入できる VertexAiGeminiChatModel 実装が作成されます。以下は、テキスト生成にチャットモデルを使用する単純な @Controller クラスの例です。

@RestController
public class ChatController {

    private final VertexAiGeminiChatModel chatModel;

    @Autowired
    public ChatController(VertexAiGeminiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
	public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }
}

手動構成

VertexAiGeminiChatModel [GitHub] (英語) は ChatModel を実装し、VertexAI を使用して Vertex AI Gemini サービスに接続します。

spring-ai-vertex-ai-gemini 依存関係をプロジェクトの Maven pom.xml ファイルに追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-vertex-ai-gemini</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-vertex-ai-gemini'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

次に、VertexAiGeminiChatModel を作成し、テキスト生成に使用します。

VertexAI vertexApi =  new VertexAI(projectId, location);

var chatModel = new VertexAiGeminiChatModel(vertexApi,
    VertexAiGeminiChatOptions.builder()
        .withModel(ChatModel.GEMINI_PRO_1_5_PRO)
        .withTemperature(0.4)
    .build());

ChatResponse response = chatModel.call(
    new Prompt("Generate the names of 5 famous pirates."));

VertexAiGeminiChatOptions は、チャットリクエストの構成情報を提供します。VertexAiGeminiChatOptions.Builder は流れるようなオプションビルダーです。

低レベル Java クライアント

次のクラス図は、Vertex AI Gemini ネイティブ Java API を示しています。

vertex ai gemini native api