关于ChatGPT3.5模型的使用(java)

目的

最近网上关于ChatGPT的内容特别多,但是浏览大多数文章,能够完整拿来即用的代码却少之又少,索性自己写了一份以** gpt-3.5-turbo ** 模型为基础的demo,技术有限,仅供参考,不喜勿喷!

开发准备

想要进行利用chatGPT进行开发,前提是要申请OpenAI账号,拿到自己的秘钥。这一步劝退了大部分人,但是对于一个技术人来讲,如果连这最基础的准备都无法达到,那也不必继续研究了,网上白嫖其他人的就可以。这里我就不做赘述了!接下来直接进入主题!

封装模型调用方法

	final static private String chatCompletionUrl = "https://api.openai.com/v1/chat/completions";
    final static private String model = "gpt-3.5-turbo";
    final static private String Authorization = "Bearer sk-XXXXXXXXXXXXXXXXX";//这里使用你自己的认证信息
    public static CompletionChatResponse chatCompletion(String prompt){
    
    //prompt即要将要发送至gtp的内容
    	//这里是我根据模型请求封装的模型实体
        CompletionChatRequest completionChatRequest = new CompletionChatRequest();
        
        //封装http请求
        HttpRequest post = HttpUtil.createPost(chatCompletionUrl).timeout(300000);
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", Authorization);
        post.addHeaders(headers);
        post.contentType("application/json;charset=UTF-8");
        completionChatRequest.setModel(model);
        ChoiceMessage message = new ChoiceMessage("user", prompt);
        
		//这里我把用户发送和机器人返回的20条内容内容存在了redis中,用于关联对话上下文场景,如果不需要,注释掉即可,直接new一个ArrayList
        List<Object> messages = getUserCacheMessages();
        int size = messages.size();

        if (size>19){
    
    
            messages.remove(0);
        }

        messages.add(message);
        setUserCacheMessages(messages);//把新的放到redis
        completionChatRequest.setMessages(messages);
        post.body(JSON.toJSONString(completionChatRequest));
        String body = post.execute().body();
        CompletionChatResponse completionChatResponse = JSON.parseObject(body, CompletionChatResponse.class);
        return completionChatResponse;
    }

获取已缓存对话上下文方法(可忽略)

	public static List<Object> getUserCacheMessages(){
    
    
        RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
        List<Object> cacheMessages = redisCache.getCacheObject(JwtTokenUtil.getUserId + ":messages");
        if (StringUtils.isEmpty(cacheMessages)){
    
    
            cacheMessages= new ArrayList<>();
        }
        return cacheMessages;
    }

最新的上下文缓存进去(可忽略)

    public static void setUserCacheMessages(List<Object> messages){
    
    
        while(messages.size()>20){
    
    
            messages.remove(0);
        }
        RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
        redisCache.setCacheObject(JwtTokenUtil.getUserId + ":messages", messages, 30, TimeUnit.MINUTES);
    }

请求模型实体

参数的具体意义,可以自行查阅OpenAI官网进行调整

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class CompletionChatRequest {
    
    
    String model;
    List<Object> messages;
    Integer maxTokens;
    Double temperature;
    Double topP;
    Integer n;
    Boolean stream;
    Integer logprobs;
    Boolean echo;
    List<String> stop;
    Double presencePenalty;
    Double frequencyPenalty;
    Integer bestOf;
    Map<String, Integer> logitBias;
    String user;
}

响应实体

import com.theokanning.openai.Usage;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class CompletionChatResponse {
    
    
    String id;
    String object;
    long created;
    String model;
    List<CompletionChatChoice> choices;
    Usage usage;
}

messages实体

这里role我只用到了两种,一种是用户,另外就是机器人,其实还可以设置一个系统场景角色
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ChoiceMessage {
    
    
    String role;
    String content;
}

choices实体

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ChoiceMessage {
    
    
    String role;
    String content;
}

到这里为止,就可以跑main方法进行测试了!

效果

下面是我自己接入的小程序效果示例,,工作效率瞬间提高有没有?
有需要体验的可以找我交流

帮我写博客大纲

效果

玩游戏

在这里插入图片描述

总结

当然,请求的内容越详细,机器人的回复也就越精准!快去试试吧!

注意:

国内ip被墙,可能需要科学上网,自行研究!

猜你喜欢

转载自blog.csdn.net/lovejiwei/article/details/129704613
今日推荐