一.准备自己的chatGPT密匙
有一个chatGPT账号就行,免费送5美刀的额度。
APIkeys链接:API keys - OpenAI API
二.POM导入包
<dependency>
<groupId>com.github.plexpt</groupId>
<artifactId>chatgpt</artifactId>
<version>4.1.2</version>
</dependency>
github地址:PlexPt/chatgpt-java: ChatGPT Java SDK。支持 GPT3.5、 GPT4 API。开箱即用。 (github.com)
三.编写用例
1.最简单的用例
这个用例中可以进行一问一答制的chatGPT简单例子。
//国内需要代理
//创建一个HTTP代理对象,指定代理服务器的地址和端口,默认地址是127.0.0.1,我自己设置的端口号为7890
Proxy proxy = Proxys.http("127.0.0.1", 7890);
//socks5 代理
//创建一个SOCKS5代理对象,指定代理服务器的地址和端口
// Proxy proxy = Proxys.socks5("127.0.0.1", 7890);
//创建一个ChatGPT对象,用于调用OpenAI的GPT-3聊天接口
ChatGPT chatGPT = ChatGPT.builder()
.apiKey("这里是你的API密匙") //设置API密钥
.proxy(proxy) //设置代理
.apiHost("https://api.openai.com/") //设置API主机地址
.build() //构建对象
.init(); //初始化
//调用chat方法,传入一个聊天话题,返回一个聊天回复
String res = chatGPT.chat("给我讲一个笑话!");
//打印聊天回复
System.out.println(res);
2.用例进阶
为简单的用例添加一些参数(随机性,最大生成单词数等等)
public class test {
public static void main(String[] args) {
//国内需要代理 国外不需要
//创建一个HTTP代理对象,指定代理服务器的地址和端口
Proxy proxy = Proxys.http("127.0.0.1", 7890);
//创建一个ChatGPT对象,用于调用OpenAI的GPT聊天接口
ChatGPT chatGPT = ChatGPT.builder()
.apiKey("设置你的API密匙") //设置API密钥
.proxy(proxy) //设置代理
.timeout(900) //设置超时时间(秒)
.apiHost("https://api.openai.com/") //设置API主机地址
.build() //构建对象
.init(); //初始化
//创建一个系统消息对象,用于设置聊天话题
Message system = Message.ofSystem("你现在是一个脱口秀达人,精通娱乐段子");
//创建一个用户消息对象,用于输入聊天内容
Message message = Message.of("给我讲一个与动物有关的段子");
//创建一个ChatCompletion对象,用于设置聊天参数
ChatCompletion chatCompletion = ChatCompletion.builder()
.model(ChatCompletion.Model.GPT_3_5_TURBO.getName()) //设置模型名称
.messages(Arrays.asList(system, message)) //设置消息列表
.maxTokens(3000) //设置最大生成的单词数
.temperature(0.9) //设置生成的随机性
.build(); //构建对象
//调用chatCompletion方法,传入ChatCompletion对象,返回一个ChatCompletionResponse对象
ChatCompletionResponse response = chatGPT.chatCompletion(chatCompletion);
//从ChatCompletionResponse对象中获取第一个生成的消息对象
Message res = response.getChoices().get(0).getMessage();
//打印生成的消息内容
System.out.println(res);
}
}
随机性等参数可以查看openAPI的官网: Quickstart tutorial - OpenAI API
3.流式用例进阶
一次对话不够,想进行长连接对话可以使用流式对话。代码如下:
//国内需要代理 国外不需要
//创建一个HTTP代理对象,指定代理服务器的地址和端口
Proxy proxy = Proxys.http("127.0.0.1", 7890);
//创建一个ChatGPTStream对象,用于调用OpenAI的GPT-3聊天接口的流式版本
ChatGPTStream chatGPTStream = ChatGPTStream.builder()
.timeout(600) //设置超时时间(秒)
.apiKey("设置你的API密匙 ") //设置API密钥
.proxy(proxy) //设置代理
.apiHost("https://api.openai.com/") //设置API主机地址
.build() //构建对象
.init(); //初始化
//创建一个Scanner对象,用于从控制台读取用户输入
Scanner scanner = new Scanner(System.in);
String text = "1";
//创建一个ConsoleStreamListener对象,用于监听流式聊天的结果并打印到控制台
ConsoleStreamListener listener = new ConsoleStreamListener();
//循环读取用户输入,直到输入为空或为"结束"时退出
while (text != null&&!text.isEmpty()) {
text = scanner.nextLine();
if (!text.equals("结束")) {
//创建一个用户消息对象,用于输入聊天内容
Message message = Message.of(text);
//创建一个ChatCompletion对象,用于设置聊天参数
ChatCompletion chatCompletion = ChatCompletion.builder()
.messages(Arrays.asList(message)) //设置消息列表
.build(); //构建对象
//调用streamChatCompletion方法,传入ChatCompletion对象和ConsoleStreamListener对象,开始流式聊天
chatGPTStream.streamChatCompletion(chatCompletion, listener);
} else break;
}
运行结果如下:
这样就完成编写了一个简单的chatGPT对话程序。目前想进行历史对话需要大量的tokens,这样会导致聊天的不断深入和聊天记录的增长会急速消耗我们的余额,之前看到可以用getId或者Session等来进行用户的识别,现在好像不行了,只能在每次对话中添加之前的聊天记录,如果有更好的方案请告诉我。
上下文操作参考: