php调用openai api生成播客脚本需用openai-php sdk,指定gpt-4-turbo等支持对话的模型,system提示词明确输出markdown及结构化字段;解析时用preg_split配合preg_split_delim_capture提取[host][guest]等标记段落;tts合成需确保中文语音包、/tmp路径权限及utf-8转码。

PHP 调用 OpenAI API 生成播客脚本的最小可行写法
PHP 本身不“做”脚本撰写,它只负责发请求、收响应、处理文本。核心是调用 openai.ChatCompletion.create(v1 接口),不是用 curl 手搓就是用官方 SDK。别碰过时的 completions 接口——它没对话上下文,写多轮播客对话会崩。
推荐用 openai/openai-php Composer 包(v1.0+):
composer require openai/openai-php
关键点:
-
model必须选gpt-4-turbo或gpt-3.5-turbo,别用text-davinci-003(已弃用) -
messages数组里第一项写system角色,明确约束格式:“输出纯 Markdown,不要解释,不要加标题行,每段不超过 3 行” - 播客脚本需结构化,建议 prompt 里写死字段:主持人开场白、嘉宾观点 A、反方质疑、数据佐证、结尾金句 —— 否则模型自由发挥,后续 PHP 解析就抓瞎
用 PHP 解析 AI 返回的脚本并拆成音频分段
AI 返回的是大段字符串,但 TTS 工具(如 espeak、coqui-tts)需要按角色/段落切开喂。别用 explode("\n\n") 硬切 —— 模型可能漏空行或加多余换行。
更稳的做法是让 AI 输出带标记的格式,比如:
[HOST]今天聊AI对程序员的影响 [GUEST]我觉得短期是工具,长期是协作方式改变 [DATA]2023 年 Stack Overflow 调查显示 41% 开发者已用 Copilot
PHP 解析逻辑示例:
$segments = [];
foreach (preg_split('/\[(HOST|GUEST|DATA|CLOSING)\]/', $response, -1, PREG_SPLIT_DELIM_CAPTURE) as $part) {
if (in_array($part, ['HOST', 'GUEST', 'DATA', 'CLOSING'])) {
$current_role = $part;
} elseif (trim($part)) {
$segments[] = ['role' => $current_role, 'text' => trim($part)];
}
}
注意:preg_split 的 PREG_SPLIT_DELIM_CAPTURE 是关键,否则角色标签就丢了。
PHP 调用本地 TTS 命令合成音频时的路径与编码坑
PHP 用 exec() 或 shell_exec() 调系统 TTS 工具,最常卡在三件事:
- 中文支持:espeak 默认不装中文语音包,
espeak -v zh会静音,得先sudo apt install espeak-data再espeak --voices | grep zh确认有zh-yue或zh - 文件路径权限:PHP 进程(如 www-data)可能没权写
/tmp外的目录,exec("tts --text '$text' -o /var/www/html/audio/seg1.wav")会失败,统一用/tmp并设好umask(0) - 字符编码:如果 AI 返回 UTF-8 中文,但 TTS 工具读作 ISO-8859-1,音频就全是乱码音。加
iconv转码:iconv -f UTF-8 -t GBK
把多个 WAV 拼成完整播客音频的实操要点
用 sox 拼接最轻量:sox seg1.wav seg2.wav seg3.wav output.mp3。但直接拼会有咔哒声 —— 因为每个 WAV 结尾有静音截断误差。
必须加淡出/淡入和静音补偿:
sox seg1.wav -p synth 0.1 sine 440 \ | sox -p -r 44100 -c 2 -b 16 -t wav - gain -n -3 \ | sox -p -r 44100 -c 2 -b 16 -t wav - pad 0 0.3 \ | sox -p -r 44100 -c 2 -b 16 -t wav - fade q 0.1 0 0.1 \ seg2.wav output.mp3
更实际的做法是:每个分段导出前就加 300ms 尾部静音,再统一用 sox *.wav output.mp3。别指望 PHP 自己做音频波形处理 —— 没必要,也压不住 CPU。
最后提醒一句:OpenAI 的 gpt-4-turbo 对长 prompt 敏感,播客脚本若超 2000 字,务必分段请求,别硬塞进单次 API 调用里 —— 容易截断还收不到错误提示,只返回个空字符串。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











