构建个性化多项选择题应用:利用维基百科和RAG技术动态生成教育试题
如何构建一个多项选择题(MCQ)应用程序 这篇文章介绍了一种使用检索增强生成(RAG)技术,从用户定义的主题相关的维基百科文章中生成多项选择题的应用程序。该应用通过动态地适应用户偏好和学习目标,提供了高质量、针对性强的互动学习体验。 应用演示 用户在启动屏幕上输入需要生成多项选择题的学习主题。例如,“告诉我有关恒星和行星的一切”。提交后,应用会搜索最符合用户查询的维基百科文章,并将这些文章拆分为多个部分。接下来,应用根据每个部分与用户查询的相关性评分,来选择问题的背景。最后,生成的问题和四个选项会在屏幕上显示,用户可以选择其中一个答案并提交。正确或错误的答案都会得到解释,用户还可以选择跳过问题或结束本次练习。 概念 该应用旨在生成高质量和最新的多项选择题,满足用户的任何学习需求。通过考虑用户反馈,确保生成的问题符合用户期望。为了达到这一目标,应用的工作流程分为两个主要步骤: 情境检索:根据用户的查询,从维基百科中筛选出合适的文章和部分。 问题生成:利用检索到的情境,调用聊天模型生成多项选择题。 情境检索工作流程 用户查询:用户在启动屏幕上输入描述所需学习内容的查询。 关键词提取:将查询转换为关键词,例如“恒星”、“行星”、“天文学”、“太阳系”和“银河系”。 文章搜索与筛选:针对每个关键词执行维基百科搜索,选择前三个页面。通过计算嵌入的用户查询和页面摘要之间的向量相似性来过滤不相关页面。 文章拆分与筛选:将剩余文章拆分为部分,并根据与用户查询的相似性进一步过滤。 部分评分:为每个部分分配与用户查询相似性的得分,以便后续生成问题时使用。 问题生成工作流程 部分采样:根据部分得分,选取一个部分作为生成问题的背景。 调用聊天模型:将用户查询和选中的部分文本组合成提示词,发送给聊天模型。 生成问题:聊天模型返回一个JSON格式的响应,包含问题、选项和正确答案的解释。 用户交互:用户选择一个答案并提交。系统判断答案是否正确,并提供解释。如果用户不满意某个问题,可以选择跳过,该部分的得分将被降低,减少再次被选中的概率。 关键组件详解 摘取维基百科文章 应用通过两步过程摘取维基百科文章:首先运行搜索以找到合适的页面,然后读取这些页面的内容并拆分成部分。搜索请求通过特定URL发送,并附带头信息和参数字典。读取页面内容时,应用使用wikipediaapi模块,将页面拆分成部分并返回一个字典,键值为各部分及其子部分的标题,条目为对应的文本。 情境评分 为了提高部分被选择的概率,应用会根据两个因素为每个部分赋分:被拒绝的次数以及与用户查询的相似性。这两个分数通过加权方式进行组合。 提示词工程 提示词工程是该应用的关键功能之一。应用使用两个提示词模板:一个是生成关键词的提示词,确保每个关键词都是用户查询的良好匹配;另一个是生成多项选择题的提示词,基于检索到的情境生成问题及答案,并确保输出格式正确。 Streamlit 应用 该应用使用了Streamlit框架,一种开源的Python应用框架。Streamlit允许开发者通过一行代码添加页面元素,简化了应用的开发和部署。每次用户与页面交互(如点击按钮),脚本会重新运行,通过st.session_state携带上次运行的信息,实现动态更新。 增强功能 自定义文档上传:除了维基百科,用户还可以上传自己的PDF文档,生成基于个人材料的多项选择题。 上下文选择优化:可以通过训练机器学习模型,预测哪些问题更容易被用户拒绝,从而进一步优化情境选择。 问题保存:用户可以选择保存已生成的问题,以便重复练习,并着重改进弱点部分。 行业评价 业内人士普遍认为,这种应用具有很强的教育潜力,尤其是在个性化学习和自我评估方面。通过结合RAG和其他先进技术,该应用不仅能够提供高质量的学习资源,还能有效提高学习效率。开发者可以通过不断优化和扩展,使其成为更加完善的学习平台。 该应用由一位富有创新精神的开发者创建,展示了如何利用现有技术和工具快速构建有用的学习应用。随着更多功能的加入,其用户体验和教学效果将进一步提升。