智谱AI开放平台的SDK只提供了Python和Java版,其它语言比如PHP只能使用HTTP的方式去调用,这就需要自己去实现鉴权和请求的代码。
自己用PHP写了个小demo,先生成jwt token,再拿它发送会话请求。
<?php
public function zhipu_test()
{
$api_key = "your_api_key";
$api_key = explode(".", $api_key);
$header = array('alg' => 'HS256', 'sign_type' => 'SIGN');
$payload = array(
'api_key' => $api_key[0],
'exp' => time() * 1000 + 3600 * 1000,
'timestamp' => time() * 1000
);
// 把 header 转换为 JSON 字符串,然后进行 base64 编码
$header = base64_encode(json_encode($header));
// 把 payload 转换为 JSON 字符串,然后进行 base64 编码
$payload = base64_encode(json_encode($payload));
// 把一些在 URL 参数中可能会出错的字符替换掉
$header = str_replace(array('+', '/', '='), array('-', '_', ''), $header);
$payload = str_replace(array('+', '/', '='), array('-', '_', ''), $payload);
$secretKey = $api_key[1]; // 私钥
// 使用 HMAC SHA-256 根据 header 和 payload 生成一个签名
$signature = hash_hmac('sha256', $header . '.' . $payload, $secretKey, true);
// 把 signature 签名转换为 base64
$signature = base64_encode($signature);
// 把一些在 URL 参数中可能会出错的字符替换掉
$signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature);
// 拼接 JWT
$jwtStr = $header . '.' . $payload . '.' . $signature;
// 输出 JWT
var_dump($jwtStr);
// 准备请求数据
$data = [
"model" => "glm-4", // 填写需要调用的模型名称
"messages" => [
[
"role" => "user",
"content" => "我是雷军,are you ok?"
],
]
];
// 发送HTTP请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://open.bigmodel.cn/api/paas/v4/chat/completions");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"Authorization: Bearer {$jwtStr}"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
//输出错误码
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
var_dump($response);
}
更多用法参见官方文档 https://maas.aminer.cn/dev/api#http