主题
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 认证机制)时。
Maven 依赖
纯 Java
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.22.0</version>
</dependency>Spring Boot
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot4-starter</artifactId>
<version>1.22.0-beta32</version>
</dependency>NOTE
该 starter 需要 Spring Boot 4。在 Spring Boot 3 上,请改用 langchain4j-open-ai-spring-boot-starter。 详见 Spring Boot 集成。
NOTE
OpenAI 已弃用 DALL·E 2 与 DALL·E 3 模型,转而支持新的 GPT 图像模型 (gpt-image-1、gpt-image-1-mini、gpt-image-1.5、gpt-image-2、chatgpt-image-latest)。 DALL·E 专有的参数 style 和 response-format 已不再被 API 支持, 并已移除。取而代之,新增了 background、output-format、output-compression 和 moderation 等参数。
创建 OpenAiImageModel
纯 Java
java
ImageModel model = OpenAiImageModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-image-1")
.build();Spring Boot
添加到 application.properties:
properties
# Mandatory properties:
langchain4j.open-ai.image-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.image-model.model-name=gpt-image-1
# Optional properties:
langchain4j.open-ai.image-model.background=...
langchain4j.open-ai.image-model.base-url=...
langchain4j.open-ai.image-model.custom-headers=...
langchain4j.open-ai.image-model.log-requests=...
langchain4j.open-ai.image-model.log-responses=...
langchain4j.open-ai.image-model.max-retries=...
langchain4j.open-ai.image-model.moderation=...
langchain4j.open-ai.image-model.organization-id=...
langchain4j.open-ai.image-model.output-compression=...
langchain4j.open-ai.image-model.output-format=...
langchain4j.open-ai.image-model.project-id=...
langchain4j.open-ai.image-model.quality=...
langchain4j.open-ai.image-model.size=...
langchain4j.open-ai.image-model.timeout=...
langchain4j.open-ai.image-model.user=...词元用量
GPT 图像模型会上报一次请求使用了多少词元。OpenAiImageModel 以 OpenAiImageTokenUsage 返回它,该类型还会将输入与输出词元进一步拆分为图像词元和文本 词元(OpenAI 对二者的计价不同):
java
Response<Image> response = model.generate("A watercolor painting of a lighthouse");
OpenAiImageTokenUsage tokenUsage = (OpenAiImageTokenUsage) response.tokenUsage();
tokenUsage.inputTokenCount(); // all input tokens
tokenUsage.inputTokensDetails().textTokens(); // input tokens from the prompt
tokenUsage.inputTokensDetails().imageTokens(); // input tokens from input images (edits)
tokenUsage.outputTokenCount(); // all output tokens当 OpenAI 不上报这些细节时,它们为 null。DALL·E 模型完全不上报用量, 因此对它们而言 response.tokenUsage() 为 null。