我最近一直在思考持续学习,特别是它与长期运行的智能体的关系(并且进行了一些关于MLX的玩具实验)。 当前的提示压缩与递归子智能体的结合实际上非常有效。看起来我们可以在这方面走得很远。(提示压缩 = 当上下文窗口接近满时,模型生成一个更短的摘要,然后从摘要开始重新构建。递归子智能体 = 将任务分解为更小的任务,以应对有限的上下文窗口) 递归子智能体可能总是有用的。但提示压缩似乎有点低效(尽管非常有效)的技巧。 我知道还有两个其他替代方案:1. 在线微调和 2. 基于记忆的技术。 在线微调:在模型在部署期间遇到的数据上训练一些LoRA适配器。总体而言,我对这个不太乐观。除了为每个用例/用户部署自定义模型/适配器的工程挑战外,还有一些根本性的问题: - 在线微调本质上是不稳定的。如果你在目标领域的数据上进行训练,可能会灾难性地破坏你不针对的能力。解决这个问题的一种方法是保持一个混合数据集,包含新旧数据。但这很快就会变得相当复杂。 - 在线微调的数据到底是什么样的?你是否根据目标领域生成问答对来训练模型?你还面临着在有限容量下优先考虑数据混合中信息的问题。 基于记忆的技术:基本上是一种保持有用记忆并丢弃不需要的记忆的策略。这感觉更像是人类保留信息的方式:“用过就留,不用就丢”。你只需要几个东西来使其工作: - 一种驱逐/保留策略。类似于“如果在过去的10k个标记中至少被访问过一次,就保留记忆”。 - 该策略需要高效可计算 - 模型存储和访问长期记忆的地方。也许一个稀疏访问的KV缓存就足够了。但为了高效访问大量记忆,层次数据结构可能更好。