主题
Google Gen AI 嵌入(实验性)
https://github.com/googleapis/java-genai
本集成使用官方的 Google Gen AI Java SDK(com.google.genai:google-genai)。它被标记为 实验性:其 API 与实现在未来版本中可能变化。
Maven 依赖
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-google-genai</artifactId>
<version>1.22.0-beta32</version>
</dependency>1
2
3
4
5
2
3
4
5
API 密钥
在此免费获取 API 密钥:https://ai.google.dev/gemini-api/docs/api-key 。
可用模型
参见可用的嵌入模型, 例如:
gemini-embedding-001—— 仅文本;支持任务类型与输出维度(128–3072)。gemini-embedding-2—— 原生多模态;不使用 task type 参数(关于任务指令如何 配合 Gemini Embedding 2 工作,参见 Google AI Gemini Embeddings)。
GoogleGenAiEmbeddingModel
基本用法
java
EmbeddingModel embeddingModel = GoogleGenAiEmbeddingModel.builder()
.apiKey(System.getenv("GOOGLE_AI_GEMINI_API_KEY"))
.modelName("gemini-embedding-001")
.build();
Response<Embedding> response = embeddingModel.embed("Hello, world!");
Embedding embedding = response.content();1
2
3
4
5
6
7
2
3
4
5
6
7
配置嵌入模型
java
EmbeddingModel embeddingModel = GoogleGenAiEmbeddingModel.builder()
.apiKey(System.getenv("GOOGLE_AI_GEMINI_API_KEY"))
.modelName("gemini-embedding-001")
.taskType(GoogleGenAiEmbeddingModel.TaskTypeEnum.RETRIEVAL_DOCUMENT) // default task type
.outputDimensionality(768) // reduce the embedding size (for models that support it)
.titleMetadataKey("title") // metadata key used as the document title for RETRIEVAL_DOCUMENT
.maxRetries(3)
.timeout(Duration.ofSeconds(30))
.build();1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
请求/响应 API 与能力
除便捷方法与 builder 级的 taskType(...) 外,GoogleGenAiEmbeddingModel 还支持 带逐次调用特征参数的请求/响应 API:
- 输入类型:
EmbeddingInputType.QUERY/DOCUMENT会映射到 SDK 的RETRIEVAL_QUERY/RETRIEVAL_DOCUMENT任务类型,因此你无需配置两个模型实例就能对查询和文档采用不同的嵌入方式。(这适用于支持任务类型的模型,例如gemini-embedding-001。) - 维度:逐次调用的
dimensions(...)会覆盖 builder 的outputDimensionality,适用于 支持缩小输出维度的模型。 - 多模态(
gemini-embedding-2):原生地将交错的文本 + 图像嵌入为单个嵌入。 较早的模型(例如gemini-embedding-001)仅支持文本。图像必须以 base64(ImageContent)提供。 - 监听器:通过
GoogleGenAiEmbeddingModel.builder().listeners(...)配置,以观察请求、 响应与错误。
java
EmbeddingResponse response = embeddingModel.embed(EmbeddingRequest.builder()
.input("What is the capital of France?")
.inputType(EmbeddingInputType.QUERY) // embed as a query
.dimensions(256) // reduce output dimensionality
.build());
List<Embedding> embeddings = response.embeddings();1
2
3
4
5
6
7
2
3
4
5
6
7
多模态示例(Gemini Embedding 2 —— 文本与图像融合为一个嵌入):
java
EmbeddingModel embeddingModel = GoogleGenAiEmbeddingModel.builder()
.apiKey(System.getenv("GOOGLE_AI_GEMINI_API_KEY"))
.modelName("gemini-embedding-2")
.build();
EmbeddingResponse response = embeddingModel.embed(EmbeddingRequest.builder()
.input(TextContent.from("a photo of a cat"), ImageContent.from(base64Image, "image/png"))
.build());
Embedding embedding = response.embeddings().get(0);1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
关于请求/响应 API,参见嵌入模型; 关于监听器,参见可观测性。
了解更多
关于 Gemini 嵌入模型的更多细节,参见 文档。