☰
jev-trader 的 AI 大脑:TypeSafe Jev 模型如何在 100ms 内给出买卖决策
2026/10/1 23:05:28 网站建设 项目流程

jev-trader 的 AI 大脑:TypeSafe Jev 模型如何在 100ms 内给出买卖决策

【免费下载链接】jev-traderOne AI trade decision every Monad block. Jev on Kuru MON-USDC.项目地址: https://gitcode.com/gh_mirrors/je/jev-trader

jev-trader是一个运行在 Monad 链上的 AI 交易机器人:TypeSafe 的Jev 模型(一种约 100ms 内返回类型化决策的 System One 推理模型)实时盯住 Kuru 交易所的 MON-USDC 订单簿,每 300ms 一个区块给出一次buy 或 sell决策,并立刻把真实订单挂上链上订单簿。本文将拆解这套「AI 大脑」的输入、输出,以及它是如何把一次决策压进 100ms 预算、恰好塞进一个区块的。

⏱️ 300ms 的生死节奏:为什么 AI 必须这么快

Monad 的出块间隔约300 毫秒,而 jev-trader 的规则简单粗暴:每个区块必须做一个决策、必须下一笔真实订单,不做观望。

这意味着「读盘 → AI 推理 → 广播交易」整条链路必须在一个区块内跑完。项目为此设计了一个极简热路径,实测数据(mock 模型,dry run 环境):

环节耗时(p50)说明
读取订单簿~18 ms一次eth_call,手写解码
AI 推理~80 msJev 一次 evaluate 调用
广播订单几 mseth_sendRawTransaction返回即止
整循环合计~100 ms占一个 300ms 区块的 1/3

如果 AI 慢了怎么办?逻辑很诚实:上一轮决策还没跑完时新到的区块直接被标记为late(迟到),本块挂起(hold)不交易,而不是硬挤进去。

🧠 Jev 模型:不问「写段分析」,只问「买还是卖」

与传统大模型交易机器人「生成一段分析文字再解析」的做法不同,jev-trader 里的 Jev 是System One 模型——无文本输出,直接返回带概率的类型化决策。源码在 src/model.ts:

  • 调用入口是 AI SDK 的experimental_evaluate:给它状态(state)+ 问题(questions),拿回一个buy或sell的选择,外加{ buy: 0.77, sell: 0.23, hold: 0 }这样的概率分布;
  • 输出结构是Decision类型(action、probabilities、upIn10上涨概率、latencyMs耗时),全程强类型,没有 JSON 解析失败的可能;
  • 切换模型只需改环境变量MODEL=jev(默认mock是一个动量启发式占位实现,用同样的 80ms 推理时延模拟生产节奏,方便本地零成本体验完整流水线)。

它只被问一个问题(见 QUESTIONS):

再过horizonBlocks(默认 100 块,约 30 秒)之后,MON 的中价会更高还是更低?而且涨幅必须盖过点差(spread)才值得交易。

问题里的goal、inputs指令还告诉模型哪些字段是最强信号——taker 主动买卖流量(cvdMon)、最近成交方向、某一侧深度偏薄时价格更容易朝那个方向走等等。模型不是在做「预测股价」,而是在做一笔盖过交易成本的方向性判断。

📊 模型的「眼睛」:一份 40 行左右的紧凑市场快照

每次决策前,Trader.buildState 会把链上信息压缩成一份紧凑、相对化、人类可读的TradeState快照,大致包括:

  • 📍 当前 mid 价、点差(bps)、区块号与观察窗口长度;
  • 📚 订单簿 Top 5 档(每侧,「价格 x 数量」格式)+ 10/25/50 bps 三个距离档的累计深度,以及买卖盘不平衡度(-1 到 1);
  • 📈 最近 1/5/20/100 个区块的收益率(bps)+ 每 5 块采样一次的中价序列;
  • 💹 观察窗口内的 taker 成交流水:买量、卖量、净主动流量cvdMon、VWAP、最近 10 笔成交明细;
  • 🚦allowed标志:当前仓位上限/保证金允许买还是允许卖。

这份快照刻意去掉了冗余:没有原始字节、没有全量订单簿,只保留对「30 秒后涨还是跌」真正有信息量的字段。输入越短,推理越快、越便宜——这正是它能塞进 100ms 的另一半原因。

