deepseek-php-client
社区驱动的 PHP DeepSeek SDK,两行代码接入国产大模型,支持 DeepSeek-V3/R1/Coder 全系列模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
社区驱动的 PHP DeepSeek SDK,两行代码接入国产大模型,支持 DeepSeek-V3/R1/Coder 全系列模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
如果你是一名 PHP 开发者,想在项目中接入国产大模型 DeepSeek,通常会面临一个尴尬的局面:DeepSeek 官方只提供了 Python 和 TypeScript 的 SDK,而 PHP 开发者只能自己对着 API 文档手写 HTTP 请求、拼装消息格式、处理流式响应——代码既不优雅,维护起来也相当痛苦。deepseek-php/deepseek-php-client 正是为解决这一痛点而生:它将 DeepSeek 的 API 封装为一套符合 PHP 习惯的链式调用接口,让你用两行代码就能完成一次 AI 对话。
这个项目由社区驱动(community driven),由独立开发者 Omar Alalwi 创建和维护,目前在 GitHub 上已获得 466 颗星,被收录在 DeepSeek PHP 官方生态下(deepseek-php 组织),还配套了专门的 Laravel 包(deepseek-laravel)和 Telegram 社区群组。它并非一个简单的 HTTP 封装库,而是一套遵循 PSR-18 规范(HTTP 客户端标准接口)的企业级 SDK,在设计层面吸收了 OpenAI PHP SDK 的成熟经验,同时也针对 DeepSeek 自身的 API 特性做了大量定制优化。

