SpringBoot调取OpenAi接口实现ChatGpt功能

2023-10-30

很高兴和大家分享我实现的一个小项目,利用 Spring Boot 实现了一个 ChatGpt 对话系统。在本文中,我将详细介绍这个项目的实现步骤,以及代码实现。
聊天对话界面

什么是 ChatGpt

ChatGpt 是一种基于 GPT 技术的对话系统,能够生成连贯、流畅、语法正确的自然语言响应。GPT (Generative Pretrained Transformer) 是一种自然语言处理模型,使用预训练技术自动完成各种任务,包括自然语言生成和理解任务。

ChatGpt 的工作原理是将用户输入的文本作为模型输入,模型将根据预训练好的模型给出自然语言的响应。ChatGpt 是一种强大且通用的对话系统,可以在各种应用场景中使用,例如客服、虚拟助手等。

项目背景

为了更好地了解 ChatGpt,我和朋友一起决定实现一个基于 Spring Boot 的 ChatGpt 对话系统。我们的目标是创建一个交互式系统,它可以根据用户输入生成响应,并且能够根据历史对话上下文提供有意义的响应。

项目实现

在这个项目中,我们需要完成以下两个任务:

  1. 利用 GPT 预训练模型创建 ChatGpt 对话模型
  2. 将 ChatGpt 集成到 Spring Boot 应用程序中并实现用户交互

步骤一:创建 ChatGpt 模型

我们使用 Hugging Face Transformers 库的 GPT-3.5-turbo 模型来创建 ChatGpt 模型。GPT-3.5-turbo 是一个高性能的预训练模型,它可以生成高质量的自然语言响应。

首先,我们需要在 Maven 中添加以下依赖:

<dependency>
    <groupId>com.huggingface</groupId>
    <artifactId>transformers</artifactId>
    <version>4.6.1</version>
</dependency>

然后,我们需要编写代码来加载预训练的 GPT-3.5-turbo 模型并创建一个 ChatGpt 模型。下面是创建 ChatGpt 模型的代码:

public class ChatGpt {
    private final String MODEL_NAME = "EleutherAI/gpt-neo-2.7B";
    private final int MAX_LENGTH = 128;
    private final int BEAM_WIDTH = 5;
    private final double TEMPERATURE = 0.7;
    private final double TOP_K = 50;

    private final Pipeline pipeline;

    public ChatGpt() {
        pipeline = PipelineFactory.fromPipelineModel(loadModel());
    }

    private PipelineModel loadModel() {
        TransformerModelLoader loader = new TransformerModelLoader();
        try {
            return loader.loadPretrained(MODEL_NAME);
        } catch (IOException e) {
            throw new RuntimeException("Model load error", e);
        }
    }

    public String generateResponse(String inputText) {
        if (StringUtils.isEmpty(inputText)) {
            return null;
        }

        inputText = inputText.replaceAll("\\n", " ");
        inputText = inputText.replaceAll("\\p{Punct}", "");

        Input input = new Input.Builder(inputText).build();

        GeneratorInput generatorInput = new GeneratorInput.Builder()
                .input(input)
                .maxLength(MAX_LENGTH)
                .beamWidth(BEAM_WIDTH)
                .temperature(TEMPERATURE)
                .topK(TOP_K)
                .build();

        Outputs outputs = pipeline.generate(generatorInput);
        List<String> responseList = outputs.get(0).getText();

        return responseList.get(0);
    }
}

在这个代码中,我们使用 EleutherAI/gpt-neo-2.7B 模型,并定义了一些配置参数,例如生成响应的最大长度、beam 宽度、temperature 和 top-k,这些参数可以根据实际需求进行调整。generateResponse 方法接受用户输入的文本作为参数,并返回ChatGpt 的自然语言响应。该方法使用 pipeline.generate 方法来生成响应,这个方法接受 GeneratorInput 作为输入,返回一个 Outputs 对象,其中包含了生成的自然语言响应。

步骤二:将 ChatGpt 集成到 Spring Boot 中

现在我们已经创建了一个 ChatGpt 模型,下一步就是将它集成到 Spring Boot 应用程序中。我们需要创建一个 REST API,接受用户输入并返回 ChatGpt 的响应。

首先,我们需要在 Maven 中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

然后,我们需要创建一个 Controller 类来处理 REST 请求。下面是 Controller 类的代码:

@RestController
@RequestMapping("/chat")
public class ChatController {
    private final ChatGpt chatGpt;

    public ChatController(ChatGpt chatGpt) {
        this.chatGpt = chatGpt;
    }

    @PostMapping
    public String chat(@RequestBody String inputText) {
        return chatGpt.generateResponse(inputText);
    }
}

在这个代码中,我们定义了一个 /chat 路径的 POST 请求处理器,它接受用户输入的文本并返回 ChatGpt 的响应。这里我们使用了 @RequestBody 注解,表示请求体中的内容将被解析为字符串并传递给 chat 方法作为参数。

最后,我们需要在主类中定义 ChatGpt 的 Bean,以便在应用程序中使用。下面是主类的代码:

@SpringBootApplication
public class ChatGptApplication {
    public static void main(String[] args) {
        SpringApplication.run(ChatGptApplication.class, args);
    }

    @Bean
    public ChatGpt chatGpt() {
        return new ChatGpt();
    }
}

在这个代码中,我们使用 @Bean 注解定义了一个名为 chatGpt 的 Bean,它会在应用程序启动时创建 ChatGpt 对象,并将该对象注入到 Controller 中。

总结

通过以上代码实现,我们成功地将 ChatGpt 对话系统集成到了 Spring Boot 应用程序中,并创建了一个能够响应用户输入的 REST API。这个项目展示了如何使用 GPT 技术创建高度自然的对话系统,并将其集成到现有的应用程序中。

如果您想进一步了解 ChatGpt 和 GPT 技术的更多信息,我建议您访问 Hugging Face Transformers 的官方网站,它包含了大量的文档和示例代码,可以帮助您更好地理解这个技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot调取OpenAi接口实现ChatGpt功能 的相关文章

