PHP 调用 DeepSeek API 完整指南

server/2025/2/9 1:30:51/

简介

本文将介绍如何使用 PHP 调用 DeepSeek API,实现流式对话并保存对话记录。PHP 版本使用面向对象的方式实现,代码结构清晰,易于维护。

1. 环境准备

1.1 系统要求

  • PHP 7.0 或更高版本
  • PHP cURL 扩展
  • 文件写入权限

1.2 项目结构

deepseek-project/
├── main.php          # 主程序
└── conversation.txt  # 对话记录文件

2. 完整代码实现

php"><?phpclass DeepSeekChat {private $url = 'https://api.siliconflow.cn/v1/chat/completions';private $apiKey = 'YOUR_API_KEY';  // 替换为你的 API Keyprivate $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 关键功能

文件操作
php">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 配置
php">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/vnCCfVaQ

快来体验 DeepSeek:https://cloud.siliconflow.cn/i/vnCCfVaQ

快来体验 DeepSeek:https://cloud.siliconflow.cn/i/vnCCfVaQ

更多资源

更多详细信息和最新更新,请访问我们的技术博客:
https://blog.csdn.net/hzether/article/details/145438717?sharetype=blogdetail&sharerId=145438717&sharerefer=PC&sharesource=hzether&spm=1011.2480.3001.8118


http://www.ppmy.cn/server/166078.html

相关文章

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 7

第07章_单行函数 函数在计算机语言的使用中贯穿始终&#xff0c;函数的作用是什么呢&#xff1f;它可以把我们经常使用的代码封装起来&#xff0c; 需要的时候直接调用即可。这样既 提高了代码效率&#xff0c;又 提高了可维护性。在 SQL 中我们也可以使用函数 对检索出来的数…

deepseek API 调用-python

【1】创建 API keys 【2】安装openai SDK pip3 install openai 【3】代码&#xff1a; https://download.csdn.net/download/notfindjob/90343352

网络流算法及例题

题单 来源&#xff1a;https://www.cnblogs.com/ticmis/p/13211073.html 编号题目名字题目模型转化模型完成情况1飞行员配对方案问题二分图最大匹配二分图✅2孤岛营救问题分层图最短路径最短路径✅3汽车加油行驶问题分层图最短路径最短路径✅4软件补丁问题最小转移代价最短路…

【配置环境】VS Code中JavaScript环境搭建

一&#xff0c;环境 Windows 11 家庭中文版&#xff0c;64 位操作系统, 基于 x64 的处理器VS Code 版本: 1.83.1 (user setup)Node.js 版本&#xff1a;20.9.0 二&#xff0c;为什么搭建JavaScript环境 因为在看《重构改善既有代码的设计第2版》的时候&#xff0c;书中的代码展…

ES6 Set 数据结构用法总结

1. Set 基本概念 Set 是 ES6 提供的新的数据结构&#xff0c;类似于数组&#xff0c;但成员的值都是唯一的&#xff0c;没有重复的值。Set 本身是一个构造函数&#xff0c;用来生成 Set 数据结构。 1.1 基本用法 // 创建一个空Set const set new Set();// 创建一个带有初始…

预防和应对DDoS的方法

DDoS发起者通过大量的网络流量来中断服务器、服务或网络的正常运行&#xff0c;通常由多个受感染的计算机或联网设备&#xff08;包括物联网设备&#xff09;发起。 换种通俗的说法&#xff0c;可以将其想象成高速公路上的一次突然的大规模交通堵塞&#xff0c;阻止了正常的通勤…

java中equals和hashCode为什么要一起重写

文章目录 equals&#xff08;&#xff09;方法常见的重写规则&#xff1a; hashCode&#xff08;&#xff09;方法为什么通常需要一起重写 equals() 和 hashCode()&#xff1f;一致性要求哈希表的工作原理避免错误的行为例子说明总结 equals&#xff08;&#xff09;方法 equa…

2025 IT职业发展方向及推荐

一、云计算与DevOps&#xff08;推荐指数&#xff1a;★★★★★&#xff09; 推荐理由&#xff1a; 市场需求&#xff1a; 据Gartner报告&#xff0c;2025年全球公有云市场规模将突破8300亿美元&#xff0c;但混合云管理人才缺口达400万&#xff08;IDC数据&#xff09;。 企…