在如今的数字化教育浪潮中,高质量教学内容的自动化生成已成为许多教育工作者的迫切需求。本文将深入探讨一款基于AI技术的WordPress插件——AI课程生成器的技术实现细节,特别聚焦于AI交互部分的设计与实现。
插件架构概述
AI课程生成器采用了模块化的设计理念,核心功能分为四大模块:
- 管理界面模块:负责用户交互界面的呈现与处理
- AI交互模块:处理与AI服务的通信与数据交换
- 内容处理模块:清理和格式化AI生成的内容
- WordPress集成模块:将处理后的内容集成到WordPress文章系统
这种结构确保了代码的可维护性和扩展性,使插件可以轻松适应不同的AI服务提供商和内容格式。
AI交互模块深度解析
1. API通信机制
插件通过标准的HTTP请求与AI服务进行通信,核心代码如下:
private function call_deepseek_api($messages) {
$api_url = get_option('aicg_deepseek_api_url');
$api_key = get_option('aicg_deepseek_api_key');
$model = get_option('aicg_deepseek_model');
// 确保始终有system消息
$has_system_message = false;
foreach ($messages as $message) {
if ($message['role'] === 'system') {
$has_system_message = true;
break;
}
}
if (!$has_system_message) {
array_unshift($messages, array(
'role' => 'system',
'content' => '你是专业的教育内容创作者'
));
}
$response = wp_remote_post(
$api_url,
array(
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key
),
'body' => json_encode(array(
'model' => $model,
'messages' => $messages,
'temperature' => 0.7
)),
'timeout' => 120
)
);
// 响应处理逻辑...
}
这段代码展示了几个技术要点:
- 参数配置灵活性:所有关键参数(API URL、密钥、模型名称)均可通过WordPress设置页面配置
- 安全消息预处理:确保每次请求都包含system消息,提高AI响应质量
- 适当的超时设置:考虑到内容生成可能需要较长时间,设置了120秒的超时时间
- 标准化的请求格式:采用通用的chat completions API格式,确保与多种AI服务兼容
2. Prompt工程详解
插件的核心价值在于精心设计的prompt,针对不同的生成任务,设计了特定的prompt模板:
课程大纲生成Prompt
$messages = array(
array(
'role' => 'system',
'content' => '你是一位专业的教育课程设计师,擅长创建结构清晰、内容丰富的在线课程大纲。'
),
array(
'role' => 'user',
'content' => "请为主题为【{$topic}】的课程创建一个详细的大纲,包含{$lessons_count}节课。" .
($description ? "课程描述:{$description}" : "") .
"请以JSON格式返回,包括课程标题、简短描述和章节列表,每个章节包含标题和简短描述。格式如下:
{
\"course_title\": \"课程标题\",
\"course_description\": \"课程整体描述\",
\"lessons\": [
{
\"title\": \"第一课标题\",
\"description\": \"第一课简短描述\"
},
...
]
}
确保返回的是有效的JSON格式,不要添加任何其他文本。"
)
);
这个prompt设计的技术亮点包括:
- 角色定位明确:将AI定位为”专业的教育课程设计师”,引导其产出更专业的内容
- 任务说明清晰:明确指定课程主题、课程数量等关键参数
- 结构化输出要求:要求AI以JSON格式返回,便于程序解析和处理
- 格式示例提供:给出具体的JSON结构示例,减少格式错误
- 关键约束强调:强调返回有效JSON,避免额外文本干扰
章节内容生成Prompt
$messages = array(
array(
'role' => 'system',
'content' => '你是一位专业的教育内容创作者,擅长创建详细、有教育价值的课程内容。'
),
array(
'role' => 'user',
'content' => "请为课程【{$course_title}】中的章节【{$lesson_title}】创建详细的内容。" .
($lesson_description ? "章节描述:{$lesson_description}" : "") .
"请创建一篇完整的教学内容,包括:
1. 引言
2. 核心概念讲解
3. 实例和练习
4. 总结
内容要全面、深入浅出,使用Markdown格式,添加适当的小标题分隔各个部分。确保内容对初学者友好,同时又有足够的深度。"
)
);
这里的技术亮点是:
- 角色切换:从课程设计师变为内容创作者,适应不同的生成任务
- 上下文信息提供:将课程标题和章节标题作为上下文提供给AI,保持内容一致性
- 内容结构指导:明确指定四部分内容结构,确保生成内容的完整性
- 格式要求说明:要求使用Markdown格式,便于后续处理和展示
- 质量要求明确:”深入浅出”、”初学者友好但有深度”等质量要求指导AI生成平衡的内容
3. 响应处理策略
AI响应的处理同样体现了插件的技术深度:
$body = json_decode(wp_remote_retrieve_body($response), true);
if (isset($body['error'])) {
return array(
'success' => false,
'message' => $body['error']['message']
);
}
if (!isset($body['choices'][0]['message']['content'])) {
// 尝试其他可能的响应格式
if (isset($body['data']) && isset($body['data']['content'])) {
return array(
'success' => true,
'content' => $body['data']['content']
);
} else if (isset($body['content'])) {
return array(
'success' => true,
'content' => $body['content']
);
} else if (isset($body['response'])) {
return array(
'success' => true,
'content' => $body['response']
);
} else {
return array(
'success' => false,
'message' => '从API返回的响应格式不正确',
'raw_response' => wp_json_encode($body)
);
}
}
技术要点:
- 多格式兼容:处理不同API可能返回的多种响应格式
- 错误处理标准化:将各种错误转换为统一的返回格式
- 调试信息保留:当遇到无法识别的响应格式时,保留原始响应用于调试
- 返回结构一致性:无论成功或失败,都返回统一结构的数据,便于调用方处理
内容处理模块详解
将AI生成的内容转换为WordPress友好的格式是另一个技术挑战。特别是处理Markdown格式时,插件采用了精心设计的正则表达式处理流程:
private function process_content_for_wordpress($content) {
// 步骤1: 预处理 - 确保换行格式一致
$content = str_replace("\r\n", "\n", $content);
// 步骤2: 移除代码块标记
$content = preg_replace('/```(markdown|md|json|js|php|python|java|html|css|sql|bash|)[^\n]*\n/i', '', $content);
$content = preg_replace('/```\s*$/im', '', $content);
// 步骤3: 处理标题并完全清理#号
// 首先处理连续的#号标题格式
$content = preg_replace_callback('/^(\#{1,6})\s+(.+?)$/m', function($matches) {
$level = strlen($matches[1]);
return "<h$level>" . trim($matches[2]) . "</h$level>";
}, $content);
// 更多处理步骤...
return $content;
}
这个处理流程的技术亮点包括:
- 多步骤处理管道:将复杂的处理分解为多个独立步骤,每步专注于一类转换
- 精确的正则表达式:使用精心设计的正则表达式精确匹配Markdown语法
- 兼容性考虑:处理多种换行符和不同编程语言的代码块标记
- 回调函数处理:对于复杂的替换逻辑,使用回调函数实现灵活处理
- 错误韧性:即使部分处理步骤失败,仍能保持整体内容的可用性
WordPress集成模块
插件最终将处理好的内容集成到WordPress文章系统中:
$post_data = array(
'post_title' => sanitize_text_field($lesson['title']),
'post_content' => $processed_content,
'post_status' => 'publish',
'post_author' => $author_id,
'post_type' => 'post',
'post_parent' => $parent_id
);
if ($category_id) {
$post_data['post_category'] = array($category_id);
}
$post_id = wp_insert_post($post_data);
// 添加自定义元数据
add_post_meta($post_id, '_aicg_course_id', $parent_id, true);
add_post_meta($post_id, '_aicg_lesson_number', $index + 1, true);
技术亮点:
- 安全处理:使用WordPress内置的sanitize函数确保内容安全
- 层级结构:利用WordPress的parent-child关系创建课程-章节结构
- 元数据扩展:使用自定义元数据存储额外信息,便于后续查询和管理
- 灵活分类:支持将课程内容归类到特定分类目录
前端交互与用户体验
插件前端采用了现代的交互设计,使用jQuery和AJAX实现无刷新操作:
// 生成章节内容
function generateLessonContent(index) {
if (index >= totalLessons) {
// 所有章节都已生成
$('#lessons_loading').hide();
displayLessonsContent();
$('#course_lessons_container').show();
return;
}
updateLoadingText();
const lesson = courseData.lessons[index];
$.ajax({
url: aicg_ajax.ajax_url,
type: 'POST',
data: {
action: 'generate_lesson_content',
nonce: aicg_ajax.nonce,
course_title: courseData.course_title,
lesson_title: lesson.title,
lesson_description: lesson.description
},
success: function(response) {
if (response.success) {
courseData.lessons[index].content = response.data.content;
completedLessons++;
updateLoadingText();
// 生成下一个章节
generateLessonContent(index + 1);
} else {
$('#lessons_loading').hide();
$('#generate_lessons').prop('disabled', false);
alert('生成章节内容失败: ' + response.data);
}
},
error: function() {
$('#lessons_loading').hide();
$('#generate_lessons').prop('disabled', false);
alert('请求失败,请检查网络连接');
}
});
}
技术亮点:
- 递归处理:使用递归函数依次处理每个章节,避免并发请求过多
- 进度反馈:实时更新处理进度,提高用户体验
- 错误处理:详细的错误处理和友好的错误提示
- 数据状态管理:在前端保持课程数据状态,减少后端交互次数
- 安全性考虑:使用WordPress nonce机制防止CSRF攻击
性能优化与挑战
在开发过程中,我们遇到并解决了多项技术挑战:
1. Markdown处理的复杂性
Markdown格式处理是一个主要挑战,特别是确保所有Markdown标记都被正确转换为HTML,同时保留内容结构。解决方案是开发了多阶段的处理管道,每个阶段专注于一类转换任务。
2. API响应处理的灵活性
不同AI服务提供商的API响应格式各不相同,为了支持多种服务,插件设计了灵活的响应解析逻辑,能够适应不同的响应结构。
3. 长内容处理的性能问题
生成和处理长篇课程内容会消耗较多的服务器资源,插件通过以下策略优化性能:
- 增加脚本执行时间限制,避免长内容处理超时
- 优化正则表达式,减少复杂匹配操作
- 使用递归处理大型数据,避免一次性处理导致的内存问题
4. 兼容性确保
为确保在各种WordPress环境中正常运行,插件做了以下工作:
- 使用WordPress标准API而非直接操作数据库
- 避免使用新版PHP才支持的语法特性
- 针对旧版本PHP提供替代实现方案
未来技术方向
插件的技术架构为未来扩展奠定了基础,计划的技术发展方向包括:
- 支持更多AI服务:扩展API适配器,支持更多AI服务提供商
- 增强内容处理能力:支持更复杂的内容格式和结构
- 引入内容质量评估:集成自动评估机制,提供内容质量改进建议
- 批量课程管理:引入课程管理系统,支持批量生成和管理
- 多语言支持:扩展为支持多语言课程生成