主题
OpenAI
NOTE
这是 OpenAI 集成的文档,它使用对 OpenAI REST API 的自定义 Java 实现,最适合与 Quarkus(因其使用 Quarkus REST 客户端)和 Spring(因其使用 Spring 的 RestClient)搭配。
LangChain4j 提供了 3 种不同的 OpenAI 集成来使用嵌入模型,这里是第 1 种:
- OpenAI 使用对 OpenAI REST API 的自定义 Java 实现,最适合与 Quarkus(因其使用 Quarkus REST 客户端)以及 Spring(因其使用 Spring 的 RestClient)搭配。
- OpenAI 官方 SDK 使用官方的 OpenAI Java SDK。
- Azure OpenAI 使用微软的 Azure SDK,最适合在你使用微软 Java 技术栈(包括高级 Azure 认证机制)时。
- https://platform.openai.com/docs/guides/embeddings
- https://platform.openai.com/docs/api-reference/embeddings
Maven 依赖
纯 Java
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.22.0</version>
</dependency>1
2
3
4
5
2
3
4
5
Spring Boot
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot4-starter</artifactId>
<version>1.22.0-beta32</version>
</dependency>1
2
3
4
5
2
3
4
5
NOTE
该 starter 需要 Spring Boot 4。在 Spring Boot 3 上,请改用 langchain4j-open-ai-spring-boot-starter。 详见 Spring Boot 集成。
创建 OpenAiEmbeddingModel
纯 Java
java
EmbeddingModel model = OpenAiEmbeddingModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("text-embedding-3-small")
.build();1
2
3
4
2
3
4
Spring Boot
添加到 application.properties:
properties
# Mandatory properties:
langchain4j.open-ai.embedding-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.embedding-model.model-name=text-embedding-3-small
# Optional properties:
langchain4j.open-ai.embedding-model.base-url=...
langchain4j.open-ai.embedding-model.custom-headers=...
langchain4j.open-ai.embedding-model.dimensions=...
langchain4j.open-ai.embedding-model.log-requests=...
langchain4j.open-ai.embedding-model.log-responses=...
langchain4j.open-ai.embedding-model.max-retries=...
langchain4j.open-ai.embedding-model.organization-id=...
langchain4j.open-ai.embedding-model.project-id=...
langchain4j.open-ai.embedding-model.timeout=...
langchain4j.open-ai.embedding-model.user=...1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
设置自定义嵌入请求参数
使用 OpenAiEmbeddingModel 时,你可以在 HTTP 请求的 JSON 体内为嵌入请求 配置自定义参数。这对于需要提供者专有嵌入参数的 OpenAI 兼容提供者很有用:
java
EmbeddingModel model = OpenAiEmbeddingModel.builder()
.baseUrl("https://integrate.api.nvidia.com/v1")
.apiKey(System.getenv("NVIDIA_API_KEY"))
.modelName("nvidia/nv-embedqa-e5-v5")
.customParameters(Map.of("input_type", "passage"))
.build();1
2
3
4
5
6
2
3
4
5
6
能力
- 逐次调用参数(通过
EmbeddingRequest):dimensions—— 在text-embedding-3模型上降低输出维度。OpenAI 专有的user、encoding_format及任意透传参数可通过OpenAiEmbeddingRequestParameters提供(例如用于 NVIDIA 的input_type)。 - 仅支持文本(不支持图像输入)。
- 监听器:通过
OpenAiEmbeddingModel.builder().listeners(...)配置。
关于请求/响应 API,参见嵌入模型。