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

news2024/11/19 4:16:28

通义千问接入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同名

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

远程控制电脑的4个方法,不受地域限制,探索未来办公的无限可能

在数字化浪潮席卷全球的今天,远程控制电脑已不再是科幻电影里的情节,而是我们触手可及的现实,是现代科技所赋予的真实能力。远程控制电脑进行办公已成为越来越多人的选择,不仅让生活更加便捷,还在一定程度上提高了工作…

java连接AD(Microsoft Active Directory)模拟用户登录认证

文章目录 一、背景二、页面效果三、代码LdapLoginRequest请求实体类Response返回结果MsgADTest测试类补充说明代码 四、认证结果认证成功认证失败 本人其他相关文章链接 一、背景 亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处&a…

洗地机品牌哪个最好用?硬核推荐五大实力爆款洗地机

在这个忙碌的时代,家就是我们放松的港湾,但要保持它的清洁与舒适常常很不容易。每天拖着疲惫的身体回家,还要面对地板上那些难缠的灰尘、污渍,真是非常让人头疼。不过,洗地机的出现就像是给家务清洁装上了智能引擎&…

14270-02G 同轴连接器

型号简介 14270-02G是Southwest Microwave的2.4 mm 同轴连接器。这款连接器连接器采用不锈钢、铍铜合金、黄铜合金和 ULTEM 1000 等高质量材料,可能具有更好的耐腐蚀性、导电性和机械强度。金镀层可以提供更低的接触电阻和更好的耐腐蚀性。 型号特点 电缆的中心导体…

NSSCTF-Web题目23(RCE-空格绕过)

目录 [SWPUCTF 2022 新生赛]webdog1__start 1、题目 2、知识点 3、思路 [FSCTF 2023]webshell是啥捏 4、题目 5、知识点 6、思路 [SWPUCTF 2022 新生赛]webdog1__start 1、题目 2、知识点 RCE、空格绕过,嵌套eval 3、思路 出现这个页面,没有其…

Linux系统部署MongoDB开源文档型数据库并实现无公网IP远程访问

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 💡 推荐 前些天发现了一个巨牛的人工智能学习网站&am…

ggrcs包4.0版本发布—重新对密度图宽度进行了设计

目前本人写的ggrcs包新的4.0版本已经在CRAN上线,目前支持逻辑回归(logistic回归)、cox回归和多元线性回归。 需要的可以使用代码安装 install.packages("ggrcs")如果原来安装了旧版本,重新在安装一次就可以升级到新版…

Android --- Service

出自于此,写得很清楚。关于Android Service真正的完全详解,你需要知道的一切_android service-CSDN博客 出自【zejian的博客】 什么是Service? Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。 服务可由其他应用组件…

AI技术在招聘行业的应用

大模型AI技术在招聘行业的应用正变得越来越广泛,以下是一些关键领域的应用实例。大模型AI技术在招聘行业的应用不仅提高了效率和精确度,还帮助企业在竞争激烈的人才市场中获得优势。随着技术的不断发展,预计AI将在招聘领域扮演更加重要的角色…

grpc-go客户端接口添加

【1】 proto相关文件同服务端,如已经生成,可以直接使用服务端的文件(包) 【2】新建一个目录“WHG_CLIENT”,目录下新建一个main.go文件 package mainimport ("context""log""grpc-go-maste…

小程序新版获取用户头像、昵称调整方案

目录 前言调整背景调整说明低版本兼容处理参考代码WXMLWXSSJS补充及优化图像上传Java版图像上传接口.Net版图像上传接口前言 调整背景 由于 PC/macOS 平台「头像昵称填写能力」存在兼容性问题,对于来自低于2.27.1版本的访问,小程序通过 wx.getUserProfile 接口将正常返回用户…

23.【C语言】循环结构之while

接第11篇 格式:while (表达式)//加括号代表如果表达式为真,执行循环 { } 根据需要,可以在代码块中加break;提前跳出循环(永久终止) 而continue;是跳出本次循环,进入while循环的判断部分,决定是…

c++ 设计模式 的课本范例(下)

(19) 桥接模式 Bridge,不是采用类继承,而是采用类组合,一个类的数据成员是类对象,来扩展类的功能。源码如下: class OS // 操作系统负责绘图 { public:virtual ~OS() {}virtual void draw(cha…

C++ thread线程库

thread库 std::thread 是 C 标准库中的一个类,用于管理和控制单个执行线程。线程允许程序并行执行多个函数,从而提高性能和响应速度。std::thread 类提供了一种便捷的方式来创建和操作线程。 1、用途 并行执行任务: 通过 std::thread&…

守护家庭的安全卫士:家用可燃气体探测器

在这个追求智能与安全并重的时代,每一个细微之处的防护都显得尤为重要,尤其是在我们最为依赖的家庭空间里。当谈及家居安全,燃气安全无疑占据着至关重要的位置。据统计,每年因燃气管老化、连接处松动等问题引发燃气泄漏的事故不在…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——4.预后相关外泌体基因确定单因素cox回归(2)

内容如下: 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的…

STM32-HAL-FATFS(文件系统)(没做完,stm32f103zet6(有大佬的可以在评论区说一下次板子为什么挂载失败了))

1STM32Cube配置 1-1配置时钟 1-2配置调试端口 1-3配置uart 1-4配置SDIO(注意参数)(其中他的初始化的异常函数给注释,SD卡文件写了) 配置了还要打开中断和DMA可在我的其他文章中看一样的 1-5配置FatFs (只改了图选中…

Unity 资源 之 Sweet Cakes Icon套装,110个高品质蛋糕图标分享

Sweet Cakes Icon 套装 - 为 Unity 开发者带来甜蜜惊喜 前言资源包内容领取兑换码 前言 亲爱的 Unity 开发者们,今天要向你们介绍一款令人心动的图标套装 - Sweet Cakes Icon。 Sweet Cakes Icon 套装包含了超过 110 种高品质的蛋糕和纸杯蛋糕图标,这无…

累积分布函数的一些性质证明

性质1: E [ X ] ∫ 0 ∞ ( 1 − F ( x ) ) d x − ∫ − ∞ 0 F ( x ) d x ( 1 ) E[X]\int_0^{\infty}(1-F(x))dx - \int_{-\infty}^0F(x)dx\quad (1) E[X]∫0∞​(1−F(x))dx−∫−∞0​F(x)dx(1) 证明: E [ X ] ∫ − ∞ ∞ x p ( x ) d x E[X] …

一个人的开发团队:前后端与调动AI

作为一名大数据开发者,我对 AI 的应用感兴趣,但平常都是处理数据,对应前后端代码不擅长,幸好有了 AI,在 AI 的帮助下能写出很多前后端代码了。 目录 前端开发后端开发调用AI整合前后端与AI 本文将通过一个简单的项目…