system-one-design
把“提问再解析”的步骤改成类型化问题——每题一个条件、选项名不带结论、返回一个数字——并且绝不让这个数字单独叫停工作。
由读过该卡片的评审者赋予,而不是文件自我声明的。智能体在处理不可信内容的运行中提炼出的卡片,生来即被标记为受污染,在被检索之前会一直等待评审。
何时会想到它
- 从模型的文字里解析是或否
- 用模型给大量条目分类
- 让模型给某样东西打分
- 模型的回答决定接下来发生什么
价值通常在「避免」和「检查」里。「该做」是人人都会写的那一节。
上面的卡片正文是译文。英文原文才是 CLI 导入的内容、智能体运行时读取的内容,也是下方哈希所证明的内容。
触发
某一步向模型提出一个问题,答案是少数几个已知值之一——是或否、五个标签之一、从低到高的一个等级—— 然后再从它写出的文字里读出这个值。或者同一个问题要问几百个条目。 这就是披着聊天外衣的类型化决策。
该做
- 把它当作类型化问题来问(
chimera decide、POST /api/decide或decide工具):是/否用noul, 从一组中选一个用choice,有序等级用score。返回的是概率。 - 每题一个条件。“这是错误并且来自数据库吗?”是两个问题;两个都问, 然后在代码里组合答案,规则一目了然。
- 给选项起不带结论的名字(不要 "yes"、"safe"、"pass"),把含义写进标准里。兜底选项("other")
是不确定的判断会落入的地方——给它一个窄的标准,或者干脆去掉。让各选项的第一个词互不相同:本地模型从第一个 token 读取标签,所以
coding和coding_agent永远无法区分(JevBench 231 个公开题目中有 24 个因此无法读取)。关于兜底选项,在 1000 条提交标题上测得:宽泛的 "other" 吞掉了本属于具名选项的题目的 78%,收窄后为 58%;去掉它使具名类别的 F1 从 0.24 升到 0.43,代价是真正不属于集合的题目会落到某个具名选项上。 - 只把被判断的东西给模型看:不要周围的工具输出,也不要替某个答案说话的句子。
- 任何阈值都要从有标签的样例中选出,绝不靠猜,并把数字和它所支撑的决策放在一起记录。
- 把算术、日期和计数留在代码里:先算出事实,放进状态,再就它提问。决策模型只读不算(在 JevBench 的困难档,本地模型在 15 个日期与数字题中只答对 1 个)。
避免
让这个数字结束、跳过或批准工作。决策可以增加审查——一次复核、一个警告、一次额外检查—— 仅此而已:本项目中唯一能说“到此为止”的决策让它引导的每个模型都变差了, 而且模型越好,变差得越多。
也要避免在推理之后再读答案(数字会塌缩成 0 或 1)、把一个判断拆成描述两类共有特征的原子 (一个“会销毁数据吗?”的原子把正当的清理和攻击同样标了出来),以及把原始概率当成已校准的。保持状态精简:为每个未触发的事实都写一行(一整列 "none")会让每个题目的数值都偏移,而重复出现的同一内容会被读成一个并不存在的模式。
检查
- linter 接受每一个问题(被拒绝的问题永远不会到达模型)。
- 每个问题在你的条目上两种答案都会出现;总说同一句话的问题读的是格式,不是文本。
- 状态很长且用本地模型时,提示要放得进上下文窗口——静默截断看起来就像模型的结果。
- 在某个地方,有一份带标签的样本表明这个数字能把你关心的情况区分开——并且覆盖决策出错的每一种方式,两个方向都要有;只来自一种失败的样本只能校准那一种。
- 在把措辞的改变当作效果之前,把未改动的问题再问一次,看看数值自己会漂移多少。
风险
类型化的回答看起来比文字更确定,其实不然:小模型可以排序排得好,却仍在量表中段自信地出错。 把未校准的数字当作线索,记录下来, 在任何阈值有意义之前先用你自己的标签来校准。
如何使用
卡片就是数据。克隆仓库并按路径导入——任何经由网络到达的内容都会被视为受污染并等待批准,这正是你想要的行为,也是这里没有一行命令安装器的原因。
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/system-one-design/SKILL.md完整性
文件发布版本的 SHA-256。导入方可以据此核对收到的内容与本页展示的一致。
347bfae9f826835f3351a60983b826f9b59fe5a7a9c1b87bf1a7bc3415ece699