如何在PHP中对接openAI接口,PHP创建AI会话思路以及代码讲解【附源码】
admin 阅读: 2024-03-16
后台-插件-广告管理-内容页头部广告(手机) |
如何在PHP中调用OpenAI API
- 1、 PHP调用OpenAI API的方法
-
- 1.如何注册 openAI 以及使用
- 2.php 调用接口 (symfony框架)
-
- php端代码:
- 前端 HTML 代码:
- 用户 输入问题并发送的代码,请看后续...
1、 PHP调用OpenAI API的方法
1.如何注册 openAI 以及使用
https://platform.openai.com/account/api-keys 在这个地址进行注册,但是需要翻墙,可自己查找国内的试用地址。就不多赘述…
2.php 调用接口 (symfony框架)
php端代码:
<?php namespace LdWxappPlugin\Api\Resource\Chatapi; use ApiBundle\Api\ApiRequest; use ApiBundle\Api\Resource\AbstractResource; use ApiBundle\Api\Annotation\ApiConf; use Ramsey\Uuid\Uuid; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; class Chatapi extends AbstractResource { public function add(ApiRequest $request): array { $uuid = $request->request->get('conversationId'); // 没有 uuid 就要新建会话,入库,有uuid 就直接打开 // 这里在页面上做了一个 显示隐藏效果 不刷新页面的情况下,关闭侧边窗口,元素移除屏幕 // 再次打开,有uuid ,直接让元素 移回原来的尺寸 'right','-1000px' 'right','0px' if(empty($uuid)){ // 这里用它来区分是 右侧侧边栏 还是 独立网页版 $display = $request->request->get('display',0); // 入库的会话名字 从侧边栏进来的是 默认对话,从网页进来的是 新建对话 $conversationName = $request->request->get('conversationName','默认对话'); // 课程 ID 和 课程类型 这里可根据自己的需求传递不同参数,这个课程ID 是为了跟踪 根据哪一个课程,点击聊天窗口的 $sourceId = $request->request->get('sourceId'); $sourceType = $request->request->get('sourceType'); if (empty($sourceId) || empty($sourceType)){ throw new BadRequestHttpException('sourceId或sourceType不能为空'); } $currentUser = $this->getCurrentUser(); // 生成 uuid ,uuid 是后端生成好,返回给前端,前端卸载 隐藏域里面,每次请求,用隐藏域里面的去做判断。 $random = 'lingdai'.microtime(true).rand(1000,9999); $conversationId = Uuid::uuid5(Uuid::NAMESPACE_OID,$random)->toString(); $goods = $this->findGoodsByTargetIdAndType($sourceId,$sourceType); $conversationData = [ 'conversationId' => $conversationId, 'conversationName' => $conversationName, 'userId' => $currentUser->getId(), 'display' => $display, 'goodsId' => $goods['id'], 'createdTime' => time() ]; $insertResult = $this->getChatApiService()->createConversation($conversationData); if ($insertResult){ // role : 返回给前端的默认对话 可根据情况自行设置 return [ 'status'=> 'success', 'message'=> '创建成功', 'code'=> 1, 'data'=> [ 'conversationId'=> $conversationId, 'conversationName'=> $conversationName, 'aiDocId'=>$goods['aiDocId'], 'id'=>$insertResult['id'], 'display'=>$insertResult['display'], 'goodsId'=>$insertResult['goodsId'], 'role' => [ [ 'role' => 'AI', 'content' => "Hi:你好,哈哈哈哈哈".''.'123123123' ] ], ] ]; } else { return ['status'=> 'fail','message'=> '创建失败','code'=> 0,'data'=> []]; } }else{ return []; } } // 根据 传过来的 课程ID 和 课程type 查询数据库,查到对应的商品ID 数据 public function findGoodsByTargetIdAndType($sourceId,$sourceType) { if ($sourceType == "goods"){ $goods = $this->getGoodsService()->getGoods($sourceId); return $goods; } $product = $this->getProductService()->getProductByTargetIdAndType($sourceId, $sourceType); $goods = $this->getGoodsService()->getGoodsByProductId($product['id']); return $goods; } // 新建对话的 入库完成! //http://www.lingdaipc.win/lddev.php/chat/pcAI/index?chatId=684&uuid=3b9aad06-356e-5534-a8bf-4a98a95a7497&goodsId=3021 // 独立的 PC 网页版 查询方法 根据上面 url中 传递的参数 ,查询对应的 chatId的 的对话 public function search(ApiRequest $request) { // 判断 ID 是否存在,不存在 是独立出来的窗口 存在是跳转过来的 $params = $request->query->all(); $conditions = $this->filterParams($params); $conditions['display'] = 1; $currentUser = $this->getCurrentUser(); $conditions['userIds'] = $currentUser['id']; list($offset, $limit) = $this->getOffsetAndLimit($request); $conversationTotal = $this->getChatApiService()->count($conditions); $searchResult = $this->getChatApiService()思路:前端通过一个图标入口,点击后 发送请求,创建一个会话(也就是聊天室),并且把创建的这个会话 入库。并且后端返回一个入库生成的uuid,和默认的消息会话返回给前端,前端暂时存放在 input 隐藏域中,以备后续使用。此时完成一个会话的连接和创建。
ps:前端发送请求前,需要做一些校验,$this->verifySend(); 验证是否登录,和发送请求的频率
直接上代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |