当前位置: 首页 > news >正文

网站服务器租用还是托管呢品牌策划方案设计

网站服务器租用还是托管呢,品牌策划方案设计,企业所得税的计算公式,网站动态小图标Java版GPT的StreamClient 可作为其他编程语言的参考注意: 下面包名中的 xxx 可以换成自己的代码基于java#xff0c;来源于网络#xff0c;可修改成其他编程语言实现参考前文: https://blog.csdn.net/Tyro_java/article/details/134748994 1 #xff09;核心代码结构设计 …Java版GPT的StreamClient 可作为其他编程语言的参考注意: 下面包名中的 xxx 可以换成自己的代码基于java来源于网络可修改成其他编程语言实现参考前文: https://blog.csdn.net/Tyro_java/article/details/134748994 1 核心代码结构设计 src main java com.xxx.gpt.client listener AbstractStreamListener.javaConsoleStreamListener.java ChatGPTStreamClient.java… test java com.xxx.gpt.client.test StreamClientTest.java… 2 相关程序如下 前文通过我们开发的Client能够正常的和 Open AI 进行交互能够去调用GPT的API通过API将我们的 message 请求发送给GPT并且正常的接收到了GPT对我们的返回在前面我们去浏览 GPT 它的API的时候我们发现它是支持流式访问的我们可以开发一个Stream的Client能够支持流式的接收GPT的响应流式的Client在很多场景下也是非常有必要的首先需要去先创建一个listener去流式的接收GPT的返回, 我们实现一个 AbstractStreamListener 类 和 ConsoleStreamListener 类需要继承于 EventSourceListener, 内部添加几个方法 onOpenonEvent, 可以获取到流失的输入这个是重点onClosedonFailure AbstractStreamListener.java package com.xxx.gpt.client.listener;import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.xxx.gpt.client.entity.ChatChoice; import com.xxx.gpt.client.entity.ChatCompletionResponse; import com.xxx.gpt.client.entity.Message; import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import okhttp3.Response; import okhttp3.sse.EventSource; import okhttp3.sse.EventSourceListener;import java.util.List; import java.util.Objects; import java.util.function.Consumer;Slf4j public abstract class AbstractStreamListener extends EventSourceListener {protected String lastMessage ;/*** Called when all new message are received.** param message the new message*/SetterGetterprotected ConsumerString onComplate s - {};/*** Called when a new message is received.* 收到消息 单个字** param message the new message*/public abstract void onMsg(String message);/*** Called when an error occurs.* 出错时调用** param throwable the throwable that caused the error* param response the response associated with the error, if any*/public abstract void onError(Throwable throwable, String response);Overridepublic void onOpen(EventSource eventSource, Response response) {// do nothing}Overridepublic void onClosed(EventSource eventSource) {// do nothing}Overridepublic void onEvent(EventSource eventSource, String id, String type, String data) {if (data.equals([DONE])) {onComplate.accept(lastMessage);return;}// 将数据反序列化为 GPT的 responseChatCompletionResponse response JSON.parseObject(data, ChatCompletionResponse.class);// 获取GPT的返回读取JsonListChatChoice choices response.getChoices();// 为空则 returnif (choices null || choices.isEmpty()) {return;}// 获取流式信息Message delta choices.get(0).getDelta();String text delta.getContent();if (text ! null) {lastMessage text;onMsg(text);}}SneakyThrowsOverridepublic void onFailure(EventSource eventSource, Throwable throwable, Response response) {try {log.error(Stream connection error: {}, throwable);String responseText ;if (Objects.nonNull(response)) {responseText response.body().string();}log.error(response{}, responseText);String forbiddenText Your access was terminated due to violation of our policies;if (StrUtil.contains(responseText, forbiddenText)) {log.error(Chat session has been terminated due to policy violation);log.error(检测到号被封了);}String overloadedText That model is currently overloaded with other requests.;if (StrUtil.contains(responseText, overloadedText)) {log.error(检测到官方超载了赶紧优化你的代码做重试吧);}this.onError(throwable, responseText);} catch (Exception e) {log.warn(onFailure error:{}, e);// do nothing} finally {eventSource.cancel();}} }ConsoleStreamListener.java package com.xxx.gpt.client.listener;import lombok.extern.slf4j.Slf4j;Slf4j public class ConsoleStreamListener extends AbstractStreamListener {Overridepublic void onMsg(String message) {System.out.print(message);}Overridepublic void onError(Throwable throwable, String response) {} }再创建一个 ChatGPTStreamClient 类 添加如下相关属性添加 init 方法完成 streamChatCompletion 方法 ChatGPTStreamClient.java package com.xxx.gpt.client;import cn.hutool.core.util.RandomUtil; import cn.hutool.http.ContentType; import com.fasterxml.jackson.databind.ObjectMapper; import com.xxx.gpt.client.entity.ChatCompletion; import com.xxx.gpt.client.entity.Message; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.sse.EventSource; import okhttp3.sse.EventSourceListener; import okhttp3.sse.EventSources;import java.net.Proxy; import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit;Slf4j Data Builder NoArgsConstructor AllArgsConstructor public class ChatGPTStreamClient {private String apiKey;private ListString apiKeyList;private OkHttpClient okHttpClient;/*** 连接超时*/Builder.Defaultprivate long timeout 90;/*** 网络代理*/Builder.Defaultprivate Proxy proxy Proxy.NO_PROXY;/*** 反向代理*/Builder.Defaultprivate String apiHost ChatApi.CHAT_GPT_API_HOST;/*** 初始化*/public ChatGPTStreamClient init() {OkHttpClient.Builder client new OkHttpClient.Builder();client.connectTimeout(timeout, TimeUnit.SECONDS);client.writeTimeout(timeout, TimeUnit.SECONDS);client.readTimeout(timeout, TimeUnit.SECONDS);if (Objects.nonNull(proxy)) {client.proxy(proxy);}okHttpClient client.build();return this;}/*** 流式输出*/public void streamChatCompletion(ChatCompletion chatCompletion,EventSourceListener eventSourceListener) {chatCompletion.setStream(true);try {EventSource.Factory factory EventSources.createFactory(okHttpClient);ObjectMapper mapper new ObjectMapper();String requestBody mapper.writeValueAsString(chatCompletion);String key apiKey;if (apiKeyList ! null !apiKeyList.isEmpty()) {key RandomUtil.randomEle(apiKeyList);}Request request new Request.Builder().url(apiHost v1/chat/completions).post(RequestBody.create(MediaType.parse(ContentType.JSON.getValue()),requestBody)).header(Authorization, Bearer key).build();factory.newEventSource(request, eventSourceListener);} catch (Exception e) {log.error(请求出错{}, e);}}/*** 流式输出*/public void streamChatCompletion(ListMessage messages,EventSourceListener eventSourceListener) {ChatCompletion chatCompletion ChatCompletion.builder().messages(messages).stream(true).build();streamChatCompletion(chatCompletion, eventSourceListener);} }再添加一个测试方法 StreamClientTest.java package com.xxx.gpt.client.test;import com.xxx.gpt.client.ChatGPTStreamClient; import com.xxx.gpt.client.entity.ChatCompletion; import com.xxx.gpt.client.entity.Message; import com.xxx.gpt.client.listener.ConsoleStreamListener; import com.xxx.gpt.client.util.Proxys; import org.junit.Before; import org.junit.Test;import java.net.Proxy; import java.util.Arrays; import java.util.concurrent.CountDownLatch;public class StreamClientTest {private ChatGPTStreamClient chatGPTStreamClient;Beforepublic void before() {Proxy proxy Proxys.http(127.0.0.1, 7890);chatGPTStreamClient ChatGPTStreamClient.builder().apiKey(sk-6kchadsfsfkc3aIs66ct) // 填入自己的 key.proxy(proxy).timeout(600).apiHost(https://api.openai.com/).build().init();}Testpublic void chatCompletions() {ConsoleStreamListener listener new ConsoleStreamListener();Message message Message.of(写一段七言绝句诗);ChatCompletion chatCompletion ChatCompletion.builder().messages(Arrays.asList(message)).build();chatGPTStreamClient.streamChatCompletion(chatCompletion, listener);try {Thread.sleep(10000);} catch (InterruptedException e) {throw new RuntimeException(e);}} }这样程序基本已经完成了这里构建了一个流式访问的参数然后去调用GPT的API实现了流式的输出可参考以上 Java 版实现, 去实现其他语言版本的 StreamClient
http://www.dnsts.com.cn/news/94117.html

