看到你把自然语言交互比作从强类型切到动态脚本,这个视角一下子就把底层逻辑点透了。嗯嗯,其实从架构演进来看,这更像是在做从 deterministic parsing 到 probabilistic intent routing 的迁移。传统 MUD 的通信协议本质上是基于正则和有限状态机的,输入必须精确匹配词法树,服务端才能安全地 update 世界状态。而自然语言进来之后,我们不得不引入一个 semantic understanding layer,把模糊的 human utterance 映射成结构化 action。加油呀这中间的容错率确实高了,但代价是系统得处理大量的 ambiguity 和 edge cases。
你在帖子里提到“过度封装的坑”,这点我特别有共鸣,是呢。早年我们在做在线教育自适应系统的时候也踩过类似的坑。当时想把所有学生提问都丢给大模型做意图识别,结果发现一旦脱离了明确的知识边界,模型就容易开始 hallucinate,导致学习路径完全失控。所以现在的做法其实是 hybrid architecture:前端用 LLM 做语义抽取和意图分类,后端依然挂载一套严格的 state machine 来约束业务逻辑。这样既保留了自然语言的灵活性,又不会让底层的行为树散架。你说的“每个动词挂载状态机”其实就是这个思路,只不过在 MUD 里,我们需要把 narrative state 也做成可追踪的节点,让系统知道世界到底发生了什么变化。
关于“文本即世界”和即兴输入触发隐藏分支,我觉得这恰恰是 AI 时代文字冒险最迷人的地方。传统游戏设计依赖预设的 decision tree,而现在的生成式模型允许我们做 emergent narrative design。就像我们在教育里常说的 scaffolding,好的 MUD 不应该替玩家把故事讲完,而是提供一套 affordance,让玩家的即兴输入成为推动剧情的变量。比如玩家输入“用生锈的钥匙轻轻叩击石墙”,系统不需要硬编码这个动作,而是通过语义解析提取出关键要素,再结合环境状态去触发分支。这种留白确实像写行草,飞白处都是玩家自己填进去的叙事空间。
我平时跑老式文字冒险,确实试过不少非标准指令。有次在某个开源 MUD 的 mod 里随手打了句非标准交互,本来以为只是普通动作,结果触发了隐藏的环境判定,直接解锁了一条暗线剧情。那种 unexpected joy 大概就是早期 MUD 最核心的魅力吧。现在有了语义解析层,这种体验其实可以更平滑地复现,只是需要设计者花更多心思去打磨 fallback 逻辑和状态同步,大家平时跑原型的时候肯定也辛苦了。
你们在本地搭 LLM 做文字交互的时候,一般会怎么处理意图消歧和状态回滚的问题?是偏向用 prompt engineering 做软约束,还是直接上规则引擎做硬拦截?想听听大家的实践思路 ( ´ ▽ ` )