准备
在开发之前,我们先进行一些配置信息的创建,将我们的key和接口地址准备好
创建Capplication.properties配置文件
# key:多个key可用英文逗号隔开,支持轮询。因为单个key的每分钟请求会有限制,轮询可以避免这种情况
apiKey=sk-******************,sk-******************
# 接口地址:没有代理地址,默认为https://api.openai.com/
apiHost=https://chatapi.mnzdna.xyz/
创建ChatGPTConfig类,用于管理相关配置信息
package com.ning.config;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
public class ChatGPTConfig {
private static Properties properties = null;
// 加载properties配置文件里的信息
static {
try {
properties = new Properties();
InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("application.properties");
properties.load(resourceAsStream);
}catch (Exception e){
e.printStackTrace();
}
}
// 获取key序列
public static List<String> getApiKey() throws Exception{
String apiKey = properties.getProperty("apiKey");
String[] split = apiKey.split(",");
if(split.length <= 0){
throw new Exception();
}
return Arrays.asList(split);
}
// 获取接口地址,没有设置 默认为https://api.openai.com/
public static String getApiHost(){
return properties.getProperty("apiHost","https://api.openai.com/");
}
}
也可以使用Spring配置类将配置信息注入进来。
创建OkHttpClient对象
首先,本地开发的程序要想使用ChatGPT接口,就需要连接互联网,再连接接口,因此,我们的准备工作就有两个,这两个工作对应两段代码。
// 设置本地代理:如果你需要通过代理才能访问到接口,就需要通过相关参数创建这个对象
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10809));
// 设置日志级别:对于控制台输出的日志信息,我们有必要通过设置级别进行过滤,这里推荐设置HEADERS
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
// 创建http客户端
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.addInterceptor(new OpenAiResponseInterceptor())
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
连接OpenAI接口,创建一个OpenAI客户端
// 创建openAI客户端
openAiClient = OpenAiClient.builder()
// 获取key
.apiKey(ChatGPTConfig.getApiKey())
// 获取接口
.apiHost(ChatGPTConfig.getApiHost())
.okHttpClient(okHttpClient)
.build();
在我们连接上OpenAI后,我们就能进行后续的操作了。上述所有代码可放在测试类的Before注解上,代码如下:
// openAi实例对象
OpenAiClient openAiClient;
@Before
public void before() throws Exception{
// 设置本地代理:如果你需要通过代理进行访问,就需要通过相关参数创建这个对象
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10809));
// 设置日志级别:对于控制台输出的日志信息,我们有必要通过设置级别进行过滤,这里推荐设置HEADERS
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
// 创建http客户端
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.addInterceptor(new OpenAiResponseInterceptor())
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
// 创建openAi客户端
openAiClient = OpenAiClient.builder()
// 获取key
.apiKey(ChatGPTConfig.getApiKey())
// 获取接口
.apiHost(ChatGPTConfig.getApiHost())
.okHttpClient(okHttpClient)
.build();
}
测试
写一个测试方法,如下:
// 这个 测试方法输出我们openai的api接口地址
@Test
public void startTest(){
// getApiHost():获取接口地址
System.out.println(openAiClient.getApiHost());
}
运行结果如下:
以上就是我们利用Java开发ChatGPT的准备工作,也是非常重要的一步,若这一系列的准备工作中出现错误,都会影响后面的开发过程。因此,我在此结尾,若读者在实践过程中,完全没有问题,则可以再继续。
测试类完整代码如下:
import com.ning.config.ChatGPTConfig;
import com.unfbx.chatgpt.OpenAiClient;
import com.unfbx.chatgpt.interceptor.OpenAILogger;
import com.unfbx.chatgpt.interceptor.OpenAiResponseInterceptor;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import org.junit.Before;
import org.junit.Test;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.concurrent.TimeUnit;
public class ChatTest {
OpenAiClient openAiClient;
@Before
public void before() throws Exception{
// 设置本地代理:如果你需要通过代理进行访问,就需要通过相关参数创建这个对象
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10809));
// 设置日志级别:对于控制台输出的日志信息,我们有必要通过设置级别进行过滤,这里推荐设置HEADERS
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
// 创建http客户端
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.addInterceptor(new OpenAiResponseInterceptor())
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
// 创建openAi客户端
openAiClient = OpenAiClient.builder()
// 获取key
.apiKey(ChatGPTConfig.getApiKey())
// 获取接口
.apiHost(ChatGPTConfig.getApiHost())
.okHttpClient(okHttpClient)
.build();
}
@Test
public void startTest(){
System.out.println(openAiClient.getApiHost());
}
}