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

ChatGPT小程序实战后台部分

    • 目的
    • 开发准备
    • 封装模型调用方法
      • 获取已缓存对话上下文方法(可忽略)
      • 最新的上下文缓存进去(可忽略)
    • 请求模型实体
    • 响应实体
    • messages实体
    • choices实体
    • 效果
      • 帮我写博客大纲
      • 玩游戏
    • 总结
    • 注意:

目的

最近网上关于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一个ArrayListList<Object> messages = getUserCacheMessages();int size = messages.size();if (size>19){messages.remove(0);}messages.add(message);setUserCacheMessages(messages);//把新的放到rediscompletionChatRequest.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被墙,可能需要科学上网,自行研究!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部