项目背景
猜灯谜是中国传统节日元宵节中一种深受人们喜爱的民间游戏,它集趣味性、知识性和艺术性于一体,是中华文化的重要组成部分。猜灯谜,顾名思义,就是通过解读谜面来猜测谜底,谜底通常是各种物品、现象或概念。
猜灯谜的起源可以追溯到古代,当时人们为了增添节日的欢乐气氛,便发明了这种寓教于乐的游戏。随着时间的推移,猜灯谜逐渐成为一种广受欢迎的民间传统,不仅在元宵节期间盛行,也在其他节日或庆典中作为娱乐活动出现。
在猜灯谜的过程中,谜面通常是用诗歌、成语、俗语等形式来表达的,需要参与者运用自己的智慧和知识来解读。谜面的设计往往巧妙而富有创意,有时需要参与者进行联想、比喻或推理,才能猜出正确的谜底。
项目流程
1.安装依赖
In [ ]
# 安装依赖
!pip install -U erniebot
2.设置token
In [2]
import erniebotdef set_token(token):erniebot.api_type = 'aistudio'erniebot.access_token = tokenset_token("df200a70c76e439433e3a74f6e102d710ba81c2d")
3.实现调用ERNIE API的方法
In [24]
def get_ernie_res(txt):model = 'ernie-3.5'messages = [{'role': 'user', 'content': txt}]response = erniebot.ChatCompletion.create(model=model,messages=messages,)return response.result
#test
get_ernie_res("hi")
'你好!有什么我可以帮助你的吗?无论是有关生活、学习还是其他方面的问题,都可以随时向我提问。我会尽力提供准确和有用的回答。请告诉我你需要帮助的具体内容。'
4.核心prompt设计
In [25]
def lantern_res(lantern_answer, lantern_thing): prompt = f""" 你现在正在跟我玩猜灯谜游戏。你给出的答案是{lantern_answer},我猜的谜底是:{lantern_thing}。若是我猜中了这灯谜,请你揭晓谜底,并说: 谜底是‘{lantern_answer}’ ,你猜对了!愿我们年年元宵,团圆美满!若是我不幸猜错,也请你告诉我答案,并说: 谜底是‘{lantern_answer}’,你猜错了!不过没关系,元宵佳节,欢乐多多,再试一次也无妨!” 最后说一句,无论结果如何,元宵佳节,愿灯火辉煌照亮你前程,汤圆甜蜜温暖你心房, 祝你元宵节快乐,阖家幸福! """ llm = ErnieLLM() return llm.predict(prompt)
gradio应用开发
参考代码
def guess_riddles_prompt(riddle):return ("我想要你陪我玩'猜灯谜'游戏,你会给我一个谜面,谜面的内容如下:" f"{riddle}""你的任务如下:" "1. 你需要选择一个灯谜,灯谜的谜底最好不要是过于常见的、特别容易猜中的事物或词汇。" "2. 输出这个灯谜的谜面,谜面要有趣且富有诗意,但不要直接包含谜底的内容,也不要让用户轻易猜出谜底。" "3. 将结果以{\"riddle\":\"\",\"answer\":\"\"}的JSON格式返回,其中riddle表示灯谜的谜面,answer表示灯谜的谜底。" "注意: 除了JSON格式结果以外,不要返回其他任何内容。")def guess_riddles(riddle): prompt = guess_riddles_prompt(riddle) llm = ErnieLLM() riddle_dict = llm.predict(prompt) print(riddle_dict) # 提取 JSON 部分 start_index = riddle_dict.find('{') end_index = riddle_dict.rfind('}') + 1 json_str = riddle_dict[start_index:end_index] print(json_str) json_obj = json.loads(json_str) print(json_obj) return json_obj["answer"], json_obj["riddle"]
class ErnieLLM(): def predict(self, txt): print(txt) model = 'ernie-bot' messages = [{'role': 'user', 'content': txt}] response = erniebot.ChatCompletion.create( model=model, messages=messages, ) return response.result def set_token(token): erniebot.access_token = token def lantern_res(lantern_answer, lantern_thing): prompt = f""" 你现在正在跟我玩猜灯谜游戏。你给出的答案是{lantern_answer},我猜的谜底是:{lantern_thing}。若是我猜中了这灯谜,请你揭晓谜底,并说: 谜底是‘{lantern_answer}’ ,你猜对了!愿我们年年元宵,团圆美满!若是我不幸猜错,也请你告诉我答案,并说: 谜底是‘{lantern_answer}’,你猜错了!不过没关系,元宵佳节,欢乐多多,再试一次也无妨!” 最后说一句,无论结果如何,元宵佳节,愿灯火辉煌照亮你前程,汤圆甜蜜温暖你心房, 祝你元宵节快乐,阖家幸福! """ llm = ErnieLLM() return llm.predict(prompt) with gr.Blocks(title="智趣灯谜会", theme="soft") as game: gr.Markdown("<center><h1>智趣灯谜会</h1></center>") gr.Markdown(""" <center><p> 猜灯谜,又称打灯谜,是中国独有的富有民族风格的一种汉族民俗文娱活动形式,是从古代就开始流传的元宵节特色活动。 每逢农历正月十五,传统民间都要挂起彩灯,燃放焰火,后来有好事者把谜语写在纸条上,贴在五光十色的彩灯上供人猜。 因为谜语能启迪智慧又迎合节日气氛,所以响应的人众多,而后猜谜逐渐成为元宵节不可缺少的节目。 灯谜就是将谜语贴在灯上,让人一面赏灯,一面猜谜。谜底多着眼于文字意义,如一个字,一句诗,一个物或一个名称。 每逢农历正月十五,民间都要挂起彩灯,燃放焰火,后来有好事者把谜语写在纸条上,贴在五光十色的彩灯上供人猜。 因为谜语能启迪智慧又迎合节日气氛,所以响应的人众多,而后猜谜逐渐成为元宵节不可缺少的节目。 灯谜增添节日气氛,展现了古代汉族劳动人民的聪明才智和对美好生活的向往。 </p></center> """) with gr.Row(): # 显示一张图片,图片源是"Source/start.jpg",该图片不可交互 img = gr.Image(value="lantern.jpg", interactive=False) token = gr.Textbox(label="Token") with gr.Tab("智趣灯谜会"):with gr.Row():with gr.Column():lantern_button = gr.Button(value="谜面")lantern_answer = gr.Textbox(visible=False)lantern_riddle = gr.Textbox(label="谜面")with gr.Row():lantern_thing = gr.Textbox(label="谜底")res = gr.Textbox(label="结果")judge_button = gr.Button(value="看看你猜对了吗")token.change(set_token, [token], [])lantern_button.click(guess_riddles, [], [lantern_answer, lantern_riddle])judge_button.click(lantern_res, [lantern_answer, lantern_thing], [res])
game.launch()
效果展示
应用链接:https://aistudio.baidu.com/application/detail/30910