617 lines
47 KiB
Python
617 lines
47 KiB
Python
import streamlit as st
|
||
import requests
|
||
import random
|
||
import json
|
||
import re
|
||
|
||
# 配置
|
||
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"
|
||
# 尝试从secrets获取API密钥,如果失败则使用默认值
|
||
try:
|
||
DEEPSEEK_API_KEY = st.secrets.get("deepseek_api_key", "your_api_key_here")
|
||
except Exception:
|
||
DEEPSEEK_API_KEY = "your_api_key_here"
|
||
|
||
# 本地成语库(仅用于生成题目)
|
||
IDIOMS = {
|
||
"一心一意": {"pinyin": "yī xīn yī yì", "meaning": "形容做事专心一意,没有其他念头"},
|
||
"意气风发": {"pinyin": "yì qì fēng fā", "meaning": "形容精神振奋,气概豪迈"},
|
||
"发扬光大": {"pinyin": "fā yáng guāng dà", "meaning": "使事业、传统等更加发展壮大"},
|
||
"大材小用": {"pinyin": "dà cái xiǎo yòng", "meaning": "比喻使用不当,浪费人才"},
|
||
"用兵如神": {"pinyin": "yòng bīng rú shén", "meaning": "形容指挥军队作战的才能极高"},
|
||
"神采飞扬": {"pinyin": "shén cǎi fēi yáng", "meaning": "形容精神饱满,容光焕发"},
|
||
"扬长避短": {"pinyin": "yáng cháng bì duǎn", "meaning": "发扬长处,避开短处"},
|
||
"短兵相接": {"pinyin": "duǎn bīng xiāng jiē", "meaning": "比喻面对面地进行激烈的斗争"},
|
||
"接二连三": {"pinyin": "jiē èr lián sān", "meaning": "一个接着一个,接连不断"},
|
||
"三心二意": {"pinyin": "sān xīn èr yì", "meaning": "形容犹豫不决,意志不坚定"},
|
||
"意气用事": {"pinyin": "yì qì yòng shì", "meaning": "凭感情冲动办事,缺乏理智"},
|
||
"事在人为": {"pinyin": "shì zài rén wéi", "meaning": "事情的成功全在于人的努力"},
|
||
"为人师表": {"pinyin": "wéi rén shī biǎo", "meaning": "指在人品学问方面作别人学习的榜样"},
|
||
"表里如一": {"pinyin": "biǎo lǐ rú yī", "meaning": "形容言行和思想完全一致"},
|
||
"一如既往": {"pinyin": "yī rú jì wǎng", "meaning": "指态度没有变化,完全像从前一样"},
|
||
"往返徒劳": {"pinyin": "wǎng fǎn tú láo", "meaning": "来回白跑,没有成效"},
|
||
"劳民伤财": {"pinyin": "láo mín shāng cái", "meaning": "既使人民劳苦,又耗费钱财"},
|
||
"财大气粗": {"pinyin": "cái dà qì cū", "meaning": "指人仗着钱财多而气势凌人"},
|
||
"粗枝大叶": {"pinyin": "cū zhī dà yè", "meaning": "比喻工作粗糙,不认真细致"},
|
||
"叶公好龙": {"pinyin": "yè gōng hào lóng", "meaning": "比喻表面上爱好某事物,实际上并不真爱好"},
|
||
"龙马精神": {"pinyin": "lóng mǎ jīng shén", "meaning": "比喻人精神旺盛"},
|
||
"神采奕奕": {"pinyin": "shén cǎi yì yì", "meaning": "形容精神饱满,容光焕发"},
|
||
"奕奕生辉": {"pinyin": "yì yì shēng huī", "meaning": "形容光彩闪耀的样子"},
|
||
"辉煌腾达": {"pinyin": "huī huáng téng dá", "meaning": "形容事业或成就非常辉煌"},
|
||
"达官贵人": {"pinyin": "dá guān guì rén", "meaning": "指地位高的官吏和显赫的人物"},
|
||
"人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"},
|
||
"海阔天空": {"pinyin": "hǎi kuò tiān kōng", "meaning": "比喻言谈议论等漫无边际,没有中心"},
|
||
"空穴来风": {"pinyin": "kōng xué lái fēng", "meaning": "比喻消息和谣言的传播不是完全没有原因的"},
|
||
"风调雨顺": {"pinyin": "fēng tiáo yǔ shùn", "meaning": "形容风雨适合农时"},
|
||
"顺理成章": {"pinyin": "shùn lǐ chéng zhāng", "meaning": "指写文章或做事情顺着条理就能做好"},
|
||
"章句小儒": {"pinyin": "zhāng jù xiǎo rú", "meaning": "指不能通达大义而拘泥于辨析章句的儒生"},
|
||
"儒雅风流": {"pinyin": "rú yǎ fēng liú", "meaning": "形容人学识渊博,举止潇洒"},
|
||
"流芳百世": {"pinyin": "liú fāng bǎi shì", "meaning": "好的名声永远流传下去"},
|
||
"世代相传": {"pinyin": "shì dài xiāng chuán", "meaning": "祖祖辈辈传下来"},
|
||
"传宗接代": {"pinyin": "chuán zōng jiē dài", "meaning": "指生儿育女,延续后代"},
|
||
"代人受过": {"pinyin": "dài rén shòu guò", "meaning": "替别人承担过错的责任"},
|
||
"过目不忘": {"pinyin": "guò mù bù wàng", "meaning": "看过就不忘记,形容记忆力非常强"},
|
||
"忘乎所以": {"pinyin": "wàng hū suǒ yǐ", "meaning": "指因过分兴奋或得意而忘了应有的举止"},
|
||
"以卵击石": {"pinyin": "yǐ luǎn jī shí", "meaning": "比喻不自量力,自取灭亡"},
|
||
"石沉大海": {"pinyin": "shí chén dà hǎi", "meaning": "比喻从此没有消息"},
|
||
"海纳百川": {"pinyin": "hǎi nà bǎi chuān", "meaning": "比喻包容的东西非常广泛,而且数量很大"},
|
||
"川流不息": {"pinyin": "chuān liú bù xī", "meaning": "形容行人、车马等像水流一样连续不断"},
|
||
"息事宁人": {"pinyin": "xī shì níng rén", "meaning": "指调解纠纷,使事情平息下来,消除事端,使人们平安相处"},
|
||
"人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"},
|
||
"海底捞月": {"pinyin": "hǎi dǐ lāo yuè", "meaning": "比喻去做根本做不到的事,只能白费力气"},
|
||
"月明星稀": {"pinyin": "yuè míng xīng xī", "meaning": "月亮明亮时,星星就显得稀疏了"},
|
||
"稀奇古怪": {"pinyin": "xī qí gǔ guài", "meaning": "指很少见,很奇异,不同一般"},
|
||
"怪诞不经": {"pinyin": "guài dàn bù jīng", "meaning": "指言语奇怪荒唐,不合常理"},
|
||
"经久不息": {"pinyin": "jīng jiǔ bù xī", "meaning": "经过长时间停不下来"},
|
||
"息息相关": {"pinyin": "xī xī xiāng guān", "meaning": "形容彼此的关系非常密切"},
|
||
"关门大吉": {"pinyin": "guān mén dà jí", "meaning": "指商店倒闭或企业破产停业"},
|
||
"吉祥如意": {"pinyin": "jí xiáng rú yì", "meaning": "多用祝颂他人美满称心"},
|
||
"意气相投": {"pinyin": "yì qì xiāng tóu", "meaning": "指志趣和性格相同的人,彼此投合"},
|
||
"投桃报李": {"pinyin": "tóu táo bào lǐ", "meaning": "比喻友好往来或互相赠送东西"},
|
||
"李代桃僵": {"pinyin": "lǐ dài táo jiāng", "meaning": "比喻互相顶替或代人受过"},
|
||
"僵李代桃": {"pinyin": "jiāng lǐ dài táo", "meaning": "比喻代人受罪责或以此代彼"},
|
||
"桃红柳绿": {"pinyin": "táo hóng liǔ lǜ", "meaning": "形容花木繁盛、色彩鲜艳的春景"},
|
||
"绿水青山": {"pinyin": "lǜ shuǐ qīng shān", "meaning": "泛称美好山河"},
|
||
"山明水秀": {"pinyin": "shān míng shuǐ xiù", "meaning": "形容风景优美"},
|
||
"秀色可餐": {"pinyin": "xiù sè kě cān", "meaning": "形容女子姿容非常美丽或景物非常优美"},
|
||
"餐风露宿": {"pinyin": "cān fēng lù sù", "meaning": "形容旅途或野外工作的辛苦"},
|
||
"宿弊一清": {"pinyin": "sù bì yī qīng", "meaning": "多年的弊病一下就肃清了"},
|
||
"清夜扪心": {"pinyin": "qīng yè mén xīn", "meaning": "指深夜不眠,进行反省"},
|
||
"心花怒放": {"pinyin": "xīn huā nù fàng", "meaning": "心里高兴得像花儿盛开一样,形容极其高兴"},
|
||
"放虎归山": {"pinyin": "fàng hǔ guī shān", "meaning": "比喻把坏人放回老巢,留下祸根"},
|
||
"山高水长": {"pinyin": "shān gāo shuǐ cháng", "meaning": "原比喻人的风范或声誉像高山一样永远存在,后比喻恩德深厚"},
|
||
"长生不老": {"pinyin": "cháng shēng bù lǎo", "meaning": "指生命不老不死永生不灭"},
|
||
"老当益壮": {"pinyin": "lǎo dāng yì zhuàng", "meaning": "年纪虽老而志气更旺盛,干劲更足"},
|
||
"壮志凌云": {"pinyin": "zhuàng zhì líng yún", "meaning": "形容理想宏伟远大"},
|
||
"云开见日": {"pinyin": "yún kāi jiàn rì", "meaning": "比喻黑暗已经过去,光明已经到来"},
|
||
"日新月异": {"pinyin": "rì xīn yuè yì", "meaning": "每天都在更新,每月都有变化,指发展或进步迅速,不断出现新事物、新气象"},
|
||
"异想天开": {"pinyin": "yì xiǎng tiān kāi", "meaning": "比喻荒唐离奇,想象着暂时无法实现的事"},
|
||
"开门见山": {"pinyin": "kāi mén jiàn shān", "meaning": "比喻说话或写文章直截了当谈本题,不拐弯抹角"},
|
||
"山高路远": {"pinyin": "shān gāo lù yuǎn", "meaning": "形容路途艰难而遥远"},
|
||
"远见卓识": {"pinyin": "yuǎn jiàn zhuó shí", "meaning": "有远大的眼光和高明的见解"},
|
||
"识文断字": {"pinyin": "shí wén duàn zì", "meaning": "指识字,指有一点文化知识"},
|
||
"字斟句酌": {"pinyin": "zì zhēn jù zhuó", "meaning": "指写文章或说话时慎重细致,一字一句地推敲琢磨"},
|
||
"酌古御今": {"pinyin": "zhuó gǔ yù jīn", "meaning": "指择古之善者以为治今的借鉴"},
|
||
"今非昔比": {"pinyin": "jīn fēi xī bǐ", "meaning": "现在不是过去能比得上的,多指形势、自然面貌等发生了巨大的变化"},
|
||
"比翼双飞": {"pinyin": "bǐ yì shuāng fēi", "meaning": "比喻夫妻情投意合,在事业上并肩前进"},
|
||
"飞黄腾达": {"pinyin": "fēi huáng téng dá", "meaning": "形容骏马奔腾飞驰,比喻骤然得志,官职升得很快"},
|
||
"达官贵人": {"pinyin": "dá guān guì rén", "meaning": "指地位高的官吏和显赫的人物"},
|
||
"人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"},
|
||
"海枯石烂": {"pinyin": "hǎi kū shí làn", "meaning": "海水干涸、石头腐烂,形容历时久远,比喻坚定的意志永远不变"},
|
||
"烂熟于心": {"pinyin": "làn shú yú xīn", "meaning": "形容对某件事情或者事物的发展情况在心里记得很清楚"},
|
||
"心灵手巧": {"pinyin": "xīn líng shǒu qiǎo", "meaning": "心思灵敏,手艺巧妙"},
|
||
"巧夺天工": {"pinyin": "qiǎo duó tiān gōng", "meaning": "人工的精巧胜过天然,形容技艺十分巧妙"},
|
||
"工欲善其事,必先利其器": {"pinyin": "gōng yù shàn qí shì,bì xiān lì qí qì", "meaning": "比喻要做好一件事,准备工作非常重要"},
|
||
"器宇轩昂": {"pinyin": "qì yǔ xuān áng", "meaning": "形容人精力充沛,风度不凡"},
|
||
"昂首挺胸": {"pinyin": "áng shǒu tǐng xiōng", "meaning": "抬起头,挺起胸膛,形容斗志高,士气旺"},
|
||
"胸有成竹": {"pinyin": "xiōng yǒu chéng zhú", "meaning": "原指画竹子要在心里有一幅竹子的形象,后比喻在做事之前已经拿定主意"},
|
||
"竹报平安": {"pinyin": "zhú bào píng ān", "meaning": "比喻平安家信"},
|
||
"安步当车": {"pinyin": "ān bù dàng chē", "meaning": "以从容的步行代替乘车,形容轻松缓慢地行走"},
|
||
"车水马龙": {"pinyin": "chē shuǐ mǎ lóng", "meaning": "形容来往车马很多,连续不断的热闹情景"},
|
||
"龙飞凤舞": {"pinyin": "lóng fēi fèng wǔ", "meaning": "原形容山势的蜿蜒雄壮,后也形容书法笔势有力,灵活舒展"},
|
||
"舞文弄墨": {"pinyin": "wǔ wén nòng mò", "meaning": "故意玩弄文笔,原指曲引法律条文作弊,后常指玩弄文字技巧"},
|
||
"墨守成规": {"pinyin": "mò shǒu chéng guī", "meaning": "指思想保守,守着老规矩不肯改变"},
|
||
"规行矩步": {"pinyin": "guī xíng jǔ bù", "meaning": "指严格按照规矩办事,毫不苟且"},
|
||
"步步为营": {"pinyin": "bù bù wéi yíng", "meaning": "军队每向前推进一步就设下一首营垒,形容防守严密,行动谨慎"},
|
||
"营私舞弊": {"pinyin": "yíng sī wǔ bì", "meaning": "因图谋私利而玩弄欺骗手段做犯法的事"},
|
||
"弊绝风清": {"pinyin": "bì jué fēng qīng", "meaning": "贪污、舞弊的事情没有了,形容坏事绝迹,社会风气良好"},
|
||
"清风明月": {"pinyin": "qīng fēng míng yuè", "meaning": "只与清风、明月为伴,比喻不随便结交朋友,也比喻清闲无事"},
|
||
"月白风清": {"pinyin": "yuè bái fēng qīng", "meaning": "形容幽静美好的夜晚"},
|
||
"清风徐来": {"pinyin": "qīng fēng xú lái", "meaning": "清风缓缓地吹来"},
|
||
"来日方长": {"pinyin": "lái rì fāng cháng", "meaning": "未来的日子还很长,表示事有可为,或劝人不必急于做某事"},
|
||
"长驱直入": {"pinyin": "cháng qū zhí rù", "meaning": "迅速向很远的目的地前进,形容进军迅猛顺利"},
|
||
"入木三分": {"pinyin": "rù mù sān fēn", "meaning": "形容书法极有笔力,现多比喻分析问题很深刻"},
|
||
"分秒必争": {"pinyin": "fēn miǎo bì zhēng", "meaning": "一分一秒也一定要争取,形容抓紧时间"},
|
||
"争先恐后": {"pinyin": "zhēng xiān kǒng hòu", "meaning": "抢着向前,唯恐落后"},
|
||
"后来居上": {"pinyin": "hòu lái jū shàng", "meaning": "后来的超过先前的,用以称赞后起之秀超过前辈"},
|
||
"上行下效": {"pinyin": "shàng xíng xià xiào", "meaning": "上面的人怎么做,下面的人就跟着怎么干"},
|
||
"效颦学步": {"pinyin": "xiào pín xué bù", "meaning": "比喻盲目模仿,效果极坏"},
|
||
"步履维艰": {"pinyin": "bù lǚ wéi jiān", "meaning": "指行走困难行动不方便"},
|
||
"艰苦奋斗": {"pinyin": "jiān kǔ fèn dòu", "meaning": "不怕艰难困苦,坚持英勇斗争"},
|
||
"斗志昂扬": {"pinyin": "dòu zhì áng yáng", "meaning": "斗争的意志旺盛"},
|
||
"扬长而去": {"pinyin": "yáng cháng ér qù", "meaning": "大模大样地径自走了"},
|
||
"去伪存真": {"pinyin": "qù wěi cún zhēn", "meaning": "除掉虚假的,留下真实的"},
|
||
"真相大白": {"pinyin": "zhēn xiàng dà bái", "meaning": "真实情况完全弄明白了"},
|
||
"白头偕老": {"pinyin": "bái tóu xié lǎo", "meaning": "夫妻相亲相爱,一直到老"},
|
||
"老气横秋": {"pinyin": "lǎo qì héng qiū", "meaning": "形容老练而自负的神态,现形容自高自大,摆老资格,也形容缺乏朝气"},
|
||
"秋高气爽": {"pinyin": "qiū gāo qì shuǎng", "meaning": "形容秋季晴空万里,天气清爽"},
|
||
"爽心悦目": {"pinyin": "shuǎng xīn yuè mù", "meaning": "指景色美丽,令人心情愉快"},
|
||
"目瞪口呆": {"pinyin": "mù dèng kǒu dāi", "meaning": "形容因吃惊或害怕而发愣的样子"},
|
||
"呆若木鸡": {"pinyin": "dāi ruò mù jī", "meaning": "形容因恐惧或惊异而发愣的样子"},
|
||
"鸡飞狗跳": {"pinyin": "jī fēi gǒu tiào", "meaning": "把鸡吓得飞起来,把狗吓得到处乱跳,形容惊慌得乱成一团"},
|
||
"跳梁小丑": {"pinyin": "tiào liáng xiǎo chǒu", "meaning": "比喻猖狂捣乱而成不了大气候的坏人"},
|
||
"丑态百出": {"pinyin": "chǒu tài bǎi chū", "meaning": "各种丑恶的样子都表现出来了"},
|
||
"出类拔萃": {"pinyin": "chū lèi bá cuì", "meaning": "超出同类之上,多指人的品德才能"},
|
||
"萃萃学子": {"pinyin": "cuì cuì xué zǐ", "meaning": "众多的学生"},
|
||
"子虚乌有": {"pinyin": "zǐ xū wū yǒu", "meaning": "指假设的、不存在的、不真实的事情"},
|
||
"有目共睹": {"pinyin": "yǒu mù gòng dǔ", "meaning": "指非常明显,谁都看得见"},
|
||
"睹物思人": {"pinyin": "dǔ wù sī rén", "meaning": "看见死去或离别的人留下的东西就想起了这个人"},
|
||
"人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"},
|
||
"海阔天空": {"pinyin": "hǎi kuò tiān kōng", "meaning": "比喻言谈议论等漫无边际,没有中心"},
|
||
"空穴来风": {"pinyin": "kōng xué lái fēng", "meaning": "比喻消息和谣言的传播不是完全没有原因的"},
|
||
"风言风语": {"pinyin": "fēng yán fēng yǔ", "meaning": "没有根据的、不怀好意的、带有讥讽的话"},
|
||
"语重心长": {"pinyin": "yǔ zhòng xīn cháng", "meaning": "话深刻有力,情意深长"},
|
||
"长话短说": {"pinyin": "cháng huà duǎn shuō", "meaning": "把要用很多话才能说完的事用简短的话说完"},
|
||
"说三道四": {"pinyin": "shuō sān dào sì", "meaning": "形容不负责任地胡乱议论"},
|
||
"四面楚歌": {"pinyin": "sì miàn chǔ gē", "meaning": "比喻陷入四面受敌、孤立无援的境地"},
|
||
"歌舞升平": {"pinyin": "gē wǔ shēng píng", "meaning": "边歌边舞,庆祝太平,有粉饰太平的意思"},
|
||
"平心静气": {"pinyin": "píng xīn jìng qì", "meaning": "心情平和,态度冷静"},
|
||
"气宇轩昂": {"pinyin": "qì yǔ xuān áng", "meaning": "形容人精力充沛,风度不凡"},
|
||
"昂首阔步": {"pinyin": "áng shǒu kuò bù", "meaning": "抬起头迈开大步向前,形容精神抖擞,意气风发"},
|
||
"步履蹒跚": {"pinyin": "bù lǚ pán shān", "meaning": "走路一瘸一拐的样子,形容走路腿脚不方便,歪歪倒倒的样子"},
|
||
"跚跚来迟": {"pinyin": "shān shān lái chí", "meaning": "形容慢腾腾地来晚了"},
|
||
"迟疑不决": {"pinyin": "chí yí bù jué", "meaning": "形容拿不定主意"},
|
||
"决一雌雄": {"pinyin": "jué yī cí xióng", "meaning": "指较量一下胜败高低"},
|
||
"雄才大略": {"pinyin": "xióng cái dà lüè", "meaning": "非常杰出的才智和谋略"},
|
||
"略知一二": {"pinyin": "lüè zhī yī èr", "meaning": "略微知道一点"},
|
||
"二话不说": {"pinyin": "èr huà bù shuō", "meaning": "不说任何别的话,指立即行动"},
|
||
"说一不二": {"pinyin": "shuō yī bù èr", "meaning": "说怎么样就怎么样,形容说话算数"},
|
||
"二龙戏珠": {"pinyin": "èr lóng xì zhū", "meaning": "两条龙相对,戏玩着一颗宝珠"},
|
||
"珠光宝气": {"pinyin": "zhū guāng bǎo qì", "meaning": "形容妇女服饰华贵富丽,闪耀着珍宝的光色"},
|
||
"气吞山河": {"pinyin": "qì tūn shān hé", "meaning": "气势可以吞没山河,形容气魄很大"},
|
||
"河清海晏": {"pinyin": "hé qīng hǎi yàn", "meaning": "黄河水清,大海平静,形容天下太平"},
|
||
"晏然自若": {"pinyin": "yàn rán zì ruò", "meaning": "形容在紧张状态下沉静如常"},
|
||
"若无其事": {"pinyin": "ruò wú qí shì", "meaning": "好像没有那么回事似的,形容不动声色或漠不关心"},
|
||
"事半功倍": {"pinyin": "shì bàn gōng bèi", "meaning": "指做事得法,因而费力小,收效大"},
|
||
"倍道兼行": {"pinyin": "bèi dào jiān xíng", "meaning": "每天加倍行进,一天走两天的路程,形容加速急行"},
|
||
"行云流水": {"pinyin": "xíng yún liú shuǐ", "meaning": "形容文章自然不受约束,就像漂浮着的云和流动着的水一样"},
|
||
"水落石出": {"pinyin": "shuǐ luò shí chū", "meaning": "水落下去,水底的石头就露出来,比喻事情的真相完全显露出来"},
|
||
"出人头地": {"pinyin": "chū rén tóu dì", "meaning": "指高人一等,形容德才超众或成就突出"},
|
||
"地大物博": {"pinyin": "dì dà wù bó", "meaning": "指国家疆土辽阔,资源丰富"},
|
||
"博古通今": {"pinyin": "bó gǔ tōng jīn", "meaning": "对古代的事知道得很多,并且通晓现代的事情,形容知识丰富"},
|
||
"今不如昔": {"pinyin": "jīn bù rú xī", "meaning": "现在不如过去,多表示对世事的感叹"},
|
||
"昔不如今": {"pinyin": "xī bù rú jīn", "meaning": "现在比过去好"},
|
||
"今非昔比": {"pinyin": "jīn fēi xī bǐ", "meaning": "现在不是过去能比得上的,多指形势、自然面貌等发生了巨大的变化"},
|
||
"比比皆是": {"pinyin": "bǐ bǐ jiē shì", "meaning": "到处都是,形容极其常见"},
|
||
"是非曲直": {"pinyin": "shì fēi qǔ zhí", "meaning": "正确还是不正确,有理还是无理"},
|
||
"直截了当": {"pinyin": "zhí jié liǎo dàng", "meaning": "形容说话做事爽快,不绕弯子"},
|
||
"当机立断": {"pinyin": "dāng jī lì duàn", "meaning": "在紧要时刻立即做出决断"},
|
||
"断章取义": {"pinyin": "duàn zhāng qǔ yì", "meaning": "指不顾全篇文章或谈话的内容,孤立地取其中的一段或一句的意思"},
|
||
"义不容辞": {"pinyin": "yì bù róng cí", "meaning": "道义上不允许推辞"},
|
||
"辞旧迎新": {"pinyin": "cí jiù yíng xīn", "meaning": "告别旧的一年,迎接新的一年的到来"},
|
||
"新陈代谢": {"pinyin": "xīn chén dài xiè", "meaning": "指生物体不断用新物质代替旧物质的过程"},
|
||
"谢天谢地": {"pinyin": "xiè tiān xiè dì", "meaning": "表示目的达到或困难解除后满意轻松的心情"},
|
||
"地老天荒": {"pinyin": "dì lǎo tiān huāng", "meaning": "指经历的时间极久"},
|
||
"荒诞不经": {"pinyin": "huāng dàn bù jīng", "meaning": "形容言论荒谬,不合情理"},
|
||
"经年累月": {"pinyin": "jīng nián lěi yuè", "meaning": "形容经历很长的时间"},
|
||
"月朗风清": {"pinyin": "yuè lǎng fēng qīng", "meaning": "月光明朗,微风清爽,形容宁静美好的月夜"},
|
||
"清风明月": {"pinyin": "qīng fēng míng yuè", "meaning": "只与清风、明月为伴,比喻不随便结交朋友,也比喻清闲无事"},
|
||
"月黑风高": {"pinyin": "yuè hēi fēng gāo", "meaning": "比喻没有月光风也很大的夜晚,比喻险恶的环境"},
|
||
"高风亮节": {"pinyin": "gāo fēng liàng jié", "meaning": "形容道德和行为都很高尚"},
|
||
"节衣缩食": {"pinyin": "jié yī suō shí", "meaning": "省吃省穿,形容节约"},
|
||
"食不甘味": {"pinyin": "shí bù gān wèi", "meaning": "吃东西都觉得没有味道,形容心里有事,吃东西也不香"},
|
||
"味同嚼蜡": {"pinyin": "wèi tóng jiáo là", "meaning": "像吃蜡一样,没有一点儿味,形容语言或文章枯燥无味"},
|
||
"蜡炬成灰": {"pinyin": "là jù chéng huī", "meaning": "蜡烛烧成了灰,比喻自己为不能相聚而痛苦,无尽无休,仿佛蜡泪直到蜡烛烧成了灰方始流尽一样"},
|
||
"灰心丧气": {"pinyin": "huī xīn sàng qì", "meaning": "形容因失败或不顺利而失去信心,意志消沉"},
|
||
"气象万千": {"pinyin": "qì xiàng wàn qiān", "meaning": "形容景象或事物壮丽而多变化"},
|
||
"千变万化": {"pinyin": "qiān biàn wàn huà", "meaning": "形容变化极多"},
|
||
"化为乌有": {"pinyin": "huà wéi wū yǒu", "meaning": "变得什么都没有,指全部消失或完全落空"},
|
||
"有备无患": {"pinyin": "yǒu bèi wú huàn", "meaning": "事先有准备,就可以避免祸患"},
|
||
"患得患失": {"pinyin": "huàn dé huàn shī", "meaning": "担心得不到,得到了又担心失掉,形容对个人得失看得很重"},
|
||
"失之交臂": {"pinyin": "shī zhī jiāo bì", "meaning": "形容当面错过"},
|
||
"臂有四肘": {"pinyin": "bì yǒu sì zhǒu", "meaning": "比喻不凡的相貌"},
|
||
"肘腋之患": {"pinyin": "zhǒu yè zhī huàn", "meaning": "比喻极近的地方的祸患"},
|
||
"患难与共": {"pinyin": "huàn nàn yǔ gòng", "meaning": "共同承担危险和困难,指彼此关系密切,利害一致"},
|
||
"共商国是": {"pinyin": "gòng shāng guó shì", "meaning": "共同商量国家的政策和方针"},
|
||
"是非分明": {"pinyin": "shì fēi fēn míng", "meaning": "正确与错误非常分明"},
|
||
"明目张胆": {"pinyin": "míng mù zhāng dǎn", "meaning": "原指有胆识,敢做敢为,后形容公开放肆地干坏事"},
|
||
"胆大包天": {"pinyin": "dǎn dà bāo tiān", "meaning": "形容胆子极大"},
|
||
"天长地久": {"pinyin": "tiān cháng dì jiǔ", "meaning": "跟天和地存在的时间那样长,形容时间悠久,也形容永远不变(多指爱情)"},
|
||
"久别重逢": {"pinyin": "jiǔ bié chóng féng", "meaning": "指朋友或亲人在长久分别之后再次见面"},
|
||
"逢凶化吉": {"pinyin": "féng xiōng huà jí", "meaning": "遇到凶险转化为吉祥、顺利,这是带有迷信的说法"},
|
||
"吉祥如意": {"pinyin": "jí xiáng rú yì", "meaning": "多用祝颂他人美满称心"},
|
||
"意气风发": {"pinyin": "yì qì fēng fā", "meaning": "形容精神振奋,气概豪迈"},
|
||
"发扬光大": {"pinyin": "fā yáng guāng dà", "meaning": "使事业、传统等更加发展壮大"},
|
||
"大智若愚": {"pinyin": "dà zhì ruò yú", "meaning": "某些才智出众的人,看来好像愚笨,不露锋芒"},
|
||
"愚公移山": {"pinyin": "yú gōng yí shān", "meaning": "比喻坚持不懈地改造自然和坚定不移地进行斗争"},
|
||
"山清水秀": {"pinyin": "shān qīng shuǐ xiù", "meaning": "形容风景优美"},
|
||
"秀外慧中": {"pinyin": "xiù wài huì zhōng", "meaning": "外表秀丽,内心聪明"},
|
||
"中流砥柱": {"pinyin": "zhōng liú dǐ zhù", "meaning": "比喻坚强独立的人能在动荡艰难的环境中起支柱作用"},
|
||
"柱石之坚": {"pinyin": "zhù shí zhī jiān", "meaning": "像柱石一样坚硬,比喻大臣坚强可靠,能担负国家重任"},
|
||
"坚如磐石": {"pinyin": "jiān rú pán shí", "meaning": "像大石头一样坚固,比喻不可动摇"},
|
||
"石破天惊": {"pinyin": "shí pò tiān jīng", "meaning": "原形容箜篌的声音,忽而高亢,忽而低沉,出人意外,有难以形容的奇境,后多比喻文章议论新奇惊人"},
|
||
"惊天动地": {"pinyin": "jīng tiān dòng dì", "meaning": "使天地惊动,形容某个事件的声势或意义极大"},
|
||
"地动山摇": {"pinyin": "dì dòng shān yáo", "meaning": "地震发生时大地颤动,山河摇摆,亦形容声势浩大或斗争激烈"},
|
||
"摇头晃脑": {"pinyin": "yáo tóu huàng nǎo", "meaning": "形容自己感觉很有乐趣或自己认为很不差的样子"},
|
||
"脑满肠肥": {"pinyin": "nǎo mǎn cháng féi", "meaning": "形容饱食终日的剥削者大腹便便,肥胖丑陋的形象"},
|
||
"肥头大耳": {"pinyin": "féi tóu dà ěr", "meaning": "一个肥胖的脑袋,两只大耳朵,形容体态肥胖,有时指小孩可爱"},
|
||
"耳熟能详": {"pinyin": "ěr shú néng详", "meaning": "指听得多了,能够说得很清楚、很详细"},
|
||
"详略得当": {"pinyin": "xiáng lüè dé dàng", "meaning": "指应当详细和应当简略的地方都处理得很妥当"},
|
||
"当务之急": {"pinyin": "dāng wù zhī jí", "meaning": "当前任务中最急切要办的事"},
|
||
"急功近利": {"pinyin": "jí gōng jìn lì", "meaning": "急于求成,贪图眼前的成效和利益"},
|
||
"利欲熏心": {"pinyin": "lì yù xūn xīn", "meaning": "贪财图利的欲望迷住了心窍"},
|
||
"心灰意冷": {"pinyin": "xīn huī yì lěng", "meaning": "灰心失望,意志消沉"},
|
||
"冷若冰霜": {"pinyin": "lěng ruò bīng shuāng", "meaning": "冷得象冰霜一样,比喻待人接物毫无感情,象冰霜一样冷,也比喻态度严正,不可接近"},
|
||
"霜露之病": {"pinyin": "shuāng lù zhī bìng", "meaning": "因感受风寒而引起的病"},
|
||
"病入膏肓": {"pinyin": "bìng rù gāo huāng", "meaning": "形容病情十分严重,无法医治,比喻事情到了无法挽救的地步"},
|
||
"荒诞不经": {"pinyin": "huāng dàn bù jīng", "meaning": "形容言论荒谬,不合情理"},
|
||
"经久不息": {"pinyin": "jīng jiǔ bù xī", "meaning": "经过长时间停不下来"},
|
||
"息事宁人": {"pinyin": "xī shì níng rén", "meaning": "指调解纠纷,使事情平息下来,消除事端,使人们平安相处"},
|
||
"人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"},
|
||
"海纳百川": {"pinyin": "hǎi nà bǎi chuān", "meaning": "比喻包容的东西非常广泛,而且数量很大"},
|
||
"川流不息": {"pinyin": "chuān liú bù xī", "meaning": "形容行人、车马等像水流一样连续不断"},
|
||
"息息相关": {"pinyin": "xī xī xiāng guān", "meaning": "形容彼此的关系非常密切"},
|
||
"关门大吉": {"pinyin": "guān mén dà jí", "meaning": "指商店倒闭或企业破产停业"},
|
||
"吉祥如意": {"pinyin": "jí xiáng rú yì", "meaning": "多用祝颂他人美满称心"},
|
||
"意气风发": {"pinyin": "yì qì fēng fā", "meaning": "形容精神振奋,气概豪迈"},
|
||
"发扬光大": {"pinyin": "fā yáng guāng dà", "meaning": "使事业、传统等更加发展壮大"}
|
||
}
|
||
|
||
# 谐音字典(简化版,仅包含部分常见谐音)
|
||
HOMOPHONES = {
|
||
"一": ["衣", "医", "依", "伊", "仪", "宜", "贻", "移", "遗", "疑", "沂", "颐", "彝", "乙", "已", "以", "亿", "义", "忆", "艺", "议", "亦", "易", "译", "异", "翼", "翌", "绎", "轶", "役", "疫", "诣", "谊", "逸", "毅", "熠", "镒", "驿", "翳", "臆", "肄", "逸"],
|
||
"人": ["仁", "壬", "任", "忍", "韧", "认", "刃", "纫", "仞", "荏", "稔", "妊", "饪", "衽"],
|
||
"大": ["达", "妲", "怛", "炟", "笪", "靼", "打", "瘩", "迖", "跶", "搭", "嗒", "褡", "耷", "大", "汏", "釱"],
|
||
"天": ["填", "田", "甜", "恬", "腆", "舔", "阗", "钿", "畋", "佃", "畑", "沺", "忝", "殄", "瑱", "璅"],
|
||
"地": ["第", "弟", "帝", "谛", "蒂", "缔", "娣", "睇", "碲", "递", "第", "棣", "睇", "娣", "嵽", "馰"],
|
||
"风": ["丰", "封", "枫", "疯", "峰", "烽", "锋", "蜂", "葑", "酆", "冯", "逢", "缝", "讽", "奉", "俸", "凤", "唪", "堋", "捀", "珮", "琫", "甮", "紴", "俸", "蜯", "諷", "靊", "霛", "鳯"],
|
||
"月": ["越", "粤", "跃", "钥", "岳", "乐", "约", "悦", "阅", "跃", "栎", "钥", "钺", "岳", "粤", "樾", "龠", "瀹", "爚", "礿", "篗", "籥", "跃", "鸑", "鷽"],
|
||
"水": ["睡", "税", "说", "谁", "水", "税", "睡", "说", "谁", "涗", "祱", "説", "鋭", "鐩", "陎", "说"],
|
||
"火": ["伙", "或", "货", "获", "祸", "霍", "惑", "豁", "活", "火", "伙", "或", "货", "获", "祸", "霍", "惑", "豁", "活", "钬", "伙", "吙", "佸", "栝", "湱", "漷", "煷", "瘛", "穫", "篧", "輠", "锪", "镬", "耠", "祸", "靃", "蠖", "諕", "謋", "貣", "货", "趏", "跞", "踝", "躧", "鏸", "鐜", "镬", "雘", "霍", "嚯", "蠖", "祸", "穫", "耠", "锪", "镬", "雘"],
|
||
"山": ["杉", "删", "姗", "珊", "栅", "舢", "扇", "善", "擅", "赡", "膳", "缮", "嬗", "骟", "疝", "讪", "汕", "潸", "澘", "邖", "删", "姗", "珊", "栅", "舢", "扇", "善", "擅", "赡", "膳", "缮", "嬗", "骟", "疝", "讪", "汕", "潸", "澘", "邖"],
|
||
"石": ["时", "识", "实", "拾", "食", "蚀", "史", "使", "始", "驶", "士", "氏", "市", "示", "世", "仕", "式", "事", "侍", "势", "视", "试", "饰", "室", "是", "柿", "峙", "适", "逝", "释", "嗜", "噬", "誓", "嗜", "噬", "誓", "莳", "蓍", "弑", "螫", "舐", "谥", "氏", "世", "仕", "式", "事", "侍", "势", "视", "试", "饰", "室", "是", "柿", "峙", "适", "逝", "释", "嗜", "噬", "誓", "莳", "蓍", "弑", "螫", "舐", "谥", "舐", "谥"],
|
||
"金": ["今", "斤", "巾", "仅", "尽", "卺", "紧", "堇", "锦", "谨", "馑", "瑾", "槿", "瑾", "觐", "斤", "筋", "仅", "卺", "紧", "堇", "锦", "谨", "馑", "瑾", "槿", "瑾", "觐", "斤", "筋", "仅", "卺", "紧", "堇", "锦", "谨", "馑", "瑾", "槿", "瑾", "觐"],
|
||
"木": ["目", "牧", "睦", "穆", "暮", "募", "墓", "幕", "慕", "亩", "母", "牡", "姆", "拇", "姆", "母", "牡", "姆", "拇", "姆", "母", "牡", "姆", "拇", "姆"],
|
||
"土": ["吐", "兔", "菟", "堍", "秃", "突", "图", "徒", "途", "涂", "屠", "荼", "菟", "堍", "秃", "突", "图", "徒", "途", "涂", "屠", "荼"],
|
||
"草": ["操", "曹", "槽", "嘈", "漕", "螬", "艚", "褿", "嘈", "漕", "螬", "艚", "褿"],
|
||
"花": ["华", "哗", "骅", "铧", "划", "画", "话", "桦", "猾", "滑", "化", "划", "画", "话", "桦", "猾", "滑", "化"],
|
||
"鸟": ["尿", "捏", "聂", "啮", "镊", "镍", "涅", "蘖", "孽", "啮", "镊", "镍", "涅", "蘖", "孽"],
|
||
"鱼": ["渔", "余", "予", "妤", "盂", "臾", "鱼", "俞", "谀", "娱", "萸", "雩", "嵛", "愉", "揄", "瑜", "榆", "虞", "愚", "觎", "舆", "窬", "逾", "腴", "渝", "愉", "瑜", "榆", "虞", "愚", "觎", "舆", "窬", "逾", "腴", "渝"],
|
||
"虫": ["冲", "充", "忡", "憧", "艟", "舂", "虫", "崇", "宠", "铳", "冲", "充", "忡", "憧", "艟", "舂", "虫", "崇", "宠", "铳"],
|
||
"日": ["入", "如", "茹", "孺", "蠕", "儒", "濡", "襦", "嚅", "孺", "蠕", "儒", "濡", "襦", "嚅"],
|
||
"月": ["越", "粤", "跃", "钥", "岳", "乐", "约", "悦", "阅", "跃", "栎", "钥", "钺", "岳", "粤", "樾", "龠", "瀹", "爚", "礿", "篗", "籥", "跃", "鸑", "鷽"],
|
||
"星": ["兴", "性", "姓", "幸", "形", "刑", "型", "行", "陉", "荥", "型", "硎", "铏", "饧", "悻", "婞", "涬", "睲", "惺", "猩", "瑆", "煋", "觲", "謃", "醒", "擤", "省", "眚", "圣", "胜", "晟", "盛", "剩", "乘", "绳", "胜", "晟", "盛", "剩", "乘", "绳"],
|
||
"光": ["广", "犷", "逛", "咣", "洸", "茪", "珖", "胱", "輄", "銧", "黆", "姯", "侊", "咣", "洸", "茪", "珖", "胱", "輄", "銧", "黆", "姯", "侊"],
|
||
"明": ["名", "命", "鸣", "冥", "铭", "茗", "溟", "暝", "瞑", "螟", "酩", "洺", "眀", "朙", "螟", "蓂", "铭", "溟", "暝", "瞑", "螟", "酩", "洺"],
|
||
"春": ["椿", "醇", "唇", "纯", "莼", "淳", "鹑", "蝽", "蠢", "春", "椿", "醇", "唇", "纯", "莼", "淳", "鹑", "蝽", "蠢"],
|
||
"夏": ["下", "吓", "夏", "厦", "罅", "瞎", "虾", "霞", "暇", "瑕", "遐", "黠", "下", "吓", "夏", "厦", "罅", "瞎", "虾", "霞", "暇", "瑕", "遐", "黠"],
|
||
"秋": ["邱", "丘", "蚯", "秋", "鳅", "湫", "楸", "萩", "啾", "遒", "酋", "逑", "球", "赇", "巯", "蝤", "鳅", "囚", "泅", "俅", "酋", "逑", "球", "赇", "巯", "蝤", "鳅"],
|
||
"冬": ["东", "咚", "岽", "氡", "鸫", "董", "懂", "动", "冻", "侗", "垌", "峒", "恫", "栋", "洞", "胨", "硐", "鲷", "东", "咚", "岽", "氡", "鸫", "董", "懂", "动", "冻", "侗", "垌", "峒", "恫", "栋", "洞", "胨", "硐", "鲷"]
|
||
}
|
||
|
||
# 同音字检查函数
|
||
def is_homophone(char1, char2):
|
||
"""检查两个字是否为同音字"""
|
||
if char1 == char2:
|
||
return True
|
||
# 检查是否在谐音字典中
|
||
for key, values in HOMOPHONES.items():
|
||
if char1 == key and char2 in values:
|
||
return True
|
||
if char2 == key and char1 in values:
|
||
return True
|
||
return False
|
||
|
||
# 获取下一个成语(本地库)
|
||
def get_next_idioms(last_char):
|
||
"""获取以指定字符开头的成语(支持谐音)"""
|
||
result = []
|
||
for idiom in IDIOMS:
|
||
first_char = idiom[0]
|
||
if idiom.startswith(last_char) or is_homophone(first_char, last_char):
|
||
result.append(idiom)
|
||
return result
|
||
|
||
# 验证成语函数
|
||
def validate_idiom(idiom, last_char, history):
|
||
"""验证成语是否有效(完全依赖AI验证,支持谐音)"""
|
||
# 检查是否已经使用过
|
||
if idiom in history:
|
||
return False, "成语已经使用过"
|
||
|
||
# 检查首字是否匹配(支持谐音)
|
||
if last_char:
|
||
first_char = idiom[0]
|
||
if not (idiom.startswith(last_char) or is_homophone(first_char, last_char)):
|
||
return False, f"成语必须以'{last_char}'或其谐音开头"
|
||
|
||
# 完全依赖AI验证,不再使用本地成语库
|
||
if DEEPSEEK_API_KEY and DEEPSEEK_API_KEY != "your_api_key_here":
|
||
try:
|
||
headers = {
|
||
"Content-Type": "application/json",
|
||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}"
|
||
}
|
||
|
||
# 专业的成语验证提示
|
||
system_prompt = "你是一个专业的成语专家,精通中国成语。请判断以下内容是否为标准的四字成语。\n"
|
||
system_prompt += "判断标准:\n"
|
||
system_prompt += "1. 必须是四字短语\n"
|
||
system_prompt += "2. 必须是约定俗成的成语,而非普通短语\n"
|
||
system_prompt += "3. 包括常见成语、典故成语、书面成语和较少见的成语\n"
|
||
system_prompt += "4. 只要符合成语特征,即使不太常见也应判断为成语\n"
|
||
system_prompt += "请严格按照要求判断,如果是成语,请只回答'是';如果不是成语,请只回答'否'。"
|
||
|
||
messages = [
|
||
{"role": "system", "content": system_prompt},
|
||
{"role": "user", "content": f"{idiom}"}
|
||
]
|
||
|
||
data = {
|
||
"model": "deepseek-chat",
|
||
"messages": messages,
|
||
"max_tokens": 10,
|
||
"temperature": 0.1,
|
||
"response_format": {"type": "text"}
|
||
}
|
||
|
||
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=8)
|
||
response.raise_for_status()
|
||
result = response.json()
|
||
ai_answer = result['choices'][0]['message']['content'].strip()
|
||
|
||
print(f"AI验证结果: {idiom} -> {ai_answer}")
|
||
|
||
# 更宽松的AI回答匹配
|
||
if ai_answer in ["是", "是的", "对", "正确", "是成语"]:
|
||
# AI确认是成语
|
||
return True, "AI验证通过"
|
||
elif ai_answer in ["否", "不是", "不对", "错误", "不是成语"]:
|
||
return False, "成语不存在"
|
||
else:
|
||
# AI回答不明确,尝试再次验证
|
||
print(f"AI回答不明确: {ai_answer}")
|
||
try:
|
||
messages = [
|
||
{"role": "system", "content": "请重新判断,只回答'是'或'否',不要添加任何其他内容"},
|
||
{"role": "user", "content": f"{idiom}是否是标准的四字成语?"}
|
||
]
|
||
data['messages'] = messages
|
||
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=5)
|
||
response.raise_for_status()
|
||
result = response.json()
|
||
ai_answer = result['choices'][0]['message']['content'].strip()
|
||
print(f"AI二次验证结果: {idiom} -> {ai_answer}")
|
||
if ai_answer in ["是", "是的", "对", "正确", "是成语"]:
|
||
return True, "AI验证通过"
|
||
except Exception as e:
|
||
print(f"二次验证失败: {e}")
|
||
# 多次验证失败
|
||
return False, "成语不存在"
|
||
except Exception as e:
|
||
print(f"AI验证失败: {e}")
|
||
# AI验证失败,使用兜底验证
|
||
if len(idiom) == 4 and all('\u4e00' <= c <= '\u9fff' for c in idiom):
|
||
return True, "四字短语验证通过"
|
||
else:
|
||
return False, "成语不存在"
|
||
else:
|
||
# 未配置API密钥,使用兜底验证
|
||
if len(idiom) == 4 and all('\u4e00' <= c <= '\u9fff' for c in idiom):
|
||
return True, "四字短语验证通过"
|
||
else:
|
||
return False, "成语不存在"
|
||
|
||
# 获取随机成语
|
||
def get_random_idiom():
|
||
"""获取随机成语"""
|
||
return random.choice(list(IDIOMS.keys()))
|
||
|
||
# 使用DeepSeek API生成接龙成语
|
||
def get_deepseek_idiom(last_char, history):
|
||
"""使用DeepSeek API生成接龙成语(支持谐音)"""
|
||
if not DEEPSEEK_API_KEY or DEEPSEEK_API_KEY == "your_api_key_here":
|
||
# API密钥未配置,返回None
|
||
return None
|
||
|
||
try:
|
||
headers = {
|
||
"Content-Type": "application/json",
|
||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}"
|
||
}
|
||
|
||
# 构建系统提示
|
||
system_prompt = "你是一个成语接龙专家,擅长根据最后一个字(或谐音)生成接龙成语。\n"
|
||
system_prompt += "请按照以下要求生成成语:\n"
|
||
system_prompt += "1. 必须是四字成语\n"
|
||
system_prompt += "2. 要与前一个成语的最后一个字谐音或同字\n"
|
||
system_prompt += "3. 不要重复已经使用过的成语\n"
|
||
system_prompt += "4. 尽量使用常见的成语\n"
|
||
system_prompt += "5. 只需要返回成语本身,不要添加任何其他内容\n"
|
||
|
||
# 构建用户提示
|
||
user_prompt = f"请生成一个以'{last_char}'(或其谐音)开头的成语,不要使用以下成语:{', '.join(history) if history else '无'}"
|
||
|
||
messages = [
|
||
{"role": "system", "content": system_prompt},
|
||
{"role": "user", "content": user_prompt}
|
||
]
|
||
|
||
data = {
|
||
"model": "deepseek-chat",
|
||
"messages": messages,
|
||
"max_tokens": 20,
|
||
"temperature": 0.7
|
||
}
|
||
|
||
# 发送请求
|
||
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=10)
|
||
response.raise_for_status()
|
||
|
||
# 解析响应
|
||
result = response.json()
|
||
idiom = result['choices'][0]['message']['content'].strip()
|
||
|
||
# 验证生成的成语
|
||
if validate_idiom(idiom, last_char, history)[0]:
|
||
return idiom
|
||
else:
|
||
# 生成的成语无效,尝试再次生成
|
||
print(f"AI生成的成语无效: {idiom}")
|
||
# 再次调用API尝试生成
|
||
try:
|
||
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=8)
|
||
response.raise_for_status()
|
||
result = response.json()
|
||
idiom = result['choices'][0]['message']['content'].strip()
|
||
if validate_idiom(idiom, last_char, history)[0]:
|
||
return idiom
|
||
else:
|
||
return None
|
||
except Exception as e:
|
||
print(f"二次生成失败: {e}")
|
||
return None
|
||
|
||
except Exception as e:
|
||
print(f"DeepSeek API调用失败: {e}")
|
||
return None
|
||
|
||
# Streamlit应用
|
||
|
||
def main():
|
||
"""成语接龙主应用"""
|
||
st.title("🤖 智能成语接龙")
|
||
st.write("与AI进行成语接龙游戏,支持谐音接龙!")
|
||
|
||
# 初始化会话状态
|
||
if "game_started" not in st.session_state:
|
||
st.session_state.game_started = False
|
||
if "current_idiom" not in st.session_state:
|
||
st.session_state.current_idiom = ""
|
||
if "history" not in st.session_state:
|
||
st.session_state.history = []
|
||
if "game_over" not in st.session_state:
|
||
st.session_state.game_over = False
|
||
if "score" not in st.session_state:
|
||
st.session_state.score = 0
|
||
if "error" not in st.session_state:
|
||
st.session_state.error = ""
|
||
if "ai_score" not in st.session_state:
|
||
st.session_state.ai_score = 0
|
||
|
||
# 游戏设置
|
||
col1, col2 = st.columns(2)
|
||
with col1:
|
||
game_mode = st.selectbox("游戏模式", ["人机对战", "双人对战"], index=0)
|
||
with col2:
|
||
difficulty = st.selectbox("难度", ["简单", "中等", "困难"], index=0)
|
||
|
||
# 开始游戏
|
||
if not st.session_state.game_started:
|
||
if st.button("开始游戏"):
|
||
# 初始化游戏状态
|
||
st.session_state.game_started = True
|
||
st.session_state.game_over = False
|
||
st.session_state.history = []
|
||
st.session_state.score = 0
|
||
st.session_state.ai_score = 0
|
||
st.session_state.error = ""
|
||
|
||
# 生成第一个成语(仅使用本地成语库)
|
||
first_idiom = get_random_idiom()
|
||
st.session_state.current_idiom = first_idiom
|
||
st.session_state.history.append(first_idiom)
|
||
|
||
st.success(f"游戏开始!第一个成语是:**{first_idiom}**")
|
||
|
||
# 游戏进行中
|
||
if st.session_state.game_started and not st.session_state.game_over:
|
||
# 显示当前成语
|
||
st.subheader(f"当前成语:**{st.session_state.current_idiom}**")
|
||
last_char = st.session_state.current_idiom[-1]
|
||
st.write(f"请接:**{last_char}**(支持谐音)")
|
||
|
||
# 用户输入
|
||
user_input = st.text_input("请输入接龙成语:", key="user_input")
|
||
|
||
if st.button("提交"):
|
||
if user_input:
|
||
# 验证用户输入
|
||
is_valid, message = validate_idiom(user_input, last_char, st.session_state.history)
|
||
|
||
if is_valid:
|
||
# 验证通过,更新游戏状态
|
||
st.session_state.history.append(user_input)
|
||
st.session_state.score += 1
|
||
st.success(f"回答正确!**{user_input}**")
|
||
|
||
# 检查是否为双人对战
|
||
if game_mode == "人机对战":
|
||
# AI接龙
|
||
st.write("🤖 AI正在思考...")
|
||
ai_idiom = get_deepseek_idiom(user_input[-1], st.session_state.history)
|
||
|
||
if ai_idiom:
|
||
st.session_state.history.append(ai_idiom)
|
||
st.session_state.ai_score += 1
|
||
st.session_state.current_idiom = ai_idiom
|
||
st.info(f"🤖 AI回答:**{ai_idiom}**")
|
||
else:
|
||
# AI无法接龙,游戏结束
|
||
st.session_state.game_over = True
|
||
st.success(f"游戏结束!AI无法接龙,你赢了!")
|
||
st.balloons()
|
||
else:
|
||
# 验证失败
|
||
st.error(f"错误:{message}")
|
||
st.session_state.error = message
|
||
else:
|
||
st.error("请输入成语")
|
||
|
||
# 显示游戏状态
|
||
st.sidebar.title("游戏状态")
|
||
st.sidebar.write(f"当前分数:{st.session_state.score}")
|
||
if game_mode == "人机对战":
|
||
st.sidebar.write(f"AI分数:{st.session_state.ai_score}")
|
||
st.sidebar.write(f"已接龙:{len(st.session_state.history)} 个成语")
|
||
|
||
# 显示历史记录
|
||
if st.sidebar.checkbox("显示历史记录"):
|
||
st.sidebar.write("历史接龙:")
|
||
for i, idiom in enumerate(st.session_state.history):
|
||
if i % 2 == 0:
|
||
st.sidebar.write(f"{i+1}. 🧑 **{idiom}**")
|
||
else:
|
||
st.sidebar.write(f"{i+1}. 🤖 **{idiom}**")
|
||
|
||
# 游戏结束
|
||
if st.session_state.game_over:
|
||
st.subheader("游戏结束!")
|
||
st.write(f"你的分数:{st.session_state.score}")
|
||
if game_mode == "人机对战":
|
||
st.write(f"AI分数:{st.session_state.ai_score}")
|
||
st.write(f"总共接龙:{len(st.session_state.history)} 个成语")
|
||
|
||
if st.button("重新开始"):
|
||
# 重置游戏状态
|
||
st.session_state.game_started = False
|
||
st.session_state.current_idiom = ""
|
||
st.session_state.history = []
|
||
st.session_state.game_over = False
|
||
st.session_state.score = 0
|
||
st.session_state.error = ""
|
||
st.session_state.ai_score = 0
|
||
st.experimental_rerun()
|
||
|
||
# 未开始游戏
|
||
if not st.session_state.game_started:
|
||
st.write("---")
|
||
st.info("📝 游戏规则:")
|
||
st.write("1. 输入以当前成语最后一个字(或谐音)开头的成语")
|
||
st.write("2. 成语不能重复使用")
|
||
st.write("3. 支持谐音接龙")
|
||
st.write("4. 游戏由AI生成第一个成语,之后由AI和玩家交替接龙")
|
||
st.write("5. AI会验证你的回答是否正确")
|
||
|
||
if __name__ == "__main__":
|
||
main() |