PHP 调用 DeepSeek API 完整指南

news/2025/2/8 0:07:57/

简介

本文将介绍如何使用 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/news/1570181.html

相关文章

Linux网络 | 理解NATPT, 数据链路层Done

前言&#xff1a;本节内容结束数据链路层&#xff0c; 本节的重要内容有两个&#xff1a;一个是见一个综合性面试题&#xff0c;另一个就是NAT技术NATPT。 那么废话不多说&#xff0c; 开始我们的学习吧&#xff01;&#xff01;&#xff01; ps&#xff1a;最好先看一下上一篇…

全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(二)

目录 配置系统集成 分层项目使用 筛选器的使用 中间件的使用 配置系统集成 在.net core WebAPI前后端分离开发中&#xff0c;配置系统的设计和集成是至关重要的一部分&#xff0c;尤其是在管理不同环境下的配置数据时&#xff0c;配置系统需要能够灵活、可扩展&#xff0c…

2025简约的打赏系统PHP网站源码

源码介绍 2025简约的打赏系统PHP网站源码 源码上传服务器&#xff0c;访问域名/install.php安装 支持自定义金额打赏 集成支付宝当面付 后台管理系统 订单记录查询 效果预览 源码获取 2025简约的打赏系统PHP网站源码

《Python预训练视觉和大语言模型》:从DeepSeek到大模型实战的全栈指南

就是当代AI工程师的日常&#xff1a;* - 砸钱买算力&#xff0c;却卡在分布式训练的“隐形坑”里&#xff1b; - 跟着论文复现模型&#xff0c;结果连1/10的性能都达不到&#xff1b; - 好不容易上线应用&#xff0c;却因伦理问题被用户投诉…… 当所有人都在教你怎么调用…

解锁豆瓣高清海报(二) 使用 OpenCV 拼接和压缩

解锁豆瓣高清海报(二): 使用 OpenCV 拼接和压缩 脚本地址: 项目地址: Gazer PixelWeaver.py pixel_squeezer_cv2.py 前瞻 继上一篇“解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路”成功爬取豆瓣电影海报之后&#xff0c;本文将介绍如何使用 OpenCV 对这些海报进行智…

10.4 LangChain核心架构揭秘:模块化设计如何重塑大模型应用开发?

LangChain核心架构揭秘:模块化设计如何重塑大模型应用开发? 关键词: LangChain模块化设计、大模型开发框架、LangChain核心概念、AI应用开发、LLM工程化 一、LangChain的模块化设计哲学:从“手工作坊”到“工业化生产” 传统开发痛点: 代码重复:每个项目从零开始编写胶…

Vuex 解析:从 Vue 2 到 Vue 3 的演变与最佳实践

Vuex 是 Vue.js 中的状态管理模式&#xff0c;广泛应用于 Vue 2 和 Vue 3 中&#xff0c;其内部实现存在一些差异。 1. 什么是 Vuex &#xff1f; Vuex 是 Vue.js 官方提供的状态管理库&#xff0c;用于集中管理应用的所有组件的状态。主要是通过一种集中化的方式来管理共享状…

kubernetes 核心技术-集群安全机制 RBAC

随着 Kubernetes 在企业级应用中的广泛采用&#xff0c;确保集群的安全性变得至关重要。Kubernetes 提供了多种安全机制来保护集群及其资源免受未授权访问和潜在威胁的影响。其中&#xff0c;基于角色的访问控制&#xff08;Role-Based Access Control, 简称 RBAC&#xff09;是…