logo
7

【打造趣味学习新体验】如何利用一个网页创建智能问答闯关游戏

在这个数字化时代,游戏不仅仅是娱乐的代名词,它也是知识传播与学习的新载体。今天,我们就来揭秘如何轻松创建一个既富有趣味性又充满教育意义的【三国等级挑战赛】AI原生应用,让知识的探索之旅触手可及。

概述

依托http://ren.bytravel.cn/ 网站中的三国人物资源生成知识库,生成随机问题,进行闯关挑战,共10道题目,每题答对得10分并进入下一题,答错一题立即结束挑战。根据挑战者最终得分颁发相应得称号

概念与规划

  • 定位:融合历史文化教育与娱乐性,旨在寓教于乐,在娱乐中学习传统文化知识
  • 主题:选取广为人知的《三国》为背景,利用其深厚的历史底蕴和普遍认知度。
  • 规划:设计包含历史事件、人物关系、军事策略等多元主题的闯关模式,通过选择题形式,随着闯关深入逐步解锁更高级别称号。

制作流程与技术实现

知识库构建

使用读取URL链接模式,选择解析子网页和网页内容。点击一键解析知识库就生成好了,非常的方便。注意网页需要时静态页面动态加载出来的数据好像抓不下来。
特别注意:这种模式的应用不要直接把知识库放到能力扩展里面
这样经常性的遇到几个问题:首先,即用户输入与答题不相关时,大模型仍会将其解读为关键词并检索知识库。这要求我们不断完善知识库的描述与指令,但也不好完全解决这个问题。其次,问题生成机制存在局限,可能会不经意间产出重复或高度相似的问题,影响用户体验。为破解这些难题,为了避免这些问题最好的做法就是用组件去做编排,在组件里引用知识库。

组件开发

节点说明
  • 开始节点:传入前一题的题目和选项,目的后面再解释
  • 意图识别:根据用户输入进行意图分类,分类如下:
意图1:用户表示开始或重新开始测试。
意图2:用户回答了测试题的选项。
意图3:用户询问三国相关知识。
意图4:用户的输入不属于以上任一类别。
  • 代码块1为增强题目的多样性和随机性,首先抽取随机关键词,随后利用关键词对知识库进行检索。这一策略确保了从知识库提取的信息覆盖广泛且变化多端,从而使生成的每个问题都独具特色。(关键词中可能出现重复是为了提升特定词汇的被检索概率,可根据需要调整重复次数,既可选择不重复使用,也可酌情增加重复频次,以此来精细调控题目的生成过程。)
  
  
  
  
  
  
import random
items = [
"历史事件","人物关系","人物特征","军事策略","兵器装备","文学与文化影响","地理与地名考究","政治制度与经济",
"周瑜","周瑜","周瑜","诸葛亮","诸葛亮","诸葛亮","赵云","赵云","吕布","吕布","吕布","刘备","关羽","张飞",
"曹操","曹操","曹操","刘备","孙权","诸葛亮","关羽","张飞","赵云","周瑜","吕布","司马懿","郭嘉","孙策","陆逊","曹丕","姜维","马超","黄忠","徐庶","庞统","夏侯惇","许褚","张辽","甘宁","魏延","黄盖","荀彧","贾诩","李典","鲁肃"]
def select_random_items(items_list, num_items=1):
selected_items = random.sample(items_list, num_items)
return','.join(selected_items)
def main(params):
output_object = {
"key0": select_random_items(items)
}
return output_object
  • 知识库_1:借鉴代码块生成的随机关键词,执行知识库检索操作,其中我设定的召回条目数为2条,你也可以选择仅召回1条。召回数量不宜过多,以免接下来的提示词因字符过量而发生异常。我选定召回2条记录,旨在丰富题目的信息来源,进而提升题目设计的质量与深度。
  • 大模型_1:设计题目时,核心在于引用知识库检索的结果,这个节点主要完成两个任务:一是解析前一题的正确答案,二是巧妙构思新题目。现在提示词已经变成一个八股文了,一定要背下来,套用公式,灵活运用既定框架,并通过反复练习与调整,以臻完善。
这样题目的生成工作就完成了,这样生成的题目质量还是挺不错的。我在我的另外一个应用【谋略三国智慧试炼题库】中,核心的部分也是按照这个方式设计的,只不过稍微改了改,让玩家自己输入关键字,根据大家的兴趣来定制题库,这样更加贴近用户需求,让学习变得更个性化和有趣。
  • 意图3和意图4:这两个处理就比较简单直接了,意图3直接检索知识库给出答案,意图4就用代码块返回预先设定好的回复内容
  
  
  
  
  
  
def main(params):
output_object ={
"key0": "对不起,我只能回答三国相关的话题"
}
return output_object
  • 结束有三部分内容,1.【考题】是大模型_1输出的创意;2.【相关知识】是意图3从知识库中检索的信息;3.【备注】是意图4预设的通用回复这三块信息里只有一块会被填充,具体取决于最初识别到的用户意图是什么。
这样一来,我们的组件就已经搭建完毕,看看预览效果:
预览组件效果:

关键说明

大模型的和用户的交互模式是这样的:
用户输入:请问明天北京的天气怎么样?
大模型响应明天北京预计有小雨
用户继续输入:那我需要带伞出门吗?
大模型响应根据天气预报,建议您携带雨具出门。
..........
大模型响应的都是前一次输入的内容,所以做问答系统时:
用户输入:开始游戏
大模型响应:问题1:程昱因何原因更改了本名程立,并更名为程昱?(大模型是在响应用户输入“开始游戏”这个指令)
用户输入:A
大模型响应:???(这个时候大模型响应的是用户指令“A”)。
所以在处理“A”这个指令时,大模型需要的信息是上一题的正确答案,回答正确后展示下一题题目。但是大模型不一定会从去上下文寻找用户当前输入的是哪一个题目的答案,所以很容易出错,为了解决这个问题我在组件中返回上一题的正确选项和下一题的考题。这也是为什么组件开始节点要传入上一题的题目和选项的原因,为了让组件把上一题的正确答案一并返回,当做本次响应的参考信息。这样大模型就不用找上下文,直接从组件返回的信息里面找答案就可以了,也就不容易出错了。

角色指令

角色指令官方这个优化还是很好用的,特别是进一步优化。不过,这里有个小技巧:在应用优化前,别急着点击'使用'按钮。最佳做法是,先仔细审查优化内容,甄选出那些真正有益的指令加以采纳。这样既能保留原有指令中的精华,又能确保新加入的优化指令发挥出最大效用。

结语

如何利用链接创建一个智能问答闯关游戏的过程,包括游戏的定位、主题选择、规划蓝图、技术选型以及制作流程等关键环节就介绍完了。鼓励小伙伴们多动手尝试,发挥创新精神,一起去探索无限的可能。

体验链接

我在百度智能云千帆AppBuilder开发了一款AI原生应用,快来使用吧!「三国等级挑战赛」:https://appbuilder.baidu.com/s/H2vSu5A3
欢迎大家帮我点点赞,谢谢。https://cloud.baidu.com/qianfandev/matchs,就点它们两。
评论
用户头像