php调用deepseek接口api并流式输出

 1.注册deepseek并新建密钥

2 php服务端代码

$json = file_get_contents('php://input');
$jsonData = json_decode($json, true);
$datas=  ['model'=>'deepseek-chat',
		  'messages'=>[
			['role'=>'user','content'=>$jsonData['content']]
		  ],
		  'stream'=>true
		 ];
send('https://api.deepseek.com/chat/completions',$datas,'handleResponseData');
function send(string $url,$postdata,callable $callback){
	$curl = curl_init();
 
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 返回结果而不是直接输出
	 
	$headers = [
		"Content-Type: application/json", // 设置内容类型为JSON
		"Authorization: Bearer sk-69**************9d" // 设置认证头信息,例如Bearer Token
	];
	curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // 设置头信息
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
	curl_setopt($curl, CURLOPT_POST
要使用 Deepseek API 进行流式输出,在 PHP 中可以通过以下步骤实现。 ### 1. 发送请求 在 PHP调用 Deepseek API 并开启流式输出,需要在请求中设置 `stream` 参数为 `true`。以下是一个简单的示例代码: ```php <?php // 设置 API 请求的 URL $url = 'https://api.deepseek.com/v1/chat/completions'; // 设置请求头 $headers = [ 'Content-Type: application/json', 'Authorization: Bearer YOUR_API_KEY' // 替换为你的实际 API 密钥 ]; // 设置请求体 $data = [ "model" => "deepseek-chat", "messages" => [ [ "role" => "user", "content" => "你的问题内容" ] ], "stream" => true // 开启流式输出 ]; // 将请求体转换为 JSON 格 $jsonData = json_encode($data); // 初始化 cURL 会话 $ch = curl_init($url); // 设置 cURL 选项 curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) { // 处理流式响应数据 // 正则匹配提取数据 if (preg_match('/^data: (.*)$/m', $data, $matches)) { $jsonData = json_decode($matches[1], true); if ($jsonData && isset($jsonData['choices'][0]['delta']['content'])) { echo $jsonData['choices'][0]['delta']['content']; } } return strlen($data); }); // 执行 cURL 请求 curl_exec($ch); // 关闭 cURL 会话 curl_close($ch); ?> ``` ### 2. 处理响应 Deepseek API 流式输出的响应是一系列以 `data:` 开头的块,每个块包含部分响应内容。需要使用正则表达提取 `data:` 后面的 JSON 数据,然后解析 JSON 数据,提取所需的内容。从完整的结构来看,所需提取的响应数据位于每一个 chunk 中的 `choices[0].delta.content` [^1][^2]。 ### 3. 前端处理 前端处理流式响应报文时,难点在于处理这种分块的数据。可以使用 JavaScript 的 `EventSource` 对象来处理流式响应。以下是一个简单的前端示例代码: ```javascript // 创建 EventSource 对象 const eventSource = new EventSource('your_php_script.php'); // 监听 message 事件 eventSource.onmessage = function (event) { // 解析响应数据 const data = JSON.parse(event.data); if (data.choices && data.choices[0] && data.choices[0].delta && data.choices[0].delta.content) { // 处理提取到的内容 const content = data.choices[0].delta.content; // 将内容显示在页面上 const outputElement = document.getElementById('output'); outputElement.textContent += content; } }; // 监听错误事件 eventSource.onerror = function (error) { console.error('EventSource failed:', error); eventSource.close(); }; ``` ### 4. 注意事项 - 确保你的 API 密钥正确,并且具有访问 Deepseek API 的权限。 - 处理流式响应时,需要注意数据的完整性和错误处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿John

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值