VertexAI PaLM2 チャット

警告:

2024 年 2 月 15 日現在、Google AI サービスおよびツールで使用するための PaLM2 API は廃止 (英語) されています。。6 か月以内に PaLM API は廃止されます。つまり、ユーザーはプロンプトで PaLM モデルを使用したり、新しい PaLM モデルを調整したり、PaLM 調整モデルで推論を実行したりできなくなります。

生成言語 (英語) PaLM API を使用すると、開発者は PaLM モデルを使用して生成 AI アプリケーションを構築できます。大規模言語モデル (LLM) は、コンピューターが一連のプロンプトを通じて自然言語を理解して生成できるようにする、強力で汎用性の高い型の機械学習モデルです。PaLM API は、Google の次世代 LLM、PaLM に基づいています。コード生成、推論、記述など、さまざまなタスクに優れています。PaLM API を使用すると、コンテンツ生成、対話エージェント、要約および分類システムなどのユースケース向けの生成 AI アプリケーションを構築できます。

モデル REST API (英語) をベースにしています。

前提条件

PaLM2 REST API にアクセスするには、makersuite (英語) からアクセス API KEY を取得する必要があります。

現在、PaLM API は米国外では利用できませんが、テストには VPN を使用できます。

Spring AI プロジェクトは、取得した API Key の値に設定する必要がある spring.ai.vertex.ai.api-key という名前の構成プロパティを定義します。環境変数のエクスポートは、その構成プロパティを設定する 1 つの方法です。

export SPRING_AI_VERTEX_AI_API_KEY=<INSERT KEY HERE>

リポジトリと BOM の追加

Spring AI アーティファクトは、Spring マイルストーンおよびスナップショットリポジトリで公開されます。これらのリポジトリをビルドシステムに追加するには、リポジトリセクションを参照してください。

依存関係の管理を支援するために、Spring AI は BOM (部品表) を提供し、一貫したバージョンの Spring AI がプロジェクト全体で使用されるようにします。Spring AI BOM をビルドシステムに追加するには、"依存関係管理" セクションを参照してください。

自動構成

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

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

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

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

チャットのプロパティ

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

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

spring.ai.vertex.ai.ai.base-url

接続先の URL

Generative language.googleapis.com/v1beta3 (英語)

spring.ai.vertex.ai.api-key

API キー

-

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

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

spring.ai.vertex.ai.chat.enabled

Vertex AI PaLM API チャットモデルを有効にします。

true

spring.ai.vertex.ai.chat.model

使用する Vertex チャットモデル はこちら

chat-bison-001

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

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

0.7

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

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

20

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

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

-

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

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

1

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

ランタイムオプション

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

起動時に、VertexAiPaLm2ChatModel(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()
    ));
モデル固有の VertexAiPaLm2ChatOptions に加えて、ChatOptionsBuilder#builder() [GitHub] (英語) で作成されたポータブル ChatOptions [GitHub] (英語) インスタンスを使用できます。

サンプルコントローラー

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

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

spring.ai.vertex.ai.api-key=YOUR_API_KEY
spring.ai.vertex.ai.chat.model=chat-bison-001
spring.ai.vertex.ai.chat.options.temperature=0.5
api-key を VertexAI 資格情報に置き換えます。

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

@RestController
public class ChatController {

    private final VertexAiPaLm2ChatModel chatModel;

    @Autowired
    public ChatController(VertexAiPaLm2ChatModel 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);
    }
}

手動構成

VertexAiPaLm2ChatModel [GitHub] (英語) は ChatModel を実装し、低レベル VertexAiPaLm2Api クライアントを使用して VertexAI サービスに接続します。

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

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

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

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

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

VertexAiPaLm2Api vertexAiApi = new VertexAiPaLm2Api(< YOUR PALM_API_KEY>);

var chatModel = new VertexAiPaLm2ChatModel(vertexAiApi,
    VertexAiPaLm2ChatOptions.builder()
        .withTemperature(0.4)
    .build());

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

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

低レベル VertexAiPaLm2Api クライアント

VertexAiPaLm2Api [GitHub] (英語) が提供するのは、VertexAiPaLm2Api チャット API 用の軽量 Java クライアントです。

次のクラス図は、VertexAiPaLm2Api チャットインターフェースと構成要素を示しています。

vertex ai chat low level api

API をプログラムで使用する方法の簡単なスニペットを次に示します。

VertexAiPaLm2Api vertexAiApi = new VertexAiPaLm2Api(< YOUR PALM_API_KEY>);

// Generate
var prompt = new MessagePrompt(List.of(new Message("0", "Hello, how are you?")));

GenerateMessageRequest request = new GenerateMessageRequest(prompt);

GenerateMessageResponse response = vertexAiApi.generateMessage(request);

// Embed text
Embedding embedding = vertexAiApi.embedText("Hello, how are you?");

// Batch embedding
List<Embedding> embeddings = vertexAiApi.batchEmbedText(List.of("Hello, how are you?", "I am fine, thank you!"));