无需引用ChatGPT额外依赖,实现和ChatGPT对话。
1.创建一个springboot工程
只引入 web 和 lombok依赖,无需额外依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>chatgpt</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>chatgpt</name>
<description>chatgpt</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. Application 启动类
@RestController
@SpringBootApplication
public class ChatgptApplication {
public static final String MODEL_3 = "gpt-3.5-turbo";
public static final String API_URL = "https://api.openai.com/v1/chat/completions";
private static final String OPENAI_KEY = {your_key};
public static void main(String[] args) {
SpringApplication.run(ChatgptApplication.class, args);
}
@GetMapping("/chat")
public String chat(@RequestParam("prompt") String prompt) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getInterceptors().add((request, body, execution) -> {
final HttpHeaders headers = request.getHeaders();
headers.add("Authorization", "Bearer " + OPENAI_KEY);
headers.add("Content-Type", "application/json");
return execution.execute(request, body);
});
List<Map<String, Object>> messages = new ArrayList<>();
Map<String, Object> message = new HashMap<>();
message.put("role", "user");
message.put("content", prompt);
messages.add(message);
Map<String, Object> param = new HashMap<>();
param.put("model", MODEL_3);
param.put("messages", messages);
param.put("temperature", 0.7);
ChatResponse response = restTemplate.postForObject(API_URL, param, ChatResponse.class);
return response.getChoices().get(0).getMessage().getContent();
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class ChatResponse {
private List<Choice> choices;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Choice {
private int index;
private Message message;
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Message {
private String role;
private String content; //prompt
}
3.启动代理配置
访问ChatGPT服务器需要借助科学工具,再IDEA中需要增加启动参数
-Djava.net.useSystemProxies=true
4.效果
下期讲集成带有 assistant 助手的 ChatGPT 调用方式。