Skip to content

chaoleiyv/moe-memgpt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧠 Letta 基于Embedding的MoE角色记忆系统

🎯 系统概述

本系统是Letta的下一代记忆管理架构,完全基于向量语义匹配的MoE (Mixture of Experts) 角色记忆系统。与传统的关键词匹配不同,本系统使用embedding向量化技术实现真正的语义理解和智能记忆管理。

🌟 核心特性

  • 🧠 完全基于Embedding: 所有角色描述和记忆内容都向量化,使用语义相似度进行匹配
  • 🎭 智能角色路由: 基于embedding相似度自动将记忆分配到最相关的角色库
  • 🚪 语义门控机制: 根据上下文语义自动激活最相关的角色
  • 📚 档案记忆支持: 完全模仿Archival Memory的实现,支持大容量长期存储
  • ⚡ 异步处理: 全异步设计,支持高效的embedding生成和搜索

🏗️ 系统架构

┌─────────────────────────────────────────────────────────────┐
│                    EmbeddingMoEMemory                       │
├─────────────────────────────────────────────────────────────┤
│  🎭 角色库 (EmbeddingRoleMemoryRepository)                  │
│  ├── 专业助手 🧠 [embedding: [0.1, 0.2, ...]]              │
│  │   ├── 核心记忆块 📝 [embedding: [0.3, 0.4, ...]]        │
│  │   └── 档案段落 📚 [embedding: [0.5, 0.6, ...]]          │
│  ├── 个人助手 🧠 [embedding: [0.7, 0.8, ...]]              │
│  └── 技术专家 🧠 [embedding: [0.9, 1.0, ...]]              │
├─────────────────────────────────────────────────────────────┤
│  🔄 核心算法                                                │
│  ├── route_memory_to_role_async() - 记忆路由               │
│  ├── moe_gate_for_context_async() - 角色激活               │
│  └── search_role_memories_async() - 语义搜索               │
└─────────────────────────────────────────────────────────────┘

🚀 快速开始

1. 环境配置

# 设置OpenAI API密钥(用于embedding生成)
export OPENAI_API_KEY="your-api-key"

# 确保在项目根目录
cd /path/to/memgpt

2. 运行测试脚本

python create_embedding_moe_agent_local.py

3. 预期输出

🎉 Letta 基于Embedding的MoE角色记忆系统 - 本地版本
======================================================================
🔍 检查本地环境...
✅ 本地环境检查通过
🎭 使用本地代码创建基于Embedding的MoE角色记忆Agent...
✅ 成功导入Embedding MoE模块
✅ 本地Embedding MoE Agent创建成功!
   ID: local_embedding_moe_agent
   名称: Local_Embedding_MoE_Professional_Assistant
   模型: gpt-4o-mini
   Embedding模型: text-embedding-3-small
   记忆类型: EmbeddingMoEMemory

🎭 已配置的角色库:
   ✅ 🧠 专业助手 (professional_assistant)
      记忆块: 2, 档案段落: 0

🎭 角色模板系统

预定义角色模板

# 单个角色模板
from letta.schemas.role_templates import get_role_template

role_config = get_role_template("professional_assistant")
# 返回: EmbeddingRoleConfig 对象

# 角色集合模板  
from letta.schemas.role_templates import get_role_template_set

role_configs = get_role_template_set("professional_assistant_set")
# 返回: List[EmbeddingRoleConfig]

可用模板

模板名称 描述 特点
personal_assistant 个人助手 生活事务、健康管理、人际关系
professional_assistant 专业助手 工作沟通、项目管理、业务咨询
technical_expert 技术专家 编程开发、架构设计、技术调研
creative_assistant 创意助手 创意策划、内容创作、设计思维

🧠 核心算法详解

1. 记忆路由算法 (Memory Routing)

async def route_memory_to_role_async(self, memory_content: str, context: str, actor):
    # 1️⃣ 生成记忆内容的embedding
    content_embedding = await self._generate_embedding(memory_content)
    
    # 2️⃣ 计算与每个角色的语义相似度
    role_scores = {}
    for role_id, repository in self.role_repositories.items():
        similarity = cosine_similarity(content_embedding, repository.role_embedding)
        role_scores[role_id] = similarity
    
    # 3️⃣ 选择相似度超过阈值的角色
    selected_roles = [role_id for role_id, score in role_scores.items() 
                     if score >= self.routing_threshold]
    
    return selected_roles

2. MoE门控机制 (MoE Gating)

