快手ai文案接口需先通过oauth2获取2小时有效期的access_token,调用kuaishou.ai.text.generate接口时须校验token有效性、控制5qps限流并清洗返回text中的换行与空格。

快手AI文案接口需要先申请并获取 access_token
快手开放平台的文案生成能力不是开箱即用的,必须走 OAuth2 流程拿到 access_token,且该 token 有 2 小时有效期。很多人卡在第一步,直接调用文案生成接口返回 {"error_code":10001,"error_msg":"invalid access_token"},其实是根本没申请或 token 已过期。
实操建议:
- 去 快手开放平台 创建应用,开通「AI智能文案」权限(注意:需企业资质认证)
- 用
client_id和client_secret调用/oauth2/access_token换取access_token,别硬编码在 PHP 里 - 把
access_token存到 Redis 或文件中,并记录expires_in时间戳,每次调用前校验是否过期 - 不要用 cURL 手动拼 JSON body,用
json_encode()并设好Content-Type: application/json
调用 kuaishou.ai.text.generate 接口的 PHP 写法
快手文档里写的接口名是 kuaishou.ai.text.generate,但实际请求地址是 https://open.kuaishou.com/openapi/v1/ai/text/generate。PHP 里最稳妥的是用 curl_init() + json_encode() 组装,别依赖第三方 SDK(目前没有官方 PHP SDK,社区版大多过时)。
常见错误现象:返回 {"error_code":40001,"error_msg":"invalid params"},大概率是 prompt 字段为空、model 值写错,或没传 access_token 到 Header。
示例关键片段:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://open.kuaishou.com/openapi/v1/ai/text/generate');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'prompt' => '为一款低糖燕麦饼干写 3 条抖音短视频推广文案,每条不超过 30 字,带表情',
'model' => 'ksp-v1',
'max_tokens' => 128
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $access_token,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
批量生成文案时要注意并发和频率限制
快手对 kuaishou.ai.text.generate 接口有明确限流:单个 access_token 最多 5 QPS,日调用量上限 10000 次。批量跑脚本时如果用 foreach 直接循环调用,大概率触发 {"error_code":429,"error_msg":"rate limit exceeded"},后续全部失败。
实操建议:
- 用
usleep(200000)控制间隔(即 200ms),确保稳定在 5 QPS 以内 - 批量任务拆成小批次(比如每次 20 条),每批之间加
sleep(1) - 对返回结果做
json_decode($response, true)后务必检查['error_code']是否为 0,非零就记录日志跳过,别让整个流程中断 - 别在 CLI 脚本里用
echo输出大量文案——终端缓冲可能截断内容,改用file_put_contents('log.txt', $text, FILE_APPEND)
生成结果里的 text 字段要清洗再落地
接口返回的 text 是纯文本,但实际会混入换行符、多余空格、甚至中文顿号或破折号。直接存数据库或推给前端,容易导致排版错乱或审核不通过。
使用场景:你拿到 3 条文案,准备插入 MySQL 的 promotion_texts 表,字段类型是 TEXT,但某条含 \n\n?限时特惠!\n?点击下单↓,入库后变成两行,前端渲染时没处理 \n 就显示异常。
建议清洗逻辑:
- 用
str_replace(["\r\n", "\r", "\n"], ' ', $text)把换行全转成空格 - 用
preg_replace('/\s+/', ' ', $text)合并连续空白符 - 用
trim()去首尾空格,避免文案开头或结尾多一个空格被算作违规 - 如果业务要求每条必须≤30字,用
mb_strlen($cleaned_text, 'UTF-8')判断,别用strlen
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











