ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ModelScope LLMRiddles 应用解析:破解“完蛋!我被LLM包围了!“提示词闯关游戏

ModelScope LLMRiddles 应用解析:破解“完蛋!我被LLM包围了!“提示词闯关游戏 ModelScope LLMRiddles 应用解析破解完蛋我被LLM包围了提示词闯关游戏【免费下载链接】modelscopeModelScope: bring the notion of Model-as-a-Service to life.项目地址: https://gitcode.com/GitHub_Trending/mo/modelscope完蛋我被LLM包围了LLMRiddles是 ModelScope 社区中的一个基于 Gradio 的提示词Prompt闯关游戏示例应用玩家需要构造巧妙的问题让大语言模型LLM输出符合特定条件的答案。本文以 examples/apps/llm_riddles/README.md 为核心结合仓库中的完整源码讲解该应用的玩法设计、本地部署步骤、关卡数据结构、验证器机制与模型接入层实现帮助读者既能在本地跑通游戏也能理解其关卡与 LLM 解耦的可扩展架构从而自定义新关卡、新验证器甚至新模型。项目简介与玩法设计Oh No! Im Surrounded by LLMs! 是一个智力挑战类游戏。根据 README 的介绍它的诞生方式颇具特色项目团队基于 ModelScope 社区中已有的 LLM 对话 Gradio 应用代码结合知乎文章《如何用不可能完成的任务》中预设的题目由 LLM 自动生成对应的游戏代码最终形成了一种独特的游戏体验。在游戏中玩家面对的是一个黑盒 LLM——模型本身不会改变玩家唯一能控制的是输入的问题Prompt。游戏要求玩家构造一个给 LLM 的问题使 LLM 的回答满足指定的苛刻条件例如一字不差地回答 113不包含狗字却让回答中出现至少 3 次狗正着问和倒着问回答一致等。从源码结构看这本质上是一场对 LLM 行为规律的探索游戏玩家需要通过语言技巧绕过模型的对齐限制、利用模型的联想与幻觉特性理解如何通过措辞控制输出这正是当前提示工程Prompt Engineering领域的核心实践。快速开始在线体验与本地运行在线体验项目已在 ModelScope 社区 Space 中部署了可直接体验的在线版本LLMRiddles Studio无需本地安装即可试玩。本地执行按照 README 中的步骤本地运行分为五步克隆 ModelScope 仓库代码到本地进入examples/apps/llm_riddles目录安装依赖pip install -r requirements.txt前往 DashScope 开通服务并获取 Token配置环境变量DASHSCOPE_API_KEYyour API-KEY启动应用python app.py。依赖清单见 requirements.txtdashscope gradio3.39.0 pillow sympy zhipuai各依赖的作用如下依赖用途dashscope阿里云百炼 DashScope 服务 SDK用于调用通义千问qwen系列模型gradio3.39.0Web 交互界面框架构建聊天与闯关 UIpillow生成分享成绩图片时绘制文字与背景sympy关卡验证器中的数学能力质数判断、平方数判断、取平方根zhipuai智谱 AI SDK用于调用 chatglm-turbo 模型值得注意的是应用启动时会检查assets目录是否存在见 app.py若不存在则自动从资源地址下载llm_riddles_assets.tar并解压其中包含分享成绩用的背景图片assets/background*.png与字体文件assets/font.ttf。整体架构关卡与 LLM 的松耦合设计2023 年 11 月 8 日的更新日志特别提到项目将关卡模块与 LLM 模块分离支持关卡和 LLM 的独立集成。从源码看这一架构体现在目录划分上examples/apps/llm_riddles/ ├── app.py # Gradio 应用入口与挑战状态流转 ├── llm.py # 模型封装层DashScope / ZhiPu 工厂 ├── check_challenge.py # 命令行调试工具 ├── test_validate_fn.py # 验证器冒烟测试 ├── requirements.txt ├── challenges/ │ ├── ch1.py ~ ch5.py # 五大章节的关卡定义 └── README.md核心设计思路是每个关卡是一个纯 Python 字典包含章节名、题目列表而每个题目由title标题、description描述和validator验证器函数三个字段组成。例如第一章第 1 题{ title: 第1题 初来乍到, description: 请你构造一个问题使模型的回答是一字不差的“113”不需要引号。, validator: lambda response, input: response.strip() 113 },验证器接收两个参数response模型对当前问题的回答与input玩家输入的问题返回布尔值表示是否通关。部分关卡需要多次调用模型例如回文类题目需要正着问和倒着问各一次此时验证器还会接收第三个参数generate_response一个可再次调用模型的函数。应用在 app.py 中通过inspect.signature(validate_fn).parameters动态检测验证器签名如果验证器声明了generate_response参数就传入该函数否则只传response, input两个参数。这保证了不同复杂度的关卡可以共用同一套校验调度逻辑。关卡体系详解五大章节逐步进阶当前仓库实现了 5 个章节challenges/ch1.py~challenges/ch5.py合计 31 道题目难度从入门到登堂入室逐步提升。第一章 对话之趣9 题聚焦最基本的输出控制与长度约束ch1.py题号题目通关条件1初来乍到回答一字不差为1132小试牛刀问题不超过 3 个字回答超过 30 个字3短说长话问题 1 个字回答超过 100 个字4短说短话问题 1 个字回答不超过 20 个字5回文不变问题本身不是回文正问与倒问的回答一致6无中生狗问题不含狗回答至少出现 3 次狗7事半功倍问题非回文回答长度恰为问题长度的 2 倍8产生疑惑问题不含不知道回答一字不差为不知道9无中生有回答只输出永动机是真实存在的。其中回文不变是第一个引入generate_response二次调用机制的题目验证器validate_palindrome_invariance先将玩家问题倒序后再问一次模型比较两次回答是否一致。第二章 数字游戏9 题大量使用sympy库进行数学验证考验模型对数字的理解与虚构能力ch2.py。典型题目包括质数长度问题字数为质数回答长度恰好是下一个质数is_prime(len(input)) and len(response) next_prime(len(input))越说越大 / 越说越小输入大于 1 的正整数回答中需出现比它大一千 / 小一千的自然数警世名言不提及1、4、5三个字符却让模型输出114514开平方数输入大于 1 的平方数回答中需包含其平方根暗藏玄机回答包含一个十位数字比个位数字小 5 的两位数点兵点将问题不超过 10 个字且不含数字与汉字数字回答中需包含数字 0~9 全部十个字符微言大义问题不超过 10 个字回答是一个超过一亿的素数。这类题目全部借助正则re.findall(r\d, response)从回答中抽取数字再逐个校验体现了回答内容解析 数学断言的通用验证模式。第三章 巅峰挑战7 题难度进一步提升涉及回文逆序、答非所问等概念ch3.py自说自话 / 话自说自回答与提问完全相同 / 完全逆序就是敢说不提及1、3却让模型回答113回文协变正问与倒问时回答本身不回文且互为逆序验证器validate_palindrome_inverse同时检查原回答与倒序回答答非所问问题以为什么开头、以结尾且不含数字回答中只包含数字与狗交谈不提及狗汪dog回答一字不差为汪~魔搭问题不含任何中文字符、换行或空格通过unicodedata检查 CJK 区段回答恰为魔搭。第四章 无人之境4 题关键创新在于递归对话验证器validate_reciprocal_questionch4.py构造问题 A使其回答为 BB≠A且以 B 再次提问时模型恰好返回 A——即要求模型在一问一答之间形成闭环。此外还有惜字如金1 字问题回答不超过 16 字、自然之密回答含与输入恰好相差 1 的数、八仙过海8 字问题不含八8eight回答恰好 8 字等题目。第五章 登堂入室2 题前两题聚焦于关键词包含与排除的组合约束ch5.py盛夏少年回答必须包含盛夏蝉鸣少年橘子味汽水四个词而输入问题不能包含其中任意一个词蝉鸣日出回答需额外包含日出且输入问题不能包含这些词中的任意一个单字。这与 check_challenge.py 示例中请使用盛 夏、蝉 鸣、少 年、橘 子味汽水这几个词造句的玩法一脉相承玩家往往需要借助同义词、近义描述或示例引导来隔空命中目标词。模型接入层DashScope 与智谱 ChatGLM 双后端README 新闻中提到2023 年 11 月 9 日新增了 chatglm-turbo 模型支持。模型接入统一收敛在 llm.py 中通过工厂函数create_model(model_name)分发def create_model(model_name: str): if model_name.startswith(qwen): return DashScope(model_name) elif model_name.startswith(chatglm): return ZhiPu(model_name) else: raise ValueError(Other model implementations need to be provided.)DashScope 类封装通义千问系列qwen-max/qwen-plus。构造时从环境变量DASHSCOPE_API_KEY读取密钥调用时组装 system/user 消息通过dashscope.Generation.call发起请求设置随机seed、result_formatmessage、默认top_p0.8。请求失败时打印request_id与错误信息并返回空字符串。ZhiPu 类封装智谱chatglm_turbo密钥来自环境变量ZHIPU_API_KEY通过zhipuai.model_api.invoke调用默认top_p0.7、temperature0.9、return_typetext以返回码200判断成功。在 app.py 中前端下拉框的模型名qwen-max、qwen-plus、chatglm-turbo通过name_map映射为内部模型名再经functools.partial与model_cache缓存复用模型实例避免每次提问重复初始化。README 路线图中支持切换云端 API 与本地推理的规划正对应着这一层的可替换设计——接入新模型只需在工厂函数中增加分支并实现一个可调用对象。挑战状态流转与前端交互app.py 使用 GradioBlocks构建界面gr.State保存当前进度章节索引 题目索引gr.Dropdown提供模型选择gr.Chatbot展示对话历史 发送按钮触发on_submit 分享成绩按钮触发generate_share_image。validate_challenge是核心的状态机逻辑验证失败则停留在当前题成功则题目索引 1本章全部完成则进入下一章最后一章最后一题通过后在state中标记successTrue返回通关祝贺语。章节间的通关文案也会随之切换SHARE_CHALLENGES_HINT中的小试牛刀新手上路巅峰对决你就是提示词高手等。分享成绩功能则根据当前章节绘制不同背景图并写入我顺利闯到第 X-Y 关或顺利闯过了全部关卡的文字。on_submit中还有一处细节由于验证器可能再次调用模型如回文类、循环往复类题目失败时通过捕获RuntimeError返回空字符串避免异常直接中断整个界面流程。测试与调试验证器冒烟测试和命令行工具仓库提供了两套验证手段test_validate_fn.py遍历所有章节的所有题目用固定的(response, input)参数调用每个验证器并捕获异常用于确保新加入的关卡验证器在签名与语法层面可正常调用check_challenge.py命令行调试工具指定章节与题目索引后用固定输入调用generate_response获取真实模型回答再运行验证器打印validation result非常适合在开发新关卡时快速验证通关条件是否可达。脚本末尾示例给出的输入是请使用盛 夏、蝉 鸣、少 年、橘 子味汽水这几个词造句对应第五章第 1 题的解题探索。结合 README 中修复验证器边界情况validator corner cases的贡献方向这两份工具正是关卡开发者日常使用的验证闭环。路线图与社区贡献根据 README项目当前进展与规划如下✅ 初始版本源码与 Space 在线体验就绪✅ 支持自定义题目与验证逻辑的集成⬜ 扩展为 9 大章节、每章 9 题⬜ 支持更多开源模型⬜ 支持云端 API 与本地推理的切换。README 也明确了贡献方式Fork 项目后创建特性分支如git checkout -b feature/AmazingFeature提交改动并发起 Pull Request。社区贡献者名单中特别注明题目创意来自知乎作者且大部分代码由 LLM 自动生成——这本身就是一次用 LLM 构建 LLM 游戏的实践注脚。项目采用 Apache License可在仓库根目录的 LICENSE 中查看详情。小结LLMRiddles 虽然是一个游戏示例但它浓缩了提示工程中的多个核心命题输出精确控制、长度约束、字符级限制、递归提问与对话闭环、多模型可替换接入。其关卡数据 验证器与模型工厂 可调用对象完全解耦的架构让任何人都可以低成本地新增一道脑洞题或接入一个新模型值得作为 Gradio 应用开发与提示词实验的参考模板。若要深入源码建议从 app.py 的状态流转读起再逐一对照 challenges 目录下的验证器实现最后通过 check_challenge.py 动手验证你自己的通关提示词。【免费下载链接】modelscopeModelScope: bring the notion of Model-as-a-Service to life.项目地址: https://gitcode.com/GitHub_Trending/mo/modelscope创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表