ChatGPT中文站

使用ChatGPT API在Java中创建一个简单的AI聊天机器人。

什么是ChatGPT?

ChatGPT是由OpenAI开发的最先进的语言机器学习模型,它的全称是“聊天生成预训练变形器”。像ChatGPT这样的语言模型旨在根据其输入产生类似于人类的文本。为了学习人类语言的模式和结构,它接受来自互联网和其他来源的海量数据进行训练。ChatGPT可以理解和产生连贯的答案,适用于各种接口和问题,并可用于各种任务,包括回答问题、产生对话响应、给出解释,以及帮助需要理解并生成口语的工作。

ChatGPT API

开发者可以使用OpenAI ChatGPT API接口以编程方式与ChatGPT模型进行通讯。这使得将ChatGPT的功能纳入各种程序、产品或服务成为可能。API使用户在互动讨论期间与模型之间进行多条消息交流成为可能。它为软件应用程序、聊天机器人、虚拟助手和其他交互式系统提供了使用ChatGPT自然语言处理功能的实用方法。

开始认识

使用ChatGPT API相当直截了当。要开始,您需要创建付费账户,并生成API秘钥,然后就可以开始了。要注册,请转到platform.openai.com并使用您的电子邮件注册,或使用Google或Apple ID登录。在用户菜单下,转到API秘钥页面,并创建一个新的API秘钥。

ChatGPT中文站

为了获得成功响应,您需要将账户升级为付费账户。如果没有升级,您将收到429错误消息,提醒您没有足够的信用来使用API。升级账户后,示例API调用将如下所示:

ChatGPT中文站

正如你看到的,我们使用的端点是一个带有JSON主体的POST Rest调用。请求将包含您想要使用的模型,提示,最大令牌数量和温度。

  • 模型(必填):此字段包含将用于处理您的提示的模型。您可以查看模型文档页面以获取更多信息。
  • 提示:一个字符串提示,将被模型处理并生成完成。
  • max_tokens(最大标记数):此字段将代表响应中返回的标记的最大数量。如果您不知道“ token”在ChatGPT中的含义,请查看本页。
  • 温度:该值指示采样温度,其介于0到2之间。较高的值(如0.8)会导致更随机的输出,而较低的值(如0.2)会导致更集中和确定性的输出。

在响应中,您将获得一些元数据,以及一个包含给定提示的完成响应的选择列表。您可以在API参考页面上找到更多详细信息。

在本文中,我们将使用一个简单的Maven Java应用程序来从控制台获取输入,并调用chatGPT API,将响应返回给控制台。

<?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.cgpt</groupId>
<artifactId>ChatGPTJavaApplication</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20230227</version>
</dependency>
</dependencies>

</project>

我们只需要“json”依赖来帮助解析我们从API获取的响应。

public class ChatGPTMainClass {

public static void main(String[] args) {

try {
Scanner scanner = new Scanner(System.in);
System.out.println("Hi I am chatGPT. Ask me something!");
Boolean exit = false;
while( !exit ){
String input = scanner.nextLine();
if( "bye".equals( input.toLowerCase() ) ) {
System.out.println("Bye!");
exit = true;
break;
}
System.out.println( ChatGPTService.callChatGPT(input) );
}
} catch (Exception e) {
throw new RuntimeException(e);
}

}
}

这是我们项目的主要类,它简单地从用户那里逐行获取输入,并将其发送到提示字段中,以便提交给ChatGPT API进行处理。

public class ChatGPTService {

public static String callChatGPT(String input) throws Exception {

String apiUrl = "https://api.openai.com/v1/completions";
HttpURLConnection connection = (HttpURLConnection) new URL(apiUrl).openConnection();

connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Authorization", "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

JSONObject request = new JSONObject();
request.put("model", "text-davinci-003");
request.put("max_tokens", 500);
request.put("prompt", input);
request.put("temperature", 1.0);

connection.setDoOutput(true);
connection.getOutputStream().write(request.toString().getBytes());

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String response = reader.lines()
.reduce((a, b) -> a + b)
.get();

return new JSONObject(response).getJSONArray("choices").getJSONObject(0).getString("text");

}

}

我们的Service类有一个方法,该方法将获取一个字符串输入并调用ChatGPT API,然后将返回选项列表中的第一个对象作为响应。您需要将API Secret Key放入Authorization标头中作为Bearer令牌。现在,您可以启动您的应用并尝试与ChatGPT交流并提出不同的问题。

ChatGPT中文站

2023-10-20 16:53:51 AI中文站翻译自原文