PHP调用DeepSeek API的完整指南 |
简介本文将介绍如何使用 PHP 调用 DeepSeek API,实现流式对话并保存对话记录 。PHP 版本使用面向对象的方式实现,代码结构清晰,易于维护 。 1. 环境准备1.1 系统要求
1.2 项目结构deepseek-project/ ├── main.php # 主程序 └── conversation.txt # 对话记录文件 2. 完整代码实现<?php class DeepSeekChat { private $url = 'https://api.siliconflow.cn/v1/chat/completions'; private $apiKey = 'YOUR_API_KEY'; // 替换为你的 API Key private $logFile = 'conversation.txt'; public function __construct() { // 确保日志文件存在且可写 if (!file_exists($this->logFile)) { touch($this->logFile); } } private function saveToFile($content, $isQuestion = false) { $timestamp = date('Y-m-d H:i:s'); $text = $isQuestion ? " [$timestamp] Question: $content [$timestamp] Answer: " : $content; file_put_contents($this->logFile, $text, FILE_APPEND); } private function processStreamingResponse($handle) { $buffer = ''; while (!feof($handle)) { $chunk = fread($handle, 1024); $buffer .= $chunk; // 处理缓冲区中的每一行 while (($pos = strpos($buffer, " ")) !== false) { $line = substr($buffer, 0, $pos); $buffer = substr($buffer, $pos + 1); if (strlen(trim($line)) > 0) { if (strpos($line, 'data: ') === 0) { $data = substr($line, 6); // 移除 "data: " 前缀 if ($data === '[DONE]') { continue; } $json = json_decode($data, true); if ($json && isset($json['choices'][0]['delta']['content'])) { $content = $json['choices'][0]['delta']['content']; echo $content; flush(); $this->saveToFile($content); } } } } } } public function chat() { while (true) { echo " 请输入您的问题 (输入 q 退出): "; $question = trim(fgets(STDIN)); if ($question === 'q') { echo "程序已退出 "; break; } // 保存问题 $this->saveToFile($question, true); // 准备请求数据 $data = [ 'model' => 'deepseek-ai/DeepSeek-V3', 'messages' => [ [ 'role' => 'user', 'content' => $question ] ], 'stream' => true, 'max_tokens' => 2048, 'temperature' => 0.7, 'top_p' => 0.7, 'top_k' => 50, 'frequency_penalty' => 0.5, 'n' => 1, 'response_format' => [ 'type' => 'text' ] ]; // 准备 cURL 请求 $ch = curl_init($this->url); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Bearer ' . $this->apiKey ], CURLOPT_WRITEFUNCTION => function($ch, $data) { echo $data; return strlen($data); } ]); try { // 发送请求并处理响应 $handle = curl_exec($ch); if (curl_errno($ch)) { throw new Exception(curl_error($ch)); } // 添加分隔符 echo " ---------------------------------------- "; $this->saveToFile(" ---------------------------------------- "); } catch (Exception $e) { $error_msg = "请求错误: " . $e->getMessage() . " "; echo $error_msg; $this->saveToFile($error_msg); } finally { curl_close($ch); } } } } // 运行程序 $chatbot = new DeepSeekChat(); $chatbot->chat(); 3. 代码详解3.1 类结构
3.2 关键功能文件操作private function saveToFile($content, $isQuestion = false) { $timestamp = date('Y-m-d H:i:s'); $text = $isQuestion ? " [$timestamp] Question: $content [$timestamp] Answer: " : $content; file_put_contents($this->logFile, $text, FILE_APPEND); } cURL 配置curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Bearer ' . $this->apiKey ] ]); 3.3 参数说明
4. 错误处理代码包含完整的错误处理机制:
5. 使用方法5.1 修改配置在代码中替换 5.2 运行程序php main.php 5.3 交互方式
6. 性能优化建议
总结PHP 版本的 DeepSeek API 实现采用面向对象方式,代码结构清晰,易于维护和扩展 。通过 cURL 实现流式处理,提供了良好的交互体验 。 到此这篇关于PHP调用DeepSeek API的完整指南的文章就介绍到这了,更多相关PHP调用DeepSeek API内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |