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();
    }

}
相关推荐
uzong2 小时前
技术故障复盘模版
后端
GetcharZp2 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程3 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研3 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
一只爱撸猫的程序猿4 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋4 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国4 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy4 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack5 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt