WordPress集成ChatGPT与通义千问API实现AI写作插件方法

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.

WordPress集成ChatGPT与通义千问API实现AI写作插件方法'; } 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['