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

通义千问接入进阶:流式、文件、图片、上下文

通义千问接入SSE

接入流式对话上下文对话图片对话文件对话

上篇文章有很多小伙伴再问:开启了流式(SSE)如何以API的形式返回数据呢?

这篇文章就来给大家解惑。

实现过程

如何生成key和模型类型请翻找之前的文章,这里就不一一讲述了,直接上代码

流式问答 上下文问答 千问long文件问答

php 代码封装

  /*** qwlong流式输出* @param $message* @param $fileId* @return void*/public function dashChat($message, $fileId=null, $messageList=null){try {$api_key = env("QwLongKey","输入自己的key");$url = env("QwLongUrl") ?? 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions';$data = ['model' => 'qwen-long','messages' => [['role' => 'system','content' => 'You are a helpful assistant.'],],'stream' => true];//可以根据逻辑传入上下文问答if ($messageList) {foreach ($messageList as $val){if ($val->type == 2){$data['messages'][] =  ['role' => 'system','content' => 'fileid://' . $val->file_id];} else {$data['messages'][] =['role' => 'user','content' => $val->question];$data['messages'][] =['role' => 'assistant','content' => $val->answer];}}}//文件回答 需要先把文件传到阿里云接口 将返回的文件id传入即可if ($fileId){$data['messages'][] =  ['role' => 'system','content' => 'fileid://' . $fileId];}$data['messages'][] =  ['role' => 'user','content' => $message];// 创建一个变量来存储流式传输的数据$response = '';$ch = curl_init($url);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $api_key,'Content-Type: application/json']);curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($curl, $data) use (&$response) {//$resData = json_decode($data);$result = processStreamedData($data);$response .= $result;//流式信息打印echo $result;ob_flush();flush();return strlen($data);});curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 执行请求$success = curl_exec($ch);// 检查是否有错误发生if (!$success) {echo "data: {\"error\": \"" . curl_error($ch) . "\"}\n\n";ob_flush();flush();}curl_close($ch);return $response;} catch (\Exception $exception) {echo "data: {\"error\": \"服务器错误: " . $exception->getMessage() . "\"}\n\n";ob_flush();flush();}}

流式信息返回

public function gainFlow(Request $request){$response = new StreamedResponse(function (){//发起会话$result = $this->dashChat('输入需要提问的问题');});//设置流式返回的header头$response->headers->set('Content-Type', 'text/event-stream');$response->headers->set('Cache-Control', 'no-cache');$response->headers->set('Connection', 'keep-alive');$response->headers->set('X-Accel-Buffering', 'no');return $response;}

这样我们就实现流式回答

返回结果截图

结论

根据上文可以实现类似于 chatgpt 和通义千问一样的流式对话

并且支持上下文问答文件问答图片问答等操作

– 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名

相关文章:

  • BAT批处理运行项目
  • 微信小程序毕业设计-社区门诊管理系统项目开发实战(附源码+论文)
  • C语言单链表的算法之删除节点
  • nginx的匹配及重定向
  • linux配置qqbot(Mirai+Alicebot)
  • 企业搭建知识库:解锁无限潜力的钥匙
  • Hadoop页面报错Permission denied: user=dr.who, access....
  • 详细分析Spring Boot 数据源配置的基本知识(附配置)
  • [C++初阶]vector的初步理解
  • 7.1作业6
  • vector与list的简单介绍
  • 收银系统源码-营销活动-幸运抽奖
  • SpringMVC(1)——入门程序+流程分析
  • MAX98357、MAX98357A、MAX98357B小巧、低成本、PCM D类IIS放大器,具有AB类性能中文说明规格书
  • 使用任意电脑通过内网穿透生成的公网地址远程SSH连接本地Windows电脑
  • Android框架之Volley
  • Angular4 模板式表单用法以及验证
  • JAVA SE 6 GC调优笔记
  • JavaScript 基本功--面试宝典
  • js ES6 求数组的交集,并集,还有差集
  • ng6--错误信息小结(持续更新)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • npx命令介绍
  • windows下如何用phpstorm同步测试服务器
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 简单实现一个textarea自适应高度
  • 聊聊directory traversal attack
  • 学习笔记TF060:图像语音结合,看图说话
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • const的用法,特别是用在函数前面与后面的区别
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #{} 和 ${}区别
  • #162 (Div. 2)
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (备忘)Java Map 遍历
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET委托:一个关于C#的睡前故事
  • /etc/motd and /etc/issue
  • [12] 使用 CUDA 加速排序算法
  • [20160807][系统设计的三次迭代]
  • [Angular 基础] - 指令(directives)