php thinkphp6+uniap开发chatgpt问答

chatgpt开发包

这里我用的是orhanerday/open-ai
composer 包安装

composer require orhanerday/open-ai

简单调用实例

<?phprequire __DIR__ . '/vendor/autoload.php'; // remove this line if you use a PHP Framework.use Orhanerday\OpenAi\OpenAi;$open_ai_key = getenv('OPENAI_API_KEY');
$open_ai = new OpenAi($open_ai_key);$complete = $open_ai->chat(['model' => 'gpt-3.5-turbo','messages' => [["role" => "system","content" => "You are a helpful assistant."],["role" => "user","content" => "Who won the world series in 2020?"],["role" => "assistant","content" => "The Los Angeles Dodgers won the World Series in 2020."],["role" => "user","content" => "Where was it played?"],],'temperature' => 1.0,'max_tokens' => 4000,'frequency_penalty' => 0,'presence_penalty' => 0,
]);var_dump($complete);

集成到项目

思路一 websoket方式

  1. 后台开启websoket
    采用wokerman GatewayWorker 启动websoket服务
    protected function configure(){// 指令配置$this->setName('chat:server')->addArgument('action', Argument::OPTIONAL, "start|stop|restart|reload|status|connections", 'start')->addOption('host', 'H', Option::VALUE_OPTIONAL, 'the host of workerman server.', null)->addOption('port', 'p', Option::VALUE_OPTIONAL, 'the port of workerman server.', null)->addOption('daemon', 'd', Option::VALUE_NONE, 'Run the workerman server in daemon mode.')->setDescription('chatWebsoket server');}protected function execute(Input $input, Output $output){$action = $input->getArgument('action');if (DIRECTORY_SEPARATOR !== '\\') {if (!in_array($action, ['start', 'stop', 'reload', 'restart', 'status', 'connections'])) {$output->writeln("Invalid argument action:{$action}, Expected start|stop|restart|reload|status|connections .");exit(1);}global $argv;array_shift($argv);array_shift($argv);array_unshift($argv, 'think', $action);} else {$output->writeln("GatewayWorker Not Support On Windows.");exit(1);}if ('start' == $action) {$output->writeln('Starting GatewayWorker server...');}$this->startRegister();$this->startBusinessWorker();$this->startGateway();Worker::runAll();}protected function startRegister(){//初始化registernew Register('text://0.0.0.0:1236');}protected function startBusinessWorker(){//bussinessWorker $worker = new BusinessWorker();// worker名称$worker->name = 'BusinessWorker';// bussinessWorker进程数量$worker->count = 4;// 服务注册地址$worker->registerAddress = '127.0.0.1:1236';$worker->eventHandler = '\plugin\echoChatgpt\controller\Events';}protected function startGateway(){// 初始化 gateway 进程$gateway = new Gateway("websocket://0.0.0.0:8282");$gateway->name = 'Gateway';$gateway->count = 4;$gateway->lanIp = '127.0.0.1';$gateway->startPort = 2900;$gateway->registerAddress = '127.0.0.1:1236';// 心跳间隔$gateway->pingInterval = 55;$gateway->pingNotResponseLimit = 1;}

2.后台异步任务

接收到问题后 采用Queue 进入队列 异步消费

 Queue::push('plugin\echoChatgpt\job\Task', ['chatid' => $chat->id]);

消费任务

class Task
{public function fire(Job $job, $data){$rt = $this->doJob($data);if ($rt) {$job->delete();return true;}// 重试三次失败 todo...if ($job->attempts() >= 3) {$this->dofail($data);$job->delete();return true;}}public function doJob($data){//这里发起处理chatgpt问题}
}

3.前端连接websoket
uniapp store 中 链接 websoket

import Vue from 'vue'
const state = {isOpen:false,SocketTask:null,lockReconnect:false
}
const getters = {}
const mutations = {updateisOpen(state, status) {state.isOpen = status;},updateTask(state,task){state.SocketTask = task;},updateLockReconnect(state, status) {state.lockReconnect = status;}
}
const actions = {connectSocket({commit,state,dispatch}) {return new Promise((resolve, reject) => {try{const socketTask = uni.connectSocket({url: 'wss://chatgpt.wxhpco.com/ws',success :(res)=>{}});commit('updateTask', socketTask);uni.onSocketOpen(function (res) {console.info('websoket链接成功')commit('updateisOpen', true);console.log(state.isOpen)//心跳heartCheck.reset().start();//初始化内容// dispatch('WebSocketinit');resolve();});uni.onSocketClose(function () {if(state.isOpen){dispatch('reconnect');}console.log("ws连接关闭!"+new Date().toLocaleString());});uni.onSocketError(function () {commit('updateisOpen', false);console.log(state.isOpen)dispatch('reconnect');console.log("ws连接错误!"+new Date().toLocaleString());});uni.onSocketMessage(function (res) {heartCheck.reset().start();});//心跳检测var heartCheck = {timeout: 2000, //2分钟发一次心跳timeoutObj: null,serverTimeoutObj: null,reset: function(){clearTimeout(this.timeoutObj);clearTimeout(this.serverTimeoutObj);return this;},start: function(){var self = this;this.timeoutObj = setTimeout(function(){//这里发送一个心跳,后端收到后,返回一个心跳消息,//onmessage拿到返回的心跳就说明连接正常socketTask.send({data:'{"type":"ping","content":""}'});self.serverTimeoutObj = setTimeout(function(){//如果超过一定时间还没重置,说明后端主动断开了socketTask.close();     //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次}, self.timeout)}, this.timeout)}}}catch(e){dispatch('reconnect');}})},reconnect({commit,state,dispatch}){if(state.lockReconnect) {return false;};commit('updateLockReconnect', true);setTimeout(function () {dispatch('connectSocket');commit('updateLockReconnect', false);}, 2000);},WebSocketinit({commit,state,dispatch},params){var data = {'type':'init','data': params}state.SocketTask.send({data:JSON.stringify(data)});}
}export default {namespaced: true,state,getters,mutations,actions
}

4.前端提问和接收回答

this.websoket.onMessage(function(res){console.log(res)var data = JSON.parse(res.data);switch(data.type){case 'ask':that.$refs.chat.updateText(data.data)break;case 'reply':// that.replyMsg = data.datathat.$refs.chat.updateText(data.data)break;case 'modal':uni.showModal({title: '提示',content: data.data.message,success: function (res) {if (res.confirm) {console.log(data)} }});break;case 'msg':uni.$u.toast(data.data.message);break;default:return ;}})

效果

适配的PC端效果图在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1658.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中inline是什么作用?【ChatGPT问答】

C中inline是什么作用&#xff1f; inline bool nextto(Rubbish pos1, Rubbish pos2) {if(pos1.xpos2.x && abs(pos1.y-pos2.y)1) // 横坐标相同判断纵坐标相差1return true;else if(pos1.ypos2.y && abs(pos1.x-pos2.x)1) // 纵坐标相同判断横坐标相差1retur…

ChatGPT问答对话分销系统开发

ChatGPT问答对话分销系统开发 你好&#xff01;开发ChatGPT问答对话分销系统将需要获得专业技术人员的支持。目前&#xff0c;有一些开源框架和平台可以帮助您快速搭建起自己的问答系统。你可以考虑使用这些开源框架和平台&#xff0c;也可以考虑委托专业的开发团队完成此工作…

Chatgpt的有趣问答

前言 试验了一下chatgpt&#xff0c;忽然想起了版权问题。假设以ai生成文本为基础加以修改来做文案是否会有版权问题&#xff0c;于是一时兴起截图发一下。 ps: 本文没别的内容&#xff0c;教别人注册的基本一搜就搜到没必要写了

chatgpt简单的问答机器人

作为一个AI语言模型&#xff0c;ChatGPT可以用于构建简单的问答机器人。以下是实现这个功能的一些步骤&#xff1a; 收集问题和答案&#xff1a;首先&#xff0c;您需要准备一组问题和对应的答案。这些问题和答案应该尽可能覆盖您希望机器人回答的话题范围。 训练ChatG…

chatgpt每日问答

20230411 将数组转成十六进制字符串 array [12, 34, 56, 78, 90] hex_string .join([{:02x}.format(x) for x in array]) print(hex_string)20230409 变声 用python写一个变声器&#xff0c;要求导入mp4或者mp3文件&#xff0c;将视频中的声音变成女声 from pydub import…

Cesium AI GPT 文档 源码 ChatGPT问答

我用Cesium104.0的 源码 | 文档 | 3DTiles标准 作为上下文语料定制了一个智能Cesium专家问答助手 语料: 3D Tiles Specificationhttps://cesium.com/downloads/cesiumjs/releases/1.104/Build/CesiumUnminified/Cesium.jshttps://github1s.com/CesiumGS/cesium/blob/HEAD/Doc…

Chatgpt问答机器人

如果要开发基于ChatGPT问答机器人&#xff0c;可能需要实现以下一些功能&#xff1a; 语音问答&#xff1a;支持语音输入和输出&#xff0c;用户可以通过语音提出问题并听取机器人的回答。 文字问答&#xff1a;支持文字输入和输出&#xff0c;用户可以通过输入文字提出…

程序员与ChatGPT的日常问答

程序员与ChatGPT的日常问答 GPT3.5与GPT4.0能力对比技术问题工具问题编解码问题其他问题 本文记录下调教ChatGPT的日常。 GPT3.5与GPT4.0能力对比 Q&#xff1a;采用同一个问题提问&#xff0c;对比下GPT3.5和GPT4.0的能力区别&#xff0c;比如&#xff1a;帮我列一个小白入门音…

我用chatgpt写了一个chatgpt问答网站,程序员真的要失业了?【附完整源码】

大家好&#xff0c;我是老猿。 Chatgpt的功能非常强大&#xff0c;不光在它的文本对话能力&#xff0c;主要对程序员冲击最大的就是它的代码分析和编写能力。今天我们就来测试一下它的代码编写能力。 问答网站 首先看一下最终效果&#xff1a; 问答网站比较简单&#xff0c;…

chatGPT问答群

我们自己将chatgpt的接口&#xff0c;接入了微信群&#xff0c;在群里你可以问它任意的问题&#xff0c;可以让他帮你写文案&#xff0c;帮你规划旅游行程&#xff0c;可以帮助你写论文&#xff0c;周报&#xff0c;月报&#xff0c;等等&#xff0c;有兴趣的可以进群了解 Cha…

CHATGPT问答集锦

CHATGPT问答集锦是一个由人工智能聊天机器人CHATGPT生成的全面问答集合&#xff0c;涵盖科学、技术、医学、经济等多个领域的问题。用户可以通过与CHATGPT机器人对话的方式&#xff0c;快速获取答案和解决问题。 CHATGPT问答集锦的优点在于其智能化和高效性。CHATGPT机器人通…

ChatGPT最全问答,你想知道的都在这里!

导读&#xff1a;ChatGPT最全问答&#xff0c;你想知道的都在这里&#xff01;本文为你详细解答了ChatGPT是什么、有哪些应用场景、如何更好地向ChatGPT提问以及ChatGPT的进阶技巧&#xff0c;让你轻松成为ChatGPT专家&#xff01; ChatGPT是什么&#xff1f; ChatGPT是一种自然…

ChatGPT fine tune微调+prompt介绍

目录 1 如何使用ChatGPT1.1 图片生成 (image generation)1.2 对话(chat)1.3 中文纠错 (Chinese Spelling Correct)1.4 关键词提取 &#xff08;keyword extract)1.5 抽取文本向量 (Embedding)1.6 微调 (fine tune) 2 如何写好prompt2.1分类任务2.2 归纳总结3.3 翻译2.4 API接口…

myChat - 第三方ChatGPT原生客户端,支持win和mac系统

前言 可能你没体验过 ChatGPT&#xff0c;但肯定听说过。苦于高高的围墙&#xff0c;无法便捷的使用 ChatGPT。那你就不能错过 myChat &#xff0c;一款第三方 ChatGPT 原生客户端。基于 OpenAI 提供的 ChatGPT 同款模型 GPT-3.5&#xff0c;可达到与 ChatGPT 类似的效果&…

ChatGPT APP来了,还可以直接订阅Plus账号,操作流程都这篇里面

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 OpenAI宣布推出聊天机器人ChatGPT的APP&#xff0c;目前已上架苹果App Store&#xf…

如何在iPhone上用ChatGPT替换Siri

To use ChatGPT with Siri on an iPhone or iPad, get an OpenAI API key and download the ChatGPT Siri shortcut. Enter your API key in the shortcut setup and select the GPT model you want to use, then hit “Add Shortcut.” Trigger the shortcut manually first t…

手把手教你做一个 ChatGPT !丝滑小白版,只需一张单卡 GPU,轻松开启个性化训练!...

大家好&#xff0c;我是贺同学。 一直以来密切关注 ChatGPT 的趋势&#xff0c;最近相关的话题可谓是热度不减&#xff0c;虽然从事互联网行业&#xff0c;但一直对 LLM 相关领域关注较少。 最近的 ChatGPT 的火热&#xff0c;让我对 LLM 相关开源社区也关注了起来&#xff0c;…

调戏chatGPT(一)玩个猜数字游戏

最近chatGPT火得不要不要的&#xff0c;本着热情拥抱新生事物的原则&#xff0c;我也去测试了一下&#xff0c;发现这货果然很智能&#xff0c;我们是不是已经处在AI技术革命性突破的前夜了呢。 chatGPT的功能远远不止聊天&#xff0c;所以我用一个专栏来展示一下&#xff0c;…

ChatGPT角色扮演,你会几个?!

ChatGPT 一款由OpenAI训练的大型语言模型&#xff0c;能够和你进行任何领域的对话。 只要你给出提示或提出问题&#xff0c;它就可以生成你想要的东西。 上面只是列了一部分&#xff0c;但是好的答案&#xff0c;需要好的提示词&#xff0c;也就是Prompts 国外很多大厂已经在抢…

ChatGPT设计的游戏火了!玩法代码一力搞定,自称「原创」却被指:抄袭了

鱼羊 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT&#xff0c;现在多了一重“游戏制作人”的身份。 不仅游戏玩法由它设计&#xff0c;连游戏代码和网页&#xff0c;也全部由ChatGPT搞定。 游戏界面长这样&#xff1a; ChatGPT还亲自给这个小游戏取了个名字&#xff1a;Sumplet…