从代码结构来看,deepseek-php-client 的核心架构分为三层:
第一层是客户端构建层(DeepSeekClient):通过静态工厂方法 DeepSeekClient::build('api-key') 创建客户端实例,支持链式配置。底层支持两种 HTTP 客户端引擎——Guzzle(默认)和 Symfony HttpClient,你可以通过 clientType 参数切换。这一设计让库本身不绑定特定 HTTP 实现,符合 PHP 生态的解耦原则。
第二层是资源层(Resources):包含 Chat.php(通用对话)、Coder.php(代码生成)和 Resource.php(底层请求发送)。Chat 和 Coder 通过 Trait 机制混入到 DeepSeekClient 中,实现了代码复用。Resource.php 负责构造请求参数数组、拼接 endpoint,并最终通过 PSR-18 ClientInterface 发出请求。
第三层是枚举配置层(Enums):项目大量使用 PHP 8.1+ 的 Enum(枚举类)来管理配置约束,包括 Models(模型枚举)、TemperatureValues(温度参数)、EndpointSuffixes(API 端点后缀)、QueryFlags(请求参数标志)等。相比字符串常量或配置数组,Enum 提供了类型安全和 IDE 自动补全,极大提升了开发体验。
这种分层解耦的设计带来的直接好处是:如果你需要替换底层 HTTP 客户端,只需要实现 PSR-18 的 ClientInterface,无需改动业务逻辑代码。
基本对话是最基础的使用场景。两行代码即可发起一次 DeepSeek Chat 对话:
$response = DeepSeekClient::build('your-api-key')
->query('Explain quantum computing')
->run();
echo $response;
背后的实现逻辑是:query() 方法将消息追加到内部的 $queries[] 数组(支持多轮对话),run() 方法将累积的消息列表连同模型、温度、最大 token 等参数打包成符合 DeepSeek Chat API 规范的请求体,发送出去并返回纯文本响应。
多轮对话通过多次调用 query() 实现累积,每条消息还可以指定角色(role):'user'、'assistant' 或 'system'。如果你想清空对话历史重新开始,调用 resetQueries() 即可。
**流式响应(Streaming)**通过 ->withStream() 启用,DeepSeek API 会以 Server-Sent Events(SSE)格式持续推送文本片段,SDK 负责解析并逐块返回。这个功能对于需要实时展示 AI 思考过程的应用(如在线编码助手)尤为重要。
**函数调用(Function Calling)**是当前大模型 API 的核心能力之一。开发者可以向 DeepSeek 注册一组外部工具函数(get_weather、search_db 等),让模型在回复中决定调用哪个函数并传入参数。项目在 src/Traits/Client/HasToolsFunctionCalling.php 中封装了这一能力,并配有独立的文档 docs/FUNCTION-CALLING.md 详细说明用法。
JSON 模式输出通过 ->setResponseFormat('json_object') 启用,SDK 会将 DeepSeek 的 response_format 参数设为 JSON object。但这里有一个重要的使用陷阱:prompt 中必须包含 "json" 这个词,否则 DeepSeek API 会返回错误。README 专门用一整节图文并茂地标注了这一注意事项。
模型灵活切换:默认使用 deepseek-chat,但可以通过 ->withModel(Models::CODER->value) 切换到代码专用模型 Coder,或使用 ->getModelsList() 动态获取当前账户可用的模型列表。
从 composer.json 可以看出这个项目的技术选型:
运行时要求:PHP 8.2+,这是一个比较现代的版本要求,意味着项目可以利用 PHP 8.x 的类型系统(typed properties、union types、readonly classes 等)。
HTTP 层依赖:核心依赖了 nyholm/psr7(PSR-7 消息实现)、php-http/discovery(自动发现已安装的 HTTP 库)、symfony/http-client(Symfony 的 HTTP 客户端),同时通过 php-http/multipart-stream-builder 处理流式请求的 multipart 编码。值得注意的是,库本身不强制绑定 Guzzle 或 Symfony HTTP Client,而是通过 php-http/discovery 自动探测系统中已安装的实现,这种设计减少了用户的依赖负担。
开发依赖:使用了 Pest(现代化 PHPUnit 替代品)作为测试框架,配合 phpstan/phpstan 做静态分析,laravel/pint 做代码风格检查,mockery/mockery 做 mock。composer.json 中还声明了 test:type-coverage 脚本,要求 100% 类型覆盖,这说明项目对代码质量有较高追求。
代码结构:源码在 src/ 下按 PSR-4 规范组织,Contracts 定义接口契约,Enums 集中管理枚举,Factories 负责对象创建,Traits 实现功能混入,Resources 处理业务逻辑。这种结构在 Laravel 生态中非常常见,PHP 开发者容易理解和上手。
作为纯 PHP 库,deepseek-php-client 没有任何容器化支持(无 Dockerfile、docker-compose),因此不属于"一键部署"范畴。但它的安装过程本身极其简单——一行 Composer 命令即可:
composer require deepseek-php/deepseek-php-client
安装完成后,只需准备一个 DeepSeek API Key(从 platform.deepseek.com 获取),直接开始使用。整个过程不需要启动任何服务,不占用任何端口,不消耗 GPU 资源——这是一个真正「零运维负担」的库。
适用场景:适合需要从 PHP 后端调用 DeepSeek AI 能力的 Web 应用(WordPress 插件、Laravel/Symfony 应用、传统 PHP 系统等)。对于需要在服务器端批量处理文本、构建 AI 辅助功能或集成 DeepSeek 到现有 PHP 系统的开发者,这是目前最规范的 PHP 解决方案。
不适用场景:不适合需要 Web 界面或本地 AI 推理的场景(如本地部署 DeepSeek 模型跑推理),它只是一个 API 调用客户端。
API Key 安全问题:示例代码中直接将 API Key 硬编码在源代码里,这是一个安全隐患。生产环境中应当从环境变量或安全的密钥管理服务(如 AWS Secrets Manager、HashiCorp Vault)读取 Key,并在 .gitignore 中排除相关配置文件。README 中并未明确强调这一最佳实践,是文档层面的一点缺憾。
维护者单一风险:项目目前由 Omar Alalwi 独立维护,虽然有社区驱动之名,但实际上活跃贡献者较少。如果维护者停止更新,项目的 DeepSeek API 兼容性可能随 API 版本迭代而逐渐失效。
中文文档完整性:README 提供了多语言版本(英文、阿拉伯文),中文版本(README-CN.md)也基本完整,但进阶功能(如函数调用、Streaming)的中文说明较少,可能增加中文开发者的上手门槛。
速率限制与成本:DeepSeek API 按 token 计费,SDK 本身不提供重试策略或速率限制包装,开发者在使用时应自行实现幂等调用和费用控制逻辑。
DeepSeek 以其开源模型 DeepSeek-V3 和 DeepSeek-R1 打破了 OpenAI GPT 系列在推理能力上的垄断,同时以更具竞争力的价格吸引开发者。然而,AI 能力能否真正落地,很大程度上取决于开发者生态的完善程度——每一种主流编程语言都应该有高质量的 SDK。
deepseek-php-client 的出现填补了 PHP 生态接入 DeepSeek 的空白。它不是简单地将 API 文档翻译成 PHP 代码,而是认真考虑了 PHP 开发者的使用习惯:链式调用(Builder Pattern)、类型安全(PHP 8.2+ Enum)、标准接口(PSR-18)。这使得它不仅是一个技术工具,更代表了 PHP 社区拥抱 AI 时代的态度。
随着 PHP 8.4+ 对 AI 能力(如 JIT 优化、FFI 扩展)的持续增强,以及 Laravel、Symfony 等框架对 AI 集成的原生支持需求增长,高质量的 PHP AI SDK 将变得越来越重要。deepseek-php-client 的存在让 PHP 开发者无需等待官方支持,就能快速将 DeepSeek 的强大能力集成到自己的应用中。
项目主页:https://github.com/deepseek-php/deepseek-php-client
Packagist:https://packagist.org/packages/deepseek-php/deepseek-php-client
Telegram 社区:https://t.me/deepseek_php_community