PHP调用DeepSeek API的完整指南
简介
本文将介绍如何使用 PHP 调用 DeepSeek API,实现流式对话并保存对话记录。PHP 版本使用面向对象的方式实现,代码结构清晰,易于维护。
1. 环境准备
1.1 系统要求
- PHP 7.0 或更高版本
- PHP cURL 扩展
- 文件写入权限
1.2 项目结构
deepseek-project/ ├── main.php # 主程序 └── conversation.txt # 对话记录文件
2. 完整代码实现
logFile)) {
touch($this->logFile);
}
}
private function saveToFile($content, $isQuestion = false) {
$timestamp = date('Y-m-d H:i:s');
$text = $isQuestion
? "n[$timestamp] Question:n$contentnn[$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$contentnn[$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 交互方式
- 输入问题进行对话
- 输入 ‘q’ 退出程序
- 查看 conversation.txt 获取对话记录
6. 性能优化建议
内存管理
- 使用适当的缓冲区大小
- 及时清理变量
- 避免大量数据积累
文件操作
- 使用文件锁防止并发写入
- 定期清理日志文件
- 考虑使用数据库存储
网络请求
- 设置合理的超时时间
- 使用持久连接
- 处理网络异常
总结
PHP 版本的 DeepSeek API 实现采用面向对象方式,代码结构清晰,易于维护和扩展。通过 cURL 实现流式处理,提供了良好的交互体验。
到此这篇关于PHP调用DeepSeek API的完整指南的文章就介绍到这了,更多相关PHP调用DeepSeek API内容请搜索科站长以前的文章或继续浏览下面的相关文章希望大家以后多多支持科站长!
您可能感兴趣的文章
- 07-25PHP调用FFmpeg实现视频切片
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 02-10windows服务器iis+php获得错误信息的配置方法
- 02-09通过PHP接入DeepSeek API的两种方法
- 02-07PHP调用DeepSeek API的完整指南
- 02-06PHP foreach引用变量导致的问题及其解决方案
- 02-02PHP使用puppeteer抓取JS渲染后的页面内容
- 01-17PHP SM4加密的实现
- 01-17PHP实现用户认证与权限管理的实现


阅读排行
推荐教程
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP调用FFmpeg实现视频切片
- 11-23PHP 7安装使用体验之性能大提升,兼容性强,扩展支
- 11-22PHP自定义函数判断是否为Get、Post及Ajax提交的方法
- 11-23隐藏PHP版本与PHP基本安全设置
- 11-23PHP+MYSQL 读写分离简单实战
- 11-23php中 == 和 === 的区别和应用说明
- 11-22详解PHP防止直接访问.php 文件的实现方法
- 11-22PHP编程求最大公约数与最小公倍数的方法示例




