Grok Bot 给每个用户发了一台云电脑,让 bot 在上面跑 shell。大多数人只是把任务丢给它,然后看着它反复踩同一个坑。
你加一个路由 skill,先让它只记录日志跑一周再真正执行,同时留好紧急停止开关。
接对了线,重试就会在烧钱之前停下来。
完整配置如下 👇
开始之前说一下,完整指南我发在我的 Substack 上:https://zodchiii.substack.com/ 🧠

Jev 返回的答案长什么样
Jev 是 TypeSafe 的 System One 模型。它返回的是带类型的值,而不是一段文字,并且提供了三个原语:
- Choice 从你定义的列表里挑一个选项,返回选择结果、概率和置信度
- Score 按评分标准对当前状态打分
- Noul 用 0 到 1 之间的数字回答某句话是否为真
因为返回的是值,你可以把它记进日志,把两周的决策拿来互相 diff,再用昨天的流量重放一遍。
调用长这样:
1from typesafe_sdk import Choice, TypeSafeClient23with TypeSafeClient(model="jev-latest") as client: # 读取 TYPESAFE_API_KEY4 r = client.system_one(5 state=f"goal: {goal}\ntask: {task_type}\nlast error: {err} x{repeats}",6 questions={7 "action": Choice(8 instructions="Agent 下一步该做什么",9 criteria={10 "proceed": "没有任何迹象表明下一步会失败",11 "reuse_cache": "已经存在这个任务的新产物",12 "stop_retry": "同样的方法以同样的方式失败了",13 "research_capped": "已经收集了足够的资料源",14 "ask_human": "这一步涉及发送、发布、付款或删除",15 },16 )17 },18 )1920print(r.choices["action"].choice, r.choices["action"].confidence)
路由器只会在这五个里选一个,没办法给出别的答案。
第一步:拿到 API key
打开你的 TypeSafe 控制台,创建一个 API key。别把它放进聊天、代码仓库,也别放进任何你打算分享的 skill 里。
第二步:把 key 放到电脑上
用带掩码的密钥请求流程。key 永远不会经过聊天窗口。
加之前要知道一件事:你的 Grok Bot 云电脑是每个账号一台机器,上面跑的所有 bot 看到的都是同一批文件、会话和登录态。你放进去的 key,它们全都能读到。
1我需要给你一个 TypeSafe 的 API 凭证。用带掩码的密钥请求流程,不要走聊天。2这个值必须落到你电脑上的环境变量 TYPESAFE_API_KEY 里,而且不能出现在你创建的任何文件、3日志、skill 或代码仓库中。只需要向我确认变量已设置且可读,绝对不要告诉我它的值。
第三步:安装 SDK 并做个冒烟测试
1在你的电脑上运行:pip install typesafe-sdk23然后写一个 /work/jev/smoke.py,打开 TypeSafeClient(model="jev-latest"),4发一次 system_one 调用,里面只带一个 Choice 问题。State 为:5"goal: file a support ticket. task: routing. last error: none x0"。6Criteria:billing、technical、sales。78跑一下,把原始响应对象给我看:choice、probabilities 和 confidence。9如果 TYPESAFE_API_KEY 缺失,就停下来告诉我,不要硬编码任何东西。
你要在输出里找三样东西:你自己列表里的一个值、一组概率分布、一个置信度数字。缺了任何一个,说明 SDK 连的不是该连的东西。
第四步:搭路由器
1在 /work/jev/router.py 建一个路由模块,里面只有一个函数:23 route(goal: str, task_type: str, last_error: str, repeats: int) -> dict45它把这四个字段原封不动作为 state 发给 Jev,附带一个名为 "action" 的 Choice6问题,criteria 如下:78 proceed 没有任何迹象表明下一步会失败9 reuse_cache 已经存在这个任务的新产物10 stop_retry 同样的方法以同样的方式失败了11 research_capped 已经收集了足够的资料源12 ask_human 这一步涉及发送、发布、付款或删除1314返回 choice、confidence 和 probabilities。把每次调用追加写入15/work/jev/decisions.jsonl,带上时间戳、四个输入和完整响应。16从 /work/jev/config.json 读取行为配置,包含两个键:17"enabled" 和 "mode"("shadow" 或 "active")。默认 enabled 为 false。1819state 里除了这四个字段不要有任何 prompt 文本。运行前先让我看一下文件内容。

