<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
</dependencies>
小提示:如果專案有包含spring-boot-starter-web,則不用另外裝,讚嘆Spring
private static final String MODEL = "gpt-3.5-turbo"; // 設定模型名稱
private static final int MAX_TOKENS = 2500; // 設定每次請求的字數上限 (一個中文字2Token, 一個英文字1Token)
private static final String URL = "<https://api.openai.com/v1/chat/completions>"; // ChatGPT API 的 URL
private static final String API_KEY = "你的 API 密鑰"; // 你的 API 密鑰
public BufferedReader getResponseFromChatGPT(String message) throws IOException {
// 創建json請求主體
String data = createJSONPayload(message);
// 建立到chatGPTAPI的連線
HttpURLConnection connection = createConnection();
// 發送請求
sendRequest(connection, data);
// 獲取API返回的響應
return getResponse(connection);
}
private String createJSONPayload(String message) throws JsonProcessingException {
// 建立一個 objectMapper
var objectMapper = new ObjectMapper();
// 使用 objectMapper 建立一個 ObjectNode
var rootNode = objectMapper.createObjectNode();
// 添加屬性
rootNode.put("model", MODEL)
.put("max_tokens", MAX_TOKENS)
.put("stream", true);
// 添加陣列
rootNode.putArray("messages").addObject()
// 在陣列中添加屬性
.put("role", "user")
.put("content", message);
// 使用 objectMapper 將 ObjectNode 轉換為字串
return objectMapper.writeValueAsString(rootNode);
}
{
"model": "MODEL",
"max_tokens": "MAX_TOKENS",
"stream": true,
"messages": [
{
"role": "user",
"content": "message"
}
]
}
這個方法創建了一個JSON對象,該對象包含了將要發送到ChatGPT API的所有信息,例如模型名稱、消息內容、最大的token數量和是否進行流傳輸等。
// 建立連線
private HttpURLConnection createConnection() throws IOException {
// 建立url連線
java.net.URL url = new URL(URL);
// 建立與指定 URL 之間的連線並返回一個 URLConnection 物件
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 設定連線的請求方法
connection.setRequestMethod("POST");
// 設定連線的請求屬性
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Authorization", "Bearer " + API_KEY); // 注意Bearer 後面的空格
// 設定連線是否可以向伺服器寫入資料
connection.setDoOutput(true);
// 回傳連線
return connection;
}
以下是該方法建立的連接的一個範例: