Google VertexAI テキスト埋め込み
Vertex AI は、テキストとマルチモーダルの 2 種類の埋め込みモデルをサポートしています。このドキュメントでは、Vertex AI テキスト埋め込み API を使用してテキスト埋め込みを作成する方法について説明します。
Vertex AI テキスト埋め込み API は、密なベクトル表現を使用します。単語を数字に直接マッピングする傾向があるスパースベクトルとは異なり、密なベクトルはテキストの意味をより適切に表現するように設計されています。生成 AI で密なベクトル埋め込みを使用する利点は、単語や構文の直接的な一致を検索する代わりに、同じ言語を使用していない文章であっても、クエリの意味に一致する文章をより適切に検索できることです。
前提条件
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 埋め込みモデル用の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml
ファイルに次の依存関係を追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-vertex-ai-embedding-spring-boot-starter</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-vertex-ai-embedding-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
埋め込みプロパティ
プレフィックス spring.ai.vertex.ai.embedding
は、VertexAI Embedding API に接続できるようにするプロパティプレフィックスとして使用されます。
プロパティ | 説明 | デフォルト |
---|---|---|
spring.ai.vertex.ai.embedding.project-id | Google クラウドプラットフォームプロジェクト ID | - |
spring.ai.vertex.ai.embedding.location | 領域 | - |
spring.ai.vertex.ai.embedding.apiEndpoint | Vertex AI Embedding API エンドポイント。 | - |
プレフィックス spring.ai.vertex.ai.embedding.text
は、VertexAI テキスト埋め込みの埋め込みモデルの実装を構成できるプロパティプレフィックスです。
プロパティ | 説明 | デフォルト |
---|---|---|
spring.ai.vertex.ai.embedding.text.enabled | Vertex AI Embedding API モデルを有効にします。 | true |
spring.ai.vertex.ai.embedding.text.options.model | 使用する Vertex テキスト埋め込みモデル はこちら | text-embedding-004 |
spring.ai.vertex.ai.embedding.text.options.task-type | モデルがより高品質な埋め込みを生成するのを支援するための下流アプリケーション。利用可能なタスク型 |
|
spring.ai.vertex.ai.embedding.text.options.title | オプションのタイトル。task_type=RETRIEVAL_DOCUMENT の場合にのみ有効です。 | - |
spring.ai.vertex.ai.embedding.text.options.dimensions | 結果として得られる出力埋め込みの次元数。モデルバージョン 004 以降でサポートされます。このパラメーターを使用すると、たとえばストレージの最適化のために埋め込みサイズを縮小できます。 | - |
spring.ai.vertex.ai.embedding.text.options.auto-truncate | true に設定すると、入力テキストは切り捨てられます。false に設定すると、入力テキストがモデルでサポートされている最大長よりも長い場合にエラーが返されます。 | true |
サンプルコントローラー
新しい Spring Boot プロジェクトを作成し、spring-ai-vertex-ai-embedding-spring-boot-starter
を pom (または gradle) の依存関係に追加します。
src/main/resources
ディレクトリに application.properties
ファイルを追加して、VertexAi チャットモデルを有効にして構成します。
spring.ai.vertex.ai.embedding.project-id=<YOUR_PROJECT_ID>
spring.ai.vertex.ai.embedding.location=<YOUR_PROJECT_LOCATION>
spring.ai.vertex.ai.embedding.text.options.model=text-embedding-004
これにより、クラスに挿入できる VertexAiTextEmbeddingModel
実装が作成されます。以下は、埋め込み生成に埋め込みモデルを使用する単純な @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);
}
}
手動構成
VertexAiTextEmbeddingModel [GitHub] (英語) は EmbeddingModel
を実装します。
spring-ai-vertex-ai-embedding
依存関係をプロジェクトの Maven pom.xml
ファイルに追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-vertex-ai-embedding</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-vertex-ai-embedding'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
次に、VertexAiTextEmbeddingModel
を作成し、テキスト生成に使用します。
VertexAiEmbeddingConnectionDetails connectionDetails =
VertexAiEmbeddingConnectionDetails.builder()
.projectId(System.getenv(<VERTEX_AI_GEMINI_PROJECT_ID>))
.location(System.getenv(<VERTEX_AI_GEMINI_LOCATION>))
.build();
VertexAiTextEmbeddingOptions options = VertexAiTextEmbeddingOptions.builder()
.model(VertexAiTextEmbeddingOptions.DEFAULT_MODEL_NAME)
.build();
var embeddingModel = new VertexAiTextEmbeddingModel(this.connectionDetails, this.options);
EmbeddingResponse embeddingResponse = this.embeddingModel
.embedForResponse(List.of("Hello World", "World is big and salvation is near"));
Google サービスアカウントから資格情報を読み込む
サービスアカウントの json ファイルから GoogleCredentials をプログラムで読み込むには、次のコードを使用します。
GoogleCredentials credentials = GoogleCredentials.fromStream(<INPUT_STREAM_TO_CREDENTIALS_JSON>)
.createScoped("https://www.googleapis.com/auth/cloud-platform");
credentials.refreshIfExpired();
VertexAiEmbeddingConnectionDetails connectionDetails =
VertexAiEmbeddingConnectionDetails.builder()
.projectId(System.getenv(<VERTEX_AI_GEMINI_PROJECT_ID>))
.location(System.getenv(<VERTEX_AI_GEMINI_LOCATION>))
.apiEndpoint(endpoint)
.predictionServiceSettings(
PredictionServiceSettings.newBuilder()
.setEndpoint(endpoint)
.setCredentialsProvider(FixedCredentialsProvider.create(credentials))
.build());