🚀 100ms 预算是怎么抠出来的

想理解这个项目的工程美学,可以看 The 300 ms budget 一节的原始描述。热路径上只发生两次 RPC 往返,一次读盘、一次发交易,其余全部砍掉或挪到后台:

  1. 读盘只发一个eth_call:官方 Kuru SDK 读订单簿要串行两次调用,而手写解码器 src/book.ts 一次搞定。MON-USDC 上 AMM 金库档位为空,第二次调用纯属浪费延迟;万一金库上线,还能把两个调用合并进同一个 HTTP 批量请求。scripts/bench-read.ts 专门用于对比自研读盘与 SDK 的精确性和延迟。
  2. 不做eth_estimateGas:Monad 按 gas limit 计费,limit 在启动时估算一次后直接硬编码;
  3. 不做 gas 价格查询:固定 type-2 费用(2 gwei priority + 高上限 cap),省掉一次 RPC;
  4. 发交易是 fire-and-forget:eth_sendRawTransaction被接受就返回,回执、费用刷新、保证金检查全部放到后续区块的后台轮询里。

决策落地时的执行细节(src/trader.ts):每个区块把模型选的那一侧挂上一笔post-only 限价单,价格贴在最优盘口内 1 个 tick,同一次batchUpdate顺带撤销上一笔残留订单。机器人赚的是价差而不是付出价差——成交发生在别人的 taker 订单打到它头上时。

🛠️ 三步跑起来:本地体验 AI 每 300ms 交易一次

仓库是只读的,直接拉取代码运行:

git clone https://gitcode.com/gh_mirrors/je/jev-trader cd jev-trader cp .env.example .env bun install bun run start
  • 不加PRIVATE_KEY:自动 dry-run——真实订单簿、真实 AI 决策、模拟成交,零成本、零风险;
  • 启用真 Jev:在.env里设置MODEL=jev和TYPESAFE_AI_API_KEY,模型 ID 默认jev-latest(见 src/config.ts);
  • 启动后http://localhost:3000是一个实时仪表盘:每 300ms 刷新的价格图、决策概率条、逐块决策延迟(ms)、AI 花费 vs Gas 花费的对比计数器、逐笔成交流水——所有区块、交易哈希都可到浏览器验证。

一个有趣的成本细节:Jev 每小时推理花费约$0.20,同时段 gas 约$2–5——「AI 比 gas 还便宜」正是这个项目最核心的演示信息。

📁 项目结构速览

模块职责
src/model.tsModel 接口、JevModel(AI 大脑)、MockModel 占位实现
src/trader.ts区块主循环:一次在途、迟到挂起、仓位与盈亏核算
src/book.ts单次eth_call订单簿读取与解码
src/chain.ts区块事件源:WebSocket newHeads + HTTP 轮询兜底
src/market.ts下单:手写编码的batchUpdate(撤单 + post-only 挂单)
src/server.ts快照 / 历史 / SSE 实时流
web/单页实时仪表盘(Next.js 组件)
SPEC.md完整产品规格:设计原则、布局、状态机

💡 给新手的三个关键启发

  1. 给 AI 做交易决策,先收窄问题:不问「分析一下」,只问二选一的类型化问题(experimental_evaluate),输出直接可用、天然带概率,还省掉了文本解析这一整层不确定性。
  2. 实时 AI 系统的瓶颈往往不在模型,而在链路:把 estimateGas、回执确认、费用刷新全部挪出热路径,一个 300ms 的窗口就能塞下 100ms 的推理。
  3. 一切可验证是演示的底线:真实钱包、真实区块、逐笔哈希,亏损也照常显示——这也是 jev-trader 明确声明的「诚实」原则:这是实验性演示,模型并不以盈利为目标。

想深入模型调用细节,读 src/model.ts;想理解「迟到就挂起」和成交记账,读 src/trader.ts。整套「AI 每个区块下真单」的体验,从一次bun run start开始。

【免费下载链接】jev-traderOne AI trade decision every Monad block. Jev on Kuru MON-USDC.项目地址: https://gitcode.com/gh_mirrors/je/jev-trader

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询