在当今快节奏的数字教育环境中,高质量的课程内容创建一直是教育工作者和内容创作者面临的重大挑战。开发一套完整的课程需要大量的时间和精力,从构思大纲到编写每节课的内容,整个过程既耗时又繁琐。为了解决这一问题,我们开发了”AI 课程生成器”——一款利用DeepSeek先进的人工智能技术,帮助用户在WordPress平台上自动生成结构化课程内容的插件。

https://github.com/hxxy2012/Deepseek-AI-Course-Generator

本文将从技术角度深入解析此插件的架构设计、核心功能实现以及关键代码,帮助开发者了解如何将AI技术与WordPress集成,打造高效的内容生成工具。

插件架构概述

“AI 课程生成器”遵循标准的WordPress插件架构设计,采用面向对象的编程方式,将功能模块化以提高代码的可维护性和扩展性。插件的整体结构如下:

Code
ai-course-generator/
├── ai-course-generator.php         # 插件主文件
├── admin/                          # 管理面板相关文件
│   ├── class-admin.php             # 管理界面类
│   ├── js/                         # JavaScript文件
│   │   └── admin.js                # 管理界面交互逻辑
│   └── css/                        # CSS样式文件
│       └── admin.css               # 管理界面样式
├── includes/                       # 核心功能文件
│   ├── class-api-connector.php     # DeepSeek API连接器
│   ├── class-course-generator.php  # 课程生成逻辑
│   └── class-wp-integration.php    # WordPress集成功能
└── languages/                      # 国际化语言文件
    ├── ai-course-generator-en_US.po
    └── ai-course-generator-zh_CN.po

插件的核心组件包括:

  1. API连接器:负责与DeepSeek API进行通信,处理请求和响应。
  2. 课程生成器:包含课程大纲和内容生成的核心逻辑。
  3. WordPress集成类:处理WordPress相关的功能,如AJAX请求和文章发布。
  4. 管理界面类:实现插件的管理后台界面和用户交互。

技术实现细节

1. 插件入口及初始化

插件的主文件ai-course-generator.php是整个插件的入口点,它定义了基本的插件信息,包括插件名称、版本、作者等元数据,并负责初始化插件的各个组件。以下是插件主文件的核心代码:

PHP
<?php
/**
 * Plugin Name: AI 课程生成器
 * Plugin URI: https://example.com/plugins/ai-course-generator
 * Description: 使用DeepSeek AI生成课程内容并发布为WordPress文章。
 * Version: 1.0.0
 * Author: Your Name
 * Author URI: https://example.com
 * License: GPL v2 or later
 * Text Domain: ai-course-generator
 * Domain Path: /languages
 */

