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

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

通义千问接入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;
    }

这样我们就实现流式回答

返回结果截图

image.png

结论

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

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



相关文章
|
2月前
|
安全 机器人 API
AppFlow通义千问机器人支持上下文会话
在最新升级的AppFlow中,通义千问对话功能现已支持上下文保留,使对话体验更加流畅。用户可通过配置AppFlow连接流,结合钉钉机器人实现与通义千问的交互。只需几步简单设置,即可在群聊中@机器人进行连续对话。此外,提供了两种创建钉钉机器人的方法:使用Outgoing机制或钉钉开放平台,方便不同需求的用户进行集成。通过这些步骤,您可以轻松实现与通义千问的高效沟通。
|
6月前
|
自然语言处理 搜索推荐 API
通义千问API:用4行代码对话大模型
本章将通过一个简单的例子,让你快速进入到通义千问大模型应用开发的世界。
通义千问API:用4行代码对话大模型
|
6月前
|
并行计算 PyTorch 算法框架/工具
社区供稿 | 本地部署通义千问大模型做RAG验证
这篇文章中,我们通过将模搭社区开源的大模型部署到本地,并实现简单的对话和RAG。
|
2月前
|
人工智能 开发者
通义千问三款主力模型再降价,最高降幅85%
通义千问三款主力模型再降价,最高降幅85%
559 12
通义千问三款主力模型再降价,最高降幅85%
|
2月前
|
API 云栖大会
通义千问升级旗舰模型Qwen-Max,性能接近GPT-4o
通义旗舰模型Qwen-Max全方位升级,性能接近GPT-4o
942 11
|
7天前
通义千问—7B模型
在交互式问答中,模型对历史信息的记忆能力较弱。例如,在询问“辽宁省会在哪儿”之后,如果不持续提及“沈阳”,模型将无法记住该城市,导致回答变得空泛。
|
4月前
|
JSON API 定位技术
AppFlow:让通义千问大模型调用你的任意API
在阿里云AppFlow中,通过自定义插件连接器可使通义千问获取特定功能,如旅游规划或投资辅助。登录AppFlow控制台,选择“自定义连接器”,上传图标,设定基本信息,选“插件连接器”。支持Basic、Bearer Token、AppCode等鉴权。精确配置API名称、描述及请求参数,确保模型调用准确。参考示例curl命令调整参数结构,填写响应体帮助模型解析。发布后,在模型Agent搭建中选用自定义连接器增强功能。
|
6月前
|
弹性计算 前端开发 Java
通义千问API:让大模型写代码和跑代码
基于前面三章的铺垫,本章我们将展示大模型Agent的强大能力。我们不仅要实现让大模型同时使用多种查询工具,还要实现让大模型能查询天气情况,最后让大模型自己写代码来查询天气情况。
通义千问API:让大模型写代码和跑代码
|
6月前
|
XML 搜索推荐 API
通义千问API:让大模型使用各种工具
本章我们将通过一个简单的例子,揭示基于LangChain的Agent开发的秘密,从而了解如何扩展大模型的能力。
通义千问API:让大模型使用各种工具
|
4月前
|
人工智能