您现在的位置是:首页 > 正文

java-chatgpt

2024-02-01 02:39:44阅读 2

1.

https://www.jianshu.com/p/46dda2b38716

package com.demo.chatgpt.test;

import cn.hutool.core.collection.CollectionUtil;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.Maps;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@Slf4j
public class ChatGptApiTest {
    //通过spring 的resttemplate调用chatgpt api
    private static final RestTemplate restTemplate = new RestTemplate();
    //openai的api key,可以写死或从配置文件读取,这里读取的环境变量
    private static final String apiKey = System.getenv("OPENAI_API_KEY");

    public static void main(String[] args) {
        final String question = "google和openai比,哪个公司更有潜力";
        final StringBuilder sb = new StringBuilder();
        while (true){
            //循环调用,将返回的内容附加到问题里,解决返回的答案被截断的问题
            AIResponse response = getAiResponse(question+"\n A:"+sb);
            if(response!= null ){
// 如果返回不为null,提取返回内容
                sb.append(CollectionUtil.getFirst(response.getChoices()).getText());
            }
            if(response == null || CollectionUtil.getFirst(response.getChoices()).finish()){
    //返回null,或者回答结束,退出循环
                break;
            }

        }

        log.info("result:{}",sb);


    }


    private static AIResponse getAiResponse(final String question){
        final Map<String,Object> data = Maps.newHashMap();
        data.put("model","text-davinci-003");
        data.put("prompt",question);
        data.put("temperature",0);
        data.put("max_tokens",50);

        log.info("apikey:{}",apiKey);
        if(StringUtils.isBlank(apiKey)){
            log.error("apikey is empty");
        }else {
            final URI uri = URI.create("https://api.openai.com/v1/completions");
            MultiValueMap<String,String> headers = new HttpHeaders();
            headers.add("Content-Type","application/json");
            headers.add("Authorization","Bearer "+apiKey);

            final RequestEntity<String> request = new RequestEntity<>(JsonUtils.toJson(data),headers,HttpMethod.POST, uri);
            final ResponseEntity<AIResponse> responseEntity = restTemplate.exchange(request, AIResponse.class);
            AIResponse responseEntityBody = responseEntity.getBody();
            log.info("{}",responseEntity);
            if(!Objects.isNull(responseEntityBody)){
                final AIResponseChoice first = CollectionUtil.getFirst(responseEntityBody.getChoices());
                if(!Objects.isNull(first)){
                    return responseEntityBody;
                }
            }else {
                log.info("{}",responseEntity);
            }
        }
        return null;
    }

    @Data
    public static class AIResponse{
        private List<AIResponseChoice> choices;
    }

    @Data
    public static class AIResponseChoice{
        private String text;
        @JsonProperty("finish_reason")
        private String finishReason;

        public boolean finish(){
            return !Objects.equals("length",finishReason);
        }

    }


}

2.

https://zhuanlan.zhihu.com/p/612460401

<dependency>
        <groupId>com.theokanning.openai-gpt3-java</groupId>
        <artifactId>client</artifactId>
	<version>0.11.0</version>
</dependency>
public void sendMsg() {
	// 消息列表
	List<ChatMessage> list = new ArrayList<>();

	// 给chatGPT定义一个身份,是一个助手
	ChatMessage chatMessage = new ChatMessage();
	chatMessage.setRole("system");
	chatMessage.setContent("You are a helpful assistant.");
	list.add(chatMessage);

	// 定义一个用户身份,content是用户写的内容
	ChatMessage userMessage = new ChatMessage();
	userMessage.setRole("user");
	userMessage.setContent("hello");
	list.add(userMessage);

	ChatCompletionRequest request = ChatCompletionRequest.builder()
                    .messages(list)
                    .model("gpt-3.5-turbo")
                    .build();
	OpenAiService service = new OpenAiService("your token");

	// chatCompletion 对象就是chatGPT响应的数据了
	ChatCompletionResult chatCompletion = service.createChatCompletion(request);
}

3.

https://article.itxueyuan.com/4608la

import java.io.IOException;
import java.util.Arrays;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ChatGPTExample {
  
  private static final String API_ENDPOINT = "https://api.openai.com/v1/engines/davinci-codex/completions";
  private static final String ACCESS_TOKEN = "<your-access-token>";
  
  public static void main(String[] args) throws IOException {
    // Create a new HTTP client
    CloseableHttpClient httpClient = HttpClients.createDefault();
    
    // Set the API request parameters
    String prompt = "Hello, how are you today?";
    int maxTokens = 60;
    double temperature = 0.7;
    double topP = 1.0;
    double frequencyPenalty = 0.5;
    double presencePenalty = 0.0;
    
    // Create a new HTTP POST request
    HttpPost httpPost = new HttpPost(API_ENDPOINT);
    httpPost.addHeader("Content-Type", "application/json");
    httpPost.addHeader("Authorization", "Bearer " + ACCESS_TOKEN);
    
    // Set the request body as a JSON string
    ObjectMapper objectMapper = new ObjectMapper();
    String requestBody = objectMapper.writeValueAsString(
        new ChatGPTRequest(prompt, maxTokens, temperature, topP, frequencyPenalty, presencePenalty));
    httpPost.setEntity(new StringEntity(requestBody));
    
    // Send the API request and parse the response
    CloseableHttpResponse response = httpClient.execute(httpPost);
    HttpEntity entity = response.getEntity();
    String responseBody = EntityUtils.toString(entity);
    EntityUtils.consume(entity);
    response.close();
    
    JsonNode responseJson = objectMapper.readTree(responseBody);
    String responseText = responseJson.get("choices").get(0).get("text").asText();
    
    // Print the response text to the console
    System.out.println("ChatGPT response: " + responseText);
    
    // Close the HTTP client
    httpClient.close();
  }
  
  static class ChatGPTRequest {
    public String prompt;
    public int max_tokens;
    public double temperature;
    public double top_p;
    public double frequency_penalty;
    public double presence_penalty;
    
    public ChatGPTRequest(String prompt, int maxTokens, double temperature, double topP,
        double frequencyPenalty, double presencePenalty) {
      this.prompt = prompt;
      this.max_tokens = maxTokens;
      this.temperature = temperature;
      this.top_p = topP;
      this.frequency_penalty = frequencyPenalty;
      this.presence_penalty = presencePenalty;
    }
  }
}

