news 2026/4/21 7:26:51

【1902】优化后的三路径学习系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【1902】优化后的三路径学习系统

优化后的三路径学习系统

本文提出了一种三路径学习系统优化方案,通过智能分析原始PPT内容生成三种学习路径:A路径(速通版)合并相关知识点形成精炼内容;B路径(正常版)保持原始PPT顺序;C路径(刷题版)在知识点后插入练习题。系统首先解析PPT提取内容(X slides),然后通过LLM分析生成知识点分析报告,据此构建Y slides(压缩版)和Z slides(练习版),最终自动组合成三条个性化学习路径。该方案能根据学习者需求提供差异化学习体验,提高学习效率。

阶段一:内容预处理与路径生成

1. 开始节点

输入变量:-original_ppt_file:爬取的原始PPT文件-course_name:课程名称

2. 代码节点:解析原始PPT

节点类型:代码执行
使用库:python-pptx

frompptximportPresentationimportjsondefmain(original_ppt_file):""" 解析原始PPT,提取X slides """# 读取PPT文件prs=Presentation(original_ppt_file)x_slides=[]foridx,slideinenumerate(prs.slides):slide_data={"id":f"X{idx+1}","type":"X","slide_number":idx+1,"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_type==13:# 图片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_ascii=False)}

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_analysis


4. 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_data


5. 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_data


6. 代码节点:构建三条路径

节点类型:代码执行

importjsondefmain(x_slides_json,y_slides_data,z_slides_data):""" 构建A、B、C三条学习路径 """x_slides=json.loads(x_slides_json)y_slides=json.loads(y_slides_data)["y_slides"]z_slides=json.loads(z_slides_data)["z_slides"]y_to_x_mapping=json.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_x=set()fory_id,x_listiny_to_x_mapping.items():covered_x.update(x_list)path_a_slides=[]x_idx=0fory_slideiny_slides:path_a_slides.append(y_slide)# 跳过被覆盖的X slideswhilex_idx<len(x_slides)andx_slides[x_idx]["id"]iny_slide["covers_x_slides"]:x_idx+=1# 添加未覆盖的X slideswhilex_idx<len(x_slides)andx_slides[x_idx]["id"]notincovered_x:path_a_slides.append(x_slides[x_idx])x_idx+=1path_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生成测试题

使用迭代器遍历所有slides

defmain(slide_content,slide_type):""" 根据slide类型生成不同难度的测试题 """# 对于Y类型(速通),题目更难# 对于X类型(正常),题目中等# 对于Z类型(刷题),题目已经包含在内容中ifslide_type=="Z":# 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_answers

4. 代码节点:评分与路径切换

defmain(user_answers,quiz,current_path,current_slide,all_paths):""" 评分并决定路径切换 """# 解析答案answers=[a.strip().upper()forainuser_answers.replace(',',' ').split()]correct_answers=[q["correct"]forqinquiz]# 计算正确数correct_count=sum(1foriinrange(3)ifanswers[i]==correct_answers[i])# 路径切换逻辑next_path=current_path switch_message=""ifcorrect_count==3:# 答对3题ifcurrent_path!="A":next_path="A"switch_message="全对!切换到A路径(速通模式)"else:switch_message="继续保持A路径"elifcorrect_count==2:# 答对2题ifcurrent_path!="B":next_path="B"switch_message="不错!切换到B路径(正常模式)"else:switch_message="继续保持B路径"else:# 答对0-1题ifcurrent_path!="C":next_path="C"switch_message="需要巩固,切换到C路径(强化练习)"else:switch_message="继续C路径,加强练习"# 计算下一个slide索引# 如果切换了路径,需要找到对应位置next_index=calculate_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_path==new_path:# 路径未变,直接下一个returncurrent_slide["index"]+1# 路径变化,找到对应的知识点位置current_knowledge=current_slide.get("knowledge_points",[])new_path_slides=all_paths[new_path]["slides"]# 找到新路径中覆盖相同知识点的下一个slideforidx,slideinenumerate(new_path_slides):ifany(kpinslide.get("knowledge_points",[])forkpincurrent_knowledge):returnidx+1# 如果找不到,从新路径的下一个位置开始return0

5. 条件分支:是否结束

判断条件: 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)

原始PPT(X slides)

X1: Python简介 X2: 变量与类型 X3: 运算符 X4: 条件语句 X5: 循环基础 X6: 循环高级 X7: 函数定义 X8: 函数参数 X9: 函数返回值 X10: 模块导入

B路径(正常组)- 10个slides

X1 → X2 → X3 → X4 → X5 → X6 → X7 → X8 → X9 → X10

A路径(速通组)- 6个slides

Y1 (覆盖X1+X2+X3: 基础语法精炼) → X4 → Y2 (覆盖X5+X6: 循环完整机制+列表推导式) → Y3 (覆盖X7+X8+X9: 函数全貌+装饰器预览) → X10

C路径(刷题组)- 15个slides

X1 → Z1 (Python安装练习) → X2 → Z2 (类型转换练习) → X3 → X4 → Z3 (条件判断练习) → X5 → Z4 (循环练习1) → X6 → Z5 (循环练习2) → X7 → Z6 (函数练习) → X8 → X9 → X10

Dify实现要点

两个Workflow

Workflow 1: “内容预处理器”

  1. 上传原始PPT
  2. 解析X slides
  3. 生成Y slides(LLM)
  4. 生成Z slides(LLM)
  5. 构建三条路径
  6. 为每个slide生成测试题
  7. 保存到数据库

Workflow 2: “自适应学习系统”

  1. 加载课程数据
  2. 显示当前slide
  3. 用户答题
  4. 评分(3题全对→A,2题→B,0-1题→C)
  5. 切换路径(如需要)
  6. 循环直到结束
  7. 生成报告

数据结构示例

{"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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 21:44:12

电感DCR采样在电源反馈中的实现方案:手把手教程

电感DCR采样在电源反馈中的实现方案&#xff1a;从原理到实战的深度解析 你有没有遇到过这样的困境&#xff1f;设计一个大电流、高效率的Buck转换器时&#xff0c;为了做电流检测&#xff0c;不得不放一颗大功率采样电阻。结果不仅PCB空间被挤占&#xff0c;效率还掉了几个百分…

作者头像 李华
网站建设 2026/4/18 10:13:58

ComfyUI-Manager极速下载完全攻略:从龟速到闪电的蜕变之路

ComfyUI-Manager极速下载完全攻略&#xff1a;从龟速到闪电的蜕变之路 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager 还在为AI模型下载的漫长等待而焦虑吗&#xff1f;面对几GB甚至几十GB的模型文件&#xff0c;传统…

作者头像 李华
网站建设 2026/4/18 1:28:50

深度揭秘:FakeLocation如何实现单应用位置模拟精准控制

深度揭秘&#xff1a;FakeLocation如何实现单应用位置模拟精准控制 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否遇到过这样的困扰&#xff1a;社交软件需要显示外地位置…

作者头像 李华
网站建设 2026/4/21 4:17:47

原神帧率优化终极方案:三步突破性能限制

原神帧率优化终极方案&#xff1a;三步突破性能限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神帧率解锁工具通过先进的内存操作技术&#xff0c;帮助玩家突破游戏内置的60fps限…

作者头像 李华
网站建设 2026/4/21 4:18:02

轻量级大模型实战指南:HY-MT1.5手机端部署全流程

轻量级大模型实战指南&#xff1a;HY-MT1.5手机端部署全流程 1. 引言&#xff1a;为什么需要轻量级翻译模型&#xff1f; 随着多语言内容在移动互联网中的爆炸式增长&#xff0c;高质量、低延迟的本地化翻译需求日益迫切。然而&#xff0c;传统大模型往往依赖云端推理&#x…

作者头像 李华
网站建设 2026/4/21 4:17:48

终极Fiji图像分析指南:从零基础到科研高手

终极Fiji图像分析指南&#xff1a;从零基础到科研高手 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji是专为生命科学研究设计的"开箱即用"图像处理工具包…

作者头像 李华