4.5 KiB
4.5 KiB
Memory Bank 设计与实现文档
概述
Memory Bank 是 稷下学宫AI辩论系统 的核心组件之一,旨在为每个AI智能体(八仙)提供持久化的记忆能力。通过集成不同的后端实现(如 Google Vertex AI Memory Bank 和 Cloudflare AutoRAG),系统能够灵活地存储、检索和利用智能体在辩论过程中积累的知识和经验。
架构设计
核心抽象
系统通过 MemoryBankProtocol 定义了记忆银行的通用接口,确保了不同后端实现的可替换性。
@runtime_checkable
class MemoryBankProtocol(Protocol):
async def create_memory_bank(self, agent_name: str, display_name: Optional[str] = None) -> str: ...
async def add_memory(
self,
agent_name: str,
content: str,
memory_type: str = "conversation",
debate_topic: str = "",
metadata: Optional[Dict[str, Any]] = None,
) -> str: ...
async def search_memories(
self,
agent_name: str,
query: str,
memory_type: Optional[str] = None,
limit: int = 10,
) -> List[Dict[str, Any]]: ...
async def get_agent_context(self, agent_name: str, debate_topic: str) -> str: ...
async def save_debate_session(
self,
debate_topic: str,
participants: List[str],
conversation_history: List[Dict[str, str]],
outcomes: Optional[Dict[str, Any]] = None,
) -> None: ...
工厂模式
通过 get_memory_backend 工厂函数,系统可以根据配置动态选择合适的记忆后端实现。
def get_memory_backend(prefer: Optional[str] = None) -> MemoryBankProtocol:
# 根据环境变量 JIXIA_MEMORY_BACKEND 选择后端
# 支持 "vertex" 和 "cloudflare"
...
后端实现
Vertex AI Memory Bank
基于 Google Vertex AI 的 Memory Bank 服务实现。
特点:
- 与 Google Cloud 生态系统深度集成
- 提供企业级的安全性和可靠性
- 支持复杂的元数据过滤和查询
配置:
GOOGLE_API_KEY: Google API 密钥GOOGLE_CLOUD_PROJECT_ID: Google Cloud 项目IDGOOGLE_CLOUD_LOCATION: 部署区域 (默认 us-central1)
Cloudflare AutoRAG
基于 Cloudflare Vectorize 和 Workers AI 实现的向量检索增强生成方案。
特点:
- 全球分布的边缘计算网络
- 成本效益高,适合中小型项目
- 易于部署和扩展
配置:
CLOUDFLARE_ACCOUNT_ID: Cloudflare 账户IDCLOUDFLARE_API_TOKEN: 具有 Vectorize 和 Workers AI 权限的 API 令牌
使用指南
初始化记忆银行
from src.jixia.memory.factory import get_memory_backend
# 根据环境变量自动选择后端
memory_bank = get_memory_backend()
# 或者显式指定后端
memory_bank = get_memory_backend(prefer="cloudflare")
为智能体创建记忆空间
# 为吕洞宾创建记忆银行/空间
await memory_bank.create_memory_bank("lvdongbin")
添加记忆
await memory_bank.add_memory(
agent_name="lvdongbin",
content="倾向于使用DCF模型评估科技股的内在价值",
memory_type="preference",
debate_topic="TSLA投资分析"
)
搜索记忆
memories = await memory_bank.search_memories(
agent_name="lvdongbin",
query="TSLA",
memory_type="preference"
)
获取上下文
context = await memory_bank.get_agent_context("lvdongbin", "TSLA投资分析")
最佳实践
-
合理分类记忆类型:
conversation: 记录对话历史,用于上下文理解和连贯性。preference: 存储智能体的偏好和倾向,指导决策过程。knowledge: 积累专业知识和数据,提升分析深度。strategy: 总结辩论策略和战术,优化表现。
-
定期维护记忆:
- 实施记忆的定期清理和归档策略,避免信息过载。
- 通过
save_debate_session方法系统性地保存重要辩论会话。
-
优化搜索查询:
- 使用具体、明确的查询词以提高搜索相关性。
- 结合
memory_type过滤器缩小搜索范围。
-
错误处理:
- 在生产环境中,务必对所有异步操作进行适当的错误处理和重试机制。
未来扩展
- 混合后端支持: 允许同时使用多个后端,根据数据类型或访问模式进行路由。
- 记忆压缩与摘要: 自动对长篇记忆进行摘要,提高检索效率。
- 情感分析: 为记忆添加情感标签,丰富检索维度。
此文档旨在为开发者提供 Memory Bank 模块的全面技术参考