java如何快速对接海外大模型实现打字机效果-chat模式
前言
随着海外模型的热度胜起,海外各种模型开始兴起,但是由于初学者对环境的部署和海外支付阻扰,对海外模型学习难度增加,接下来会介绍如何各种方式快速调用海外模型,并且给出案例和效果。
一、如何使用原生http调用?
1. 引入http框架okhttpclient及其相应的包
java
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
2.非流
java
public class GptChatDemo {
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class GptChatRequest {
private String model;
private List<Message> messages;
private boolean stream;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Message {
private String role;
private String content;
}
private static String url = "https://www.apiplus.online/v1/chat/completions";
private static String token = "sk-aZ8OTonNtI7jo5bDQtwcbTsg0z4giYiH9Ax6wleLpRGlX4NP"; // 替换为实际的API令牌
public static void main(String[] args) throws IOException {
Message message = new Message();
message.setRole("user");
message.setContent("你好");
GptChatRequest gptChatRequest = new GptChatRequest();
gptChatRequest.setModel("gpt-4o-mini");
gptChatRequest.setStream(false);
gptChatRequest.setMessages(Collections.singletonList(message));
String response = sendNoStreamRequest(url, token, gptChatRequest);
System.out.println(response);
gptChatRequest.setStream(true);
sendStreamRequest(url, token, gptChatRequest);
}
private static void sendStreamRequest(String url, String apiKey, GptChatRequest gptChatRequest) throws IOException {
// 实现发送请求的逻辑
String jsonString = JSONObject.toJSONString(gptChatRequest);
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonString);
Request.Builder builder = new Request.Builder().url(url).method("POST", body)
.addHeader("Authorization", "Bearer " + apiKey);
Request request = builder.build();
OkHttpClient client = new OkHttpClient.Builder()
.protocols(Collections.singletonList(Protocol.HTTP_1_1))
.connectionPool(new ConnectionPool(8000, 300, TimeUnit.SECONDS))
.readTimeout(600, TimeUnit.SECONDS)
.writeTimeout(600, TimeUnit.SECONDS)
.build();
Response execute = client.newCall(request).execute();
ResponseBody responseBody = execute.body();
Reader reader = Objects.requireNonNull(responseBody).charStream();
BufferedReader bufferedReader = new BufferedReader(reader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
}
private static String sendNoStreamRequest(String url, String apiKey, GptChatRequest gptChatRequest) throws IOException {
// 实现发送请求的逻辑
String jsonString = JSONObject.toJSONString(gptChatRequest);
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonString);
Request.Builder builder = new Request.Builder().url(url).method("POST", body)
.addHeader("Authorization", "Bearer " + apiKey);
Request request = builder.build();
OkHttpClient client = new OkHttpClient.Builder()
.protocols(Collections.singletonList(Protocol.HTTP_1_1))
.connectionPool(new ConnectionPool(8000, 300, TimeUnit.SECONDS))
.readTimeout(600, TimeUnit.SECONDS)
.writeTimeout(600, TimeUnit.SECONDS)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
}
总结
以上可以无缝的使用java调用非流的,并且给出了相应的使用key去使用
github代码仓库 github.com/EroAI-Free/...
gitee代码仓库: gitee.com/lixinjiuhao...