英文:
OpenAI ChatGPT (GPT-3.5) API error in WordPress PHP code: "Invalid URL (POST /v4/engines/davinci-codex/completions)"
问题
以下是翻译好的部分:
我已要求ChatGPT生成一段代码,以将其合并到WordPress的function.php中,以自动生成所有新创建或更新的帖子的标签。
以下是代码:
function add_tags_with_gpt($post_ID) {
// 检查文章内容是否实际更改
$post = get_post($post_ID);
$old_content = get_post_meta($post_ID, '_old_content', true);
$new_content = $post->post_content;
if ($old_content === $new_content) {
return; // 内容未更改,因此不执行任何操作
}
update_post_meta($post_ID, '_old_content', $new_content);
// 使用OpenAI API生成标签
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v4/engines/davinci-codex/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
'prompt' => 'Generate tags for a blog post with the following content: '.$new_content,
'max_tokens' => 60
)));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer your_openai_api_key', // 用您的实际API密钥替换'your_openai_api_key'
'Content-Type: application/json'
));
$response = curl_exec($ch);
if (!$response) {
// 将错误记录到WordPress的调试日志文件中
error_log('生成标签时出错: ' . curl_error($ch));
return;
}
curl_close($ch);
// 将API响应记录到WordPress的调试日志文件中
error_log('OpenAI API响应: ' . $response);
$response_data = json_decode($response, true);
if(!isset($response_data['choices'][0]['text'])) {
error_log('错误: API响应不包含标签');
return;
}
$tags = explode(',', $response_data['choices'][0]['text']);
$tags = array_slice($tags, 0, 8);
// 验证和清理标签
$tags = array_map('sanitize_text_field', $tags);
$tags = array_map('wp_strip_all_tags', $tags);
$tags = array_filter($tags, function($tag) {
return strlen($tag) > 2 && strlen($tag) <= 20; // 排除长度小于3和大于20的标签
});
// 将标签添加到文章
wp_set_post_tags($post_ID, $tags, true);
}
add_action('save_post', 'add_tags_with_gpt');
请注意,这段代码有一个错误,它尝试使用OpenAI API生成标签,但似乎出现了无效的URL错误。你可能需要检查API的URL是否正确,并确保你的API密钥有效。另外,PHP已弃用str_replace()
函数中传递null参数的用法,你可以尝试修复这个问题。
英文:
I've asked ChatGPT to generate a code to be incorporated in WordPress' function.php to generate tags automatically for all my newly created or updated post.
Here is the code:
function add_tags_with_gpt($post_ID) {
// Vérifier si le contenu de l'article a réellement changé
$post = get_post($post_ID);
$old_content = get_post_meta($post_ID, '_old_content', true);
$new_content = $post->post_content;
if ($old_content === $new_content) {
return; // Le contenu n'a pas changé, donc on ne fait rien
}
update_post_meta($post_ID, '_old_content', $new_content);
// Utiliser l'API OpenAI pour générer des tags
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v4/engines/davinci-codex/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
'prompt' => 'Generate tags for a blog post with the following content: '.$new_content,
'max_tokens' => 60
)));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer your_openai_api_key', // Remplacez 'your_openai_api_key' par votre véritable clé API
'Content-Type: application/json'
));
$response = curl_exec($ch);
if (!$response) {
// Enregistrer l'erreur dans le fichier de log de débogage de WordPress
error_log('Erreur lors de la génération de tags: ' . curl_error($ch));
return;
}
curl_close($ch);
// Enregistrer la réponse de l'API dans le fichier de log de débogage de WordPress
error_log('Réponse de l\'API OpenAI : ' . $response);
$response_data = json_decode($response, true);
if(!isset($response_data['choices'][0]['text'])) {
error_log('Erreur: La réponse de l\'API ne contient pas de tags');
return;
}
$tags = explode(',', $response_data['choices'][0]['text']);
$tags = array_slice($tags, 0, 8);
// Valider et nettoyer les tags
$tags = array_map('sanitize_text_field', $tags);
$tags = array_map('wp_strip_all_tags', $tags);
$tags = array_filter($tags, function($tag) {
return strlen($tag) > 2 && strlen($tag) <= 20; // Exclure les tags de moins de 3 caractères et de plus de 20 caractères
});
// Ajouter les tags à l'article
wp_set_post_tags($post_ID, $tags, true);
}
add_action('save_post', 'add_tags_with_gpt');
The problem is that the code doesn't work and returns this error message in debug.log
[23-Jul-2023 15:16:27 UTC] Réponse de l'API OpenAI : {
"error": {
"message": "Invalid URL (POST /v4/engines/davinci-codex/completions)",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
[23-Jul-2023 15:16:27 UTC] Erreur: La réponse de l'API ne contient pas de tags
[23-Jul-2023 15:16:34 UTC] PHP Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /home/***/webapps/***/wp-includes/formatting.php on line 4303
Any idea what the issue is and how to fix it? The problem doesn't come from the API key that I copy/pasted from my OpenAI account into the code.
Many thanks,
答案1
得分: 1
所有引擎 API 端点已被弃用。
将 URL 从这个...
https://api.openai.com/v4/engines/davinci-codex/completions
...更改为这个。
https://api.openai.com/v1/chat/completions
聊天完成 API需要 4 个必填参数:
model
messages
role
content
查看我的先前答案,其中使用gpt-3.5-turbo
模型提供了 PHP 中的工作示例。
英文:
All Engines API endpoints are deprecated.
Change the URL from this...
https://api.openai.com/v4/engines/davinci-codex/completions
...to this.
https://api.openai.com/v1/chat/completions
There are 4 required parameters for the Chat Completions API:
model
messages
role
content
See my past answer for a working example in PHP using the gpt-3.5-turbo
model.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论