首先创建了一个HTTP客户端,然后设置了API的访问端点和访问密钥。接着,我们设置了对话的文本和一些生成对话的参数,并使用Jackson库将请求参数转换为JSON字符串。然后,我们创建了一个HTTP POST请求,并将JSON字符串设置为请求体。接着,我们使用HTTP客户端发送请求,并解析了响应。最后,我们使用Jackson库从响应JSON中提取生成的对话文本,并将其打印到控制台上。

4.

https://betheme.net/yidongkaifa/76935.html?action=onClick

网站文章

  • HDU5781 ATM Mechine [概率dp]

    题意:一个人去ATM取钱,知道钱最多有n, 她最多能尝试m次,问如果她足够机智,把所有钱都去做的期望次数是多少。(n <= 2000) 思路:由于足够聪明,二分取钱最坏的情况下只需要11次即可取走所有的钱。 所以预处理m = min(m, 12); 定义状态:dp[i][j]表示已知当前钱数的最大上限为i,还能够取钱的次数为j时候的期望。 决策:尝试取k元钱,k能够被取走的概率为i+1−ki

    2024-02-01 02:39:39
  • VUE实现element的form表单中字段联动必填校验(根据一个字段内容决定另一个字段是否为必填项)

    VUE实现element的form表单中字段联动必填校验(根据一个字段内容决定另一个字段是否为必填项)

    2024-02-01 02:39:08
  • CVE-2012-1823漏洞复现

    CVE-2012-1823漏洞复现

    前言这个漏洞简单来说,就是用户请求的querystring(querystring字面上的意思就是查询字符串,一般是对http请求所带的数据进行解析,这里也是指http请求中所带的数据)被作为了php...

    2024-02-01 02:39:02
  • 代码分析(八)

    2021SC@SDUSC在我们前面分析的APIJSON中用到了一个十分频繁的对象就是JSONObject,而JSONObject时来自于FASTJSON里面的一个类,其中定义了一些方法和操作,我们来看...

    2024-02-01 02:38:55
  • 6-6 实验10_8_设计函数 void delcharfun(char *str,char ch) (100 分)

    void delcharfun(char *str,char ch){ int j; for(int i=0;i<110;i++) { while(*(str+i)==...

    2024-02-01 02:38:48
  • Qt链接Ws2_32.lib

    vs2008 下是在链接器下 空格+Ws2_32.lib 能解决问题qt是在pro文件中 加入   LIBS+= -lWs2_32   即可解决问题

    2024-02-01 02:38:20
  • 如何合并两个数组

    如何合并两个数组

    1. 遍历两个数组放入另一个 /* 遍历两个int[] 遍历放入一个数组 */ public static int[] conTwoArrays(int[] a,int[] ...

    2024-02-01 02:38:05
  • 剑指 Offer II 039. 直方图最大矩形面积

    剑指 Offer II 039. 直方图最大矩形面积

    给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights =...

    2024-02-01 02:37:48
  • 如把联想电脑计算机图标放在桌面上,联想的电脑应用怎么放到桌面图标-?(图)...

    如把联想电脑计算机图标放在桌面上,联想的电脑应用怎么放到桌面图标-?(图)...

    如何将Lenovo的计算机应用程序放在桌面图标上? --- >>如何将我的计算机应用程序放置在桌面上,桌面图标似乎异常:1、该桌面图标消失,右键单击桌面上的鼠标,然后在桌面图标前面打勾。 2、桌面图标太大且不清楚,您可以调整屏幕分辨率。右键单击桌面,选择屏幕分辨率,并在调整为推荐值后按OK。 3如何将联想的计算机应用程序放置在桌面图标上如何将计算机管家软件管理放在桌面上? --- &g...

    2024-02-01 02:37:14
  • 2023 年 08 月编程语言排行榜,Julia 进入前 20

    2023 年 08 月编程语言排行榜,Julia 进入前 20

    架构师大咖 架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。公众号该公众号已被封禁TIOBE 2023 年 08 月份的编程语言排行榜已经公布,官方的标题是:Julia 第一次进入 TIOBE 指数前 20(Julia enters the TIOBE index t...

    2024-02-01 02:37:07