项目背景
猜灯谜是中国传统节日元宵节中一种深受人们喜爱的民间游戏,它集趣味性、知识性和艺术性于一体,是中华文化的重要组成部分。猜灯谜,顾名思义,就是通过解读谜面来猜测谜底,谜底通常是各种物品、现象或概念。
猜灯谜的起源可以追溯到古代,当时人们为了增添节日的欢乐气氛,便发明了这种寓教于乐的游戏。随着时间的推移,猜灯谜逐渐成为一种广受欢迎的民间传统,不仅在元宵节期间盛行,也在其他节日或庆典中作为娱乐活动出现。
在猜灯谜的过程中,谜面通常是用诗歌、成语、俗语等形式来表达的,需要参与者运用自己的智慧和知识来解读。谜面的设计往往巧妙而富有创意,有时需要参与者进行联想、比喻或推理,才能猜出正确的谜底。
项目流程
1.安装依赖
In [ ]
# 安装依赖
!pip install -U erniebot
2.设置token
In [2]
import erniebot
def set_token(token):
erniebot.api_type = 'aistudio'
erniebot.access_token = token
set_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