【开箱即用】一分钟使用java对接海外大模型gpt等对话模型,实现打字机效果

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...

相关推荐
Mos_x32 分钟前
15.<Spring Boot 日志>
java·后端
mm-q291522272934 分钟前
Java并发编程从入门到进阶 多场景实战
java·开发语言
Violet_YSWY41 分钟前
任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存【示例】
java·数据结构
SimonKing1 小时前
你的项目还在用MyBatis吗?或许这个框架更适合你:Easy-Query
java·后端·程序员
nice_lcj5201 小时前
认识多线程:单例模式
java·开发语言·单例模式
货拉拉技术1 小时前
从代码到配置:如何用SQL配置实现数据核对
java·后端
程序员小假1 小时前
设计模式了解吗,知道什么是饿汉式和懒汉式吗?
java·后端
拾忆,想起1 小时前
TCP粘包拆包全解析:数据流中的“藕断丝连”与“一刀两断”
java·网络·数据库·网络协议·tcp/ip·哈希算法
后端小张1 小时前
【JAVA 进阶】穿越之我在修仙世界学习 @Async 注解(深度解析)
java·开发语言·spring boot·后端·spring·注解·原理
ChMao2 小时前
java解析word中的excel
java