佛系程序员
首页
栏目
标签
归档
关于
友链
佛系程序员
首页
栏目
标签
归档
友链
关于
PHP 调用 DeepSeek API 完整指南
chatGPT
兴趣爱好
发布日期: 2025-02-04 16:27:25
喜欢量: 1 个
阅读次数:
265
PHP 调用 DeepSeek API 完整指南
## 简介 本文将介绍如何使用 PHP 调用 DeepSeek API,实现流式对话并保存对话记录。PHP 版本使用面向对象的方式实现,代码结构清晰,易于维护。 ## 1. 环境准备 ### 1.1 系统要求 - PHP 7.0 或更高版本 - PHP cURL 扩展 - 文件写入权限 ### 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 ? “\n[$timestamp] Question:\n$content\n\n[$timestamp] Answer:\n” : $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, “\n”)) !== 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 “\n请输入您的问题 (输入 q 退出): “; $question = trim(fgets(STDIN)); if ($question === ‘q’) { echo “程序已退出\n”; 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 “\n————————————————————\n”; $this->saveToFile(“\n————————————————————\n”); } catch (Exception $e) { $error_msg = “请求错误: “ . $e->getMessage() . “\n”; echo $error_msg; $this->saveToFile($error_msg); } finally { curl_close($ch); } } } } // 运行程序 $chatbot = new DeepSeekChat(); $chatbot->chat(); ``` ## **3. 代码详解** 3.1 类结构 - `DeepSeekChat`: 主类,封装所有功能 - `construct`: 构造函数,初始化日志文件 - `saveToFile`: 保存对话记录 - `processStreamingResponse`: 处理流式响应 - `chat`: 主对话循环 ### 3.2 关键功能 #### 文件操作 ``` private function saveToFile($content, $isQuestion = false) { $timestamp = date(‘Y-m-d H:i:s’); $text = $isQuestion ? “\n[$timestamp] Question:\n$content\n\n[$timestamp] Answer:\n” : $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 参数说明 - `model`: 使用的模型名称 - `stream`: 启用流式输出 - `max_tokens`: 最大输出长度 (2048) - `temperature`: 控制随机性 (0.7) - `top_p`, `top_k`: 采样参数 - `frequency_penalty`: 重复惩罚系数 ## 4. 错误处理 代码包含完整的错误处理机制: - cURL 错误检查 - JSON 解析错误处理 - 文件操作错误处理 - 异常捕获和日志记录 ## 5. 使用方法 ### 5.1 修改配置 在代码中替换 `YOUR_API_KEY` 为你的实际 API Key。 ### 5.2 运行程序 ``` php main.php ``` ### 5.3 交互方式 1. 输入问题进行对话 2. 输入 ‘q’ 退出程序 3. 查看 conversation.txt 获取对话记录 ## 6. 性能优化建议 1. 内存管理 - 使用适当的缓冲区大小 - 及时清理变量 - 避免大量数据积累 2. 文件操作 - 使用文件锁防止并发写入 - 定期清理日志文件 - 考虑使用数据库存储 3. 网络请求 - 设置合理的超时时间 - 使用持久连接 - 处理网络异常 ## 总结 PHP 版本的 DeepSeek API 实现采用面向对象方式,代码结构清晰,易于维护和扩展。通过 cURL 实现流式处理,提供了良好的交互体验。 ## 立即体验 想要体验 DeepSeek 的强大功能?现在就开始吧! 快来体验 DeepSeek:https://cloud.siliconflow.cn/i/7qQzHGZs 快来体验 DeepSeek:https://cloud.siliconflow.cn/i/7qQzHGZs 快来体验 DeepSeek:https://cloud.siliconflow.cn/i/7qQzHGZs
文章作者:
yyii
文章链接:
https://amtb.info/show/MTMw
版权声明:
本博客所有文章除特別声明外,转载请注明来源
佛系程序员
!
分享:
搜索