相关文章:

  • 高新区建设局网站wordpress 树状目录
  • 常用的博客建站程序装修公司排名
  • 网站导航栏自适应显示做虚拟网站要花多少钱
  • 培训机构网站设计好吗免费的破解版wordpress主题
  • 泊头做网站的wordpress 外观
  • 网站建设兆金手指下拉公司网站制作的教程
  • kali做钓鱼网站电商推广渠道
  • 四川省建设厅职称评审网站wordpress centos安装教程
  • 机械行业网站建设制作开发方案石家庄建设网站
  • 餐饮营销型网站案例分析网站开发现在用什么语言
  • 鲁谷网站建设建筑工程网上办事大厅
  • 那个相亲网站做的比较好平台推广策划案
  • 免费网站建站百度云网站如何paypal支付方式
  • 常平哪里有招计算机网站开发的wordpress电影主题博客
  • 个人网站怎么建设步骤怎么做网站不用备案
  • 可信网站图标 费流量广东平台网站建设哪家好
  • 德州市建设街小学网站首页深圳定制纸箱
  • 网站首页背景图片网站建立价格
  • 甘肃省建设银行网站网页游戏开服表怎么关闭
  • 网站 建设 计划书外贸网站搭建公司
  • 广东网站备案时间360建筑网证书
  • 苏州吴江做网站公司中国室内设计公司排名前十强
  • 北京网站建设价格便宜北京信息发布平台
  • 创恒建设有限公司网站公司网站建设企划书
  • 厦门唯一官方网站广告软文小故事200字
  • 德兴网站建设关键词优化排名软件
  • 网站底部的备案号动态设计参考网站
  • 南昌企业制作网站设计建什么网站做cpa
  • 免费外贸建站平台网站设计经典案例欣赏
  • 机关网站建设 方案upscale wordpress