成品图
由于ChatGpt实在太火了,刚好想给自己的博客网站,就增加了一个AI聊天的功能。
创建APIKEY
直达链接:openAI创建key直达链接
前提必须有账号肯定不用多说了。
后端
依赖
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.32</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.3</version>
</dependency>
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Choices {
private Message message;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Message {
private String role;
private String content;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RequestBody {
private String model;
private List<Message> messages;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseBody {
private List<Choices> choices;
}
接口
controller
@Autowired
private OpenAiUtils openAiUtils;
@ApiOperation("获取openAi返回值")
@PostMapping("/auth/ai")
public Result getAiRespondBody(@RequestBody String content){
String respContent =openAiUtils.getAiRespondBody(content);
return Result.success("",respContent);
}
OpenAiUtils 工具类
@Component
public class OpenAiUtils {
private static final String URL = "https://api.openai.com/v1/chat/completions";
private static final String API_KEY = "sk-xxx";
public String getAiRespondBody(String content) {
System.out.println("输入内容:"+content);
String proxyHost = "代理IP地址";
int proxyPort = 代理端口号;
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
List<Message> list = new ArrayList<>();
Message message = new Message();
message.setRole("user");
message.setContent(content);
list.add(message);
RequestBody requestBody = new RequestBody();
requestBody.setModel("gpt-3.5-turbo");
requestBody.setMessages(list);
String data = JSON.toJSONString(requestBody);
String resJSON = HttpRequest.post(URL)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + API_KEY)
.body(data)
.setProxy(proxy)
.execute()
.body();
ResponseBody body = JSON.parseObject(resJSON, ResponseBody.class);
String outputContent = body.getChoices().get(0).getMessage().getContent();
System.out.println(outputContent);
return outputContent;
}
}
使用Postman 测试成功,前端就可以接入了。