harness规矩与装备 多数人每天改的那层
- CLAUDE.md、skills、hooks、MCP、RecallNest
- 它不执行任何东西,只是告诉引擎「该怎么做、不许做什么」
engine引擎 身体:手、脚、记性、看门人
- 拼上下文 → 调模型 → 执行工具 → 回填结果 → 再调,直到做完
- Claude Code 本体就是这一层,Anthropic 写的
model API模型 大脑:按次出租
- 收一段消息,吐一段文字,或一句「我想调这个工具」
- 不会自己跑工具,不会自己记住,不会自己转第二圈
先分清三层
常有人问「我自己写的 harness 算不算引擎」。不算。harness 是规矩,引擎是身体。给 Claude Code 写规则、装 skill、接记忆库,全部是在它的引擎上做配置;循环本身没碰过,因为循环在 Claude Code 里面。
白艾莉的不同在于中间那层是他们自己写的,所以能嵌世界模拟、能换模型、能卖给别人。还有第三种:不写引擎,把别人的引擎连起来,卖的是连接。
点下面的「下一步」,看只有 API 时会卡在哪。
只有 API 的时候
拿 deepseek 或 qwen 的 key 直接调接口,问一句闲话没问题。但一旦问「帮我看看目录」,模型只能礼貌地说「我想调用 list_files」,然后停住。那句话是一个 JSON,不是一次执行。
要让它真的动起来,必须有一段代码接住这个 JSON:去跑命令、把结果塞回对话、再问模型一次。这段代码就是引擎的起点。有 key 解决的是「能不能问」,解决不了「谁来做」。
加上循环,它就成了 agent
Anthropic 官方文档对这个循环的定义只有一句:模型评估、请求工具、拿到结果、再评估,直到它给出一个不带工具请求的回复。每转一圈叫一个 turn。循环什么时候停,不是定时也不是字数,是模型自己不再要工具了。
常听人说 Claude Code 就是个 while 循环。这话没错,但循环只占很小一部分:这一镜头先演这一小部分,循环之外的那些留给下一镜头。
环和右边的 messages[] 是本页自带的迷你引擎当场跑出来的:一个只会返回文字或工具请求的假模型,三个工具,一道权限门。
点一张卡,看它坏的时候引擎怎么接住。这些全是白艾莉方法论和 Agent SDK 文档里写明的真实处理,不是编的。翻面后多出来的「现场算」一行,是本页自带的迷你引擎当场跑出来的,不是白艾莉或 Claude Code 的代码。
工具配对断了 API 400
用户中途取消、断线、压缩,让某次工具请求没有对应结果。下次调用,API 直接报错。
点开:看引擎怎么接住 ↻接住:每次调模型前扫一遍历史,缺结果的请求补一条合成的「已中断」,孤儿结果直接删。补全,不截断。
现场算
参数类型写错 校验失败
模型把 limit: 10 写成 "10",布尔写成字符串。频率极高。
接住:按工具的参数定义自动转类型,再执行。
现场算
上下文撑爆 context
读了个大文件、跑了条啰嗦命令,几千 token 一下就没了,几十圈后窗口满了。
点开:看引擎怎么接住 ↻接住:快满时自动压缩旧历史成摘要;大输出先写临时文件,只给模型一个路径。
现场算
超时与限流 429 / timeout
网络抖、被限流、流式半天没数据。全部重试会重复副作用,全部放弃又丢掉能救的。
点开:看引擎怎么接住 ↻接住:错误分三类(瞬时 / 永久 / 模糊),退避加抖动重试,所有适配器统一超时守护。
现场算
危险命令 rm -rf
模型想跑一条会删东西的命令。
点开:看引擎怎么接住 ↻接住:权限门按规则拦下,把「被拒绝」当作工具结果还给模型;模型通常换一条路,或者告诉你它办不到。
现场算
凭幻觉改文件 Edit
没读过的文件就想改,改的是它想象中的内容。
点开:看引擎怎么接住 ↻接住:先读后写硬校验:这个会话里没读过的文件,写入工具直接拒绝执行。在 Claude Code 里经常撞到的那条提示就是它。
现场算
工具太多选错 80+ tools
几十个工具的完整定义全塞进每次请求,又贵又让模型频繁选错。
点开:看引擎怎么接住 ↻接住:核心层常驻完整定义,其余只给名字和一句话;模型选中时拦截一次,注入完整定义再让它重调。
现场算
没有 function calling 小模型 / 本地
模型根本不支持原生工具调用。
点开:看引擎怎么接住 ↻接住:在提示里教它用 XML 写工具请求,引擎解析 XML 转成标准事件。质量下降,但不崩。
现场算
循环是 1%,围着它的工程是 99%
每一张卡都是一个曾经让产品崩掉的下午。引擎的难点不在「能转起来」,在「转一千圈不出事」。白艾莉自述十万行代码里,大头就是这些。
六家引擎,骨架一样,差在把复杂度放哪。小红书「风儿轻轻er」10-14 那篇 570 赞的对照(外部自述,没有逐家核源码)概括得很准:
甲 · 借引擎
- 怎么做
- 壳调 Claude Code / Codex / agy / kimi 的 CLI,或 Claude Agent SDK
- 成本
- 零。作者所有的壳都是这条
- 限制
- 模型跟着引擎走;订阅条款面向个人使用,对外服务一般要走 API
乙 · 现成开源引擎 + 自己的 key
- 怎么做
- OpenAI Agents SDK、pi、smolagents 这类,接 deepseek / qwen
- 成本
- 一两天接通;以后跟它的升级
- 限制
- 那 99% 它替你做了一部分,剩下的仍要自己补
丙 · 自己写最小循环
- 怎么做
- deepseek + 三个工具 + 一道权限问询,OpenAI 兼容格式
- 成本
- 跑通一个周末;可靠起来月级
- 限制
- 那 99% 全是你的
三条路都通,该走哪条看需求
key 不是理由,需求才是。想懂,走丙的最小版,一个周末;想让 etwin 有自己的日子,走甲,加规则层;想对外卖,那是白艾莉的路;按它公开的条款和价目,收入主要来自模型中转和虚拟商品,不在引擎本身。
现在的 etwin
它有「主动性」,但没有「生活」:它今天在哪、吃了什么、上周答应过你什么,全靠模型当场编,下次可能对不上。
加一层「世界状态」之后
「有自己的日子」不是让它独立出去
要让 etwin 有自己的日子,是不是得给它单独的登录口?不是。它还挂在 TG 上,TG 只是渠道层,白艾莉的朋友圈、来信、微信桥也都是渠道。「有自己的日子」说的是中间多一块独立于模型的世界状态:它现在在哪、有什么、答应过什么,由规则判定哪些事真的发生了,模型只能提请求、只能转述通过了的事。
这就是「闸门是规则,决策是 LLM,上限是规则」。小红书上有人自己做「AI 版微信」,补上了人格文件、关系记忆、手机身体层和主动轮询,和 etwin 是同一代做法;再往前走一步,要补的就是这块规则层。
左右两栏里的判词、余额和转述,是本页自带的规则闸按左边那句请求当场算出来的。