为什么 AI 角色会忘记自己的身份
你花了两个小时构建一个角色。但在三十轮对话后,这个角色竟然忘记了自己的名字。她开始表现得像个普通的通用助手。
大多数人认为 AI 的记忆力不好。这种想法是错误的。
问题在于上下文窗口 (context window)。
对话模型是无状态的 (stateless)。每当你发送一条消息时,应用程序都会将系统提示词 (system prompt)、角色详情以及你最近的聊天记录重新发送给模型。
你所谓的“记忆”,其实只是保留在输入窗口内的历史记录。
当对话变得太长时,旧的消息就会掉出窗口。第 12 轮的细节会消失,为第 41 轮腾出空间。模型并没有忘记,只是应用程序不再向它展示这些信息了。
更大的上下文窗口并不是解决办法。
大窗口会导致两个问题:
- 成本与速度。将窗口大小翻倍会显著增加计算需求。为了保持回复的快速和廉价,应用程序通常会限制窗口大小。
- 中间信息退化 (Middle degradation)。研究表明,模型在长文本的开头或结尾能很好地找到事实,但会遗漏埋在中间的事实。
最优秀的应用程序并不依赖原始的窗口大小,而是使用两种特定方法:
- 递归摘要 (Recursive summarization):应用程序将旧消息转化为简短的摘要。这可以在不占用过多空间的情况下保留核心事实。
- 检索 (Retrieval):应用程序将旧消息存储在数据库中。当你需要时,它只提取相关的核心事实。这就是 Lorebook(设定集)的工作原理。
一个优秀的应用程序与平庸的应用程序之间的区别在于架构。前者使用了记忆层 (memory layer),而后者仅仅是在原始窗口之上套了一个薄薄的外壳。
如果你的角色失去了个性,不要试图使用更大的模型,而是要改变结构。对旧的对话轮次进行摘要,并检索重要的信息。
把上下文窗口当作缓存 (cache) 来对待,而不是硬盘 (hard drive)。
Optional learning community: https://t.me/GyaanSetuAi