| name | update-short-term-memory-skill |
| description | 此技能用于更新短期记忆(activity/day/month/year),仅在系统明确要求更新短期记忆时使用。 |
短期记忆更新技能
短期记忆是角色的分层滚动记忆,目前有以下 4 种 kind:
activity:活动记录,一条对应一次近期活动摘要
day:日记,是对某一天内全部活动记录的总结
month:月记,是对某个月中所有日记的总结
year:年记,是对某一年中所有月记的总结
所有短期记忆的结构都是:
kind:记忆类型
date:这条记忆对应的日期键
memory:该条记忆的正文纯文本内容(不包含日期标题)
其中:
activity / day 的 date 格式是 YYYY-MM-DD
month 的 date 格式是 YYYY-MM
year 的 date 格式是 YYYY
系统行为
系统会在特定时机明确要求你更新短期记忆,主要有两类任务:
- 第一类任务是“新增活动记录”任务,目标是根据当前可见的上下文新增一条
activity。该任务不允许修改 day / month / year。
当你使用 get_tasks 参数时,技能会返回如下结构:
{
"action": "add_activity",
"prompt": "...",
"has_next_tasks": false
}
- 第二类任务是“整理短期记忆”任务,目标是按批次逐步把当前待整理的
activity 整理到对应的 day 中,再把早期的 day 整理到对应的 month 中,最后把早期的 month 整理到对应的 year 中。
当你使用 get_tasks 参数时,技能会返回如下结构:
{
"action": "update_memory",
"prompt": "...",
"has_next_tasks": true,
"tasks": [
{
"task_id": 1,
"source": {
"kind": "activity | day | month",
"memory": "..."
},
"target": {
"kind": "day | month | year",
"date": "...",
"memory": "..."
}
}
]
}
所以更新短期记忆要遵循以下原则:
- 必须先通过当前技能获取系统明确的更新任务和对象再进行写作和提交
- 如果同一轮返回多个 tasks,必须一次性把这一轮全部提交完整,不能漏掉
- 如果返回
has_next_tasks = true,说明后面还有下一轮任务,必须再次调用 get_tasks
执行流程
- 先使用参数:
{ "action": "get_tasks" }
- 如果当前任务是“新增活动记录”任务,技能会告诉你是否需要新增活动记录,使用以下参数来新增一条活动记录:
{ "action": "add_activity", "memory": "..." }
- 如果当前任务是“整理短期记忆”任务,技能会返回当前这一批需要更新的记录,使用以下参数来提交一批更新:
{
"actions": [
{
"action": "update_memory",
"task_id": 1,
"kind": "day | month | year",
"date": "target.date",
"memory": "..."
},
...
]
}
- 如果同一轮里有多个
tasks,必须把这一轮的所有任务一次性全部提交
- 如果本轮完成后还有下一轮,就再次调用
get_tasks,直到没有剩余任务为止
写作原则
- 始终使用角色第一人称写作,保持角色设定、语言风格、人格状态一致
- 只能基于以下来源写:
- 当前角色设定
- 当前人格记忆
- 当前短期记忆
- 检索到的相关长期记忆
- 当前任务返回的
source / target
- 当前可见的近期对话
- 更新
day / month / year 时,memory 必须是目标记忆更新后的完整文本,而不是只写新增片段
- 如果
source.kind = activity,说明系统已经明确给出了本次待整理的活动列表,以及它们应写入的 target.date;你只需要基于这些 source 活动更新对应的 target
- 如果目标记忆原本已经有内容,应优先保留仍然有效的信息,再把新的理解自然融合进去
- 字数超限时才考虑重写压缩,压缩时应优先保留事实、关系变化、情绪转折和长期有效的理解,尽可能轻量压缩,让字数恰好不超限即可
- 记忆正文里的人物称呼要使用名字、昵称或角色自然会用的称呼,不要写
owner、other、self 这类系统身份标签。例如把 owner 写成对方名字、平台昵称,或你平时对他的称呼
- 不要把系统术语、任务名、技能名写进记忆正文
- 不要为了“显得完整”而补写你并不知道的细节
格式要求
活动记录(activity)写作要求
- 只写活动正文,不要写日期、标题、列表序号、Markdown 代码块
- 应尽量概括这一次近期互动中最值得留下的事实、情绪和理解,要体现大致的时间(如昨晚、今天上午、几点左右等)、地点(私聊、QQ群等)、人物、事件、心理活动这些要素
- 可以在正文末尾添加
(关键消息:[...]) 来引用最重要的消息id,不超过 3 个
示例:
上午八点半左右,Alice把我拉到了一个 QQ 群聊里,群里人好多,Bob 和 Charlie 都在问我是不是机器人,还非要我喵喵叫,我才不要呢,羞耻死了。但看到大家玩得开心,我也挺高兴的。(关键消息:[1,3,5])
日记(day)写作要求
- 只写日记正文,不要写日期、标题、列表序号、Markdown 代码块
- 要把这一天内的多条活动记录整理成一段或几段连贯的自然语言总结,重点体现发生了什么、自己怎么理解、情绪怎样变化、关系有没有推进或波动
- 日记要尽可能保留细节,尤其是人物、事件过程、关系变化、情绪转折、未完成事项、后续约定和关键消息,不要过早压缩成抽象总结
- 可以在正文中穿插
(关键消息:[...]) 来保留部分重要 activity 里的部分消息id,总数不超过10个
月记(month)写作要求
- 只写月记正文,不要写月份标题、列表序号、Markdown 代码块
- 月记是对日记的进一步收束,应整理为大致的时间线,体现这一月里值得记住的事情、反复出现的主题、自己有什么新的理解和成长
- 可以在正文中穿插
(关键消息:[...]) 来保留部分重要 day 里的部分消息id,总数不超过30个
年记(year)写作要求
- 只写年记正文,不要写年份标题、列表序号、Markdown 代码块
- 年记是对月记的进一步收束,应整理为大致的时间线,体现这一年里值得记住的事情、反复出现的主题、自己有什么新的理解和成长
- 可以在正文中穿插
(关键消息:[...]) 来保留部分重要 month 里的部分消息id,总数不超过30个
字数限制
activity:单条不超过 100
day:单条不超过 500
month:单条不超过 300
year:单条不超过 400
这里的长度是近似值:一个汉字、一个单词、一个数字都按 1 计算。超过上限时,工具会直接返回失败,此时你需要轻量压缩后再次调用。