php thinkphp6+uniap开发chatgpt问答

article/2025/4/20 3:34:41

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://chatgpt.dhexx.cn/article/L5mOdJoU.shtml

相关文章

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 中文调教指南:提供各个领域的角色提示词(prompts)及使用技巧,当然也有不正经指南

ChatGPT是一种基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型的聊天机器人&#xff0c;能够回答用户提出的问题和进行对话。它是由OpenAI开发的人工智能产品&#xff0c;具有自然语言处理和深度学习技术。 ChatGPT在日常的对话中&#xff0c;表现的非…

最近火热的ChatGPT,全民“调戏”ChatGPT

ChatGPT正在引发多方面的热议,一方面,不论是普通用户还是互联网巨头,都在关注ChatGPT的能力边界,并尝试做出更多探索;而另一方面,人们也好奇,人工智能是否会出错,它又是否可以取代人类生产力。不如先来看看本文的研究与解读。 最近,全世界都在热议ChatGPT。这款史上用…

我再谈谈ChatGPT

去年12月ChatGPT出来时我就写过一篇关于ChatGPT&#xff0c;今天我再漫谈一下。 &#xff08;1&#xff09;高质量数据源 我这段时间正在做一个重要研究&#xff0c;但是很不幸&#xff0c;中文互联网上假信息满天飞&#xff0c;有价值的数据都不公开&#xff0c;我唯一能依赖的…

苹果明年弃用高通基带/ 腾讯回应进军ChatGPT/ 百度首席战略官辞职…今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是2月28日星期二&#xff0c;又是元&#xff08;zheng&#xff09;气&#xff08;bu&#xff09;满&#xff08;kai&#xff09;满&#xff08;yan&#xff09;的一天。 科技圈最近都发生了哪些大事&#xff0…

剖析NLP历史,看chatGPT的发展

1、NLP历史演进 1.1 NLP有监督范式 ​ NLP里的有监督任务的范式&#xff0c;可以归纳成如下的样子。 输入是字词序列&#xff0c;中间一步关键的是语义表征&#xff0c;有了语义表征之后&#xff0c;然后交给下游的模型学习。所以预训练技术的发展&#xff0c;都是在围绕怎么…

微软再扔AI聊天画图炸弹!图文版ChatGPT诞生了

Datawhale干货 发布&#xff1a;Visual ChatGPT&#xff0c;来源&#xff1a;新智元 【导读】要说ChatGPT已经是核弹级的现象&#xff0c;那么微软发布的Visual ChatGPT可以称的上宇宙大爆炸。在视觉模型加持下的ChatGPT&#xff0c;聊天生图全拿捏了。 图文版ChatGPT诞生了&a…

ChatYuan元语AI: 类似ChatGPT功能型对话大模型 部署实践

个人使用感受 1.中英翻译超越了翻译软件,变成本地翻译最好软件了,回答英文时 有时单词之间没有空格 2.中文对话能基本理解意图,回答时会出现搜索式回答.相关内容,照抄网页相关内容原封不动显示出来,不精简提炼 3.不会做数学,简单23都不会 ,不然会更加强大 ChatYuan元语AI 元…

四天工作制究竟香不香;复旦发布类ChatGPT模型Moss;苹果上新348元省电保护膜 | EA周报...

EA周报 2023年2月24日 每个星期1分钟&#xff0c;元宝带你喝一杯IT人的浓缩咖啡&#xff0c;了解天下事、掌握IT核心技术。 周报看点 1、周鸿祎&#xff1a;ChatGPT可能两三年内就会产生自我意识威胁人类 2、余承东&#xff1a;华为没有必要下场造车&#xff0c;问界不会涉及 2…