这面墙放得下这个柜子吗
实用墙宽减柜宽还不够 —— 还要留开门的手和插座的位置
在家具 App 里扫一下墙,当场告诉你行不行。
为什么要快 人举着手机对着墙。转过头的两秒里就得出结果。
接线长什么样
判断层和计算层之间没有依赖,所以它们并行发 —— 串起来等于白花一个来回。
① 你的程序
状态一直在你这边,模型不持有任何东西
合法动作由你的代码生成,模型只在里面挑
一段话 + 选项
② 判断层 · Jett
3 个问题一次前向答完,不是问 3 次
回来的是选项 + 把握程度,不用再解析文字
② 数值 · Jett(与判断同一次请求)
需要的那个数随判断一起回来
精确值,带单位,可以逐位核对
答案 + 那个数
③ 你的程序
执行动作,世界更新
然后进入下一个 tick
往返 3 问 · 1 个数值问题
当时的情况
一段话,和你真的会拿到的一样
量出来墙宽 240 厘米。看上的柜子宽 180 厘米,是对开门,左边至少要留 5 厘米才拉得开。右边墙上有个插座,占掉 12 厘米不能挡。
要判断的事
一次问完,回来的是选项和把握程度,不是一段还要再解析的文字
选一个这个柜子放得下吗?
放得下,还有富余勉强放得下,但很紧放不下,要换窄一点的以上都不合适
是 / 否柜子是否会挡住插座?
打个档这个判断的把握程度
不太确定比较有把握很确定
要算的那个数
放进去之后还剩多少空间
- 墙宽240 cm
- 柜体宽180 cm
- 开门间隙5 cm
- 插座占位12 cm
展开这一步
#0 = 240 cm (墙宽) #1 = 180 cm (柜体宽) #2 = 5 cm (开门间隙) #3 = 12 cm (插座占位) n0 = SUB(#0, #1) n1 = SUB(@n0, #2) n2 = SUB(@n1, #3) result = @n2
「放得下吗」听起来是个是非题,但答案取决于一个减出来的数。剩 43 厘米和剩 3 厘米都叫「放得下」,而它们完全不是一回事。
① 你的程序
状态一直在你这边,模型不持有任何东西
合法动作由你的代码生成,模型只在里面挑
一段话 + 选项
② 判断层 · Jett
3 个问题一次前向答完,不是问 3 次
回来的是选项 + 把握程度,不用再解析文字
② 数值 · Jett(与判断同一次请求)
需要的那个数随判断一起回来
精确值,带单位,可以逐位核对
答案 + 那个数
③ 你的程序
执行动作,世界更新
然后进入下一个 tick
往返 3 问 · 1 个数值问题
接进你的系统
下面就是这一页真正发出去的东西。把 state 换成你的场景、criteria 换成你的动作集, 它就是你的了。
① 判断层 —— 一次请求,3 个问题一起问
POST /v1/systemone
{
"model": "memorylake-c1",
"state": "量出来墙宽 240 厘米。看上的柜子宽 180 厘米,是对开门,左边至少要留 5 厘米才拉得开。右边墙上有个插座,占掉 12 厘米不能挡。",
"questions": {
"verdict": {
"type": "choice",
"instructions": "这个柜子放得下吗?",
"criteria": {
"fits": "放得下,还有富余",
"tight": "勉强放得下,但很紧",
"no": "放不下,要换窄一点的",
"other": "以上都不合适"
}
},
"blocks_outlet": {
"type": "noul",
"instructions": "柜子是否会挡住插座?"
},
"confidence": {
"type": "score",
"instructions": "这个判断的把握程度",
"criteria": [
"不太确定",
"比较有把握",
"很确定"
]
}
}
}回来的是 {answers: {key: {value, probs}}} ——不用再写一个解析器去猜模型想说什么, 也不用为「它这次多说了一句」写兜底。
② 需要的那个数
"放进去之后还剩多少空间": {
"type": "number",
"unit": "cm"
}
→ { "value": ..., "unit": ..., "exact": true }数值问题和其它问题写在同一个 questions 里, 一次请求一起答完。返回的 exact: true 表示 这个值可以直接拿去跟阈值比大小。