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

基层建设杂志网站关于网站开发的自我评价

基层建设杂志网站,关于网站开发的自我评价,php网站开发框架有哪些,智联招聘官方网规划一个聊天机器人 智能化完全于依托于GPT, 而产品化是我们需要考虑的事情比如#xff0c;如何去构建一个聊天机器人聊天机器人它的处理逻辑其实非常的清晰 我们输入问题调用 GPT然后#xff0c;GPT 给我们生成回答就可以了 需要注意的是#xff0c;聊天机器人不同于调用A…规划一个聊天机器人 智能化完全于依托于GPT, 而产品化是我们需要考虑的事情比如如何去构建一个聊天机器人聊天机器人它的处理逻辑其实非常的清晰 我们输入问题调用 GPT然后GPT 给我们生成回答就可以了 需要注意的是聊天机器人不同于调用API进行一个简单的测试我们和聊天机器人的对话可能是多轮的一个对话在这时候我们去调用API的时候就需要将我们多轮的问答都传递给GPT才行 新增一些实现类结构如下 以下Java版代码来源于网络可基于此逻辑改造成其他编程语言 src main java com.xxx.gpt.client util ChatContextHolder.java ChatBotClient.java… test java com.xxx.gpt.client.test FunctionCallTest.java… ChatContextHolder.java package com.xxx.gpt.client.util;import com.xxx.gpt.client.entity.Message; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;public class ChatContextHolder {private static MapString, ListMessage context new HashMap();public static ListMessage get(String id) {// TODO 限制轮数或者限制token数量ListMessage messages context.get(id);if (messages null) {messages new ArrayList();context.put(id, messages);}return messages;}public static void add(String id, String msg) {Message message Message.builder().content(msg).build();add(id, message);}public static void add(String id, Message message) {ListMessage messages context.get(id);if (messages null) {messages new ArrayList();context.put(id, messages);}messages.add(message);}public static void remove(String id) {context.remove(id);} }这里需要来添加一个类就是我们GPT的上下文的类我们创建一个类用于保存我们和GPT聊天的相关的 message 实例化一个Map的对象, 里面的 key 是我们chat的一个id, 一个会话的id然后对应的这个key就会有它的一个消息的列表也就是一个message的list添加相关的方法 比如说像get方法根据我们的会话id获取到所有的messageadd方法去对指定的会话id去添加messageremove方法, 去删除message 这是我们的上下文处理的类 ChatBotClient.java package com.xxx.gpt.client;import com.xxx.gpt.client.entity.Message; import com.xxx.gpt.client.listener.ConsoleStreamListener; import com.xxx.gpt.client.util.ChatContextHolder; import com.xxx.gpt.client.util.Proxys; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Proxy; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; import java.util.concurrent.CountDownLatch; import java.util.stream.Collectors;Slf4jpublic class ChatBotClient {public static Proxy proxy Proxy.NO_PROXY;public static void main(String[] args) {System.out.println(ChatGPT - Java command-line interface);System.out.println(Press enter twice to submit your question.);System.out.println();System.out.println(按两次回车以提交您的问题);String chatUuid UUID.randomUUID().toString();String key sk-adfas;proxy Proxys.http(127.0.0.1, 7890);while (true) {String prompt getInput(\nYou:\n);ChatGPTStreamClient chatGPT ChatGPTStreamClient.builder().apiKey(key).proxy(proxy).build().init();System.out.println(AI: );// 卡住CountDownLatch countDownLatch new CountDownLatch(1);Message message Message.of(prompt);ChatContextHolder.add(chatUuid, message);ConsoleStreamListener listener new ConsoleStreamListener() {Overridepublic void onError(Throwable throwable, String response) {throwable.printStackTrace();countDownLatch.countDown();}};listener.setOnComplate(msg - {ChatContextHolder.add(chatUuid, Message.ofAssistant(msg));countDownLatch.countDown();});chatGPT.streamChatCompletion(ChatContextHolder.get(chatUuid), listener);try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}}SneakyThrowspublic static String getInput(String prompt) {System.out.print(prompt);BufferedReader reader new BufferedReader(new InputStreamReader(System.in));ListString lines new ArrayList();String line;try {while ((line reader.readLine()) ! null !line.isEmpty()) {lines.add(line);}} catch (IOException e) {e.printStackTrace();}return lines.stream().collect(Collectors.joining(\n));} }它的实现其实也比较简单 第一步需要等待用户输入用户输入完成之后调用GPT 添加一下相关的我们的 API KEY 和 proxygetInput 去接收用户输入 第二步需要保存多轮会话 我们是多轮会话我们这里写一个循环在前面chatUuid 是我们用于标识会话的id 第三步为了效果更好更加顺畅采用流式的方式 创建一个 StreamClient 去调用GPT的 API调用完成进行输出 测试 完成之后可以测试一下 程序等待我们的输出我们去询问一下: “你是谁?”这里需要敲两次回车进行确认 调用之后我们获取到了 GPT 它的返回的结果 然后我们问: “请介绍一下ChatGPT”GPT生成了相关的答案 在这次问答当中也能看到流式Client的一个效果整体上和我们通过界面去访问GPT是没有什么区别的假如说我们现在再问: “这是我的第几个问题?” 理论上讲这是我们本轮会话的第三个问题由于我们没有在刚刚的调用里面, 去关联我们会话上下文的信息这样GPT会回答: “这是第3个问题” 将会话的上下文信息传递给 GPT, 就可以去结合这些上下文的信息给予我们比较精确的一个答案 这是我们在构造一个聊天机器人的时候和前面测试所不一样的需要我们注意的地方但是在这里其实就会有一个问题就是token的问题。GPT它的模型对于 token 是有限制的 如果我们一轮轮会话的叠加最终我们的token, 一定会超过模型它本身的token 所以在上下文的管理类里面我们这里是需要去进行处理 上述问题如何处理 方案一就是保留最近一轮的会话轮数比如只保留最近五轮 对于历史的消息不再保存不再发送给GPT这样可以达到小于指定token数量的目的但是当我们一轮的消息比较长的话也有可能会超过token的阈值 方案二就是在方案一的基础之上我们不再以单纯会话的轮数去做一个迭代 这里根据计算后的token的数量去进行判断如果小于模型的 max_token我们就保留相关的这些会话如果大于我们就要去做相关消息的一个删减 目前并未实现可在上述 ChatContextHolder.java 类中进行实现
http://www.yutouwan.com/news/180922/