async def moe_gate_for_context_async(self, context: str, actor, max_roles=3):
    # 1️⃣ 生成上下文的embedding
    context_embedding = await self._generate_embedding(context)
    
    # 2️⃣ 计算与每个角色的相似度并排序
    role_scores = []
    for role_id, repository in self.role_repositories.items():
        similarity = cosine_similarity(context_embedding, repository.role_embedding)
        role_scores.append((similarity, role_id))
    
    # 3️⃣ 激活top-k个最相关角色
    role_scores.sort(reverse=True)
    active_roles = [role_id for similarity, role_id in role_scores[:max_roles]
                   if similarity >= self.routing_threshold]
    
    return active_roles

3. 语义搜索算法 (Semantic Search)

async def search_memories_async(self, query: str, embedding_config, actor, top_k=5):
    # 1️⃣ 生成查询的embedding
    query_embedding = await self._generate_embedding(query)
    
    # 2️⃣ 计算与所有记忆块的相似度
    scored_blocks = []
    for block in self.core_memory_blocks:
        similarity = cosine_similarity(query_embedding, block.embedding)
        scored_blocks.append((similarity, block))
    
    # 3️⃣ 返回相似度最高的top_k个结果
    scored_blocks.sort(reverse=True)
    return [block for similarity, block in scored_blocks[:top_k]]

📊 性能对比

与原Letta系统对比

特性 原Letta系统 Embedding MoE系统
记忆路由 关键词匹配 语义相似度匹配
角色激活 规则匹配 Embedding相似度
搜索方式 关键词搜索 语义向量搜索
语义理解 ❌ 弱 ✅ 强
搜索精度 ❌ 中等 ✅ 高
响应速度 ✅ 快 (~1-5ms) ❌ 中等 (~50-100ms)
资源消耗 ✅ 低 ❌ 中等

适用场景

✅ 推荐使用Embedding MoE系统的场景:

  • 需要精确语义理解的应用
  • 多语言支持需求
  • 复杂领域知识管理
  • 高质量的记忆检索要求

⚠️ 考虑使用原系统的场景:

  • 对响应速度要求极高
  • 资源受限的环境
  • 简单的关键词匹配即可满足需求

🔧 自定义配置

创建自定义角色

from letta.schemas.embedding_moe_memory import EmbeddingRoleConfig, RoleType

custom_role = EmbeddingRoleConfig(
    role_id="data_scientist",
    role_type=RoleType.TECHNICAL,
    role_name="数据科学家",
    role_description="专注于数据分析、机器学习、统计建模和数据可视化的专业角色",
    keywords=["数据", "分析", "机器学习", "统计", "模型"],
    activation_threshold=0.4,  # 激活阈值
    max_memory_size=100,       # 最大记忆数量
    memory_retention_strategy="semantic"  # 保留策略
)

调整系统参数

# 在创建EmbeddingMoEMemory时
moe_memory = EmbeddingMoEMemory(
    embedding_config=embedding_config,
    routing_threshold=0.3,     # 路由阈值(越高越严格)
    max_active_roles=3,        # 最大同时激活角色数
)

📚 API参考

主要类

EmbeddingMoEMemory

  • route_memory_to_role_async() - 异步记忆路由
  • moe_gate_for_context_async() - 异步角色激活
  • smart_add_memory_async() - 智能添加记忆
  • search_role_memories_async() - 异步语义搜索
  • compile() - 渲染激活角色记忆到prompt

EmbeddingMoEAgent

  • step() - 增强的消息处理(集成MoE逻辑)
  • search_memories_by_context_async() - 基于上下文搜索记忆
  • get_memory_summary() - 获取记忆统计信息

工厂函数

# 创建embedding MoE记忆系统
memory = await create_embedding_moe_memory_async(
    persona="AI助手", 
    human="用户", 
    agent_type=AgentType.memgpt_agent,
    embedding_config=embedding_config,
    actor=user
)

# 创建embedding MoE智能体
agent = await create_embedding_moe_agent_async(
    agent_state=agent_state,
    role_template="professional_assistant",
    user=user
)

🧪 测试功能

测试脚本包含以下测试场景:

  1. 🧠 记忆路由测试 - 验证不同类型内容的智能路由
  2. 🔍 语义搜索测试 - 测试基于embedding的记忆检索
  3. 🚪 MoE门控测试 - 验证上下文感知的角色激活
  4. 📚 档案记忆测试 - 测试大容量长期存储功能

🎊 总结

🎉 基于Embedding的MoE角色记忆系统代表了Letta记忆管理的重大进步:

  • 真正的语义理解: 不再依赖关键词匹配,实现深层语义理解
  • 智能记忆管理: 自动路由和激活,无需手动配置
  • 可扩展架构: 模块化设计,易于扩展新角色和功能
  • 向后兼容: 保持与原Letta接口的兼容性

这个系统为构建真正智能的AI助手奠定了坚实的基础,让AI能够像人类一样进行角色化的记忆管理和知识运用。


🚀 开始你的Embedding MoE之旅,体验下一代AI记忆系统!

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors