SpringBoot integra ChartGpt

SpringBoot integra ChartGpt


prefacio

ChatGPT (Chatbot Generative Pre-trained Transformer) es una nueva tecnología de chatbot que ayuda a los usuarios a tener conversaciones en lenguaje natural con asistentes virtuales, ahorrando tiempo y resolviendo tareas tediosas. ChatGPT utiliza tecnología de procesamiento de lenguaje natural, que permite que las máquinas reconozcan el lenguaje natural, analicen las intenciones humanas y proporcionen las respuestas correspondientes basadas en las intenciones humanas. ChatGPT puede ayudar a los clientes a resolver problemas al permitir que las máquinas imiten conversaciones humanas reales y respondan preguntas de manera inteligente.

1. Componentes de integración de ChatGpt

En la actualidad, hay muchos tipos de componentes que integran chatGPT en Java, y los métodos básicos de implementación son los mismos. Puede elegir cualquiera, siempre que los componentes más recientes contengan las interfaces relevantes de chatGPT. Este artículo elige

        <dependency>
            <groupId>com.unfbx</groupId>
            <artifactId>chatgpt-java</artifactId>
            <version>1.0.4</version>
        </dependency>

2. Configuración de conexión OpenAi

De acuerdo con el cliente de conexión OpenAi generado, configure principalmente apiKey (solicitar una clave secreta, comprar en el sitio web oficial), tiempo de espera de conexión, tiempo de espera de lectura, tiempo de espera de escritura, etc. el código se muestra a continuación:

@Configuration
public class OpenAiConfig {
    
    
    private final static String token = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxx";

    @Bean
    public OpenAiClient createClient() {
    
    
        return OpenAiClient.builder().apiKey(token)
                .connectTimeout(1000*60*3)    //3分钟还没连接上就失败
                .readTimeout(1000*60*3)   
                .writeTimeout(1000*60*3)
                .build();
    }
}

3. Llamada de interfaz de consulta

1. Implementación del código

El código de implementación es el siguiente

      @ApiOperation(value = "问题接口(接口调用)", notes = "问题接口(接口调用)")
    @PostMapping(value = "/query/v2")
    public List<Message> questionV2(@RequestBody ContentParamVo paramVo) {
    
    
        Message message = Message.builder()
                .role(Message.Role.USER)  // 设置体温者角色,不需要填写默认值
                .content(paramVo.getContent())  // 问题内容
                .build();
        ChatCompletion chatCompletion = ChatCompletion.builder()
                .model("gpt-3.5-turbo")  // 模型选择(chatGPT 默认为这个)
                .messages(Arrays.asList(message))  // 问题。一次课问答多条数据
                .stream(false)   // 是否是流式问答,我选择的不是,需要等gpt回答完才能拿到完整数据
                .build();
        ChatCompletionResponse chatCompletionResponse = null;
        for (int i = 0; i < 3; i++) {
    
       // 失败的话会调用三次
            try {
    
    
                chatCompletionResponse = openAiClient.chatCompletion(chatCompletion);
                break;
            } catch (Exception e) {
    
    
                log.info("异常:{}", e.getMessage());
            }

        }
        List<Message> list = new ArrayList<>();
        chatCompletionResponse.getChoices().forEach(e -> {
    
    
            list.add(e.getMessage());
        });
        return list;
    }

2. Visualización de resultados

Por favor agregue una descripción de la imagen

3. Obtenga la interfaz de vector de texto

1. Implementación del código

El código de implementación es el siguiente

       @ApiOperation(value = "获取向量", notes = "获取向量")
    @PostMapping(value = "/embedding/get")
    public VectorResponse createEmbeddings(@RequestBody ContentParamVo paramVo) {
    
    
    	//paramVo.getContent()  文本内容
        EmbeddingResponse embeddings = openAiClient.embeddings(paramVo.getContent());
        List<Item> data = embeddings.getData();
        VectorResponse vectorResponse = new VectorResponse();
        List<VectorContent> list = Lists.newArrayList();   //自己定义的数据结构
        for (Item item : data) {
    
    
            VectorContent vectorContent = VectorContent.builder()
                    .index(item.getIndex())
                    .embedding(bigDecimerToFloat(item.getEmbedding()))
                    .object(item.getObject())
                    .build();
            list.add(vectorContent);
        }
        vectorResponse.setData(list);
        return vectorResponse;
    }
	// 将double转为float向量,可能存在精度丢失问题
    private static List<Float> bigDecimerToFloat(List<BigDecimal> embedding) {
    
    
        List<Float> list = new ArrayList();
        for (BigDecimal decimal : embedding) {
    
    
            list.add(decimal.setScale(11, BigDecimal.ROUND_HALF_UP).floatValue());
        }
        return list;
    }

2. Visualización de resultados

Por favor agregue una descripción de la imagen

4. Configuración de proxy

Dado que chatGpt es un servicio externo, no se puede acceder directamente a través de Internet y se requiere un proxy. Podemos configurar el servidor proxy cuando se inicia Java.
proxyHost es el servidor proxy, y proxyPort es el puerto proxy.
Actualmente, hay muchas maneras de implementar el proxy. Puede usar proxy para todo el servidor a través de squid, puede configurar el servicio proxy a través de java y también puede configurar solicitudes de proxy a través de http solicitudes. Nota: aquí es necesario configurar un proxy
. Puede haber problemas con otros accesos, por ejemplo: el servicio llama a la base de datos, y la ip de la base de datos de acceso también será proxy. causar falla en la conexión de acceso

java  -jar -Dhttps.proxyPort=7890 -Dhttps.proxyHost=192.100.11.4  xxx.jar 

Resumir

Lo anterior es la implementación básica del chatGPT integrado de springboot. Aquí solo se puede acceder a través de un único subproceso y la frecuencia es limitada. Si desea que sea multiproceso, puede considerar solicitar varias cuentas de OpenAi y convertirlo en un grupo de conexiones.

)

Supongo que te gusta

Origin blog.csdn.net/Oaklkm/article/details/129882945
Recomendado
Clasificación