PHP 8.5.7 本身不具AI能力,生成小红书风格文案需调用外部大模型API;关键在于精准构造含system prompt的JSON请求、正确设置cURL参数(如Content-Type、Authorization、JSON_UNESCAPED_UNICODE)、安全解析响应并处理换行与emoji显示。

PHP 8.5.7 本身不能“生成”小红书风格文案——它没有内置 AI 能力,也不带大语言模型。所有所谓“AI 生成”,本质是调用外部 API(如通义千问、Kimi、Claude 或本地部署的 Llama 接口),PHP 只负责构造请求、传参、解析响应。
为什么不能直接用 file_get_contents 或 curl 硬发请求就完事?
小红书风格有强特征:短句分行、emoji 密集、口语化感叹、标签堆砌(#护肤 #平价好物)、第一人称沉浸式描述(“谁懂啊!!”“按头安利!”)。通用模型默认输出不会自动适配这些格式,必须通过 prompt 精细控制。
- 不加约束时,
curl返回的可能是结构化 JSON 或平淡段落,根本不像小红书笔记 - 没做 system prompt 设定,模型容易忽略“用 3 行以内、每行不超过 12 字、结尾必带 3 个相关 hashtag”这类硬性要求
- PHP 8.5.7 的
json_decode默认不处理深度嵌套或非标准字段,若 API 返回choices[0].message.content结构但你只取$data['text'],会拿空
curl_init() 发请求时必须设哪些关键参数?
多数国产大模型 API 要求 Content-Type: application/json、带 Authorization: Bearer xxx,且 body 必须是严格 JSON 格式(键名大小写敏感、不能多逗号)。
- 务必设置
CURLOPT_HTTPHEADER包含Content-Type和Authorization -
CURLOPT_POSTFIELDS必须是json_encode($payload, JSON_UNESCAPED_UNICODE),否则中文变 \uXXXX - 显式设
CURLOPT_RETURNTRANSFER为true,否则curl_exec()返回bool(true)而不是响应体 - 加
CURLOPT_TIMEOUT(建议 30),避免模型卡住导致 PHP 进程挂起
示例片段:
面向 K12 语文学科的小红书笔记生产工作流。用于根据内容日历或家长痛点选题,核对教材版本与课文证据,把阅读、古诗文、习作等抽象方法落到真实课文、公式、例题和家长可执行动作,并产出标题、3:4 轮播卡片方案、生图提示词、可直接粘贴发布的正文及对抗性验收报告。用户提到小学语文、初中语文、课文解析、语文预习、阅读理解、古诗、作文、小红书图文或教育内容生产时使用。
立即学习“PHP免费学习笔记(深入)”;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.llm.example.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $api_key
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'model' => 'qwen2.5-7b',
'messages' => [
['role' => 'system', 'content' => '你是一名小红书爆款文案编辑。只输出纯文本,不加任何说明。每行≤12字,用❗️✨?等emoji分隔,结尾固定输出3个#开头的话题标签。'],
['role' => 'user', 'content' => '写一篇关于“油皮夏天用的控油散粉”的种草文案']
],
'temperature' => 0.7
], JSON_UNESCAPED_UNICODE));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
拿到 API 响应后,json_decode() 怎么安全提取文案?
不同厂商返回结构差异极大:qwen 返回 output.text,moonshot 是 choices[0].message.content,local llama.cpp 可能直接是 content 字段。硬写路径必然崩。
- 先用
json_last_error()判断解码是否失败,失败时var_dump($response)查原始字符串 - 不要假设字段存在,用
isset($data['choices'][0]['message']['content'])或?? ''防 Notice - 小红书文案常含换行符
\n,但网页显示需转<br>或 CSSwhite-space: pre-line,别漏这步 - 若返回含 markdown(如 **加粗**),需用
strip_tags()或简单正则清理,否则前端乱码
真正难的从来不是 PHP 调 API,而是把“小红书语感”翻译成 prompt 工程——比如“按头安利”要写进 system 提示,“谁懂啊!!”得强制模型用感叹号结尾,而 emoji 密度必须用“每句至少 1 个”来量化。这些细节不调通,PHP 写得再稳也没用。


















