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