2026.10 — Jett 1.0 已发布 · 一次调用,给一组带把握的决定→
Evon Lab

虚拟驾驶:每一帧都问一次

新酷实时循环

三车道、前车、限速 —— 一秒几跳,而刹车距离必须算准

社区里那批 Jev demo(开车、Minecraft、Subway Surfers)共用同一个骨架:游戏持有状态,代码生成合法动作,模型只当分类器。这一页把那个骨架原样搭出来,再补上 Jev 结构上没有的那一层 —— 那个要跟车距比大小的数。

为什么要快 一帧 16 毫秒。判断要是花三秒,这个循环根本立不起来 —— 不是「慢一点」,是这一类应用整个不存在。

这是个演示用的简化世界,不是自动驾驶系统。反应时间 0.8 秒、路面减速度 7.5 / 4.5 m/s² 都是写在题面里的假设值。

跑起来

每一跳都是一次真请求 —— 没有预录,暂停就真的停了。世界状态在你的浏览器里, 中途可以随手改(下雨、前车急刹、玩家拔刀),模型立刻就看见了。

等你点开始
72 km/h48 m90 km/h
这一跳算出来的数
车速
90 km/h
与前车
48 m
反应距离算的
—
制动距离算的
—
停车距离算的
—
还差算的
—

标「算的」那几行是本跳算出来的 —— 页面画的和决策依据的是同一个数。

改完直接「走一步」—— 世界状态在浏览器里,模型每一跳都是无状态的一次调用。

这一跳的接线

① 车机

状态一直在你这边,模型不持有任何东西

合法动作由你的代码生成,模型只在里面挑

一段话 + 选项
② 判断层 · Jett

3 个问题一次前向答完,不是问 3 次

回来的是选项 + 把握程度,不用再解析文字

② 数值 · Jett(与判断同一次请求)

需要的那个数随判断一起回来

精确值,带单位,可以逐位核对

答案 + 那个数
③ 车机

执行动作,世界更新

然后进入下一个 tick

往返 3 问 · 1 个数值问题

接进你的系统

下面就是这一页真正发出去的东西。把 state 换成你的场景、criteria 换成你的动作集, 它就是你的了。

① 判断层 —— 一次请求,3 个问题一起问
POST /v1/systemone

{
  "model": "memorylake-c1",
  "state": "你在高速上,当前中间道,车速 90 公里/小时,限速 100。正前方有车,距离 48 米,它的速度是 72 公里/小时。路面干燥。左侧车道空着。右侧车道空着。",
  "questions": {
    "action": {
      "type": "choice",
      "instructions": "这一刻该怎么操作?",
      "criteria": {
        "accelerate": "加速",
        "hold": "保持",
        "brake": "减速",
        "left": "并到左道",
        "right": "并到右道",
        "other": "以上都不合适"
      }
    },
    "hard_brake": {
      "type": "noul",
      "instructions": "是否需要紧急制动(而不是缓慢减速)?"
    },
    "risk": {
      "type": "score",
      "instructions": "当前这一刻的风险有多高?",
      "criteria": [
        "低",
        "需要留意",
        "高"
      ]
    }
  }
}

回来的是 {answers: {key: {value, probs}}} ——不用再写一个解析器去猜模型想说什么, 也不用为「它这次多说了一句」写兜底。

③ 循环 —— 你要写的就这几行
while (running) {
  const state = describe(world)        // 你的状态 → 一段话
  const legal = legalActions(world)    // 合法动作:你的 if,不是模型的记性
  const ans   = await systemone(state, legal)
  world = apply(world, ans.action.value, ans.margin.value)
}

模型不持有任何状态 —— 每一跳都是无状态调用。 这意味着它可以并发、可以重放、可以随时换掉。

出行与车载 里的其他场景