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

跟车距离够不够

新酷

两秒法则:车速换算成距离,再跟实际车距比

前向预警里最基础的一跳。它每 100 毫秒要出一次结果。

为什么要快 96 公里/小时 下,100 毫秒就是 2.7 米。这一层慢下来,预警就没有意义了。

接线长什么样

判断层和计算层之间没有依赖,所以它们并行发 —— 串起来等于白花一个来回。

① 你的程序

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

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

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

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

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

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

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

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

答案 + 那个数
③ 你的程序

执行动作,世界更新

然后进入下一个 tick

往返 3 问 · 1 个数值问题

当时的情况

一段话,和你真的会拿到的一样

当前车速 96 公里/小时,与前车距离 28 米。雨天,路面湿滑,前车刚刚轻点了一下刹车。跟车已持续 4 分钟。

要判断的事

一次问完,回来的是选项和把握程度,不是一段还要再解析的文字

选一个应当采取什么动作?
保持当前车速松开油门,自然减速主动制动,拉开距离以上都不合适
是 / 否是否应当向驾驶员发出提示音?
打个档情况的紧急程度
正常需要注意危险
要算的那个数

两秒法则要求的最小跟车距离

  • 当前车速96 km/h
  • 两秒法则2 s
展开这一步
#0 = 96 km/h  (当前车速)
#1 = 2 s  (两秒法则)

n0 = MUL(#0, #1)
result = @n0

车速的单位是「公里每小时」,距离的单位是「米」。两者不能直接比 —— 中间那一步换算必须是确定的,不能靠模型记得。

① 你的程序

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

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

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

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

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

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

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

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

答案 + 那个数
③ 你的程序

执行动作,世界更新

然后进入下一个 tick

往返 3 问 · 1 个数值问题

接进你的系统

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

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

{
  "model": "memorylake-c1",
  "state": "当前车速 96 公里/小时,与前车距离 28 米。雨天,路面湿滑,前车刚刚轻点了一下刹车。跟车已持续 4 分钟。",
  "questions": {
    "action": {
      "type": "choice",
      "instructions": "应当采取什么动作?",
      "criteria": {
        "keep": "保持当前车速",
        "coast": "松开油门,自然减速",
        "brake": "主动制动,拉开距离",
        "other": "以上都不合适"
      }
    },
    "warn": {
      "type": "noul",
      "instructions": "是否应当向驾驶员发出提示音?"
    },
    "urgency": {
      "type": "score",
      "instructions": "情况的紧急程度",
      "criteria": [
        "正常",
        "需要注意",
        "危险"
      ]
    }
  }
}

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

② 需要的那个数
"两秒法则要求的最小跟车距离": {
  "type": "number",
  "unit": "m"
}

→  { "value": ..., "unit": ..., "exact": true }

数值问题和其它问题写在同一个 questions 里, 一次请求一起答完。返回的 exact: true 表示 这个值可以直接拿去跟阈值比大小。

出行与车载 里的其他场景