相关文章:

  • 中国建设工程安全管理协会网站shopnc商城系统
  • 免费搭建微信网站百度搜题网页版入口
  • 怎么编写网站实验室建设网站
  • 阿里云做的网站怎么样网站建设必须要备案吗
  • 温州微网站制作多少钱中国最权威的网站排名
  • 电商网站推广常见问题网站安全检测入口
  • 做一个网站分析应该怎么做芍药居网站建设公司
  • 昆明安宁网站建设公司石家庄net网站开发
  • 网站联系方式修改织梦廊坊关键词排名推广
  • 网站建设推广特色网站建设流程html
  • 巧克力网站模板广西桂林建设局网站
  • 建设网站公司电话销售话术制图软件有哪几种
  • 一般网站建设公司有多少客户啊国内电商平台怎么做
  • 网站建设互联百度推广和网站建设
  • 做律师网站色目人
  • 太原网站的优化外贸网络营销如何选取关键词
  • 网站管理系统后台不能发布文章了网站字体效果
  • 互联网网站建设方案wordpress主页html下划线
  • 网站建设公司价格外国做的中国动画视频网站
  • 如何做微信朋友圈网站微信商城怎么进
  • 邢台网站建设电话民宿推广平台有哪些
  • 网站备案网站名称怎么填网站被iframe
  • 网站推广只能使用在线手段进行。系统开发毕业设计
  • 网站首页的文字下拉怎么做免费咨询的图片
  • wordpress英文美食主题公司网站怎么做优化
  • 进贤网站建设广告发布
  • 莱阳网站定制php网站建设模板下载
  • 网站内图片变换怎么做wordpress 文章id 链接
  • 想做网站北京网站建设的服务
  • 深圳网站开发四川大良网站建设