根本原因是cli与web执行环境差异导致请求上下文、配置、网络路径或会话状态不统一;需统一http头(含authorization)、json请求体结构、禁用conversation_id等隐式状态,并验证dns与网络路径一致性。

PHP 8.4 下 CLI 和网页调用豆包 API 返回结果不一致,不是 PHP 版本问题,而是执行环境差异导致的请求上下文、配置、网络路径或会话状态不统一。关键不在“PHP 8.4”,而在“谁在发请求”和“怎么发的”。
一、检查并统一 HTTP 请求头与认证方式
CLI 和 Web 环境默认行为不同,容易漏掉关键 header:
-
Authorization 头必须完全一致:
- 都要用
Authorization: Bearer sk-xxx(注意大小写、空格、无换行) - CLI 脚本里若用
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ...']),Web 端用 Guzzle 或 file_get_contents 时也得显式设置,不能依赖全局变量或 $_SERVER 自动带入 - 检查是否误把
$_SERVER['HTTP_AUTHORIZATION']当作已存在——它在 CGI/FPM 模式下通常为空,需从getallheaders()或重写 Nginx 的fastcgi_param HTTP_AUTHORIZATION $http_authorization;
- 都要用
-
User-Agent、Accept、Content-Type 显式声明:
豆包服务可能对无 UA 或非 JSON 类型请求做降级处理。两端都应固定:'User-Agent' => 'PHP-CLI/8.4' // 或 'PHP-Web/8.4' 'Accept' => 'application/json' 'Content-Type' => 'application/json'
二、确保 JSON 请求体结构完全相同
微小差异(如键顺序、空格、换行、字段缺失)会导致模型解析逻辑不同:
- CLI 脚本中用
json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) - Web 端同样用该方式编码,不要拼接字符串,也不要依赖框架自动序列化(如 Laravel 的
->json()可能加额外字段) - 特别注意
messages字段:- 必须是数组,每项含
role("user"/"assistant"/"system")和content(字符串,不能为空或 null) - CLI 中若用
print_r调试后手动复制内容再发,极易混入不可见字符(如 U+200B 零宽空格)
- 必须是数组,每项含
三、禁用隐式上下文干扰
豆包 API 默认不维护会话,但错误传参可能触发意外行为:
-
彻底清空 conversation_id / session_id 相关字段:
CLI 和 Web 请求都不要传conversation_id,除非你明确需要多轮续聊;否则留空或不传 -
每次请求使用全新 messages 数组:
Web 端避免复用$messages[] = [...]积累历史;CLI 不要读取上一次响应里的id做续写 - 若用流式响应(SSE),CLI 和 Web 解析逻辑必须一致:
- 都按
data:前缀切分,用\n\n分隔块 - 都做
trim()和json_decode(..., true),失败时跳过非法块而非中断
- 都按
四、验证底层网络与 DNS 行为是否一致
同一台服务器,CLI 和 Web 进程走的可能是不同出口:
- CLI 用
curl_exec()时走系统默认路由,Web 由 PHP-FPM 进程发起,可能受 Nginxproxy_pass、iptables 或容器网络策略影响 - 快速验证:
# CLI 查看实际请求目标 curl -v https://ark.cn-beijing.volces.com/api/v3/chat/completions 2>&1 | grep "Connected to"
// Web 端加一行调试 error_log("DNS resolve: " . gethostbyname('ark.cn-beijing.volces.com')); - 若 Web 端被代理或走内网 DNS,而 CLI 走公网,可能导致命中不同集群节点(返回结果概率性差异放大)
两端结果不一致,本质是“两次独立请求”被当成了“同一请求的复现”。只要保证输入完全一致、环境无隐式状态、输出解析逻辑对齐,结果就会稳定收敛。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











