在当今科技飞速发展的时代,人工智能(AI)已经成为各个领域的热门话题,其应用范围广泛且具有巨大的潜力。许多开发者都希望借助各大平台的 AI 能力来丰富自己的项目。今天,我们就来详细讲解如何使用 PHP 进行百度、阿里、深度求索以及豆包的 API 对接。
首先,对于百度 API,需要获取相应的 API Key 和 Secret Key,通过这两个密钥获取访问令牌,然后使用令牌与百度 AI 的服务进行通信。在 PHP 中,可以利用 CURL 函数发送 HTTP 请求,将所需的数据以特定格式传递给百度 API,并接收处理后的结果。
阿里 API 对接也有类似的步骤,要先在阿里云平台注册账号并开通相关服务,拿到对应的访问凭证。之后使用 PHP 代码将请求参数进行编码,发送请求到阿里的 API 接口。
深度求索和豆包的 API 对接同样要先获取访问权限,再按照它们各自的文档要求,构建合适的请求参数,通过 PHP 代码实现数据的交互。
掌握这些 API 的对接方法,能让开发者在 PHP 项目中轻松集成强大的 AI 功能。下面开始上代码了哈:
- //构建AI对话上下文
- function chataicontext($context, $message) {
- $postData = [];
- if (!empty($context)) {
- $context = array_slice($context, -2);
- foreach ($context as $messageItem) {
- $userContent = str_replace("\n", "\\n", $messageItem[0]);
- if (!empty($userContent)) {
- $postData['messages'][] = ['role' => 'user', 'content' => $userContent];
- }
- $systemContent = str_replace("\n", "\\n", $messageItem[1]);
- if (!empty($systemContent)) {
- $postData['messages'][] = ['role' => 'system', 'content' => $systemContent];
- }
- }
- }
- $userMessage = RepPostStr($message);
- if (!empty($userMessage)) {
- $postData['messages'][] = ['role' => 'user', 'content' => $userMessage];
- }
- return $postData;
- }
- //curl封装(post与get)
- function CurlRequest($postData = null, $method = 'POST', $appkey = null, $url = null) {
- $ch = curl_init();
- $headers = array();
- $headers[] = "Content-Type: application/json";
- if (isset($appkey)) {
- $headers[] = "X-DashScope-SSE: disable";
- $headers[] = "Authorization: Bearer " . $appkey;
- }
- if ($method === 'GET') {
- if ($postData) {
- $queryString = http_build_query($postData);
- $url = $url . (strpos($url, '?') === false ? '?' : '&') . $queryString;
- }
- curl_setopt($ch, CURLOPT_HTTPGET, true);
- }elseif ($method === 'POST') {
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
- } else {
- return array('error' => '不支持的请求方法: ' . $method);
- }
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
- $response = curl_exec($ch);
- if (curl_errno($ch)) {
- $error = curl_error($ch);
- curl_close($ch);
- return array('error' => $error);
- }
- curl_close($ch);
- return $response;
- }
get请求参数字段仍然是enews。仅供参考。注意前端AJAX请求的时候哈 我这个是已经支持返回的txt文本了 不是JSON。
- $message=RepPostStr($_POST['message']);
- $context = isset($_SESSION['context']) ? $_SESSION['context'] : [];
- switch ($_GET['enews']) {
- case 'baidu':
- // 百度
- $post_tokendata = [
- 'grant_type' => 'client_credentials',
- 'client_id' => 'hC6gfhtgyhyaQeXZ6pNL0',
- 'client_secret' => 'kGZcwuWgfhyrthytp5ArcZ5GwOSEqQ'
- ];
- $query_str = http_build_query($post_tokendata);
- $tokendata = CurlRequest($query_str, 'POST', '', 'https://aip.baidubce.com/oauth/2.0/token');
- $tokendata = json_decode($tokendata, true);
- $baiduapiurl = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=".$tokendata['access_token'];
- $postData = ["top_p" => 0.9, "temperature" => 0.9];
- $postData = array_merge($postData, chataicontext($context, $message));
- // 百度角色调整也是个奇葩非不跟大家保持一致
- foreach ($postData['messages'] as &$msg) {
- if ($msg['role'] ==='system') {
- $msg['role'] = 'assistant';
- }
- }
- unset($msg);
- $postData = json_encode($postData);
- $response = CurlRequest($postData, 'POST', '', $baiduapiurl);
- $response = json_decode($response, true);
- if (isset($response['error_msg'])) {
- $aierrormsg = $response['error_msg'];
- } else {
- $text = $response['result'];
- }
- break;
- case 'aliyun':
- // 阿里云
- $postData = ["model" => 'qwen-turbo', "enable_search" => true];
- $postData = array_merge($postData, chataicontext($context, $message));
- $postData = json_encode($postData);
- $response = CurlRequest($postData, 'POST', 'sk-97648484845d4d4793b974f091e0dbb746', 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions');
- $response = json_decode($response, true);
- if (isset($response['error']['message'])) {
- $aierrormsg = $response['error']['message'];
- } else {
- $text = $response['choices'][0]['message']['content'];
- }
- break;
- case 'deepseek':
- // 深度求索
- $postData = ["model" => 'deepseek-chat', "enable_search" => true];
- $postData = array_merge($postData, chataicontext($context, $message));
- $postData = json_encode($postData);
- $response = CurlRequest($postData, 'POST', 'sk-ea9gffyufyuu1b0cb8b97c9956ead', 'https://api.deepseek.com/v1/chat/completions');
- $response = json_decode($response, true);
- if (isset($response['error']['message'])) {
- $aierrormsg = $response['error']['message'];
- } else {
- $text = $response['choices'][0]['message']['content'];
- }
- break;
- default:
- // 豆包
- $postData = ["model" => 'ep-20241215230414-l9zv8', "enable_search" => true];
- $postData = array_merge($postData, chataicontext($context, $message));
- $postData = json_encode($postData);
- $response = CurlRequest($postData, 'POST', '3668adyhjggka6d-09634418b9a3', 'https://ark.cn-beijing.volces.com/api/v1/chat/completions');
- $response = json_decode($response, true);
- if (isset($response['error']['message'])) {
- $aierrormsg = $response['error']['message'];
- } else {
- $text = $response['choices'][0]['message']['content'];
- }
- break;
- }