编写java版本的http流式返回访问GPT

news/2024/11/6 7:32:38/

编写java版本的http流式返回访问GPT

  • 既然测试python可以实现http流式返回,那么java也可以实现。
  • 使用okHttp3库,实现。

gradle依赖

 // okhttp3implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.9.1'// org.jsonimplementation group: 'org.json', name: 'json', version: '20210307'

代码

package org.jow.http.stream;import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.json.JSONArray;
import org.json.JSONObject;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class OKStream {public static void main(String[] args) throws IOException {// 循环聊天,直到输入“再见”while (true) {// 控制台输入BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.println("输入问题:");String str = reader.readLine();if ("bye".equals(str)) {break;}OKStream okStream = new OKStream();okStream.chatWithGPT(str);}}private void chatWithGPT(String message) throws IOException {OkHttpClient client = new OkHttpClient();MediaType mediaType = MediaType.parse("application/json");JSONObject data = new JSONObject();data.put("messages", new JSONArray().put(new JSONObject().put("role", "system").put("content", "You are an AI assistant that helps people find information.")).put(new JSONObject().put("role", "user").put("content", message)));data.put("temperature", 0.5);data.put("top_p", 0.95);data.put("frequency_penalty", 0);data.put("presence_penalty", 0);data.put("max_tokens", 800);data.put("stop", "null");data.put("stream", true);RequestBody body = RequestBody.create(mediaType, data.toString());Request request = new Request.Builder().url("https://xxxx.openai.azure.com/openai/deployments/gpt-35-turbo-xxx/chat/completions?api-version=2023-03-15-preview").post(body).addHeader("Content-Type", "application/json").addHeader("api-key", "************************").build();Response response = client.newCall(request).execute();String line;while ((line = response.body().source().readUtf8Line()) != null) {if (line.equals("data: [DONE]")) {System.out.println("\n[DONE]");break;} else if (line.startsWith("data: ")) {line = line.substring(6);JSONObject responseJson = new JSONObject(line);if (responseJson.getJSONArray("choices").getJSONObject(0).getJSONObject("delta").has("content")) {System.out.print(responseJson.getJSONArray("choices").getJSONObject(0).getJSONObject("delta").getString("content"));}}}}
}

http://www.ppmy.cn/news/823986.html

相关文章

MACKBOOK PRO 14 M2 PRO机型支持:

M2 Pro 机型 同时支持初始分辨率下的内置显示屏 (可显示 10 亿色彩) 以及: 通过雷雳端口连接多达两台分辨率最高达 6K (60Hz) 的外接显示器;或通过雷雳端口连接一台分辨率最高达 6K (60Hz) 的外接显示器,同时通过 HDMI 端口连接一台分辨率最…

win10文件夹拒绝访问怎么办?windows拒绝访问文件夹的解决方法

当我们每天使用win10系统计算机时,许多用户遇到了windows拒绝访问文件夹的问题。以下小编就带给大家拒绝访问文件夹怎么解决的具体方法,有兴趣的小伙伴赶紧来看看。 ①右键点击打不开的文件夹,选择属性,点击安全选卡,…

windows10删除文件时遇到“拒绝访问”的解决方法

通过修改文件的所属对象的方式,删除成功。具体操作如下: 1)打开删除的文件夹, 属性, 安全, 高级 点击:修改 在对象名称:Everyone ,点击“检查名称”, 确定,…

打开文件或文件夹时提示拒绝访问的解决办法

打开文件或文件夹时如果提示拒绝访问,这是访问权限问题。 1 打开我的电脑,点击工具-》文件夹选项-》查看,取消使用简单共享。 2 在文件或文件夹上单击右键,选择属性,点击安全。 3 如果在安全选项卡中的组和用户中没有发…

windows系统“文件访问被拒绝,你需要提供管理员权限才能删除此文件”的解决方案

问题场景: 之前在装oracle数据库的时候,由于没装成功,想卸载掉,但是某些文件却删不掉,需要一些权限。例如下图: 解决方案: 一、右击该文件,选择属性,找到安全&#xff0…

共享文件夹经常拒绝访问的解决办法

我们的小组成员之间经常通过网络邻居来拷贝东西,但是很久以来,就有这么一个问题,经常共享了一个文件夹以后,对方却被拒绝访问。这种情况出现是随机的,时而共享就没问题,时而就无论共享什么都拒绝访问。从前…

解决 无法删除文件夹 “文件夹访问被拒绝 你需要权限来执行此操作“ 的问题 理论上还可以使用本方法删除任何文件夹

文章目录 问题描述手动方法解决使用python自动删除 问题描述 有时候磁盘里面一些文件会被一些程序设置了复杂的权限,请原谅本人才疏学浅无法对Windows的权限系统进行合理的解释。这种设置后表现出来的问题是当你想删除该文件夹时提示文件夹访问被拒绝 你需要权限来…

关于修改文件拒绝访问的问题

问题:修改某些配置文件时,比如mysql安装目录下修改完my-default.ini文件里的内容时,出现拒绝访问的提示。 解决方案:右击-->属性-->安全-->编辑,点击相应的电脑普通用户名,将修改属性设为允许。如…