记忆 · 这句话该不该记下来
新酷「下周去东京出差三天」—— 长期事实,还是十天后就过期
记忆层的入口判断。什么都记会把上下文撑爆,什么都不记就退回成无状态。
为什么要快 它跟在每一句话后面跑。慢一点,整个对话的节奏就垮了。
接线长什么样
判断层和计算层之间没有依赖,所以它们并行发 —— 串起来等于白花一个来回。
① 你的程序
状态一直在你这边,模型不持有任何东西
合法动作由你的代码生成,模型只在里面挑
一段话 + 选项
② 判断层 · Jett
3 个问题一次前向答完,不是问 3 次
回来的是选项 + 把握程度,不用再解析文字
② 数值 · Jett(与判断同一次请求)
需要的那个数随判断一起回来
精确值,带单位,可以逐位核对
答案 + 那个数
③ 你的程序
执行动作,世界更新
然后进入下一个 tick
往返 3 问 · 1 个数值问题
当时的情况
一段话,和你真的会拿到的一样
今天是 2026 年 9 月 28 日。用户在对话里顺口说了一句:「我下周要去东京出差三天,回来再说。」这次对话的主题是在讨论一个项目排期。
要判断的事
一次问完,回来的是选项和把握程度,不是一段还要再解析的文字
选一个这条信息应当怎么处理?
作为长期事实记住(比如「经常出差」)作为临时上下文记住,到期自动失效不必记,这次对话结束就丢掉以上都不合适
是 / 否这句话是否包含用户的长期偏好?
打个档这条信息的重要程度
无关紧要值得记一阵很重要
要算的那个数
这条临时记忆多久之后过期
- 「下周」7 day
- 出差时长3 day
展开这一步
#0 = 7 day (「下周」) #1 = 3 day (出差时长) n0 = ADD(#0, #1) result = @n0
「下周」「三天」是相对时间。要把它变成一个能自动过期的日期,就必须真的加一次 —— 而记忆系统靠的正是这个到期时间,不是靠语义。
① 你的程序
状态一直在你这边,模型不持有任何东西
合法动作由你的代码生成,模型只在里面挑
一段话 + 选项
② 判断层 · Jett
3 个问题一次前向答完,不是问 3 次
回来的是选项 + 把握程度,不用再解析文字
② 数值 · Jett(与判断同一次请求)
需要的那个数随判断一起回来
精确值,带单位,可以逐位核对
答案 + 那个数
③ 你的程序
执行动作,世界更新
然后进入下一个 tick
往返 3 问 · 1 个数值问题
接进你的系统
下面就是这一页真正发出去的东西。把 state 换成你的场景、criteria 换成你的动作集, 它就是你的了。
① 判断层 —— 一次请求,3 个问题一起问
POST /v1/systemone
{
"model": "memorylake-c1",
"state": "今天是 2026 年 9 月 28 日。用户在对话里顺口说了一句:「我下周要去东京出差三天,回来再说。」这次对话的主题是在讨论一个项目排期。",
"questions": {
"kind": {
"type": "choice",
"instructions": "这条信息应当怎么处理?",
"criteria": {
"long_term": "作为长期事实记住(比如「经常出差」)",
"temporary": "作为临时上下文记住,到期自动失效",
"discard": "不必记,这次对话结束就丢掉",
"other": "以上都不合适"
}
},
"is_preference": {
"type": "noul",
"instructions": "这句话是否包含用户的长期偏好?"
},
"importance": {
"type": "score",
"instructions": "这条信息的重要程度",
"criteria": [
"无关紧要",
"值得记一阵",
"很重要"
]
}
}
}回来的是 {answers: {key: {value, probs}}} ——不用再写一个解析器去猜模型想说什么, 也不用为「它这次多说了一句」写兜底。
② 需要的那个数
"这条临时记忆多久之后过期": {
"type": "number",
"unit": "day"
}
→ { "value": ..., "unit": ..., "exact": true }数值问题和其它问题写在同一个 questions 里, 一次请求一起答完。返回的 exact: true 表示 这个值可以直接拿去跟阈值比大小。