阿里通义千问AI模型调用SEE响应输出

<?php

//失败:{"code":"InvalidParameter","message":"Model not exist.","request_id":"7456c1f4-6261-9b4a-a037-e2f752a3ab56"}
//成功:{"output":{"choices":[{"message":{"content":"创建","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":11,"input_tokens":10,"output_tokens":1},"request_id":"e44ed988-45f2-9c6f-9611-6db897243493"}
qianwen();

function qianwen(){
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache');
    header('X-Accel-Buffering: no');
    header('Connection: keep-alive');
    set_time_limit(0);
    ob_end_clean();
    ob_implicit_flush(1);
    $openai_api_key = 'sk-********************';//替换为自己的api_key
    $url = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation';
    $headers = [
        'Authorization: Bearer ' . $openai_api_key,
        'Content-Type: application/json',
        'X-DashScope-SSE: enable'
    ];
    $params =  [
        'model' => 'qwen-max',
        'input' => ['messages' => []],
        'parameters' => [
            'result_format'=>'message',
            'incremental_output'=>true
        ],
    ];
    $params['input']['messages'][] = [
        'role' => 'user',
        'content' => '生成劳动合同'
    ];

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//有时候希望返回的内容作为变量储存,而不是直接输出。这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true。
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);//设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)。
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//curl_exec()获取的信息以文件流的形式返回,而不是直接输出
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) {
          $res = substr(explode("\n",$data)[3],5);
          $res = json_decode($res,true);
          if($res['output']){
              echo $res['output']['choices'][0]['message']['content'];
          }else{
              echo $res['message'];
          }
//        echo $data;
        return strlen($data);
    });
    curl_exec($ch);
    curl_close($ch);
}

 

posted @ 2024-06-29 14:26  流浪2024  阅读(65)  评论(0编辑  收藏  举报