AutoGen_EnhancedAgents
本库包含为微软AutoGen框架构建的增强代理,首次推出的MemoryEnabledAgent在上下文/令牌控制、便携性和即插即用功能方面有了改进。
目录
MemoryEnabledAgent
Memory Enabled Agent (MEA)从AutoGen的AssistantAgent类继承,添加了使代理能够进行持久、自主和令牌稳定的对话、记忆存储和记忆检索的方法。这项工作灵感来自并扩展了在开发AutoGen_MemoryManager和AutoGen_IterativeCoding时的经验教训以及AutoGen社区的讨论。 这项工作代表了为开发更具一般性力量的AI代理所做的持续努力。 强烈欢迎和鼓励反馈与合作。
概述
MEA旨在提供一个易于实现的选项,用于在AutoGen框架中使用具有动态和自组织记忆的代理。 该系统的实现受到人类记忆系统文献的启发,包括工作记忆(CC,聊天上下文)、短期记忆(STM,通过exChat-Context)和长期记忆(LTM,通过exSTM-Context)。 STM固定在CC的顶部,并从FILO问题中排除。 CC 是一个固定数量的消息,当超过时,会使用压缩比(CR_1)删除一些最早的消息(FILO)并将它们总结到STM中。 STM也有一个固定的记忆数量,当超过时,会使用CR(CR_2)删除一些最早的记忆并将它们整合到LTM中。 两个总结事件都由内部的MemoryEnabledAgent_Manager(称为Memory Manager Agent或MMA)执行。
工作原理
存储、转移和总结记忆
聊天上下文
聊天上下文(CC)超过限制是驱动所有记忆存储相关功能的原因。当CC超过限制时,会将压缩比(CR)应用于消息,以便:
trim_index = len(messages) * CompressionRatio
lost_messages = messages[:trim_index]
remaining_messages = messages[trim_index:]
trim_index
按照比例分割聊天记录,最旧的部分(lost_messages
)被发送到Memory Manager Agent(MMA)进行处理并附加到短期记忆(STM),最新的部分(remaining_messages
)保持为新CC。
当MMA收到聊天部分时,会提示:
需要总结的对话部分:\n{lost_messages}\n\n 请调用函数append_to_short_term_memory,并传递从上述对话部分中提取的关键点。
然后MMA将调用append_to_short_term_memory
并传递旨在捕捉丢失消息显著性的记忆列表。
短期记忆
STM的行为与CC类似,具有一个限制,当超过时,会驱动进一步的记忆存储功能。当STM超过限制时,会应用一个独立于CC CR的CR,以便:
trim_index = len(STM) * CompressionRatio
lost_memories = STM[:trim_index]
remaining_memories = STM[trim_index:]
trim_index
按照比例分割STM,最旧的部分(lost_memories
)被发送到MMA进行处理并整合到LTM中,最新的部分(remaining_memories
)保持在STM中。
长期记忆
LTM是所有记忆的最终目的地。没有最大长度检查。MMA应该保持最小列表,但可能需要进行一些调整以实现最佳性能。
检索记忆
记忆通过Memory Enabled Agent(MEA)的函数调用从LTM检索。MEA会向MMA传递一个hint
,描述所请求的信息。MMA会返回查询的答案,而不是现有记忆的复制粘贴。这是有意为了在相关情况下允许模糊/合并不同的记忆。
设置记忆参数
已经使用了以下默认记忆参数:
# 在启动压缩到长时记忆之前的最大短期记忆数量
DEFAULT_SHORT_TERM_MEMORY_LIMIT = 10
# 短期记忆的压缩比例(0.9在超过STM限制后删除10个记忆中的9个,0.1在超过STM限制后删除10个记忆中的1个)
DEFAULT_COMPRESSION_RATIO_STM = 0.8
# 会话长度的最大值,在消息数量上。用户和AI都计算在内,所以最低是2。
DEFAULT_MAX_CONVO_LENGTH = 10
# 聊天的压缩比例(0.9在超过限制后删除10个聊天中的9个,0.1在超过限制后删除10个聊天中的1个)
DEFAULT_COMPRESSION_RATIO_CHAT = 0.8
应仔细考虑更改这些值的影响。对于任何流程,可能会有一个平衡,以以最少的令牌/请求实现性能,但这在某种程度上是个案的。已经采取了很多预防措施来防止令牌溢出,旨在降低成本。实际上,这个代理可能会有较高的最低令牌使用量。当讨论变长或有可能变长时,MEA可能会呈现一个有吸引力的解决方案。
入门指南
作者假设您已经在您的系统上安装并运行了AutoGen。如果您只是想用系统作为对话代理,确保main.py
已填写您的API配置,并且与EnhancedAgents.py
在同一目录下。可以通过命令行运行python main.py
。
控制运行
您可以与代理正常对话,只需使用自动回复进行记忆查找请求。
当前状态下的文档是不完整的,并且代表正在进行的工作。
待办事项:使其无错误
- 修复“用户”和实际用户名不一致的问题。
待办事项:提高效率
- 更好的提示以生成/存储更好的事实。有时它仍然会生成句子或其他复制/粘贴内容。
- CC、STM和LTM的功能调用自动化,确保最小/零浪费后。
- 代码待办事项。
待办事项:改善
- 创建一个自反思循环,允许在CC驱动需求之外压缩/重新格式化记忆。使其对MEA可访问。
- 创建一个上下文切换循环,使STM可从CC/STM/LTM重新格式化,以便为下一任务做好准备。
- 创建一个系统,允许MEA调整STM和LTM查找特定代理——通过更多文件或更好地控制STM和LTM条目中的实体名称。
- 设计一种方法论和理由,将LTM拆分为相关部分,以允许更大的总LTM但在适当的相关部分查找时成本较低。
- 测试和完善方法,以在用户聊天之外的其他活动中使用代理时实现最佳性能和效率(编码组、媒体创作、跨组构思等)