// 定义插件常量
define('AICG_VERSION', '1.0.0');
define('AICG_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('AICG_PLUGIN_URL', plugin_dir_url(__FILE__));

// 加载语言文件
function aicg_load_textdomain() {
    load_plugin_textdomain('ai-course-generator', false, basename(dirname(__FILE__)) . '/languages');
}
add_action('plugins_loaded', 'aicg_load_textdomain');

// 包含必要的文件
require_once AICG_PLUGIN_DIR . 'includes/class-api-connector.php';
require_once AICG_PLUGIN_DIR . 'includes/class-course-generator.php';
require_once AICG_PLUGIN_DIR . 'includes/class-wp-integration.php';
require_once AICG_PLUGIN_DIR . 'admin/class-admin.php';

// 初始化插件
function aicg_init() {
    $aicg_api = new AICG_API_Connector();
    $aicg_generator = new AICG_Course_Generator($aicg_api);
    $aicg_wp = new AICG_WP_Integration($aicg_generator);
    $aicg_admin = new AICG_Admin($aicg_generator, $aicg_wp);
}
add_action('init', 'aicg_init');

在初始化过程中,插件进行了以下操作:

  1. 定义插件常量,用于存储版本号、目录路径等信息。
  2. 注册国际化支持,加载语言文件。
  3. 引入核心类文件。
  4. 通过aicg_init函数创建各个组件的实例并进行依赖注入。

2. DeepSeek API连接器实现

API连接器(class-api-connector.php)是插件的核心组件之一,负责与DeepSeek API进行通信。它封装了API调用的细节,提供了简单的接口供其他组件使用。以下是API连接器的关键实现:

PHP
class AICG_API_Connector {
    private $api_url;
    private $api_key;
    private $model;
    private $temperature;
    private $max_tokens;
    
    // 构造函数,从WordPress选项中加载设置
    public function __construct() {
        $options = get_option('aicg_settings');
        
        $this->api_url = isset($options['api_url']) ? $options['api_url'] : 'https://ark.cn-beijing.volces.com/api/v3/chat/completions';
        $this->api_key = isset($options['api_key']) ? $options['api_key'] : '';
        $this->model = isset($options['model']) ? $options['model'] : 'deepseek-v3-241226';
        $this->temperature = isset($options['temperature']) ? floatval($options['temperature']) : 0.7;
        $this->max_tokens = isset($options['max_tokens']) ? intval($options['max_tokens']) : 4096;
    }
    
    // 发送请求到DeepSeek API
    public function send_request($prompt, $custom_params = array()) {
        if (empty($this->api_key)) {
            return new WP_Error('api_key_missing', __('请设置DeepSeek API密钥', 'ai-course-generator'));
        }
        
        $params = array(
            "model" => $this->model,
            "messages" => array(
                array(
                    'role' => 'system',
                    'content' => '你是专业的内容创作者'
                ),
                array(
                    'role' => 'user',
                    'content' => $prompt
                )
            )
        );
        
        // 合并自定义参数
        if (!empty($custom_params)) {
            $params = array_merge($params, $custom_params);
        }
        
        // 使用WordPress的HTTP API发送请求
        $response = wp_remote_post($this->api_url, array(
            'headers' => array(
                'Content-Type' => 'application/json',
                'Authorization' => 'Bearer ' . $this->api_key,
            ),
            'body' => json_encode($params),
            'timeout' => 60,
        ));
        
        // 处理响应和错误
        if (is_wp_error($response)) {
            return $response;
        }
        
        $response_code = wp_remote_retrieve_response_code($response);
        if ($response_code !== 200) {
            $error_message = wp_remote_retrieve_response_message($response);
            return new WP_Error('api_error', sprintf(__('API错误(%s): %s', 'ai-course-generator'), $response_code, $error_message));
        }
        
        $body = json_decode(wp_remote_retrieve_body($response), true);
        
        if (json_last_error() !== JSON_ERROR_NONE) {
            return new WP_Error('json_error', __('无法解析API响应', 'ai-course-generator'));
        }
        
        return $body;
    }
    
    // 生成课程大纲
    public function generate_course_outline($topic, $lessons_count = 10) {
        $prompt = sprintf(
            __('请为主题"%s"创建一个详细的课程大纲,包含%d节课。每节课应有一个明确的标题和简短的描述。格式要求:1. 第一课标题 - 简短描述,2. 第二课标题 - 简短描述...依此类推', 'ai-course-generator'),
            $topic,
            $lessons_count
        );
        
        $result = $this->send_request($prompt);
        
        if (is_wp_error($result)) {
            return $result;
        }
        
        return isset($result['choices'][0]['message']['content']) ? $result['choices'][0]['message']['content'] : '';
    }
    
    // 生成课程内容
    public function generate_lesson_content($topic, $lesson_title, $lesson_description = '') {
        $prompt = sprintf(
            __('请为主题"%s"下的课程"%s"创建详细的教学内容。%s 内容应包含引言、主要知识点、实例、练习和总结。请使用Markdown格式,包括标题、列表和代码块等。', 'ai-course-generator'),
            $topic,
            $lesson_title,
            !empty($lesson_description) ? __('课程描述: ', 'ai-course-generator') . $lesson_description . '。' : ''
        );
        
        $result = $this->send_request($prompt);
        
        if (is_wp_error($result)) {
            return $result;
        }
        
        return isset($result['choices'][0]['message']['content']) ? $result['choices'][0]['message']['content'] : '';
    }
}

此类的技术要点包括:

  1. 配置管理:从WordPress选项中加载API配置,如API URL、密钥、模型名称等。
  2. 请求封装:使用WordPress内置的wp_remote_post函数发送HTTP请求,简化了HTTP调用的复杂性。
  3. 异常处理:使用WP_Error对象统一处理各类错误,便于上层逻辑进行错误处理。
  4. 提示词工程(Prompt Engineering):通过精心设计的提示词模板,引导AI生成符合要求的内容。

3. 课程生成器实现

课程生成器(class-course-generator.php)负责处理课程大纲的解析和内容生成。它依赖于API连接器来获取AI生成的内容,然后进行后处理,将原始文本转换为结构化的课程数据。以下是其核心实现:

PHP
class AICG_Course_Generator {
    private $api_connector;
    
    public function __construct($api_connector) {
        $this->api_connector = $api_connector;
    }
    
    // 解析课程大纲
    public function parse_course_outline($outline_text) {
        $lessons = array();
        $lines = explode("\n", $outline_text);
        
        foreach ($lines as $line) {
            // 移除空行
            $line = trim($line);
            if (empty($line)) {
                continue;
            }
            
            // 跳过标题行
            if (strpos($line, '#') === 0) {
                continue;
            }
            
            // 匹配格式为 "1. 标题 - 描述" 或 "1. 标题" 的行
            if (preg_match('/^\d+\.\s+(.+?)(?:\s+-\s+(.+))?$/', $line, $matches)) {
                $title = isset($matches[1]) ? trim($matches[1]) : '';
                $description = isset($matches[2]) ? trim($matches[2]) : '';
                
                if (!empty($title)) {
                    $lessons[] = array(
                        'title' => $title,
                        'description' => $description
                    );
                }
            }
        }
        
        return $lessons;
    }
    
    // 生成完整课程
    public function generate_course($topic, $lessons_count = 10) {
        // 生成课程大纲
        $outline_result = $this->api_connector->generate_course_outline($topic, $lessons_count);
        
        if (is_wp_error($outline_result)) {
            return $outline_result;
        }
        
        // 解析课程大纲
        $lessons = $this->parse_course_outline($outline_result);
        
        // 返回课程结构
        return array(
            'topic' => $topic,
            'outline_text' => $outline_result,
            'lessons' => $lessons,
            'contents' => array()
        );
    }
    
    // 为单个课程生成内容
    public function generate_lesson_content($course_data, $lesson_index) {
        if (!isset($course_data['lessons'][$lesson_index])) {
            return new WP_Error('invalid_lesson', __('无效的课程索引', 'ai-course-generator'));
        }
        
        $lesson = $course_data['lessons'][$lesson_index];
        $content = $this->api_connector->generate_lesson_content(
            $course_data['topic'],
            $lesson['title'],
            $lesson['description']
        );
        
        return $content;
    }
    
    // 生成所有课程内容
    public function generate_all_lessons_content($course_data) {
        $contents = array();
        
        foreach ($course_data['lessons'] as $index => $lesson) {
            $content = $this->generate_lesson_content($course_data, $index);
            
            if (is_wp_error($content)) {
                $contents[$index] = array(
                    'error' => $content->get_error_message()
                );
            } else {
                $contents[$index] = $content;
            }
        }
        
        $course_data['contents'] = $contents;
        return $course_data;
    }
}

此类的技术要点包括:

  1. 文本解析:使用正则表达式解析AI生成的课程大纲,提取课程标题和描述信息。
  2. 依赖注入:通过构造函数接收API连接器实例,实现了组件间的解耦。
  3. 错误传递:保持错误处理的一致性,将API调用的错误向上传递。
  4. 数据结构设计:设计了清晰的课程数据结构,包含主题、大纲文本、课程列表和内容等信息。

4. WordPress集成实现

WordPress集成类(class-wp-integration.php)负责将课程生成器与WordPress系统集成,主要包括AJAX请求处理和文章发布功能。以下是关键实现:

PHP
class AICG_WP_Integration {
    private $course_generator;
    
    public function __construct($course_generator) {
        $this->course_generator = $course_generator;
        
        // 添加AJAX处理函数
        add_action('wp_ajax_aicg_generate_course', array($this, 'ajax_generate_course'));
        add_action('wp_ajax_aicg_generate_lesson', array($this, 'ajax_generate_lesson'));
        add_action('wp_ajax_aicg_generate_all_lessons', array($this, 'ajax_generate_all_lessons'));
        add_action('wp_ajax_aicg_publish_course', array($this, 'ajax_publish_course'));
    }
    
    // AJAX处理:生成课程大纲
    public function ajax_generate_course() {
        // 验证nonce token,确保请求安全
        check_ajax_referer('aicg_nonce', 'nonce');
        
        // 检查用户权限
        if (!current_user_can('edit_posts')) {
            wp_send_json_error(array('message' => __('权限不足', 'ai-course-generator')));
            return;
        }
        
        // 获取并验证输入参数
        $topic = isset($_POST['topic']) ? sanitize_text_field($_POST['topic']) : '';
        $lessons_count = isset($_POST['lessons_count']) ? intval($_POST['lessons_count']) : 10;
        
        if (empty($topic)) {
            wp_send_json_error(array('message' => __('请输入课程主题', 'ai-course-generator')));
            return;
        }
        
        // 生成课程大纲
        $course_data = $this->course_generator->generate_course($topic, $lessons_count);
        
        if (is_wp_error($course_data)) {
            wp_send_json_error(array('message' => $course_data->get_error_message()));
            return;
        }
        
        // 将课程数据存储在会话中,以便后续使用
        update_option('aicg_current_course_data', $course_data);
        
        // 返回成功响应
        wp_send_json_success(array(
            'outline' => $course_data['outline_text'],
            'lessons' => $course_data['lessons']
        ));
    }
    
    // 发布课程为WordPress文章
    public function publish_lesson($lesson_title, $lesson_content, $args = array()) {
        $defaults = array(
            'post_status' => 'draft',
            'post_category' => array(),
            'tags_input' => array(),
            'post_author' => get_current_user_id()
        );
        
        $args = wp_parse_args($args, $defaults);
        
        // 创建文章对象
        $post_data = array(
            'post_title'    => $lesson_title,
            'post_content'  => $lesson_content,
            'post_status'   => $args['post_status'],
            'post_author'   => $args['post_author'],
            'post_category' => $args['post_category'],
            'tags_input'    => $args['tags_input'],
        );
        
        // 插入文章
        $post_id = wp_insert_post($post_data);
        
        if (is_wp_error($post_id)) {
            return $post_id;
        }
        
        return array(
            'post_id' => $post_id,
            'post_url' => get_permalink($post_id)
        );
    }
}

此类的技术要点包括:

  1. AJAX处理:注册并处理前端AJAX请求,实现异步生成课程内容。
  2. 安全性检查:使用check_ajax_referer验证请求的有效性,防止CSRF攻击。
  3. 权限控制:检查用户是否具有编辑文章的权限。
  4. 数据持久化:使用WordPress选项API存储生成的课程数据。
  5. 文章发布:封装WordPress的wp_insert_post函数,实现课程内容的发布。

5. 管理界面实现

管理界面类(class-admin.php)负责构建插件的后台界面,包括设置页面和课程生成页面。它使用WordPress的Settings API来管理配置选项,并引入自定义脚本和样式以增强用户体验。以下是部分关键代码:

PHP
class AICG_Admin {
    private $course_generator;
    private $wp_integration;
    
    public function __construct($course_generator, $wp_integration) {
        $this->course_generator = $course_generator;
        $this->wp_integration = $wp_integration;
        
        // 添加管理菜单
        add_action('admin_menu', array($this, 'add_admin_menu'));
        
        // 注册设置
        add_action('admin_init', array($this, 'register_settings'));
        
        // 加载管理界面资源
        add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
    }
    
    // 添加管理菜单
    public function add_admin_menu() {
        add_menu_page(
            __('AI 课程生成器', 'ai-course-generator'),
            __('AI 课程生成器', 'ai-course-generator'),
            'manage_options',
            'ai-course-generator',
            array($this, 'settings_page'),
            'dashicons-welcome-learn-more'
        );
        
        add_submenu_page(
            'ai-course-generator',
            __('设置', 'ai-course-generator'),
            __('设置', 'ai-course-generator'),
            'manage_options',
            'ai-course-generator-settings',
            array($this, 'settings_page')
        );
        
        add_submenu_page(
            'ai-course-generator',
            __('生成课程', 'ai-course-generator'),
            __('生成课程', 'ai-course-generator'),
            'edit_posts',
            'ai-course-generator-generate',
            array($this, 'generate_page')
        );
    }
    
    // 加载管理界面资源
    public function enqueue_admin_scripts($hook) {
        if ($hook === 'toplevel_page_ai-course-generator' || $hook === 'ai-course-generator_page_ai-course-generator-generate') {
            wp_enqueue_style('aicg-admin-css', AICG_PLUGIN_URL . 'admin/css/admin.css', array(), AICG_VERSION);
            wp_enqueue_script('aicg-admin-js', AICG_PLUGIN_URL . 'admin/js/admin.js', array('jquery'), AICG_VERSION, true);
            
            wp_localize_script('aicg-admin-js', 'aicg_ajax', array(
                'ajax_url' => admin_url('admin-ajax.php'),
                'nonce' => wp_create_nonce('aicg_nonce'),
                'i18n' => array(
                    'enter_course_topic' => __('请输入课程主题', 'ai-course-generator'),
                    'enter_course_outline' => __('请输入课程大纲', 'ai-course-generator'),
                    'generating' => __('生成中...', 'ai-course-generator'),
                    'generate_course_outline' => __('生成课程大纲', 'ai-course-generator'),
                    'generate_all_lessons' => __('生成所有课程内容', 'ai-course-generator'),
                    'publishing' => __('发布中...', 'ai-course-generator'),
                    'publish_course' => __('发布课程', 'ai-course-generator'),
                    'published' => __('已发布', 'ai-course-generator')
                )
            ));
        }
    }
}

前端JavaScript实现了用户界面的交互逻辑,包括AJAX请求发送和响应处理:

JavaScript
jQuery(document).ready(function($) {
    var $outlineTextarea = $('#aicg-course-outline');
    var $lessonSelect = $('#aicg-lesson-select');
    var $lessonContentEditor = $('#aicg-lesson-content');
    var $generateOutlineButton = $('#aicg-generate-outline');
    var $generateAllLessonsButton = $('#aicg-generate-all-lessons');
    var $publishCourseButton = $('#aicg-publish-course');
    
    $generateOutlineButton.on('click', function() {
        var topic = $('#aicg-course-topic').val().trim();
        var lessonsCount = parseInt($('#aicg-lessons-count').val(), 10);
        var model = $('#aicg-ai-model').val().trim();
        
        if (!topic) {
            alert(aicg_ajax.i18n.enter_course_topic);
            return;
        }
        
        $.ajax({
            url: aicg_ajax.ajax_url,
            method: 'POST',
            data: {
                action: 'aicg_generate_course',
                nonce: aicg_ajax.nonce,
                topic: topic,
                lessons_count: lessonsCount,
                model: model
            },
            beforeSend: function() {
                $generateOutlineButton.prop('disabled', true).text(aicg_ajax.i18n.generating);
            },
            success: function(response) {
                if (response.success) {
                    $outlineTextarea.val(response.data.outline);
                    updateLessonSelect(response.data.lessons);
                } else {
                    alert(response.data.message);
                }
            },
            complete: function() {
                $generateOutlineButton.prop('disabled', false).text(aicg_ajax.i18n.generate_course_outline);
            }
        });
    });
    
    // 其他事件处理...
});

管理界面实现的技术要点包括:

  1. WordPress管理菜单:使用add_menu_pageadd_submenu_page创建自定义管理菜单。
  2. Settings API:利用WordPress的Settings API管理插件配置。
  3. 脚本本地化:使用wp_localize_script将服务器端数据和翻译字符串传递给JavaScript。
  4. WordPress编辑器集成:集成TinyMCE编辑器,用于编辑生成的课程内容。
  5. 用户体验优化:实现进度反馈和错误处理,提供良好的用户体验。

6. 国际化支持

插件实现了完整的国际化支持,使用WordPress的本地化机制,支持英文和中文两种语言。关键实现包括:

  1. 文本域定义:在插件头部定义Text DomainDomain Path
  2. 语言文件加载:通过load_plugin_textdomain函数加载语言文件。
  3. 文本翻译:使用___e等函数包装所有用户可见的字符串。
  4. JavaScript字符串翻译:通过wp_localize_script将翻译后的字符串传递给JavaScript。

技术挑战与解决方案

在开发过程中,我们遇到了一些技术挑战,以下是关键挑战及其解决方案:

1. 大量文本生成的性能问题

挑战:生成完整课程内容可能需要多次API调用,每次调用都有一定的延迟,导致整个过程耗时较长。

解决方案

  • 实现了分步生成机制,先生成大纲,再生成详细内容。
  • 对于多节课程的内容生成,保存中间状态,允许用户在等待过程中进行其他操作。
  • 提供直观的进度反馈,改善用户体验。

2. AI生成内容的格式解析

挑战:AI生成的文本格式可能不一致,需要稳健的解析算法来提取课程标题和描述。

解决方案

  • 使用正则表达式解析各种可能的格式。
  • 在API请求中加入明确的格式要求,引导AI生成结构化内容。
  • 对于无法解析的内容,提供手动编辑功能。

3. WordPress与AI API的安全集成

挑战:需要安全地存储和使用API密钥,并确保所有API请求都经过适当的验证。

解决方案

  • 使用WordPress的Options API安全存储API凭证。
  • 对所有AJAX请求实施Nonce验证,防止CSRF攻击。
  • 权限检查确保只有授权用户可以生成和发布内容。

未来改进方向

基于当前版本的实现,我们规划了以下改进方向:

  1. 批量发布功能:允许一次性发布整个课程的所有内容。
  2. 内容质量评估:增加内容质量评分功能,帮助用户改进生成的内容。
  3. 内容优化建议:提供SEO优化建议,提高内容的可发现性。
  4. 模板系统:实现可定制的提示词模板,满足不同类型课程的需求。
  5. 多媒体集成:自动为课程生成相关图片或视频素材,丰富内容展现形式。

总结

“AI 课程生成器”插件是WordPress和AI技术结合的一个典型案例,它展示了如何将先进的AI能力集成到现有的内容管理系统中,大幅提高内容创建效率。从技术实现角度看,该插件采用了模块化设计、依赖注入、面向对象编程等现代软件工程实践,保证了代码的可维护性和扩展性。

通过合理封装DeepSeek API,实现了用户友好的界面,使得非技术用户也能轻松利用AI技术创建高质量的课程内容。插件的开源特性也使得开发者可以根据自身需求进行定制和扩展,为WordPress生态系统增加了新的可能性。

希望本文对您理解AI与内容管理系统的集成有所帮助,也欢迎对插件进行贡献和改进。

Categorized in: