• SpringBoot调取OpenAi接口实现ChatGpt功能


    很高兴和大家分享我实现的一个小项目,利用 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.huggingfacegroupId>
        <artifactId>transformersartifactId>
        <version>4.6.1version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后,我们需要编写代码来加载预训练的 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    在这个代码中,我们使用 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.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    然后,我们需要创建一个 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这个代码中,我们定义了一个 /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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    总结

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

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

  • 相关阅读:
    工作分配问题——算法设计与分析(C实现)
    洛谷P2312 秦九韶算法求多项式点值
    消息队列一|从秒杀活动开始聊起消息队列
    杂记-缺失值插值方式
    使用ClickHouse JDBC官方驱动,踩坑无数
    vue模板语法上集
    LeetCode每日一题——1822. 数组元素积的符号
    excel数据分析模块
    基于JavaSwing开发网络QQ聊天程序(Socket Mysql数据库) 大作业 毕业设计项目源码
    方舟单机/管理员特殊物品指令代码大全
  • 原文地址:https://blog.csdn.net/weixin_65950231/article/details/130454665