1. 智能体记忆系统概述
在构建基于大语言模型的智能体时,记忆系统是决定其服务连贯性和个性化的核心组件。一个完整的智能体记忆系统需要解决三个关键问题:如何存储信息、如何检索信息、如何在不同时间尺度上管理信息。
1.1 记忆系统的分层架构
智能体记忆系统通常采用分层设计,模仿人类记忆的工作机制:
- 短期记忆(STM):处理当前会话中的即时信息,类似于人类的工作记忆
- 长期记忆(LTM):存储跨会话的持久化信息,形成智能体的"知识库"
- 记忆管理模块:负责记忆的写入、检索、更新和淘汰
这种分层设计解决了单一记忆系统面临的几个关键挑战:
- 上下文窗口限制问题
- 信息持久化需求
- 不同时间尺度信息的访问模式差异
1.2 记忆系统的技术实现栈
现代智能体记忆系统通常构建在以下技术栈之上:
| 技术组件 | 功能 | 代表实现 |
|---|---|---|
| 向量数据库 | 语义相似性检索 | Pinecone, Weaviate, Milvus |
| 图数据库 | 关系推理 | Neo4j, Amazon Neptune |
| 缓存系统 | 快速访问 | Redis, Memcached |
| 嵌入模型 | 文本向量化 | OpenAI Embeddings, BERT |
| 检索算法 | 相关性排序 | BM25, 余弦相似度 |
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 短期记忆机制实现
2.1 短期记忆缓冲区设计
短期记忆的核心是维护一个动态的对话上下文窗口。以下是Python实现的STM Buffer类:
python复制from collections import deque
import tiktoken # OpenAI的token计数库
class STMBuffer:
def __init__(self, max_tokens=4096):
self.buffer = deque()
self.max_tokens = max_tokens
self.current_tokens = 0
self.encoder = tiktoken.get_encoding("cl100k_base") # GPT-4使用的编码器
def add_message(self, role: str, content: str):
"""添加消息到缓冲区"""
message = f"{role}: {content}"
tokens = len(self.encoder.encode(message))
# 滑动窗口机制
while self.current_tokens + tokens > self.max_tokens:
if not self.buffer:
break
removed = self.buffer.popleft()
self.current_tokens -= len(self.encoder.encode(removed))
self.buffer.append(message)
self.current_tokens += tokens
def get_context(self) -> str:
"""获取当前对话上下文"""
return "\n".join(self.buffer)
def clear(self):
"""清空缓冲区"""
self.buffer.clear()
self.current_tokens = 0
关键设计考虑:
- 精确token计数:使用与LLM匹配的tokenizer确保准确性
- 动态窗口管理:自动移除最早的消息以维持token限制
- 角色标识:保留发言者信息(用户/系统)以维持对话结构
2.2 短期记忆优化策略
在实际应用中,我们还需要考虑以下优化点:
关键消息保留机制
python复制def add_message(self, role: str, content: str, is_critical=False):
"""添加消息,支持关键消息标记"""
if is_critical:
self.critical_messages.append(content) # 关键消息单独存储
# 正常添加流程...
def get_context(self) -> str:
"""获取上下文,确保包含关键消息"""
base_context = "\n".join(self.buffer)
critical_context = "\n".join(f"System: {msg}" for msg in self.critical_messages)
return f"{critical_context}\n{base_context}" if critical_context else base_context
自适应窗口大小策略
python复制def adjust_window_size(self, complexity: float):
"""
根据对话复杂度调整窗口大小
complexity: 0-1之间的值,表示对话复杂程度
"""
min_tokens = 1024
max_tokens = 16000 # GPT-4-32k的上下文限制
self.max_tokens = int(min_tokens + (max_tokens - min_tokens) * complexity)
3. 长期记忆存储架构
3.1 记忆数据模型设计
长期记忆需要更丰富的数据结构来支持各种查询需求:
python复制from pydantic import BaseModel
from datetime import datetime
from typing import Optional, List, Dict
from enum import Enum
class MemoryType(str, Enum):
FACT = "fact"
PREFERENCE = "preference"
EVENT = "event"
RULE = "rule"
class MemoryRecord(BaseModel):
id: str # 格式: user_id:timestamp:hash
content: str
embedding: List[float] # 768维向量
type: MemoryType
importance: float # 1-10
created_at: datetime
last_accessed: Optional[datetime] = None
metadata: Dict[str, str] = {}
relations: List[str] = [] # 关联的其他记忆ID
def update_access_time(self):
self.last_accessed = datetime.now()
def add_relation(self, related_memory_id: str):
if related_memory_id not in self.relations:
self.relations.append(related_memory_id)
3.2 存储介质选型指南
根据不同的应用场景,存储方案的选择需要考虑多个维度:
| 考量因素 | 向量数据库 | 图数据库 | 关系数据库 | 文档数据库 |
|---|---|---|---|---|
| 语义检索 | ★★★★★ | ★★☆ | ★☆☆ | ★★★☆ |
| 关系查询 | ★★☆ | ★★★★★ | ★★★★☆ | ★★☆ |
| 写入速度 | ★★★☆ | ★★☆ | ★★★☆ | ★★★★☆ |
| 读取延迟 | 10-50ms | 50-200ms | 5-20ms | 10-30ms |
| 适合场景 | 相似性搜索 | 复杂关系网络 | 结构化数据 | 半结构化数据 |
混合存储架构示例:
python复制class HybridMemoryStore:
def __init__(self):
self.vector_db = PineconeClient() # 语义检索
self.graph_db = Neo4jClient() # 关系网络
self.doc_db = MongoDBClient() # 完整记录存储
async def store(self, memory: MemoryRecord):
"""分布式存储记忆"""
# 向量存储用于检索
await self.vector_db.upsert(
id=memory.id,
vector=memory.embedding,
metadata={
"type": memory.type,
"importance": memory.importance
}
)
# 图数据库存储关系
if memory.relations:
await self.graph_db.create_edges(
source=memory.id,
targets=memory.relations,
relationship="RELATED"
)
# 完整记录存储
await self.doc_db.insert(memory.dict())
4. 向量数据库核心技术
4.1 相似性度量算法详解
4.1.1 余弦相似度优化实现
python复制import numpy as np
from numba import njit # 使用JIT编译器加速
@njit(fastmath=True)
def cosine_similarity(v1: np.ndarray, v2: np.ndarray) -> float:
"""优化版余弦相似度计算"""
dot_product = np.dot(v1, v2)
norm_v1 = np.sqrt(np.sum(v1**2))
norm_v2 = np.sqrt(np.sum(v2**2))
# 处理零向量情况
if norm_v1 == 0 or norm_v2 == 0:
return 0.0
similarity = dot_product / (norm_v1 * norm_v2)
return max(min(similarity, 1.0), -1.0) # 确保在[-1, 1]范围内
性能对比:
| 实现方式 | 计算100万次耗时(768维) |
|---|---|
| 纯Python | 12.4s |
| NumPy | 3.2s |
| Numba加速 | 0.9s |
4.1.2 混合相似度算法
在实际应用中,我们常常需要结合多种相似度度量:
python复制def hybrid_similarity(query_vec: np.ndarray,
target_vec: np.ndarray,
target_metadata: dict,
weights: dict = None) -> float:
"""
混合相似度计算
weights: {
"cosine": 0.6,
"euclidean": 0.2,
"recency": 0.1,
"importance": 0.1
}
"""
default_weights = {
"cosine": 0.6,
"euclidean": 0.2,
"recency": 0.1,
"importance": 0.1
}
weights = weights or default_weights
# 计算基础相似度
cosine_sim = cosine_similarity(query_vec, target_vec)
euclidean_sim = 1 / (1 + np.linalg.norm(query_vec - target_vec))
# 计算元数据得分
recency_score = calculate_recency(target_metadata.get("last_accessed"))
importance_score = target_metadata.get("importance", 5) / 10
# 加权综合
total_score = (
weights["cosine"] * cosine_sim +
weights["euclidean"] * euclidean_sim +
weights["recency"] * recency_score +
weights["importance"] * importance_score
)
return total_score
4.2 主流向量数据库对比
4.2.1 Pinecone深度集成
Pinecone作为全托管服务,提供了最佳的生产环境体验:
python复制class PineconeMemoryStore:
def __init__(self, api_key: str, index_name: str = "agent-memories"):
pinecone.init(api_key=api_key, environment="us-west1-gcp")
# 检查并创建索引
if index_name not in pinecone.list_indexes():
pinecone.create_index(
name=index_name,
dimension=1536, # OpenAI text-embedding-3-large
metric="cosine",
pods=1,
pod_type="p1.x1"
)
self.index = pinecone.Index(index_name)
async def upsert_memory(self, memory: MemoryRecord):
"""异步插入记忆"""
await self.index.upsert(
vectors=[(
memory.id,
memory.embedding,
{
"type": memory.type,
"importance": memory.importance,
"created_at": memory.created_at.isoformat(),
"content": memory.content[:100] # 存储前100字符
}
)],
async_req=True
)
async def search_memories(self, query_vec: list, top_k: int = 5, filters: dict = None):
"""带过滤条件的语义搜索"""
return await self.index.query(
vector=query_vec,
top_k=top_k,
filter=filters,
include_metadata=True,
async_req=True
)
4.2.2 Weaviate混合检索
Weaviate的突出优势在于支持混合检索模式:
python复制class WeaviateMemoryStore:
def __init__(self, endpoint: str = "http://localhost:8080"):
self.client = weaviate.Client(endpoint)
# 定义记忆对象的schema
memory_schema = {
"class": "Memory",
"properties": [
{
"name": "content",
"dataType": ["text"]
},
# 其他属性...
],
"vectorizer": "none" # 我们使用预计算的向量
}
# 确保schema存在
if not self.client.schema.contains(memory_schema):
self.client.schema.create_class(memory_schema)
def hybrid_search(self, query: str, query_vec: list, user_id: str, alpha: float = 0.5):
"""
混合检索
alpha: 0=纯关键词, 1=纯向量
"""
return self.client.query.get(
"Memory",
["content", "importance", "type"]
).with_hybrid(
query=query,
vector=query_vec,
alpha=alpha,
properties=["content^2", "type"] # 内容字段权重加倍
).with_where({
"path": ["user_id"],
"operator": "Equal",
"valueString": user_id
}).do()
5. 知识图谱集成实践
5.1 知识图谱建模
5.1.1 实体关系模型设计
python复制from py2neo import Graph, Node, Relationship
class KnowledgeGraph:
def __init__(self, uri: str, user: str, password: str):
self.graph = Graph(uri, auth=(user, password))
def create_entity(self, memory_id: str, memory_type: str, properties: dict):
"""创建知识图谱实体"""
labels = ["Memory", memory_type.capitalize()]
node = Node(*labels,
id=memory_id,
**properties)
self.graph.create(node)
return node
def create_relation(self, source_id: str, target_id: str, rel_type: str):
"""创建实体关系"""
query = """
MATCH (a {id: $source_id}), (b {id: $target_id})
MERGE (a)-[r:%s]->(b)
RETURN r
""" % rel_type
return self.graph.run(query,
source_id=source_id,
target_id=target_id).data()
5.1.2 时序知识图谱扩展
python复制class TemporalKnowledgeGraph(KnowledgeGraph):
def add_temporal_relation(self, source_id: str, target_id: str,
rel_type: str, valid_from: datetime,
valid_to: datetime = None):
"""添加带时间有效期的关系"""
rel_properties = {
"valid_from": valid_from.isoformat(),
"valid_to": valid_to.isoformat() if valid_to else None
}
query = """
MATCH (a {id: $source_id}), (b {id: $target_id})
MERGE (a)-[r:%s]->(b)
SET r += $properties
RETURN r
""" % rel_type
return self.graph.run(query,
source_id=source_id,
target_id=target_id,
properties=rel_properties).data()
5.2 图神经网络应用
5.2.1 记忆嵌入传播
python复制import torch
import torch.nn as nn
import torch.nn.functional as F
from torch_geometric.nn import GATConv
class MemoryGNN(nn.Module):
"""基于图注意力网络的记忆编码器"""
def __init__(self, input_dim=768, hidden_dim=256, heads=4):
super().__init__()
self.conv1 = GATConv(input_dim, hidden_dim, heads=heads)
self.conv2 = GATConv(hidden_dim*heads, hidden_dim, heads=1)
self.dropout = nn.Dropout(0.2)
def forward(self, x, edge_index):
"""前向传播"""
x = self.dropout(x)
x = self.conv1(x, edge_index)
x = F.elu(x)
x = self.dropout(x)
x = self.conv2(x, edge_index)
return x
def update_embeddings(self, memory_ids, new_embeddings):
"""更新节点嵌入"""
# 实现嵌入传播逻辑...
5.2.2 关系推理应用
python复制class RelationPredictor(nn.Module):
"""基于GNN的关系预测模型"""
def __init__(self, node_dim=256, rel_dim=128):
super().__init__()
self.encoder = MemoryGNN(input_dim=node_dim)
self.rel_mlp = nn.Sequential(
nn.Linear(node_dim*2, rel_dim),
nn.ReLU(),
nn.Linear(rel_dim, rel_dim)
)
def predict_relation(self, node1, node2):
"""预测两个节点间可能的关系"""
h1 = self.encoder(node1)
h2 = self.encoder(node2)
pair_embedding = torch.cat([h1, h2], dim=-1)
return self.rel_mlp(pair_embedding)
6. 混合记忆系统实战
6.1 记忆写入流程优化
6.1.1 重要性评估模型
python复制from transformers import pipeline
class MemoryImportanceEvaluator:
def __init__(self, model_name="facebook/bart-large-mnli"):
self.classifier = pipeline(
"zero-shot-classification",
model=model_name,
device="cuda" if torch.cuda.is_available() else "cpu"
)
def evaluate(self, text: str) -> float:
"""评估记忆重要性(0-1)"""
candidate_labels = [
"casual conversation",
"personal preference",
"important fact",
"critical information"
]
result = self.classifier(
text,
candidate_labels,
multi_label=False
)
# 根据标签类型分配重要性分数
label_scores = {
"casual conversation": 0.3,
"personal preference": 0.6,
"important fact": 0.8,
"critical information": 1.0
}
top_label = result['labels'][0]
confidence = result['scores'][0]
return label_scores[top_label] * confidence
6.1.2 记忆摘要生成
python复制class MemorySummarizer:
def __init__(self, model_name="t5-small"):
self.summarizer = pipeline(
"summarization",
model=model_name,
device="cuda" if torch.cuda.is_available() else "cpu"
)
def generate_summary(self, text: str, max_length=64) -> str:
"""生成记忆摘要"""
summary = self.summarizer(
text,
max_length=max_length,
min_length=8,
do_sample=False
)
return summary[0]['summary_text']
6.2 记忆检索与融合
6.2.1 多阶段检索流程
python复制class MemoryRetriever:
def __init__(self, vector_store, graph_store, cache_size=10000):
self.vector_store = vector_store
self.graph_store = graph_store
self.cache = LRUCache(maxsize=cache_size)
async def retrieve(self, query: str, query_vec: list, user_id: str) -> list:
"""多阶段记忆检索"""
cache_key = f"{user_id}:{query}"
# 检查缓存
if cached := self.cache.get(cache_key):
return cached
# 阶段1:向量相似度检索
vector_results = await self.vector_store.search(
query_vec,
top_k=20,
filters={"user_id": user_id}
)
# 阶段2:知识图谱扩展
memory_ids = [res['id'] for res in vector_results]
graph_results = await self.graph_store.expand_entities(
memory_ids,
hops=2
)
# 阶段3:结果融合与重排序
combined = self._combine_results(vector_results, graph_results)
ranked = self._rerank(combined, query_vec)
# 缓存结果
self.cache[cache_key] = ranked[:10] # 缓存前10个结果
return ranked[:10]
6.2.2 上下文融合策略
python复制class ContextFuser:
def __init__(self, tokenizer, max_tokens=8000):
self.tokenizer = tokenizer
self.max_tokens = max_tokens
def fuse(self, stm_messages: list, ltm_memories: list) -> str:
"""融合短期记忆和长期记忆"""
# 构建记忆时间线
timeline = self._build_timeline(ltm_memories)
# 构建当前对话上下文
dialogue = self._format_dialogue(stm_messages)
# 组合最终上下文
context = f"""## 相关背景知识\n{timeline}\n\n## 当前对话\n{dialogue}"""
# 确保不超过token限制
return self._truncate_to_fit(context)
def _build_timeline(self, memories: list) -> str:
"""将记忆组织为时间线格式"""
# 按时间排序
sorted_mem = sorted(memories, key=lambda x: x['timestamp'])
timeline = []
for mem in sorted_mem:
date = mem['timestamp'].strftime("%Y-%m-%d")
timeline.append(f"{date}: {mem['summary']}")
return "\n".join(timeline)
7. 性能优化与监控
7.1 缓存策略实现
python复制from datetime import datetime, timedelta
class MemoryCache:
"""智能记忆缓存系统"""
def __init__(self, ttl=timedelta(hours=1), max_size=10000):
self.cache = {}
self.ttl = ttl
self.max_size = max_size
self.hits = 0
self.misses = 0
def get(self, key: str) -> Optional[list]:
"""获取缓存项"""
if key not in self.cache:
self.misses += 1
return None
entry = self.cache[key]
if datetime.now() - entry['timestamp'] > self.ttl:
del self.cache[key]
self.misses += 1
return None
self.hits += 1
return entry['value']
def set(self, key: str, value: list):
"""设置缓存项"""
if len(self.cache) >= self.max_size:
self._evict_oldest()
self.cache[key] = {
'value': value,
'timestamp': datetime.now()
}
def _evict_oldest(self):
"""淘汰最旧的缓存项"""
oldest_key = min(self.cache.keys(),
key=lambda k: self.cache[k]['timestamp'])
del self.cache[oldest_key]
@property
def hit_rate(self) -> float:
"""计算缓存命中率"""
total = self.hits + self.misses
return self.hits / total if total > 0 else 0
7.2 监控指标设计
python复制from prometheus_client import Counter, Gauge, Histogram
class MemoryMetrics:
"""记忆系统监控指标"""
def __init__(self):
# 写入指标
self.writes_total = Counter(
'memory_writes_total',
'Total memory writes',
['type', 'importance']
)
# 检索指标
self.retrieval_latency = Histogram(
'memory_retrieval_latency_seconds',
'Memory retrieval latency',
buckets=[0.01, 0.05, 0.1, 0.5, 1.0]
)
# 缓存指标
self.cache_hits = Counter(
'memory_cache_hits_total',
'Total cache hits'
)
self.cache_misses = Counter(
'memory_cache_misses_total',
'Total cache misses'
)
def record_write(self, memory_type: str, importance: int):
"""记录写入操作"""
self.writes_total.labels(
type=memory_type,
importance=str(importance)
).inc()
def record_retrieval(self, duration: float):
"""记录检索延迟"""
self.retrieval_latency.observe(duration)
def record_cache_hit(self):
"""记录缓存命中"""
self.cache_hits.inc()
def record_cache_miss(self):
"""记录缓存未命中"""
self.cache_misses.inc()
8. 电商客服Agent案例实现
8.1 系统架构设计
mermaid复制graph TD
A[用户请求] --> B[API网关]
B --> C{请求类型?}
C -->|查询类| D[记忆检索模块]
C -->|操作类| E[工具调用模块]
D --> F[向量数据库]
D --> G[知识图谱]
F --> H[结果融合]
G --> H
H --> I[LLM生成响应]
E --> J[订单系统]
E --> K[库存系统]
J --> I
K --> I
I --> L[响应返回]
L --> M[记忆更新队列]
M --> N[异步写入存储]
8.2 关键业务逻辑实现
8.2.1 用户偏好处理
python复制class PreferenceManager:
def __init__(self, memory_store):
self.store = memory_store
async def extract_preferences(self, user_id: str, conversation: list):
"""从对话中提取用户偏好"""
# 使用LLM分析对话中的偏好信息
extracted = await self._analyze_with_llm(conversation)
# 存储到记忆系统
for pref in extracted:
memory = MemoryRecord(
id=f"pref_{user_id}_{hash(pref['type'])}",
content=f"用户偏好: {pref['value']}",
type=MemoryType.PREFERENCE,
importance=8, # 偏好通常比较重要
metadata={
"user_id": user_id,
"preference_type": pref['type'],
"preference_value": pref['value']
}
)
await self.store.upsert(memory)
async def get_recommendations(self, user_id: str, product_type: str):
"""基于用户偏好获取推荐"""
# 检索相关偏好
prefs = await self.store.search(
filters={
"user_id": user_id,
"type": "preference",
"preference_type": {"$in": ["color", "size", "brand"]}
},
limit=5
)
# 构建推荐查询
query = self._build_recommendation_query(product_type, prefs)
return await self._query_products(query)
8.2.2 订单历史集成
python复制class OrderHistoryManager:
def __init__(self, memory_store, order_db):
self.store = memory_store
self.db = order_db
async def sync_order_history(self, user_id: str):
"""同步订单历史到记忆系统"""
orders = await self.db.get_orders(user_id)
for order in orders:
memory = MemoryRecord(
id=f"order_{order['id']}",
content=f"订单 {order['id']}: 购买了 {order['items']}",
type=MemoryType.EVENT,
importance=7,
metadata={
"user_id": user_id,
"order_id": order['id'],
"order_date": order['date'],
"items": order['items'],
"total_amount": order['amount']
}
)
# 存储订单基本信息
await self.store.upsert(memory)
# 为每个商品创建关联记忆
for item in order['items']:
item_memory = MemoryRecord(
id=f"item_{order['id']}_{item['sku']}",
content=f"购买商品: {item['name']}",
type=MemoryType.FACT,
importance=6,
metadata={
"user_id": user_id,
"sku": item['sku'],
"category": item['category'],
"purchase_date": order['date']
},
relations=[memory.id] # 关联到主订单
)
await self.store.upsert(item_memory)
8.3 性能优化实践
8.3.1 批量写入优化
python复制class BatchMemoryWriter:
def __init__(self, memory_store, batch_size=100):
self.store = memory_store
self.batch_size = batch_size
self.buffer = []
self.lock = asyncio.Lock()
async def add_memory(self, memory: MemoryRecord):
"""添加记忆到批量缓冲区"""
async with self.lock:
self.buffer.append(memory)
if len(self.buffer) >= self.batch_size:
await self._flush()
async def _flush(self):
"""执行批量写入"""
if not self.buffer:
return
# 分批处理避免过大请求
chunks = [self.buffer[i:i+self.batch_size]
for i in range(0, len(self.buffer), self.batch_size)]
for chunk in chunks:
await self.store.batch_upsert(chunk)
self.buffer.clear()
async def __aenter__(self):
return self
async def __aexit__(self, exc_type, exc, tb):
await self._flush()
8.3.2 预取策略实现
python复制class PrefetchManager:
def __init__(self, memory_store, predictor):
self.store = memory_store
self.predictor = predictor
async def prefetch_for_user(self, user_id: str):
"""预测并预取用户可能需要的记忆"""
# 预测用户下一步可能的行为
predicted_actions = await self.predictor.predict(user_id)
# 为每个预测行为预取相关记忆
for action in predicted_actions:
related_memories = await self._get_related_memories(user_id, action)
await self._cache_memories(related_memories)
async def _get_related_memories(self, user_id: str, action: str):
"""获取与特定行为相关的记忆"""
# 基于行为类型构建查询
if action['type'] == 'product_view':
return await self.store.search(
filters={
"user_id": user_id,
"type": {"$in": ["preference", "purchase"]},
"category": action['category']
},
limit=10
)
# 其他行为类型的处理...
9. 评估与调优
9.1 关键性能指标
| 指标名称 | 目标值 | 测量方法 |
|---|---|---|
| 记忆检索延迟 | <200ms | 从请求到返回的时间 |
| 记忆写入吞吐量 | >1000 ops/s | 每秒成功写入操作数 |
| 缓存命中率 | >70% | 缓存命中次数/总请求数 |
| 上下文相关性 | >85% | 人工评估检索结果相关性 |
| 记忆新鲜度 | <1小时 | 重要记忆从产生到可用的时间 |
9.2 调优策略
向量索引优化
python复制def optimize_pinecone_index(index_name: str, pod_type: str, replicas: int):
"""调整Pinecone索引配置"""
pinecone.configure_index(
name=index_name,
pod_type=pod_type, # 如"p1.x2"更大型号
replicas=replicas # 增加副本提高读取吞吐
)
图查询优化
python复制def optimize_graph_queries():
"""知识图谱查询优化策略"""
return {
"indexing": [
"CREATE INDEX ON :Memory(user_id)",
"CREATE INDEX ON :Memory(type)"
],
"query_hints": [
"使用PROFILE分析慢查询",
"避免全图扫描",
"限制遍历深度"
],
"cache_config": {
"query_cache_size": "2GB",
"edge_cache_ratio": 0.3
}
}
10. 未来演进方向
10.1 多模态记忆扩展
python复制class MultimodalMemory:
"""支持多模态的记忆表示"""
def __init__(self):
self.text_embedder = TextEmbedder()
self.image_embedder = ImageEmbedder()
self.audio_embedder = AudioEmbedder()
async def store(self, content: Union[str, bytes], content_type: str):
"""存储多模态记忆"""
if content_type == "text":
embedding = await self.text_embedder.embed(content)
elif content_type == "image":
embedding = await self.image_embedder.embed(content)
elif content_type == "audio":
embedding = await self.audio_embedder.embed(content)
else:
raise ValueError(f"Unsupported type: {content_type}")
memory = MemoryRecord(
content=content[:1000] if isinstance(content, str) else f"[{content_type}]",
embedding=embedding,
metadata={"content_type": content_type}
)
await self.store.upsert(memory)
10.2 分布式记忆架构
python复制class DistributedMemoryStore:
"""分布式记忆存储系统"""
def __init__(self, shards: list):
self.shards = [MemoryStoreShard(url) for url in shards]
self.router = ConsistentHashingRouter(len(shards))
async def get(self, key: str) -> Optional[MemoryRecord]:
"""分布式获取记忆"""
shard_index = self.router.get_shard(key)
return await self.shards[shard_index].get(key)
async def set(self, key: str, value: MemoryRecord):
"""分布式存储记忆"""
shard_index = self.router.get_shard(key)
await self.shards[shard_index].set(key, value)
async def search(self, query: str, top_k: int = 5) -> list:
"""分布式向量搜索"""
# 在所有分片上并行搜索
results = await asyncio.gather(
*[shard.search(query, top_k) for shard in self.shards]
)
# 合并并重排序结果
all_results = [item for sublist in results for item in sublist]
return sorted(all_results, key=lambda x: -x['score'])[:top_k]
