文字冒险
玩家敲两个词,游戏作答。split、case/when,再加一点状态——AI 之前的 AI。
42 秒 · 含中文字幕 · 8.4 Mo
你会学会的 7 件事
第 10 课:文字冒险
Regarde la leçon (42 s) : avant ChatGPT, une IA s'appelait `split`. Un joueur tape des mots, un jeu répond — et tout tient dans trois idées.
玩家的句子
Écris `mots(commande)` : découpe la phrase du joueur en mots — `"prendre epee"` → `["prendre", "epee"]`. Un espace, deux mots : l'IA d'avant, c'était `split`.
动词说了算
Écris `verbe(commande)` : le PREMIER mot — c'est lui qui décide. `"prendre epee"` → `"prendre"` · `" ouvrir porte"` → `"ouvrir"` (les espaces en trop ne comptent pas).
名词,或者没有
Écris `nom(commande)` : le DEUXIÈME mot, ou `nil` s'il n'y en a pas. `"prendre epee"` → `"epee"` · `"ouvrir grande porte"` → `"grande"` · `"marcher"` → `nil`. Une commande sans objet n'a pas de nom.
识别:两个精确的词
Écris `reconnait?(commande, verbe, nom_attendu)` : true seulement si la commande fait EXACTEMENT ces deux mots, dans l'ordre. `"epee prendre"` n'est pas `"prendre epee"` — le parser d'avant ChatGPT : deux mots, point final.
守卫的词表
Écris `reponds(sujet)` : le garde parle par répliques prêtes — `"cle"` → `"Il désigne la serrure, sans un mot."` · `"bonjour"` → `"— Tu parles ? Ici, on répond par des gestes."` · tout autre sujet → `"— …"` (le silence : je ne comprends pas).
第 10 课:OK
Sans aide : `reponse(etat, commande)` — l'ÉTAT + la commande exacte choisissent la réplique. `"prendre epee"` en `:debut` → `"L'épée est à toi."` · la même commande en `:fin` → `"Déjà prise."` · toute autre commande → `"— …"`.
📄 备忘单
打印出来贴显示器上,就当是你自己的主意📄 备忘单 — 文字冒险(ChatGPT 之前的解析器)
ChatGPT 之前,有个 AI 叫
split。玩家在黑暗里敲两个词,游戏回答——而它什么也没懂。
历史,三行
| 年份 | 发生了什么 | 带来了什么 |
|---|---|---|
| 1976 | Colossal Cave Adventure | 用词句写成的世界 |
| 1977 | Zork,四个 MIT 学生 | 动词 + 名词 解析器 |
| 2020 年代 | 大模型们 | ……于是所有人忘了解析器存在过 |
玩家敲两个词,游戏作答。它从来什么也没懂——而这正是它管用的原因。
配方:三个想法
"prendre epee".split # => ["prendre", "epee"] 句子,切开
.split.first # => "prendre" 动词
.split[1] # => "epee" 名词(或 nil)
识别:两个精确的词,按顺序
def reconnait?(commande, verbe, nom)
commande.split == [verbe, nom]
end
reconnait?("prendre epee", "prendre", "epee") # => true
reconnait?("epee prendre", "prendre", "epee") # => false —— 顺序算数
不猜意图,不做模糊匹配:比较字符串——并且敢说不。 连续说二十次「不」,才是这个解析器。
对话:带必备 else 的 case/when
case sujet
when "cle" then "Il désigne la serrure, sans un mot."
when "bonjour" then "— Tu parles ? Ici, on répond par des gestes."
else "— …" # 沉默 = 「我没听懂」
end
每个认识的话题都有它的台词;else 是必备的——没有它,未知话题得到 nil,
你的角色会说到一半「死机」。
状态:同一条命令,两句回答
case [etat, commande] # 比较【这一对】
when [:debut, "prendre epee"] then "L'épée est à toi."
when [:fin, "prendre epee"] then "Déjà prise."
else "— …"
end
游戏的记忆不过就是一个变量(:debut、:fin),它决定哪句台词为真。
大模型在这里即兴;你的 case/when 记得住。
以后别再说
「让玩家开口得用大模型」→ 一个case/when和一个else「解析器得什么都懂」→ 两个精确的词;剩下的是写作功底「AI 就是模型」→ 1977 年,它是split。
SlopCourse — 从 slop 到干净的代码。