Compare commits
1 Commits
master
...
chenhaochi
| Author | SHA1 | Date |
|---|---|---|
|
|
e21812e1f8 | 1 year ago |
@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
@ -0,0 +1,8 @@
|
||||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 基于编辑器的 HTTP 客户端请求
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,24 @@
|
||||
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.example</groupId>
|
||||
<artifactId>chatgpt-java</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.15.3</version> <!-- 确保版本存在 -->
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,117 @@
|
||||
package org.example;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
public class ChatGPTMultiTurn {
|
||||
|
||||
private static final String API_KEY = "sk-ZoGHErXVBPukGFAW0f4f88C51cD84717AfEaBd70A9B7E49d"; //API 密钥
|
||||
private static final String API_URL = "https://openkey.cloud/v1/chat/completions"; //URL
|
||||
private static final ObjectMapper mapper = new ObjectMapper();
|
||||
private static final HttpClient client = HttpClient.newHttpClient();
|
||||
private static final List<ObjectNode> messages = new ArrayList<>();
|
||||
|
||||
public static void main(String[] args) {
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
try {
|
||||
// 初始化对话,系统提示
|
||||
ObjectNode systemMessage = mapper.createObjectNode();
|
||||
systemMessage.put("role", "system");
|
||||
systemMessage.put("content", "你是一个乐于助人的助手。");
|
||||
messages.add(systemMessage);
|
||||
|
||||
System.out.println("与 ChatGPT 对话。输入 'exit' 以结束对话。");
|
||||
|
||||
while (true) {
|
||||
System.out.print("你: ");
|
||||
String userInput = scanner.nextLine();
|
||||
|
||||
if (userInput.equalsIgnoreCase("exit")) {
|
||||
System.out.println("对话结束。再见!");
|
||||
break;
|
||||
}
|
||||
|
||||
addUserMessage(userInput);
|
||||
String response = getResponse();
|
||||
System.out.println("ChatGPT 的回复: " + response);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
scanner.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static void addUserMessage(String content) {
|
||||
ObjectNode userMessage = mapper.createObjectNode();
|
||||
userMessage.put("role", "user");
|
||||
userMessage.put("content", content);
|
||||
messages.add(userMessage);
|
||||
}
|
||||
|
||||
private static String getResponse() throws Exception {
|
||||
//JSON 请求体
|
||||
ObjectNode requestBody = mapper.createObjectNode();
|
||||
requestBody.put("model", "gpt-3.5-turbo");
|
||||
requestBody.put("temperature", 0.7);
|
||||
requestBody.set("messages", mapper.valueToTree(messages));
|
||||
|
||||
String requestBodyString = mapper.writeValueAsString(requestBody);
|
||||
|
||||
// 创建 HTTP 请求
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(API_URL))
|
||||
.header("Content-Type", "application/json")
|
||||
.header("Authorization", "Bearer " + API_KEY)
|
||||
.POST(HttpRequest.BodyPublishers.ofString(requestBodyString, StandardCharsets.UTF_8))
|
||||
.build();
|
||||
|
||||
// 发送请求并获取响应
|
||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
|
||||
// 调试
|
||||
|
||||
/*
|
||||
System.out.println("请求方法: " + request.method());
|
||||
System.out.println("请求URI: " + request.uri());
|
||||
System.out.println("请求体: " + requestBodyString);
|
||||
System.out.println("响应状态码: " + response.statusCode());
|
||||
System.out.println("响应体: " + response.body());
|
||||
*/
|
||||
|
||||
// 检查响应状态码
|
||||
if (response.statusCode() != 200) {
|
||||
throw new RuntimeException("请求失败,状态码:" + response.statusCode() + ",响应体:" + response.body());
|
||||
}
|
||||
|
||||
// 解析响应 JSON
|
||||
JsonNode jsonResponse = mapper.readTree(response.body());
|
||||
JsonNode choices = jsonResponse.get("choices");
|
||||
if (choices != null && choices.isArray() && choices.size() > 0) {
|
||||
JsonNode firstChoice = choices.get(0);
|
||||
JsonNode messageNode = firstChoice.get("message");
|
||||
if (messageNode != null) {
|
||||
// 将助手的回复添加到消息列表中
|
||||
ObjectNode assistantMessage = mapper.createObjectNode();
|
||||
assistantMessage.put("role", "assistant");
|
||||
assistantMessage.put("content", messageNode.get("content").asText());
|
||||
messages.add(assistantMessage);
|
||||
|
||||
return messageNode.get("content").asText();
|
||||
}
|
||||
}
|
||||
|
||||
throw new RuntimeException("无法解析响应内容");
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package org.example;
|
||||
|
||||
//TIP 要<b>运行</b>代码,请按 <shortcut actionId="Run"/> 或
|
||||
// 点击装订区域中的 <icon src="AllIcons.Actions.Execute"/> 图标。
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
//TIP 当文本光标位于高亮显示的文本处时按 <shortcut actionId="ShowIntentionActions"/>
|
||||
// 查看 IntelliJ IDEA 建议如何修正。
|
||||
System.out.printf("Hello and welcome!");
|
||||
|
||||
for (int i = 1; i <= 5; i++) {
|
||||
//TIP 按 <shortcut actionId="Debug"/> 开始调试代码。我们已经设置了一个 <icon src="AllIcons.Debugger.Db_set_breakpoint"/> 断点
|
||||
// 但您始终可以通过按 <shortcut actionId="ToggleLineBreakpoint"/> 添加更多断点。
|
||||
System.out.println("i = " + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue