JEV 玩贪吃蛇:每秒 3 步,模型到底判断了什么?

简介: 本文展示用JEV框架让模型玩贪吃蛇:每秒3步,将局面转为四向选择题,输出方向概率。本地Laya实现,不调远程API;程序预计算安全与路径特征,模型仅对标签化选项做判断。附JEV教学Skill供延伸实践。(239字)

JEV 玩贪吃蛇:每秒 3 步,模型到底判断了什么?

我做了一个 JEV 玩贪吃蛇 的案例:蛇每走一步,就把当前局面变成一道选择题,让判断模型给出方向和四个选项的概率。贪吃蛇适合拿来试这个思路,因为问题很小,结果却很直接——选完以后,下一格会不会撞、会不会吃到食物,马上就能看到。

如果你也想从这个实验继续找 JEV 的其他用法,文中附了一个 JEV 教学 Skill(夸克网盘下载)。它按场景整理了游戏、浏览器操作、模型路由等案例,带截图和原帖链接;放进 Agent 的技能目录后,可以按自己的任务去找相近的做法。这个包是延伸阅读,不含本文的贪吃蛇源码。

这次实跑用本地 Laya 实现 JEV 式的 state + Choice → 选择 + 概率,没有调用远程 JEV API。速度调到每秒 3 步后,录了下面这段 GIF。

录制约 10 秒,蛇走了 30 步、吃到 1 个食物,得分 100。页面当时显示 31 次请求,平均往返约 220 毫秒,超时和接口错误都是 0。这是一次运行片段,不是胜率测试。调用数比已执行步数多 1,也不能直接理解为“多走了一步”:控制器执行完一步就会开始准备下一步的问题。

为什么这里用 Choice,而不是让模型自由回答?

JEV 的判断结构可以写成“state + 问题 → 判断 + 概率”。贪吃蛇的一步恰好可以拆得很小:state 说明现在的局面,问题是“这四个方向选哪个”,答案被限制在四个候选中。我们需要的是下一步动作,不需要模型写一篇路线分析。

但“把棋盘交给模型”和“把判断后的局面交给模型”是两种完全不同的实验。这版默认模式走的是第二种。浏览器把蛇身、方向和食物位置交给游戏代理;代理用代码排除撞墙、撞身体和掉头的方向,再计算每个合法方向走过去后的食物距离、可达空格和死胡同风险。可达空格由 flood fill 算出,死胡同判断还检查能否沿着蛇尾出去。这些数字和标签都是程序算的,不是模型看图算的。

代理随后才发起 Choice。真实代码里最关键的是下面几行:

const request = buildRequest(game, analyze(game), strategy);
const res = await client.systemOne({
   
  state: request.state as never,
  questions: {
    move: choice(request.instructions, request.criteria as Record<string, string>) },
});

拆开一条真实的输入和输出

从 logs/laya-trace.jsonl 取出的一次原始输入如下。四个键 slot 1/2/3/4 在游戏里固定对应上、下、左、右。

{
   
  "state": "Safe route: yes. Food reachable through empty cells: yes.",
  "questions": {
   
    "move": {
   
      "type": "choice",
      "instructions": "Choose the best safe move toward food.",
      "criteria": {
   
        "slot 1": "Poor. Safe. Longer route.",
        "slot 2": "Good. Safe. Shortest route to food.",
        "slot 3": "Worst. Blocked. Collision.",
        "slot 4": "Poor. Safe. Longer route."
      }
    }
  }
}

返回的 answers.move 关键字段是:

{
   
  "choice": "slot 2",
  "probabilities": {
   
    "slot 1": 0.0774,
    "slot 2": 0.6358,
    "slot 3": 0.059,
    "slot 4": 0.2278
  },
  "confidence": 0.286
}

这一回模型选 slot 2,代理把它翻译为“向下”。这条记录还有 input_tokens=78、output_tokens=0:接口给的是选项分数,不是一段生成的路线分析。0.6358 是这个选项在本次回答里的概率;confidence=0.286 是接口另一个字段。它们不能合成一句“模型有 63.58% 的把握不会死”。概率没有经过本游戏的生存率校准,也没有自动证明这个选择能带来长期高分。

这条输入还有一个更重要的细节:slot 2 的文字已经写着“安全、到食物的最短路线”。程序先用如下评分规则挑出偏好的方向,再把好坏写进选项;模型在这版模式里主要是在读这些等级标签:

const score = (f: MoveFacts) => (f.eats ? 1000 : 0) - 10 * (f.foodDistance ?? 99) + 0.01 * f.reachable;

吃到食物给了很高的优先级,距离每缩短一格加 10 分,可达空格只作很小的平局修正。这个规则是代码定的。把这段 GIF 说成“模型独立看懂棋盘、规划出了路线”,就超过了证据。

为什么把 up/down 改成 slot 1-4?

这不是为了让字段看起来整齐。项目的排查记录发现,直接用 up/down/left/right 当选项键时,回答会受方向英文词本身影响。换成中性的 slot,才能更清楚地测它有没有按选项描述来选。标签里的 Best/Good/Poor/Worst 也有作用:模型收到的是明确的等级,而不只是四段杂乱的棋盘数据。

项目此前的一次 283 个局面对照记录:同一份未微调权重、同一运行方式下,“完整棋盘 + 事实型选项”的命中率是 34.3%;“短 state + 字面标签”是 64.7%。记录中的输入长度也从约 404 token 缩到 63 token,耗时从约 256 毫秒降到 54 毫秒。这组数字来自此前的离线排查,不是根据这段 GIF 重新测出的数,也不是整局游戏的胜率。

排查笔记还提到决策头会截断过长的输入。因此,34.3% 不能直接当成模型在完整读取棋盘后的能力上限。短提示一方面减少了输入长度和等待时间,另一方面也把答案线索提前写进了标签。结果变好,不等于模型已经学会走棋。

模型的选择不一定等于蛇最后走的方向

每步约 330 毫秒。控制器在这段时间内等模型回答,到点就执行已有的选择;若回答没赶上,会用代码保底。只有一个合法方向时,也直接由代码走,不必请求模型。即使模型及时选出一个方向,安全覆盖还会检查它是否会撞或进死胡同;若不安全,就从安全方向里选概率最高的那个。

所以复盘时至少要分清三件事:模型原始选择、程序最终执行的方向、这一步后游戏发生了什么。只看最后的得分,没法知道究竟是模型选对了,还是保底与安全覆盖救了它。这版把每次原始输入输出写入 trace,游戏记录另存最终动作、耗时、超时和安全覆盖标记,就是为了能把它们分开看。

本地部署只补充与判断有关的部分:Laya 的 GGUF 主模型由 llama.cpp 提供逐 token 特征,独立的 head 文件负责给 Choice 选项打分;Python 桥接服务用 Laya 的 tokenizer 生成 token ID,把两部分接起来。模型文件包括 GGUF、决策头和 laya_head.py。llama.cpp 这边启用了 --embeddings --pooling none --ctx-size 8192 -b 2048 -ub 2045;只加载 GGUF 而没有决策头,不会得到上面这样的四项概率。

下一步怎么验证它真的在“看棋盘”?

我会把测试拆成两部分。第一部分固定一批相同的棋盘局面,分别让模型看短标签和完整棋盘,比较每步是否选到安全且合理的方向;同时统计各方向召回率和概率是否可信。这里不要在完整棋盘组预先写入 Good/Poor,否则还是在考它读标签。

第二部分才是整局游戏:固定初始随机种子,分别跑代码基线、当前紧凑提示和完整棋盘提示。因为不同策略走几步后遇到的局面就会分叉,整局结果要单独报告食物数、存活步数、死亡原因、回答耗时、超时次数和安全覆盖次数。这样才能回答一个更具体的问题:把这个判断模型放进游戏,究竟比代码本身多带来了什么。

如果你也想从这个实验继续找 JEV 的其他用法,文中附了一个 JEV 教学 Skill(夸克网盘下载)。它按场景整理了游戏、浏览器操作、模型路由等案例,带截图和原帖链接;放进 Agent 的技能目录后,可以按自己的任务去找相近的做法。这个包是延伸阅读,不含本文的贪吃蛇源码。

相关文章
|
8天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
7363 12
|
6天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1543 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
7天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
991 8
|
3天前
|
人工智能 JavaScript 芯片
DeepSeek 官方偷偷上传 Harness 桌面端安装包,我已经用上了。。附最新下载地址
DeepSeek Harness 官方的桌面端安装包被网友扒出来了,2 分钟讲明白如何使用,体验如何,适合作为 AI 编程工具么?附最新 Windows 和 Mac 双端的下载地址
1178 1
|
20天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3570 10
|
14天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
1601 1
|
4天前
|
编解码 缓存 PyTorch
16G 显卡能跑 Qwen-Image 2.1 吗?
9月20日,阿里Qwen开源Qwen-Image-2.1:7B DiT图像模型+8B文本编码器+VAE,单模型支持文生图与图像编辑,原生输出2K PNG(含Alpha通道),支持10张参考图。在自建Qwen-Image-Bench达60.28分(开源模型第一),GenAI Showdown文生图排名7/15。16G显存可跑1024×1024(需INT8量化+ComfyUI优化),但2K需24G以上。注意其Qwen Research License限非商业用途。
501 1
|
5天前
|
人工智能 编解码 并行计算
MiniMax-H3 一键整合包技术文档:8G 显存运行 AI 漫剧制作 —— 角色替换 / 动作迁移 / 文图生视频部署与调参指南
MiniMax H3 是 MiniMax 开源的全模态视频生成模型,支持文/图/音/视多条件输入,输出最高2K、15秒带双声道音频视频。本文档详述其Int8量化版在8GB显存下的本地一键部署、三段式工作流(EDIT/REPLACE/CONTINUE)、参数调优及常见问题排查。(239字)