Java SpringBoot实现调用OpenAI ChatGPT的相关接口(详细教程)

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: Java SpringBoot实现调用OpenAI ChatGPT的相关接口(详细教程)

大纲


说明

Java调用OpenAI接口,Java调用实现ChatGPT聊天,OpenAIAPI是一个自己封装的OpenAI GPT-3聊天API的Java工具类,可用于通过Java代码调用GPT-3模型进行自然语言交互,实现智能聊天等功能。

通过调用GPT-3模型,输入一段文本,返回机器人对话回复的文本。

附项目代码:在本文最后面


OpenAI3.5模型版本使用

工具类

使用了Lombok以及hutool依赖

以下是自己封装的工具类,只需写一下自己的api就可以使用了哦


import cn.hutool.core.convert.ConvertException;
import cn.hutool.http.HttpException;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.experimental.UtilityClass;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author Astar
 * ClassName:OpenAIAPI.java
 * date:2023-03-03 16:49
 * Description:
 */
@UtilityClass
public class OpenAIAPI {
    /**
     * 聊天端点
     */
    String chatEndpoint = "https://api.openai.com/v1/chat/completions";
    /**
     * api密匙
     */
    String apiKey = "Bearer 你自己的key";
    /**
     * 发送消息
     *
     * @param txt 内容
     * @return {@link String}
     */
    public String chat(String txt) {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("model", "gpt-3.5-turbo");
        List<Map<String, String>> dataList = new ArrayList<>();
        dataList.add(new HashMap<String, String>(){{
            put("role", "user");
            put("content", txt);
        }});
        paramMap.put("messages", dataList);
        JSONObject message = null;
        try {
            String body = HttpRequest.post(chatEndpoint)
                .header("Authorization", apiKey)
                .header("Content-Type", "application/json")
                .body(JsonUtils.toJson(paramMap))
                .execute()
                .body();
            JSONObject jsonObject = JSONUtil.parseObj(body);
            JSONArray choices = jsonObject.getJSONArray("choices");
            JSONObject result = choices.get(0, JSONObject.class, Boolean.TRUE);
            message = result.getJSONObject("message");
        } catch (HttpException e) {
            return "出现了异常";
        } catch (ConvertException e) {
            return "出现了异常";
        }
        return message.getStr("content");
    }
    public static void main(String[] args) {
        System.out.println(chat("Hello,一个小浪吴啊"));
    }
}

参数说明:

txt:要发送的文本内容。

返回值:机器人的回复文本。


测试

2f498f9bec184ee7ab22eb6f4f58f3e1.png


注意事项

1.在使用OpenAIAPI之前,需要先在OpenAI官网注册账号,并获取API密钥。

2.在使用chat方法之前,需要先修改OpenAIAPI中的chatEndpoint和apiKey变量,分别指定API的URL和密钥。

3.在使用chat方法之前,需要先确定使用的GPT-3模型和参数。

4.在使用chat方法时,需要注意文本内容的长度和格式,以及网络连接的稳定性和速度。

代码说明

这段代码是一个 Java 工具类,用于访问 OpenAI 的 API 接口来进行聊天。下面是一些重要的技术说明:


1.使用了 Java 的 Lombok 工具类,来提供 @UtilityClass 注解,使该类成为一个不可实例化的工具类。

2.定义了两个 String 类型的常量 chatEndpoint 和 apiKey,分别代表 OpenAI 的聊天 API 端点和 API 密钥。

3.定义了一个 chat 方法,用于发送聊天消息到 OpenAI 的 API 接口,输入参数为 txt,代表聊天内容。

4.使用了第三方 Java 工具类 Hutool 来进行 HTTP 请求和 JSON 数据解析。其中,HttpRequest.post() 方法用于发送 POST 请求,JsonUtils.toJson() 方法用于将参数 paramMap 转换为 JSON 格式的字符串,JSONUtil.parseObj() 方法用于将接口返回的 JSON 字符串解析为 JSONObject 对象。

5.在发送请求时,将请求参数封装为一个 Map 对象,其中 model 属性代表使用的 GPT 模型,messages 属性为一个 List 对象,其中包含一个 HashMap 对象,代表用户的聊天消息。

6.在发送请求后,从接口返回的 JSON 数据中获取到聊天机器人返回的消息,然后将消息的 content 属性作为方法的返回值。

7.在异常处理中,使用了 Hutool 提供的 HttpException 和 ConvertException 异常类来处理异常情况。

总体来说,这段代码使用了 Java 的 Hutool 工具类来发送 HTTP 请求和解析 JSON 数据,从而实现了通过 OpenAI API 进行聊天的功能。


后文

项目地址:https://gitee.com/wy521a/astar-weixin-mp


集成公众号使用:https://gitee.com/wy521a/astar-weixin-mp


相关文章
|
11月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
1474 4
|
11月前
|
消息中间件 缓存 前端开发
从资损百万到零事故:Java 接口幂等设计的艺术与实践
在分布式系统中,重复请求常引发严重资损,如支付双扣、库存超卖等问题,其根源在于接口缺乏幂等性设计。本文通过真实案例揭示幂等性的重要性,并详解8种主流解决方案,涵盖唯一请求ID、乐观锁、悲观锁、状态机等,帮助开发者构建稳定系统,保障业务一致性。无论你是架构师还是开发工程师,都能从中获得实战指导,有效规避重复调用带来的风险。
1080 2
|
11月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
10月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
272 11
|
10月前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
479 10
|
9月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
351 1
|
11月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
1243 23
|
11月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
524 12
|
9月前
|
Oracle Java 关系型数据库
Java 简单教程
Java是跨平台、面向对象的编程语言,广泛用于企业开发、Android应用等。本教程涵盖环境搭建、基础语法、流程控制、面向对象、集合与异常处理,助你快速入门并编写简单程序,为进一步深入学习打下坚实基础。
608 0