提交 97f61cff 编写于 作者: 檀越@新空间's avatar 檀越@新空间 🐭

fix:使用chatgpt接口调用

上级 7506ade4
...@@ -88,5 +88,22 @@ ...@@ -88,5 +88,22 @@
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>31.1-jre</version> <version>31.1-jre</version>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.theokanning.openai-gpt3-java/service -->
<dependency>
<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>service</artifactId>
<version>0.11.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.theokanning.openai-gpt3-java/client -->
<dependency>
<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>client</artifactId>
<version>0.11.1</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
package com.kwan.spring5.pojo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ChoiceMessage {
/**
* 角色
*/
String role;
/**
* 具体内容
*/
String content;
}
package com.kwan.spring5.pojo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Choices {
/**
* 内容对象
*/
private ChoiceMessage message;
/**
* 结束原因
*/
private String finish_reason;
/**
* 索引位置
*/
private Integer index;
}
package com.kwan.spring5.pojo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* 请求参数
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/3/22 21:00
*/
@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;
}
package com.kwan.spring5.pojo;
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 {
/**
* id
*/
String id;
/**
* chat.completion
*/
String object;
/**
* 创建时间
*/
long created;
/**
* 模型
*/
String model;
/**
* 结果集
*/
List<Choices> choices;
/**
* 使用情况
*/
Usage usage;
}
package com.kwan.spring5.utils;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSON;
import com.kwan.spring5.pojo.ChoiceMessage;
import com.kwan.spring5.pojo.Choices;
import com.kwan.spring5.pojo.CompletionChatRequest;
import com.kwan.spring5.pojo.CompletionChatResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* chatgpt-api
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/3/22 20:40
*/
public class OpenAIChatGpt {
/**
* 请求地址
*/
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 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";
public static void main(String[] args) {
String question = "默写静夜思";
//这里是我根据模型请求封装的模型实体
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", question);
List<Object> messages = new ArrayList<>();
messages.add(message);
completionChatRequest.setMessages(messages);
post.body(JSON.toJSONString(completionChatRequest));
String body = post.execute().body();
CompletionChatResponse completionChatResponse = JSON.parseObject(body, CompletionChatResponse.class);
final List<Choices> choices = completionChatResponse.getChoices();
for (Choices choice : choices) {
final ChoiceMessage message1 = choice.getMessage();
final String content = message1.getContent();
System.out.println(content);
}
System.out.println("成功");
}
// public static CompletionChatResponse chatCompletion(String prompt) {//prompt即要将要发送至gtp的内容
// //这里我把用户发送和机器人返回的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);
// }
}
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
<context:annotation-config/> <context:annotation-config/>
<!--注入user类--> <!--注入user类-->
<bean id="user" class="com.kwan.spring5.User"></bean> <bean id="user" class="com.kwan.spring5.User"></bean>
<!--spring方式: set方法注入属性--> <!--spring方式: set方法注入属性-->
<bean id="book" class="com.kwan.spring5.Book"> <bean id="book" class="com.kwan.spring5.Book">
<!--使用property完成属性注入 <!--使用property完成属性注入
...@@ -19,12 +18,9 @@ ...@@ -19,12 +18,9 @@
<property name="bname" value="Hello"></property> <property name="bname" value="Hello"></property>
<property name="bauthor" value="World"></property> <property name="bauthor" value="World"></property>
</bean> </bean>
<!--(2)spring方式:有参数构造注入属性--> <!--(2)spring方式:有参数构造注入属性-->
<bean id="orders" class="com.kwan.spring5.Orders"> <bean id="orders" class="com.kwan.spring5.Orders">
<constructor-arg name="oname" value="Hello"></constructor-arg> <constructor-arg name="oname" value="Hello"></constructor-arg>
<constructor-arg name="address" value="China!"></constructor-arg> <constructor-arg name="address" value="China!"></constructor-arg>
</bean> </bean>
</beans> </beans>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.kwan"></context:component-scan>
<!-- 开启Aspect生成代理对象-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册