spring boot 如何嵌入chatGPT

 更新时间:2024年02月02日 10:13:34   作者:程序员阿明  
这篇文章主要介绍了spring boot 如何嵌入chatGPT,spring boot 嵌入chatGPT步骤,本文通过springboot配置文件结合示例代码给大家介绍的非常详细,需要的朋友可以参考下

springboot+chatgpt+chatUI Pro开发智能聊天工具的实践

一、需要良好的网络

二、需要在OpenAI官网https://openai.com/注册用户,并获取一个api-key,sk开头的

验证是否可用网站:http://tools.lbbit.top/check_key_valid/

三、spring boot 配置文件

openai.proxyHost=127.0.0.1
openai.proxyPort=7890
openai.keys=sk-xxxxxxxxxx
openai.proxy=https://xxxxxxx/

四、新建配置类AiServiceFactory

import com.fasterxml.jackson.databind.ObjectMapper;
import com.theokanning.openai.client.OpenAiApi;
import com.theokanning.openai.service.OpenAiService;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import retrofit2.Retrofit;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.time.Duration;
@Component
public class AiServiceFactory {
    @Value("${openai.proxyHost}")
    private String proxyHost;
    /**
     * 代理端口
     */
    @Value("${openai.proxyPort}")
    private Integer proxyPort;
    /**
     * openai apikey
     */
    @Value("${openai.keys}")
    private String token;
    @Value("${openai.proxy}")
    private String proxyIp;
    private static final Duration DEFAULT_TIMEOUT = Duration.ofSeconds(10L);
    public OpenAiService createService() {
        ObjectMapper mapper = OpenAiService.defaultObjectMapper();
        // 设置代理
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
        OkHttpClient client = OpenAiService.defaultClient(token, DEFAULT_TIMEOUT).newBuilder()
                .proxy(proxy)
                .build();
        Retrofit retrofit = OpenAiService.defaultRetrofit(client, mapper).newBuilder().baseUrl(proxyIp).build();
        return new OpenAiService(retrofit.create(OpenAiApi.class), client.dispatcher().executorService());
    }
}

如果需要中转站代理的话,该类里面的方法如下

public OpenAiService createService() {
        ObjectMapper mapper = OpenAiService.defaultObjectMapper();
        // 设置代理
//        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
//        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, 8080));
        OkHttpClient client = OpenAiService.defaultClient(token, DEFAULT_TIMEOUT).newBuilder()
//                .proxy(proxy)
                .build();
        Retrofit retrofit = OpenAiService.defaultRetrofit(client, mapper).newBuilder().baseUrl(proxyIp).build();
        //代理服务器,中转站
        return new OpenAiService(retrofit.create(OpenAiApi.class), client.dispatcher().executorService());
    }

五、测试控制器,当然也可以写进service层

package com.example.springbootest3_2.controller;
import com.example.springbootest3_2.config.AiServiceFactory;
import com.theokanning.openai.completion.chat.*;
import com.theokanning.openai.service.OpenAiService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
public class OpenAiController {
    @Resource
    private AiServiceFactory aiServiceFactory;
    @PostMapping("/testChat")
    public String testChat(@RequestBody Map<String,String> params) throws UnsupportedEncodingException {
        OpenAiService service = aiServiceFactory.createService();
        final List<ChatMessage> messages = new ArrayList<>();
        final ChatMessage systemMessage = new ChatMessage(ChatMessageRole.USER.value(),
                URLDecoder.decode(params.get("contents"),
                "UTF-8"));
        messages.add(systemMessage);
        ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
                .builder()
                .model("gpt-3.5-turbo")
                .messages(messages)
                .temperature(0.5)
//                .n(1)
//                .maxTokens(50)
//                .logitBias(new HashMap<>())
                .build();
        ChatCompletionResult chatCompletionResult=service.createChatCompletion(chatCompletionRequest);
        List<ChatCompletionChoice> compList=chatCompletionResult.getChoices();
        StringBuilder sb = new StringBuilder();
        for (ChatCompletionChoice comp : compList) {
            sb.append(comp.getMessage().getContent());
        }
        return sb.toString();
    }
}

到此这篇关于spring boot 嵌入chatGPT步骤的文章就介绍到这了,更多相关spring boot 嵌入chatGPT内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现Timer的定时调度函数schedule的四种用法

    Java实现Timer的定时调度函数schedule的四种用法

    本文主要介绍了Java实现Timer的定时调度函数schedule的四种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • druid连接池的参数配置示例全面解析

    druid连接池的参数配置示例全面解析

    这篇文章主要为大家介绍了druid连接池的参数配置示例全面解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • SpringBoot2.1 RESTful API项目脚手架(种子)项目

    SpringBoot2.1 RESTful API项目脚手架(种子)项目

    这篇文章主要介绍了SpringBoot2.1 RESTful API项目脚手架(种子)项目,用于搭建RESTful API工程的脚手架,只需三分钟你就可以开始编写业务代码,不再烦恼于构建项目与风格统一,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • java如何实现项目启动时执行指定方法

    java如何实现项目启动时执行指定方法

    这篇文章主要为大家详细介绍了java项目如何启动时执行指定方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • SpringBoot开启异步调用方法

    SpringBoot开启异步调用方法

    这篇文章主要为大家详细介绍了SpringBoot开启异步调用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • java基础的详细了解第四天

    java基础的详细了解第四天

    这篇文章对Java编程语言的基础知识作了一个较为全面的汇总,在这里给大家分享一下。需要的朋友可以参考,希望能给你带来帮助
    2021-08-08
  • 详解在Java的Struts2框架中配置Action的方法

    详解在Java的Struts2框架中配置Action的方法

    这篇文章主要介绍了详解在Java的Struts2框架中配置Action的方法,讲解了包括struts.xml中的action配置及基于注解方式Action配置的两个方式,需要的朋友可以参考下
    2016-03-03
  • Java多维数组和Arrays类方法总结详解

    Java多维数组和Arrays类方法总结详解

    这篇文章主要介绍了Java多维数组和Arrays类方法总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • IDEA中设置代码自动提示为Alt+/的具体做法

    IDEA中设置代码自动提示为Alt+/的具体做法

    很多公司都强制性要求使用Intellij IDEA,其实Intellij IDEA也确实很好用,但是一下子从Eclipse跳转到Intellij IDEA转也是需要一段时间的,为了迎合之前的习惯,就需要在Intellij IDEA中改变一些设置,如代码自动生成,本文给大家分享设置方法,感兴趣的朋友一起看看吧
    2023-01-01
  • Mybatis中返回Map的实现

    Mybatis中返回Map的实现

    这篇文章主要介绍了Mybatis中返回Map的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论