liurenchaxin/docs/memory_bank_design.md

160 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 模块的全面技术参考*