EN

零訓練,秒反應~400ms

Meadow Mind 不透過 RL 訓練和 reward,能在 0.4s 的反應速度下完成反應任務。

engine MeadowCoder-7B (8-bit)
hardware Apple M1 Max,本機推理
envs Gymnasium 官方,物理未改
training 0 樣本、0 reward
0 樣本
不收集任何環境資料
0 訓練
不用 RL、不用 reward、不用梯度
高泛化
0 訓練解了 >5 個遊戲,持續增加中
<1s
決策延遲(~400ms)

四層架構

使用者只準備「感知」與「規則」兩層;決策核心封裝在套件內,import meadow_mind 即用。

① 感知 Perceiver
原始觀測翻成一句狀況。例:Status: DROPPING. 鐵則:必含速度或趨勢項。
② 規則 Rule
自然語言策略,一句話。這就是 policy:改行為等於改字,零訓練。
③ 決策 Mind
7B 模型讀規則與狀況,即時選出動作。固定延遲約 0.4 秒,與答案長度無關。
④ 執行 Actuator
動作字母對應環境動作。
例:C → fire main engine

如何使用?

5 個步驟接入 Meadow Mind,體驗免訓練快速任務執行。

1了解任務、探索輸入-輸出
觀察任務的變數、動作、勝利條件、失敗條件 (反應死線要比 0.4 秒寬鬆);把所有輸入動作列出, 看動作 A 會有什麼結果 X,例:「推右 → 桿子被扶回來」。
2建立感知詞
一句話描述現在的狀況,讓 Mind 知道發生什麼事。 例:把數字 桿角 0.13、轉速 0.9 翻成 「桿子往右倒,轉得快」。不必精確,分大/小、快/慢就好。
3規則烙印
將輸出與輸入反向建立規則:遇到狀況 X 就做動作 B。 例:「往右倒就推右」「DROPPING 就點主引擎」。一句話,就是 policy。
4判斷是否開啟記憶
問一句:「回到同一個狀態,是不是失敗訊號?」 是(迷宮、探索、有死路)→ Task(memory=True); 任務是「維持」某狀態(平衡、降落、跟隨)→ 關,重複動作是工作本身。 卡住打轉時系統也會提示該開。
5開始測試(紙上考試)
上場前先考 Mind 一份考卷:每題 = 一種狀況 + 標準答案 (「往右倒+轉得快」這題的標準答案是「推右」)。 mind.check(task) 逐題問,例如 CartPole 考 8 題答對 7 題 (允許錯 1 題)就放行去玩真的;降落 5 題全對、迷宮 7 題全對、MountainCar 3 題全對。 沒過不用訓練:通常是感知詞的句子描述不完整,Mind 抓錯重點,換個說法再考一次。
或者,把這五步直接交給 AI
其實人類不需要自己做這五步:把下面這段濃縮提示詞連同遊戲說明丟給任何 code agent (Meadow CLI、Claude、Cursor),它會自動產出感知詞、規則與考卷,人類只要看最後的考試分數。
你是 Meadow Mind 的任務接入工程師。我給你一個遊戲的觀測與動作說明,請產出:
1) perceive(obs):把數字觀測翻成一句英文狀況。分檔(small/big、fast/slow)、
   必含速度或趨勢項、多目標仲裁成單一大寫 Status 關鍵字。
2) rule:一句英文規則,狀況關鍵字到選項字母的一層映射(不巢狀)。
3) options:選擇題(A=..., B=...),字母對應環境動作。不開放填空。
4) 判斷是否開啟記憶:「回到同一個狀態,是不是失敗訊號?」
   是(迷宮/探索/死路)→ Task(memory=True),感知函式改 perceive(obs, task),
   用 task.seen(key) 在感知句標注 (safe, already visited),
   規則加「優先走沒走過的」。維持類(平衡/降落)保持關:標注有實測傷害。
   不確定先關,卡住打轉時 runner 會提示。
5) sanity:列舉全部狀況組合與預期字母(考卷;有開記憶就含標注狀況)。
完成後跑 mind.check(task),允許錯 1 題;沒過就只改措辭重考,不碰模型。
# 快速開始,內建任務
from meadow_mind import MeadowMind, tasks

mind = MeadowMind()                  # 載一次模型(7B,本機)
task = tasks.mountaincar()
mind.check(task)                     # sanity gate:決策表不過會 raise

obs, _ = env.reset()
while not done:
    action, info = mind.decide(task, obs)   # obs 進、env action 出
    obs, r, done, trunc, _ = env.step(action)

CLI 一條命令跑完「sanity、玩一局、出影片與判定」:python3.11 -m meadow_mind.play mountaincar

四個遊戲的完整拆解

影片中每一幀都對應一次真實模型決策。無腳本 policy、無剪輯加速。

平衡

CartPole-v1
400/400 滿分0.35s / 步sanity 7/8
觀測
[車位置, 車速, 桿角 θ, 角速度 θ̇],4 維
動作
2 個:左推、右推
輸贏
|θ| 超過 12° 即輸;solve 線 195 步
效果
推右,支點移到重心下方,桿被扶回來
RULE(這句話就是 POLICY) 旋轉,朝旋轉方向推;旋轉,朝傾斜方向推。
控制理論經典 θ+θ̇ 策略的語言版。只看傾斜不看旋轉必振盪而死,速度項是鐵則。
def perceive(obs):
    th, thv = obs[2], obs[3]
    tilt  = "right" if th  > 0 else "left"
    spin  = "right" if thv > 0 else "left"
    speed = "fast" if abs(thv) > abs(th) else "slow"
    return f"The pole tilts {tilt}. The spin is {spin}, {speed} spin."
400 步滿分。turn-based:每幀等一次真實決策才前進。

降落

LunarLander-v3
+251 安全著陸0.45s / 步sanity 5/5
主引擎減速、側引擎調姿態、對準著陸墊、觸地緩衝、雙腿著陸。178 次真實決策。
觀測
[x, y, vx, vy, 角度, 角速度, 左腳, 右腳],8 維
動作
4 個:不動、左引擎、主引擎、右引擎
輸贏
墜毀 −100;solve 線 +200
效果
主引擎減緩下降;側引擎轉姿態;多目標由感知層仲裁
RULE DROPPING 點主引擎;TURN-LEFT / TURN-RIGHT 點側引擎;STABLE / LANDED 不動。
if leg1 or leg2:
    if vy < -0.1:
        return "Status: DROPPING."  # 觸地仍下沉,繼續緩衝
    return "Status: LANDED."
結果回饋實例:第一次飛 +27.5 摔機,軌跡顯示「腿一觸地就停控」。 在感知層補上面那行觸地緩衝,第二次 +251 著陸。改一行字,十秒,不用 reward。

迷宮

FrozenLake-v1 8×8
14 步 GOAL,最短路徑0.36s / 步sanity 7/7
從左上走到右下,繞過全部 10 個洞,14 步正好是理論最短路徑。
觀測
格子編號 0 到 63;S 起點、F 冰面、H 洞、G 終點
動作
左、下、右、上(確定性)
輸贏
踩 H 死,走到 G 贏
RULE primary 安全就走;是洞或牆走 secondary;都壞走逃生方向;永不踩洞
感知層提供全局觀念:朝終點的方位拆成 primary 與 secondary 兩個候選方向, 連同兩格的狀態(safe / hole / blocked)一起給模型。
"Primary: down (safe). Secondary: right (hole)."

動量

MountainCar-v0
103 步插旗0.37s / 步sanity 3/3
觀測
[位置, 速度],2 維
動作
3 個:左推、不動、右推
輸贏
200 步內開上山頂插旗;引擎力小於重力,直衝必敗
效果
順著動量推,等於替系統加能量(盪鞦韆原理)
RULE(反直覺策略,一句話) 順著移動方向推,像盪鞦韆一樣累積能量;靜止時往左推起盪。
MountainCar 是 RL 的經典稀疏 reward 難題:要先遠離目標才能到達。 RL 靠探索撞出這個策略;這裡直接寫進規則。
rule = ("Rule: push in the same direction the car is moving, "
        "to pump energy like a swing. If not moving, push left.")
左右盪兩個來回累積動能,103 步衝上山頂(上限 200)。

Meadow Mind 的記憶功能表現

沒有記憶,走進死路只會在洞口來回踱步。
在感知句增加記憶指示,就能啟動並會退出來繞路。

死路迷宮

自製漏斗陷阱 · FrozenLake 8×8
左:無記憶,卡死 ✗右:有記憶,22 步 GOAL ✓變因只有 5 個字
漏斗把兩邊都導進同一個口袋死路(下、左、右全是洞)。 左邊永遠在洞口來回;右邊同樣掙扎了兩個來回,然後退出、走外圍繞到終點。
內建記憶開關 Task(memory=True) 開啟後走過的狀態自動記進記憶區塊,感知句用 task.seen() 多標一句即可, 不改模型、不另外訓練。預設關閉;卡住打轉時系統會提示開啟。
st = "safe"
if cell in visited:
    st = "safe, already visited"
RULE(只改一句) 優先走沒走過的方向;primary 走過就換 secondary;都不行走替代方向。

為什麼不用 Reward

RL(PPO / SAC)Meadow Mind
policy 來源reward 工程加訓練(小時到天)一句規則(秒)
樣本需求10⁵ 到 10⁷ env steps0
改行為重新訓練改字
可解釋性黑盒權重規則與每步決策皆可讀
決策延遲0.1 到 1 ms約 0.4 s(誠實弱點)
連續精度與高頻控制離散選擇題(誠實弱點)

RL 需要 reward,因為 policy 藏在權重裡,只能用純量訊號慢慢雕。 Meadow Mind 的 policy 是一句可讀的話:環境分數只當成績單,不進決策迴圈。 取代 reward 的是結果回饋:episode 軌跡(狀況、動作、結果)指出規則哪句錯,直接改字。 LunarLander 從摔機到著陸,就是補一句觸地緩衝的十秒修改。

誠實邊界:反應極限約 0.4 秒(約 2Hz), 死線更緊的任務(一公尺倒立擺、Pong 的軌跡預測)目前做不到;感知層由人設計,屬教學分工。 下一版規劃逐層感知積分,信心達閾值即提前作動,目標把延遲壓到約 0.15 秒。