Spring + OpenAI 生成圖像
ChatGPT 是由 OpenAI 開發(fā)的強大語言模型,可以用于生成類似人類的文本。OpenAI API 允許開發(fā)人員訪問該模型并在其自己的應(yīng)用程序中使用。在本文中,我們將討論如何使用 Java Spring Framework 與 OpenAI API 生成圖像。
在開始之前,您需要在 OpenAI 網(wǎng)站 "https://beta.openai.com/account/api-keys" 上注冊 API 密鑰。一旦擁有了 API 密鑰,就可以開始向 API 發(fā)送請求。
要使用 Java Spring Framework 與 OpenAI API,請使用可以處理 HTTP 請求的庫。這方面比較常用的庫是 Spring RestTemplate 庫。RestTemplate 是一種強大而靈活的庫,可以輕松地發(fā)送 HTTP 請求并處理響應(yīng)。
首先,需要將 Spring RestTemplate 庫添加到項目中。可以將以下依賴項添加到 build.gradle 文件:
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.1'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.openai'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
接下來,創(chuàng)建一個處理 API 調(diào)用的類??梢允褂孟旅娴氖纠?/p>
@Component
public class OpenAi {
? ?private static final String OPENAI_URL = "https://api.openai.com/v1/images/generations";
? ?private final String apiKey = "<your-api-key";
? ?private final RestTemplate restTemplate = new RestTemplate();
? ?public String generateImages(String prompt, float temperature, int maxTokens, String stop, final int logprobs, final boolean echo) {
? ? ? ?HttpHeaders headers = new HttpHeaders();
? ? ? ?headers.setContentType(MediaType.APPLICATION_JSON);
? ? ? ?headers.set("Authorization", "Bearer " + apiKey);
? ? ? ?// We are including only some of the parameters to the json request
? ? ? ?String requestJson = "{\"prompt\":\"" + prompt + "\",\"n\":" + n + "}";
? ? ? ?HttpEntity < String > request = new HttpEntity < > (requestJson, headers);
? ? ? ?ResponseEntity < String > response = restTemplate.postForEntity(OPENAI_URL, request, String.class);
? ? ? ?return response.getBody();
? ?}
}
這個類使用 Spring RestTemplate 庫向?OpenAI API 的生成圖像端點發(fā)送 POST 請求,包含給定的提示詞和想要接收的圖像數(shù)量。如果需要,還可以增加一些其他可選參數(shù),可以在下面的鏈接中檢查:https://beta.openai.com/docs/api-reference/images/create。
API 密鑰已添加到請求頭中,并以 JSON 的形式發(fā)送請求。然后解析響應(yīng)以返回生成的圖像 URL。
現(xiàn)在,可以在代碼中使用此類來使用 ChatGPT 生成圖像。以下是如何在 Spring 控制器中使用?*generateImages*?方法的示例。
@RestController
public class OpenAiController {
? ?@Autowired
? ?private final OpenAi openAi;
? ?public OpenAiController(OpenAi openAi) {
? ? ? ?this.openAi = openAi;
? ?}
? ?@PostMapping("/generateImages")
? ?public String generateImages(@RequestBody GenerateImagesRequest request) {
? ? ? ?return openAi.generateImages(request.getPrompt(), request.getTemperature(), request.getMaxTokens(), request.getStop(),
? ? ? ? ? ?request.getLogprobs(), request.isEcho(), request.getN());
? ?}
}
上面的代碼是 Spring REST 控制器的示例,它使用請求正文中傳遞的參數(shù)調(diào)用 OpenAi 類中的 generateImages 方法。它將 POST 請求映射到?/generateImages 終點,并將生成的圖像作為響應(yīng)返回。
還可以為請求正文定義一個 POJO 類,例如:
public class GenerateImagesRequest {
? ?private String prompt;
? ?private float temperature;
? ?private int maxTokens;
? ?private String stop;
? ?private int logprobs;
? ?private boolean echo;
? ?private int n;
? ?// getters and setters
}
值得注意的是,生成的圖像可能不完美,可能需要進一步審查和調(diào)整。我們已向模型添加了許多參數(shù),但在向服務(wù)器發(fā)送 post 請求時,OpenAI 實用程序類中并未使用它們。這是因為這些參數(shù)大多是可選的,有些甚至對于生成圖像的端點(endpoint)無效。但是,對于其他端點,如“文本完成”等,這些是有效的。
測試 API 的時間到了
現(xiàn)在,我們已經(jīng)準(zhǔn)備好端點,可以啟動服務(wù)器并使用以下 URL 從 Postman 或任何其他 API 測試工具發(fā)出 POST 請求。
http://localhost:8080/generateImages
這是我的 API 測試截圖和響應(yīng):

可以看到具有 prompt 和 n 值的 Json 請求正文。n=3 表示我們將收到 5 張生成的圖像作為響應(yīng)。我們確實收到與剛剛發(fā)送的提示文本相關(guān)的 3 個圖像 URL。
現(xiàn)在可以復(fù)制這些 URL 并將它們粘貼到瀏覽器中以查看實際圖像。
圖像生成使用 DALL·E 模型。有許多其他模型可供使用,根據(jù)要求進行選擇。不僅可以生成圖像,還可以操縱它們??梢远紘L試一下,看看哪個最合心意。使用下面的鏈接獲取所有可用模型:https://api.openai.com/v1/models(將你的 API 密鑰作為 Bearer 令牌添加)。