調(diào)用chat-gpt
依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.10</version>
</dependency>
相關(guān)的類
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class ChatRequest {
private String model;
private List<Message> messages;
private int n = 3;
private double temperature = 0.2;
public ChatRequest(String model, String prompt) {
this.model = model;
this.messages = new ArrayList<>();
// this.messages.add(new Message("system", "You are a IELTS Teachers."));
this.messages.add(new Message("system", "You are an IELTS teacher, and your answers are all in JSON string format."));
this.messages.add(new Message("user", prompt));
}
public ChatRequest(String model, List<String> prompts) {
this.model = model;
this.messages = new ArrayList<>();
for (String prompt : prompts) {
this.messages.add(new Message("user", prompt));
}
}
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ChatResponse {
private List<Choice> choices;
public static class Choice {
private int index;
private Message message;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
}
}
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.SneakyThrows;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* JSON 工具類
*
*/
@UtilityClass
@Slf4j
public class JsonUtils {
private static ObjectMapper objectMapper = new ObjectMapper();
static {
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
objectMapper.registerModules(new JavaTimeModule()); // 解決 LocalDateTime 的序列化
}
/**
* 初始化 objectMapper 屬性
* <p>
* 通過這樣的方式,使用 Spring 創(chuàng)建的 ObjectMapper Bean
*
* @param objectMapper ObjectMapper 對象
*/
public static void init(ObjectMapper objectMapper) {
JsonUtils.objectMapper = objectMapper;
}
@SneakyThrows
public static String toJsonString(Object object) {
return objectMapper.writeValueAsString(object);
}
@SneakyThrows
public static byte[] toJsonByte(Object object) {
return objectMapper.writeValueAsBytes(object);
}
@SneakyThrows
public static String toJsonPrettyString(Object object) {
return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
}
public static <T> T parseObject(String text, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
return null;
}
try {
return objectMapper.readValue(text, clazz);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
/**
* 將字符串解析成指定類型的對象
* 使用 {@link #parseObject(String, Class)} 時,在@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 的場景下,
* 如果 text 沒有 class 屬性,則會報錯。此時,使用這個方法,可以解決。
*
* @param text 字符串
* @param clazz 類型
* @return 對象
*/
public static <T> T parseObject2(String text, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
return null;
}
return JSONUtil.toBean(text, clazz);
}
public static <T> T parseObject(byte[] bytes, Class<T> clazz) {
if (ArrayUtil.isEmpty(bytes)) {
return null;
}
try {
return objectMapper.readValue(bytes, clazz);
} catch (IOException e) {
log.error("json parse err,json:{}", bytes, e);
throw new RuntimeException(e);
}
}
public static <T> T parseObject(String text, TypeReference<T> typeReference) {
try {
return objectMapper.readValue(text, typeReference);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static <T> List<T> parseArray(String text, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
return new ArrayList<>();
}
try {
return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz));
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static JsonNode parseTree(String text) {
try {
return objectMapper.readTree(text);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static JsonNode parseTree(byte[] text) {
try {
return objectMapper.readTree(text);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Message {
private String role;
private String content;
}
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
public class Dome {
public static void main(String[] args) {
String model = "gpt-3.5-turbo";
String prompt = "你好,說一下女媧補天的故事";
String openAiApiKey = "sk-rdM1NWB0UjLXv8JcQ9vfT3BlbkFJWE9dVvZV8a37u1TeP11";
ChatRequest request = new ChatRequest(model, prompt);
String url = "https://api.openai-proxy.com/v1/chat/completions";
String json = JsonUtils.toJsonString(request);
String result = HttpRequest.post(url)
.header("Authorization", "Bearer " + openAiApiKey)
.header("Content-Type", "application/json")
.body(json)
.execute()
.body();
System.out.println(result);
if ( result==null) {
System.out.println("錯誤");
}
ChatResponse response = JSONUtil.toBean(result, ChatResponse.class);
System.out.println(response);
}
}
openAiApiKey 后面+b文章來源地址http://www.zghlxwxcb.cn/news/detail-689252.html
文章來源:http://www.zghlxwxcb.cn/news/detail-689252.html
到了這里,關(guān)于調(diào)用chat-gpt的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!