DeepSeek API调用慢的根源在网络请求环节,PHP本身不参与模型推理;需通过启用CURLOPT_HTTPHEADER、CURLOPT_TCP_KEEPALIVE、CURLOPT_CONNECTTIMEOUT_MS和CURLOPT_TIMEOUT_MS等cURL选项优化HTTP连接复用与超时控制。

DeepSeek API调用慢,不是PHP的问题
PHP本身不参与DeepSeek模型推理,所有耗时都发生在网络请求和API响应阶段。所谓“优化PHP侧响应速度”,本质是减少HTTP开销、避免阻塞、合理复用连接——而不是改PHP配置或加缓存就能让DeepSeek变快。
curl_setopt 必须启用的几个关键选项
默认curl行为会显著拖慢请求:DNS重复解析、TCP连接未复用、无超时控制。以下选项缺一不可:
-
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json', 'Content-Type: application/json'])—— 显式声明头,避免cURL自动补全带来歧义 -
curl_setopt($ch, CURLOPT_TCP_KEEPALIVE, 1)—— 复用TCP连接,尤其高频调用时省掉三次握手 -
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 3000)和curl_setopt($ch, CURLOPT_TIMEOUT_MS, 15000)—— 毫秒级超时,防止卡死(DeepSeek官方SLA建议首字节 -
curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 300)—— 避免每次请求都查DNS(DeepSeek API域名稳定)
别用file_get_contents + stream_context_create
它底层仍是cURL或fsockopen,但无法精细控制连接复用与keepalive,且错误堆栈模糊。遇到Operation timed out after 30000 milliseconds这类报错时,几乎无法定位是DNS、连接还是读取阶段失败。实测相同请求下,原生curl比file_get_contents平均快12%~18%,尤其在并发场景。
流式响应(stream=true)必须手动处理chunk
DeepSeek支持流式返回,但PHP不会自动解析SSE格式。若直接json_decode(curl_exec($ch)),会因收到不完整JSON而报JSON_ERROR_SYNTAX。正确做法是:
立即学习“PHP免费学习笔记(深入)”;
- 设置
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $callback),逐块接收 - 在
$callback里按行分割(\n),过滤空行和data:前缀 - 对每行
json_decode(trim(substr($line, 6))),检查delta.content字段再拼接 - 千万别等整个响应结束再处理——流式的意义就是降低首字节延迟
忽略这点,流式反而比非流式更慢,还容易丢内容。



















