VertexAI 埋め込み

生成言語 (英語) 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.embedding は、VertexAI チャットの埋め込みモデルの実装を構成できるプロパティプレフィックスです。

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

spring.ai.vertex.ai.embedding.enabled

Vertex AI PaLM API 埋め込みモデルを有効にします。

true

spring.ai.vertex.ai.embedding.model

使用する Vertex 埋め込みモデル はこちら

embedding-gecko-001

サンプルコントローラー

新しい 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.embedding.model=embedding-gecko-001
api-key を VertexAI 資格情報に置き換えます。

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

@RestController
public class EmbeddingController {

    private final EmbeddingModel embeddingModel;

    @Autowired
    public EmbeddingController(EmbeddingModel embeddingModel) {
        this.embeddingModel = embeddingModel;
    }

    @GetMapping("/ai/embedding")
    public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));
        return Map.of("embedding", embeddingResponse);
    }
}

手動構成

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

spring-ai-vertex-ai 依存関係をプロジェクトの 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-palm2'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

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

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

var embeddingModel = new VertexAiPaLm2EmbeddingModel(vertexAiApi);

EmbeddingResponse embeddingResponse = embeddingModel
	.embedForResponse(List.of("Hello World", "World is big and salvation is near"));

低レベル 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!"));