本系统是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() - 语义搜索 │
└─────────────────────────────────────────────────────────────┘
# 设置OpenAI API密钥(用于embedding生成)
export OPENAI_API_KEY="your-api-key"
# 确保在项目根目录
cd /path/to/memgptpython create_embedding_moe_agent_local.py🎉 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 |
创意助手 | 创意策划、内容创作、设计思维 |
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_rolesasync 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_rolesasync 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系统 | 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, # 最大同时激活角色数
)route_memory_to_role_async()- 异步记忆路由moe_gate_for_context_async()- 异步角色激活smart_add_memory_async()- 智能添加记忆search_role_memories_async()- 异步语义搜索compile()- 渲染激活角色记忆到prompt
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
)测试脚本包含以下测试场景:
- 🧠 记忆路由测试 - 验证不同类型内容的智能路由
- 🔍 语义搜索测试 - 测试基于embedding的记忆检索
- 🚪 MoE门控测试 - 验证上下文感知的角色激活
- 📚 档案记忆测试 - 测试大容量长期存储功能
🎉 基于Embedding的MoE角色记忆系统代表了Letta记忆管理的重大进步:
- ✅ 真正的语义理解: 不再依赖关键词匹配,实现深层语义理解
- ✅ 智能记忆管理: 自动路由和激活,无需手动配置
- ✅ 可扩展架构: 模块化设计,易于扩展新角色和功能
- ✅ 向后兼容: 保持与原Letta接口的兼容性
这个系统为构建真正智能的AI助手奠定了坚实的基础,让AI能够像人类一样进行角色化的记忆管理和知识运用。
🚀 开始你的Embedding MoE之旅,体验下一代AI记忆系统!