spring boot 嵌入chatGPT步骤

一、需要良好的网络

二、需要在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();
    }

}
相关推荐
卓怡学长29 分钟前
m111基于MVC的舞蹈网站的设计与实现
java·前端·数据库·spring boot·spring·mvc
居7然7 小时前
ChatGPT是怎么学会接龙的?
深度学习·语言模型·chatgpt·性能优化·transformer
晚风吹长发10 小时前
初步了解Linux中的动静态库及其制作和使用
linux·运维·服务器·数据结构·c++·后端·算法
梁下轻语的秋缘12 小时前
ESP32-WROOM-32E存储全解析:RAM/Flash/SD卡读写与速度对比
java·后端·spring
wanzhong233312 小时前
开发日记8-优化接口使其更规范
java·后端·springboot
J_liaty13 小时前
SpringBoot + EMQX:打造物联网设备数据双向通讯的完整解决方案
spring boot·物联网·emqx
羊小猪~~13 小时前
【QT】--文件操作
前端·数据库·c++·后端·qt·qt6.3
张彦峰ZYF13 小时前
商品供给域的工程化简要设计考量
后端·系统架构·商品模型·商品供给
Coder_Boy_14 小时前
基于SpringAI的在线考试系统-考试系统DDD(领域驱动设计)实现步骤详解
java·数据库·人工智能·spring boot
小北方城市网15 小时前
微服务注册中心与配置中心实战(Nacos 版):实现服务治理与配置统一
人工智能·后端·安全·职场和发展·wpf·restful