php对接讯飞星火认知大模型SparkDesk的Web API示例代码

最近我在给客户开发科大讯飞的星火认知大模型SparkDesk,踩过一些坑,网上几乎搜不到PHP的demo代码,这里模板兔给出以下成果代码供大家参考。

首先,sparkdesk的接口需要使用到websocket,所以我们需要先安装websocket,使用composer在网站根目录安装:

composer require textalk/websocket

然后就是写php代码:

<?php

require __DIR__.'/vendor/autoload.php';

use WebSocket\Client;

class api
{

/**
* 调用科大讯飞星火认知模型
* @param $params
* @return array
*/
public function sendMsg($params)
{
$prompt = $params['prompt'];
//获取科大讯飞参数
$app_id = $params['APPID'];
$api_key = $params['APIKEY'];
$api_secret = $params['APISecret'];
//拼接链接
$url = $this->createUrl($api_key, $api_secret);

$client = new Client($url);
//拼接要发送的信息
$message = $this->createMsg($app_id, $prompt);
try {
$client->send(json_encode($message, true));
$response = $client->receive();

$response_arr = json_decode($response, true);
// 科达讯飞会分多次发送消息
do {
if ($response_arr['header']['code'] == '0') {
echo 'data: '.$response."\n\n"; //转成EventSource的输出格式
}else{
echo '[error]'.$response_arr['header']['message'];
break;
}

$content = $response_arr['payload']['choices']['text'][0]['content'];

if ($response_arr['header']['status'] == 2) {
echo 'data: [DONE]'."\n\n";
break;
}
//继续接收消息
$response = $client->receive();
$response_arr = json_decode($response, true);
} while (true);
/*return [
'code' => 0,
'msg' => '输出成功',
];*/
} catch (Exception $e) {
/*return [
'code' => -1,
'msg' => $e->getMessage(),
];*/
} finally {
$client->close();
}
}

/**
* 拼接签名
* @param $api_key
* @param $api_secret
* @param $time
* @return string
*/
private function sign($api_key, $api_secret, $time)
{
$signature_origin = 'host: spark-api.xf-yun.com' . "\n";
$signature_origin .= 'date: ' . $time . "\n";
$signature_origin .= 'GET /v1.1/chat HTTP/1.1';
$signature_sha = hash_hmac('sha256', $signature_origin, $api_secret, true);
$signature_sha = base64_encode($signature_sha);
$authorization_origin = 'api_key="' . $api_key . '", algorithm="hmac-sha256", ';
$authorization_origin .= 'headers="host date request-line", signature="' . $signature_sha . '"';
$authorization = base64_encode($authorization_origin);
return $authorization;
}

/**
* 生成Url
* @param $api_key
* @param $api_secret
* @return string
*/
private function createUrl($api_key, $api_secret)
{
$url = 'wss://spark-api.xf-yun.com/v1.1/chat';
$time = gmdate('D, d M Y H:i:s') . ' GMT';
$authorization = $this->sign($api_key, $api_secret, $time);
$url .= '?' . 'authorization=' . $authorization . '&date=' . urlencode($time) . '&host=spark-api.xf-yun.com';
return $url;
}

/**
* 生成要发送的消息体
* @param $app_id
* @param $speed
* @param $volume
* @param $pitch
* @param $audio_content
* @return array
*/
private function createMsg($app_id, $prompt)
{
return [
'header' => [
'app_id' => $app_id,
],
'parameter' => [
"chat"=> [
"domain"=> "general",
"temperature"=> 0.5,
"max_tokens"=> 1000, 
]
],
'payload' => [
"message"=> [
"text"=> [
["role"=> "user", "content"=> $prompt]
]
]
],
];
}
}


header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
header("X-Accel-Buffering: no");
header('Connection: keep-alive');

$params = array(
"prompt"=>"你好",
"APPID"=>"",
"APIKEY"=>"",
"APISecret"=>""
);

$test = new api();

$test->sendMsg($params);

我把接口输出的流转成EventSource的输出格式,这样客户端方便对接,毕竟之前对接过GPT,这样来讲切换会更容易些。

最后我们再通过客户端js来输出数据,js代码这里就不多赘述了。

原文:https://www.mobantu.com/9976.html

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
认知模型应用到知识图谱中,可以实现知识图谱的智能化和语义理解能力的提升。以下是一种可能的实施方法: 1. 数据准备:首先,需要构建一个完善的知识图谱,包括实体、属性和关系。可以通过爬取互联网上的数据、整理公开的数据集等方式进行构建。同时,对知识图谱进行清洗和预处理,确保数据的质量和一致性。 2. 知识图谱与大模型对接:将认知模型与知识图谱进行对接,可以通过训练模型来实现。首先,将知识图谱中的实体、属性和关系转换为模型可以理解的输入表示,比如向量或者文本形式。然后,利用这些输入表示训练大模型,使其能够理解和推理知识图谱中的信息。 3. 语义理解与推理:利用认知模型对知识图谱进行语义理解和推理。通过输入一个问题或者查询,大模型可以基于知识图谱中的信息进行语义理解,并给出相应的回答或结果。模型可以利用知识图谱中的实体、属性和关系进行推理,提供更准确和完整的回答。 4. 模型优化和迭代:根据实际应用的需求和反馈,对大模型进行优化和迭代。可以通过增加更多的训练数据、调整模型超参数、优化模型架构等方式来提升模型的性能和效果。 通过将认知模型与知识图谱相结合,可以充分利用大模型的语义理解和推理能力,提升知识图谱的智能化水平,为用户提供更准确和全面的信息服务。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值