WordPress集成ChatGPT与通义千问API实现AI写作插件方法
- Linkreate AI插件 文章
- 2025-09-01 19:42:08
- 14阅读
WordPress AI写作插件开发准备
在开始WordPress集成AI写作工具之前,你需要准备一些基本环境和工具。首先,确保你的WordPress网站运行在最新稳定版本上,这能保证最佳的兼容性和安全性。其次,你需要获取AI服务提供商的API密钥,无论是OpenAI的ChatGPT还是阿里的通义千问,都需要注册相应的开发者账号并申请API访问权限。
获取API密钥
对于ChatGPT API,你需要访问OpenAI官方网站,注册账号并进入开发者控制台创建新的API密钥。通义千问的API密钥则需要在阿里云控制台申请。请注意,这些API密钥是敏感信息,不应在代码中硬编码或公开分享。
WordPress开发环境设置
在本地开发环境中,我们推荐使用Local by Flywheel或XAMPP来搭建WordPress开发环境。这些工具提供了完整的WordPress安装和管理功能,便于插件开发和测试。
安装Local by Flywheel
下载地址: https://localwp.com/
下载后按照安装向导完成安装
创建新的WordPress站点
打开Local,点击"+"按钮创建新站点
填写站点名称、选择环境并点击"Add Site"
构建WordPress AI写作插件基础结构
WordPress插件的基本结构包括一个主PHP文件和可选的子文件夹用于存放资源文件。首先,在你的WordPress插件目录(wp-content/plugins/)下创建一个新的文件夹,例如"ai-writer-assistant"。
插件主文件创建
在"ai-writer-assistant"文件夹中创建主PHP文件,命名为"ai-writer-assistant.php"。这个文件将包含插件的基本信息和初始化代码。
prefix . 'ai_writer_logs';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
user_id bigint(20) NOT NULL,
prompt text NOT NULL,
response text NOT NULL,
model varchar(50) NOT NULL,
tokens int(11) NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
// 插件停用时的处理
register_deactivation_hook(__FILE__, 'ai_writer_assistant_deactivate');
function ai_writer_assistant_deactivate() {
// 清理定时任务等
}
// 加载插件的其他文件
require_once AI_WRITER_ASSISTANT_PATH . 'includes/admin-settings.php';
require_once AI_WRITER_ASSISTANT_PATH . 'includes/api-integration.php';
require_once AI_WRITER_ASSISTANT_PATH . 'includes/metaboxes.php';
实现API集成功能
API集成是插件的核心功能,我们需要创建一个专门的文件来处理与ChatGPT和通义千问API的通信。在插件目录下创建"includes"文件夹,并在其中创建"api-integration.php"文件。
ChatGPT API集成
ChatGPT API使用RESTful接口,我们需要发送HTTP请求并处理响应。以下是实现ChatGPT API调用的代码:
api_key = $api_key;
$this->model = $model;
}
public function generate_content($prompt, $max_tokens = 1000, $temperature = 0.7) {
$headers = array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $this->api_key
);
$body = array(
'model' => $this->model,
'messages' => array(
array(
'role' => 'user',
'content' => $prompt
)
),
'max_tokens' => $max_tokens,
'temperature' => $temperature
);
$response = wp_remote_post($this->endpoint, array(
'headers' => $headers,
'body' => json_encode($body),
'timeout' => 30
));
if (is_wp_error($response)) {
error_log('AI Writer Assistant: ChatGPT API Error - ' . $response->get_error_message());
return false;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (json_last_error() !== JSON_ERROR_NONE || !isset($data['choices'][0]['message']['content'])) {
error_log('AI Writer Assistant: ChatGPT API Response Error - ' . $body);
return false;
}
return array(
'content' => $data['choices'][0]['message']['content'],
'tokens' => $data['usage']['total_tokens']
);
}
}
通义千问API集成
通义千问API的集成方式与ChatGPT类似,但请求结构和认证方式有所不同。以下是实现通义千问API调用的代码:
api_key = $api_key;
$this->app_code = $app_code;
}
public function generate_content($prompt, $max_tokens = 1000, $temperature = 0.7) {
$headers = array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $this->api_key,
'X-DashScope-AppCode' => $this->app_code
);
$body = array(
'model' => 'qwen-turbo',
'input' => array(
'messages' => array(
array(
'role' => 'user',
'content' => $prompt
)
)
),
'parameters' => array(
'max_tokens' => $max_tokens,
'temperature' => $temperature
)
);
$response = wp_remote_post($this->endpoint, array(
'headers' => $headers,
'body' => json_encode($body),
'timeout' => 30
));
if (is_wp_error($response)) {
error_log('AI Writer Assistant: Tongyi API Error - ' . $response->get_error_message());
return false;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (json_last_error() !== JSON_ERROR_NONE || !isset($data['output']['text'])) {
error_log('AI Writer Assistant: Tongyi API Response Error - ' . $body);
return false;
}
return array(
'content' => $data['output']['text'],
'tokens' => $data['usage']['total_tokens']
);
}
}
创建管理设置界面
为了方便用户配置API密钥和其他选项,我们需要创建一个管理设置界面。在"includes"文件夹中创建"admin-settings.php"文件。
设置页面注册
首先,我们需要在WordPress管理菜单中添加一个设置页面:
<?php
}
// 回调函数
function ai_writer_chatgpt_section_callback() {
echo 'Enter your ChatGPT API credentials below. You can obtain these from the OpenAI developer dashboard.
';
}
function ai_writer_tongyi_section_callback() {
echo 'Enter your Tongyi Qianwen API credentials below. You can obtain these from the Alibaba Cloud console.
';
}
function ai_writer_general_section_callback() {
echo 'Configure general settings for the AI Writer Assistant plugin.
';
}
function ai_writer_chatgpt_api_key_callback() {
$api_key = get_option('ai_writer_chatgpt_api_key', '');
echo '';
}
function ai_writer_chatgpt_model_callback() {
$model = get_option('ai_writer_chatgpt_model', 'gpt-3.5-turbo');
$models = array(
'gpt-3.5-turbo' => 'GPT-3.5 Turbo',
'gpt-4' => 'GPT-4',
'gpt-4-turbo' => 'GPT-4 Turbo'
);
echo '';
foreach ($models as $value => $label) {
echo '' . esc_html($label) . '';
}
echo '';
}
function ai_writer_tongyi_api_key_callback() {
$api_key = get_option('ai_writer_tongyi_api_key', '');
echo '';
}
function ai_writer_tongyi_app_code_callback() {
$app_code = get_option('ai_writer_tongyi_app_code', '');
echo '';
}
function ai_writer_default_provider_callback() {
$provider = get_option('ai_writer_default_provider', 'chatgpt');
$providers = array(
'chatgpt' => 'ChatGPT',
'tongyi' => 'Tongyi Qianwen'
);
echo '';
foreach ($providers as $value => $label) {
echo '' . esc_html($label) . '';
}
echo '';
}
function ai_writer_max_tokens_callback() {
$max_tokens = get_option('ai_writer_max_tokens', 1000);
echo '';
}
function ai_writer_temperature_callback() {
$temperature = get_option('ai_writer_temperature', 0.7);
echo '';
}
添加文章编辑界面集成
为了在WordPress文章编辑界面中集成AI写作功能,我们需要添加一个自定义的Meta Box。在"includes"文件夹中创建"metaboxes.php"文件。
创建AI写作Meta Box
以下代码将在文章编辑界面添加一个AI写作助手Meta Box:
<option value="chatgpt" >ChatGPT
<option value="tongyi" >Tongyi Qianwen
<input type="number" id="ai_writer_max_tokens" name="ai_writer_max_tokens" value="" min="100" max="4000" step="100">
<input type="number" id="ai_writer_temperature" name="ai_writer_temperature" value="" min="0" max="2" step="0.1">
Generated Content:
jQuery(document).ready(function($) {
$('ai_writer_generate').on('click', function() {
var provider = $('ai_writer_provider').val();
var prompt = $('ai_writer_prompt').val();
var maxTokens = $('ai_writer_max_tokens').val();
var temperature = $('ai_writer_temperature').val();
if (!prompt) {
alert('Please enter a prompt.');
return;
}
$('ai_writer_generate').prop('disabled', true);
$('ai_writer_loading').css('display', 'inline-block');
$.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'ai_writer_generate_content',
nonce: '',
provider: provider,
prompt: prompt,
max_tokens: maxTokens,
temperature: temperature
},
success: function(response) {
if (response.success) {
$('ai_writer_generated_content').val(response.data.content);
$('ai_writer_result').show();
} else {
alert('Error: ' + response.data.message);
}
},
error: function() {
alert('An error occurred. Please try again.');
},
complete: function() {
$('ai_writer_generate').prop('disabled', false);
$('ai_writer_loading').css('display', 'none');
}
});
});
$('ai_writer_insert').on('click', function() {
var content = $('ai_writer_generated_content').val();
if (content && window.tinyMCE && window.tinyMCE.activeEditor) {
window.tinyMCE.activeEditor.execCommand('mceInsertContent', false, content);
} else if (content && $('wp-content-editor-container').hasClass('-active')) {
var textarea = $('content');
var start = textarea[0].selectionStart;
var end = textarea[0].selectionEnd;
var val = textarea.val();
textarea.val(val.substring(0, start) + content + val.substring(end));
}
});
$('ai_writer_replace').on('click', function() {
var content = $('ai_writer_generated_content').val();
if (content && window.tinyMCE && window.tinyMCE.activeEditor) {
window.tinyMCE.activeEditor.setContent(content);
} else if (content && $('wp-content-editor-container').hasClass('-active')) {
$('content').val(content);
}
});
});
'You do not have permission to edit posts.'));
}
$provider = sanitize_text_field($_POST['provider']);
$prompt = sanitize_textarea_field($_POST['prompt']);
$max_tokens = intval($_POST['max_tokens']);
$temperature = floatval($_POST['temperature']);
if ($provider === 'chatgpt') {
$api_key = get_option('ai_writer_chatgpt_api_key', '');
$model = get_option('ai_writer_chatgpt_model', 'gpt-3.5-turbo');
if (empty($api_key)) {
wp_send_json_error(array('message' => 'ChatGPT API key is not configured.'));
}
require_once AI_WRITER_ASSISTANT_PATH . 'includes/api-integration.php';
$chatgpt_api = new AI_Writer_ChatGPT_API($api_key, $model);
$result = $chatgpt_api->generate_content($prompt, $max_tokens, $temperature);
} elseif ($provider === 'tongyi') {
$api_key = get_option('ai_writer_tongyi_api_key', '');
$app_code = get_option('ai_writer_tongyi_app_code', '');
if (empty($api_key) || empty($app_code)) {
wp_send_json_error(array('message' => 'Tongyi Qianwen API credentials are not configured.'));
}
require_once AI_WRITER_ASSISTANT_PATH . 'includes/api-integration.php';
$tongyi_api = new AI_Writer_Tongyi_API($api_key, $app_code);
$result = $tongyi_api->generate_content($prompt, $max_tokens, $temperature);
} else {
wp_send_json_error(array('message' => 'Invalid AI provider.'));
}
if ($result === false) {
wp_send_json_error(array('message' => 'Failed to generate content. Please check your API credentials and try again.'));
}
// 记录生成日志
global $wpdb;
$table_name = $wpdb->prefix . 'ai_writer_logs';
$wpdb->insert(
$table_name,
array(
'time' => current_time('mysql'),
'user_id' => get_current_user_id(),
'prompt' => $prompt,
'response' => $result['