2026/5/21 12:57:16
网站建设
项目流程
重庆市工程建设信息网官方网站,手机网站前端写法,重庆公路工程建设信息管理系统,帮你省网站怎么做优化后的三路径学习系统本文提出了一种三路径学习系统优化方案#xff0c;通过智能分析原始PPT内容生成三种学习路径#xff1a;A路径#xff08;速通版#xff09;合并相关知识点形成精炼内容#xff1b;B路径#xff08;正常版#xff09;保持原始PPT顺序#xff1b;…优化后的三路径学习系统本文提出了一种三路径学习系统优化方案通过智能分析原始PPT内容生成三种学习路径A路径速通版合并相关知识点形成精炼内容B路径正常版保持原始PPT顺序C路径刷题版在知识点后插入练习题。系统首先解析PPT提取内容X slides然后通过LLM分析生成知识点分析报告据此构建Y slides压缩版和Z slides练习版最终自动组合成三条个性化学习路径。该方案能根据学习者需求提供差异化学习体验提高学习效率。阶段一内容预处理与路径生成1. 开始节点输入变量-original_ppt_file:爬取的原始PPT文件-course_name:课程名称2. 代码节点解析原始PPT节点类型代码执行使用库python-pptxfrompptximportPresentationimportjsondefmain(original_ppt_file): 解析原始PPT提取X slides # 读取PPT文件prsPresentation(original_ppt_file)x_slides[]foridx,slideinenumerate(prs.slides):slide_data{id:fX{idx1},type:X,slide_number:idx1,title:,content:[],has_image:False}# 提取标题ifslide.shapes.title:slide_data[title]slide.shapes.title.text# 提取文本内容forshapeinslide.shapes:ifhasattr(shape,text)andshape.text:slide_data[content].append(shape.text)# 检查是否有图片forshapeinslide.shapes:ifshape.shape_type13:# 图片slide_data[has_image]Truex_slides.append(slide_data)return{x_slides:x_slides,total_x_slides:len(x_slides),x_slides_json:json.dumps(x_slides,ensure_asciiFalse)}3. LLM节点分析X slides知识点Prompt你是教学内容分析专家。请分析以下PPT slides提取核心知识点。 原始Slides (X类型): {{x_slides_json}} 任务 1. 为每个X slide标注核心知识点 2. 识别哪些slides可以合并知识点相关 3. 识别哪些知识点需要额外练习 4. 估计每个slide的难度1-5 输出格式严格JSON { slides_analysis: [ { slide_id: X1, knowledge_points: [概念A, 概念B], difficulty: 3, can_merge_with: [X2], needs_practice: true } ], merge_groups: [ { group_id: G1, source_slides: [X1, X2, X3], combined_knowledge: [概念A, 概念B, 概念C] } ] }输出变量slides_analysis4. LLM节点生成Y slides速通版Prompt基于以下分析结果生成Y类型slides压缩精炼版。 原始分析 {{slides_analysis}} 原始X slides {{x_slides_json}} 要求 1. 合并相关知识点减少slide数量 2. 提炼核心概念去除冗余 3. 可以适当加入超纲但相关的高级内容 4. 每个Y slide应该覆盖2-3个原始X slide的内容 例如 - X1 (函数基础) X2 (函数参数) X3 (返回值) → Y1 (函数完整机制定义、参数、返回值、高阶函数预览) 输出格式严格JSON { y_slides: [ { id: Y1, type: Y, title: 精炼后的标题, content: [ 核心要点1, 核心要点2, 进阶提示 ], covers_x_slides: [X1, X2, X3], advanced_topic: 高阶函数简介, estimated_time: 3分钟 } ], y_to_x_mapping: { Y1: [X1, X2, X3], Y2: [X4, X5] } }输出变量y_slides_data5. LLM节点生成Z slides刷题巩固版Prompt基于以下分析为需要巩固的知识点生成Z类型slides刷题练习版。 原始分析 {{slides_analysis}} 原始X slides {{x_slides_json}} 要求 1. 为每个标记为needs_practice的知识点生成一个Z slide 2. Z slide包含 - 概念回顾简化版 - 3-5道练习题带详细解析 - 常见错误提示 3. 插入位置在对应的X slide之后 输出格式严格JSON { z_slides: [ { id: Z1, type: Z, title: 练习{{知识点名称}}, insert_after: X1, concept_review: 概念回顾内容, practice_questions: [ { question: 题目内容, options: {A: ..., B: ..., C: ..., D: ...}, correct: B, explanation: 详细解析 } ], common_mistakes: [错误1, 错误2] } ] }输出变量z_slides_data6. 代码节点构建三条路径节点类型代码执行importjsondefmain(x_slides_json,y_slides_data,z_slides_data): 构建A、B、C三条学习路径 x_slidesjson.loads(x_slides_json)y_slidesjson.loads(y_slides_data)[y_slides]z_slidesjson.loads(z_slides_data)[z_slides]y_to_x_mappingjson.loads(y_slides_data)[y_to_x_mapping]# B路径正常组所有X slides按顺序path_b{name:B路径 - 正常学习,description:按照原始PPT顺序学习所有内容,slides:x_slides,total_slides:len(x_slides),estimated_time:len(x_slides)*5# 每个slide 5分钟}# A路径速通组Y slides 未覆盖的X slidescovered_xset()fory_id,x_listiny_to_x_mapping.items():covered_x.update(x_list)path_a_slides[]x_idx0fory_slideiny_slides:path_a_slides.append(y_slide)# 跳过被覆盖的X slideswhilex_idxlen(x_slides)andx_slides[x_idx][id]iny_slide[covers_x_slides]:x_idx1# 添加未覆盖的X slideswhilex_idxlen(x_slides)andx_slides[x_idx][id]notincovered_x:path_a_slides.append(x_slides[x_idx])x_idx1path_a{name:A路径 - 速通学习,description:精炼内容适合基础较好的学习者,slides:path_a_slides,total_slides:len(path_a_slides),estimated_time:len(path_a_slides)*3}# C路径刷题组X slides Z slides穿插path_c_slides[]z_dict{z[insert_after]:zforzinz_slides}forx_slideinx_slides:path_c_slides.append(x_slide)# 如果有对应的Z slide插入ifx_slide[id]inz_dict:path_c_slides.append(z_dict[x_slide[id]])path_c{name:C路径 - 强化练习,description:原始内容额外练习适合需要巩固的学习者,slides:path_c_slides,total_slides:len(path_c_slides),estimated_time:len(path_c_slides)*6}return{path_a:path_a,path_b:path_b,path_c:path_c,summary:{x_slides_count:len(x_slides),y_slides_count:len(y_slides),z_slides_count:len(z_slides),path_a_slides:len(path_a_slides),path_b_slides:len(x_slides),path_c_slides:len(path_c_slides)}}7. 代码节点为每个slide生成测试题使用迭代器遍历所有slidesdefmain(slide_content,slide_type): 根据slide类型生成不同难度的测试题 # 对于Y类型速通题目更难# 对于X类型正常题目中等# 对于Z类型刷题题目已经包含在内容中ifslide_typeZ:# Z slide已有题目直接返回return{quiz:slide_content.get(practice_questions,[])}# 否则需要LLM生成return{needs_generation:True}阶段二用户交互流程1. 会话初始化输入变量-user_id:用户ID-course_id:课程ID 初始化变量-current_path:B# 默认从B路径开始-current_slide_index:0-user_history:[]-performance_scores:[]2. 显示Slide节点节点类型模板【当前路径{{current_path}}路径】 进度{{current_slide_index 1}} / {{total_slides}} --- # {{current_slide.title}} {{#each current_slide.content}} • {{this}} {{/each}} {{#if current_slide.type Y}} 本页覆盖原始内容{{current_slide.covers_x_slides}} 进阶内容{{current_slide.advanced_topic}} {{/if}} {{#if current_slide.type Z}} 概念回顾{{current_slide.concept_review}} 常见错误{{current_slide.common_mistakes}} {{/if}} --- 准备好后点击开始测试3. 显示测试题节点类型问题节点展示当前slide的3道测试题 输入格式A,B,C 或 A B C 变量名user_answers4. 代码节点评分与路径切换defmain(user_answers,quiz,current_path,current_slide,all_paths): 评分并决定路径切换 # 解析答案answers[a.strip().upper()forainuser_answers.replace(,, ).split()]correct_answers[q[correct]forqinquiz]# 计算正确数correct_countsum(1foriinrange(3)ifanswers[i]correct_answers[i])# 路径切换逻辑next_pathcurrent_path switch_messageifcorrect_count3:# 答对3题ifcurrent_path!A:next_pathAswitch_message全对切换到A路径速通模式else:switch_message继续保持A路径elifcorrect_count2:# 答对2题ifcurrent_path!B:next_pathBswitch_message不错切换到B路径正常模式else:switch_message继续保持B路径else:# 答对0-1题ifcurrent_path!C:next_pathCswitch_message需要巩固切换到C路径强化练习else:switch_message继续C路径加强练习# 计算下一个slide索引# 如果切换了路径需要找到对应位置next_indexcalculate_next_index(current_slide,current_path,next_path,all_paths)return{correct_count:correct_count,next_path:next_path,next_index:next_index,switch_message:switch_message,path_changed:next_path!current_path}defcalculate_next_index(current_slide,old_path,new_path,all_paths): 计算路径切换后的对应位置 ifold_pathnew_path:# 路径未变直接下一个returncurrent_slide[index]1# 路径变化找到对应的知识点位置current_knowledgecurrent_slide.get(knowledge_points,[])new_path_slidesall_paths[new_path][slides]# 找到新路径中覆盖相同知识点的下一个slideforidx,slideinenumerate(new_path_slides):ifany(kpinslide.get(knowledge_points,[])forkpincurrent_knowledge):returnidx1# 如果找不到从新路径的下一个位置开始return05. 条件分支是否结束判断条件 IF{{next_index}}{{total_slides}}:→ 进入生成学习报告ELSE:→ 返回显示Slide循环继续6. LLM节点生成学习报告用户完成了课程学习 学习数据 - 起始路径B - 最终路径{{current_path}} - 路径切换历史{{path_history}} - 总答题数{{total_questions}} - 正确率{{overall_accuracy}}% 请生成学习报告 1. 学习路径可视化 2. 知识点掌握情况 3. 强项与弱项分析 4. 后续学习建议 格式Markdown路径示例假设有10个X slides原始PPTX slidesX1: Python简介 X2: 变量与类型 X3: 运算符 X4: 条件语句 X5: 循环基础 X6: 循环高级 X7: 函数定义 X8: 函数参数 X9: 函数返回值 X10: 模块导入B路径正常组- 10个slidesX1 → X2 → X3 → X4 → X5 → X6 → X7 → X8 → X9 → X10A路径速通组- 6个slidesY1 (覆盖X1X2X3: 基础语法精炼) → X4 → Y2 (覆盖X5X6: 循环完整机制列表推导式) → Y3 (覆盖X7X8X9: 函数全貌装饰器预览) → X10C路径刷题组- 15个slidesX1 → Z1 (Python安装练习) → X2 → Z2 (类型转换练习) → X3 → X4 → Z3 (条件判断练习) → X5 → Z4 (循环练习1) → X6 → Z5 (循环练习2) → X7 → Z6 (函数练习) → X8 → X9 → X10Dify实现要点两个WorkflowWorkflow 1: “内容预处理器”上传原始PPT解析X slides生成Y slidesLLM生成Z slidesLLM构建三条路径为每个slide生成测试题保存到数据库Workflow 2: “自适应学习系统”加载课程数据显示当前slide用户答题评分3题全对→A2题→B0-1题→C切换路径如需要循环直到结束生成报告数据结构示例{course_id:python_basics_001,paths:{A:{slides:[...],total:6},B:{slides:[...],total:10},C:{slides:[...],total:15}},user_session:{current_path:B,current_index:3,history:[B,A,A],scores:[2,3,3]}}这个设计的优势不需要指数级节点三条清晰的路径动态路径切换基于真实PPT内容LLM只生成必要的Y和Z