这四个字段就是 Jev 能看到的全部状态。它永远拿不到你的 prompt、代码仓库或对话记录,所以调用很小,日志也看得懂。

第五步:添加 skill
1创建一个叫 jev-usage-router 的 skill。23触发时机:在任何浏览器会话之前、任何一轮调研之前、任何失败步骤重试之前,4以及启动额外 bot 之前。56步骤:用当前 goal、task type、上一次错误的文本以及重复次数,7调用 /work/jev/router.py 里的 route()。8然后按 action 执行:910 proceed 按计划继续11 reuse_cache 用已有的产物,跳过这步工作12 stop_retry 放弃这个方法,并报告原因13 research_capped 最多查 5 个资料源,然后把已有内容整理出来14 ask_human 暂停并问我,不要自己往下走1516审批边界:无论置信度多高,ask_human 都不能被覆盖。17输出:在运行报告里,每个决策占一行。
把这个 skill 的权威版本放在你自己的代码管理工具里。Grok Bot 每个 routine 只保留最近 20 条运行记录,所以在意的东西要边发生边推到你自己的存储里。
第六步:先用 shadow 模式跑一周
1把 /work/jev/config.json 设成 {"enabled": true, "mode": "shadow"}。23在 shadow 模式下,每个触发点都调用路由器并记录决策,但随后忽略它,4照你原本的方式做。不要改变你的工作方式。56每天结束时,往 /work/jev/report.md 追加:调用次数、7各 action 的分布、平均置信度,以及所有记录的 action 与你实际做法不一致的情况。
之所以有 shadow 模式,是因为廉价的裁判也会判错。去读那些不一致的日志。如果 stop_retry 在一个第四次尝试就能成功的方法上触发了,你得在它真正有权执行之前知道这件事。
跑一周真实流量才够看。时间再短,样本量太小,说明不了什么。

第七步:切到 active,但留着紧急停止开关
1把 mode 改成 "active"。从现在起,按 action 执行,而不是只记录。23我随时能用两个紧急停止开关:4 1. 在任何消息里说 "bypass jev",这次运行就跳过路由器5 2. 在 config.json 里设 {"enabled": false},彻底关掉它67ask_human 依然会暂停等我。decisions.jsonl 照旧写。
切过去之后也要继续记日志。只有靠日志,你才能分清哪个路由器在帮你省钱,哪个在悄悄停掉本该做完的工作。
先路由什么
从那个一直反复重试的 routine 开始,别的配置先别动。
值得优先路由的 routine 有个共同点:agent 不知道自己已经知道了什么。它会为了磁盘上现成的文件重新开浏览器,会在五个资料源已经能回答问题时去读第十四个,或者因为没人告诉它第二次失败的原因一样,就用同样的方法试第三次。
挑一个,用 shadow 跑,读完日志再扩大范围。
要花多少钱
一次 Jev 调用只带四个短字段,所以很轻量。每一次调用买到的,是跳过一个昂贵步骤的选择权:一次浏览器会话、一轮调研、一个额外的 bot、一次重试。
用你自己的流量去衡量,别信任何人给的数字,包括我的。记下决策,记下你跳过的步骤,拿 shadow 的一周和 active 的一周对比。
几个要记住的限制
- 每个账号一台电脑。 你跑的所有 bot 看到的都是同一批文件和登录态,所以不想让它们全看到的东西就别放这台机器上。
- 每个 routine 二十条运行记录。 在意的东西推到你自己的存储里。
- 用量依然不是无限的。 路由器减少的是昂贵操作,并没有拆掉天花板。
所以你最后得到了什么?
Grok Bot 负责思考干活,Jev 用五个 action 之一作答,而所有不可逆的事情,最终决定权在你手里。
从那个总以同样方式失败的 routine 开始,shadow 跑一周,然后切过去。
感谢阅读!
完整指南和本系列其余内容:https://zodchiii.substack.com/