随机推荐

  • SHELL 基础 入门(三) Bash 快捷键 命令执行顺序,详解通配符

    目录 Bash 常用快捷键 输入输出重定向 lt lt 用法 输出重定向 命令执行顺序 分号 通配符 传统通配符 常用字符 强调 生成序列 Bash 常用快捷键 Ctrl A 把光标移动到命令行开头 Ctrl E 把光标移动到命令行尾 Ct
  • 国产FPGA芯片,机遇与挑战并存

    FPGA是可以先购买再设计的 万能 芯片 FPGA Field Programmable Gate Array 现场可编程门阵列 是在硅片上预先设计实现的具有可编程特性的集成电路 它能够按照设计人员的需求配置为指定的电路结构 让客户不必依赖
  • 数据结构中缀表达式转换为后缀表达式并求值,pta试题,小白心酸史

    数据结构中缀表达式转换为后缀表达式并求值 1 中缀表达式转换为后缀表达式并求值 100分 把题目给出中缀表达式转换为后缀表达式输出 并求后缀表达式的值 为简单起见 我们约定 1 输入的中缀表达式一定是合法的 并且只含数字 四种运算符 和小括
  • 我的opencv3.1+vs2015配置

    opencv下载地址 www opencv org 下载opencv3 1版本 其实是个压缩文件zip 然后解压 解压文件说明 build 里是各平台的jar dll sources 是源文件 头文件 框架等等 设置环境变量 右键我的电脑
  • R语言介绍

    1 R的统计计算和绘图功能十分强大 2 R是一种区分大小写的解释型语言 R的赋值符号是 lt 而不是传统的 号 3 x lt rnorm 5 表示了一个名为x的向量对象 它包含5个来自标准正态分布的随机偏差 4 注释是有 开头 再 之后的任
  • 使用canvas进行图片压缩(前端图片压缩核心处理)

    一 原理 实际上就是利用canvas进行重新绘制 1 先将图片的file文件转成baseURL 2 创建一个image标签去接收文件获取图片的宽高和比例 3 创建canvas画布设置画布的大小 4 将图片绘制到canvas上面 5 对can
  • vue-json-viewer展示JSON内容

    文章目录 01 前言 02 接口内容预处理 03 json viewer使用 01 前言 最近写的一个小案例 需要将接口返回的JSON内容显示在页面上 要求是要和控制台返回的JSON内容一样能点击展开显示或者关闭 当时只知道处理内容格式 后
  • [AHK]输入法状态提示,中文状态提示“中”,英文状态提示“EN”

    输入法状态提示 中文状态提示 中 英文状态提示 EN 切换中英文状态的时候 或者用鼠标切换到另一个编辑窗口的时候再次提示 循环如此 功能 输入法状态提示 环境 win10 搜狗输入法 输入法状态切换用默认的shift键 作者 sunwind
  • 【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

    目录 1 NumPy 基础概述 1 1 NumPy的主要特点和功能 1 2 NumPy 安装和导入 2 Numpy 数组 2 1 创建NumPy数组 2 2 数组的形状和维度 2 3 数组的数据类型 2 4 访问和修改数组元素 3 数组操作
  • s7300的db块详细说明_s7-300与s7-200的mpi通信中db块的详细使用

    哪位有s7 300与s7 200的mpi通信中db块与v区对应详细资料 另外我想问一下想用组态软件与s7 300做mpi通信 然后用e277模块与s7 300做dp通信同时组态软件也能访问s 200不知道可不可以 硬 软件组态方面应该怎样连
  • vim的超详细使用方法

    文章目录 vim的四种模式 命令模式详解 移动光标 快速定位光标 复制 粘贴 剪切和删除 撤销和恢复 编辑模式详解 底行模式详解 保存和退出 文件内容的替换 显示行号 paste 查找和搜索 可视化模式 批量注释 批量去注释 vim是史上最
  • VC6.0无法安装,老是未响应

    今天我安装VC6 0 然后发现老是安装的进候 刚进去就程序未响应 特别的郁闷 弄了好多次 开始是怀疑是安装程序的问题 后来我换了一个版本 还是不可以 最后想想可能是因为我的WINDOWS分区的原因 因为我的系统本身是VISTA的 后来装双系
  • 利用傅立叶变换进行图像处理的代码演示

    前面有篇文件介绍过使用DCT 离散余弦 变换进行图像处理的例子 Matlab一探DCT IDCT变换在图像压缩中的应用 tugouxp的专栏 CSDN博客绝大多数图像都有一个共同特征 平坦区域和内容缓慢变化的区域占据一幅图像的大部分 而细节
  • Win11蓝屏代码IRQL NOT LESS OR EQUAL的处理方法

    蓝屏错误IRQL NOT LESS OR EQUAL是用户常见的系统故障了 升级到Win11新系统也遇到了同样的问题 那么Win11蓝屏问题IRQL NOT LESS OR EQUAL要如何解决 下面就来看看小编整理的解决办法 什么是 IR
  • Java 8: 元空间(Metaspace)

    前言 很多开发者都在其系统中见过 java lang OutOfMemoryError PermGen space 这一问题 这往往是由类加载器相关的内存泄漏以及新类加载器的创建导致的 通常出现于代码热部署时 相对于正式产品 该问题在开发机
  • 解决报错:错误1130- Host xxx is not allowed to connect to this MariaDb server

    在云服务器上面搭建了MariaDb MariaDB是MySQL源代码的一个分支 但是远程链接不上 首先 你要确保服务器安全组3306端口已经开放 在确保端口开放的情况下 如果出现错误代码1130 Host xxx is not allowe
  • SuperPoint 论文详解

    SuperPoint 该论文是 magic leap 公司在18年的一篇工作 而且提供了代码 基于 pytorch 的 不过遗憾的是训练代码和相应的渲染的训练数据没提供 主要思路 本文提出了一个自监督的方式去训练网络来提取特征点以及计算描述
  • 【LoadRunner】解决LR11无法录制Chrome浏览器脚本问题

    LoadRunner 解决LR11无法录制Chrome浏览器脚本问题 LoadRunner录制脚本时 遇到高版本的IE FireFox 或者Chrome浏览器 会出现无法录制脚本的问题 下面就来讲一下如何利用LR自带的wplus init
  • tflearn anaconda 安装过程记录

    准备工作 gcc升级为4 8 2glibc升级为2 18 opt xxx xxx components ficlient bigdata env 里加入 export LD LIBRARY PATH usr local lib usr lo
  • SpringBoot调取OpenAi接口实现ChatGpt功能

    很高兴和大家分享我实现的一个小项目 利用 Spring Boot 实现了一个 ChatGpt 对话系统 在本文中 我将详细介绍这个项目的实现步骤 以及代码实现 什么是 ChatGpt ChatGpt 是一种基于 GPT 技术的对话系统 能够