View a markdown version of this page

最佳实践 - Amazon ElastiCache

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

最佳实践

内存生命周期管理

  • TTL 用于短期记忆-在内存条目上设置相应的 TTL 值以自动使瞬态信息过期。对于会话上下文,请使用 30 分钟到 24 小时的 TTL。对于长期的用户偏好,请使用更长的 TTL 或无限期保留。

  • 实现内存衰减 — Mem0 提供了内置的衰减机制,可随着时间的推移删除不相关的信息。配置这些以防止在代理积累更多交互时内存膨胀。

  • 删除重复内存-在存储新内存之前,请使用向量相似度搜索来检查是否已经存在类似的内存。更新现有记忆而不是创建重复的记忆。

向量索引配置

  • 选择正确的索引类型-FLAT 用于可进行精确搜索的小型内存存储(低于 100,000 个条目)。HNSW用于大型商店,在这些商店中,近似最近邻搜索在规模上可提供更好的性能。

  • 选择适当的尺寸-将嵌入尺寸与您的模型相匹配。Amazon Titan 文本嵌入 V2 生成 1024 维矢量。OpenAI 的文本嵌入-3-small 生成 1536 维向量。

  • 使用 COSINE 距离指标 — 对于来自 Amazon Titan 和 OpenAI 等模型的文本嵌入,余弦距离通常是衡量语义相似度的最合适指标。

Multi-user 隔离

  • 按用户 ID 筛选内存-在存储和搜索内存时,请务必包含一个user_id参数,以防止用户之间泄露信息。

  • 使用 TAG 过滤器实现高效隔离-查询向量索引时,使用 TAG 过滤器(例如@user_id:{user_123})在执行 KNN 搜索之前按用户对结果进行预过滤。它作为单个原子操作运行,既提供隔离又提供性能。

    # Example: TAG-filtered vector search for user isolation results = client.execute_command( "FT.SEARCH", "agent_memory", f"@user_id:{{{user_id}}}=>[KNN 5 @embedding $query_vec]", "PARAMS", "2", "query_vec", query_vec, "DIALECT", "2", )

大规模内存管理

  • 设置 maxmemory 策略maxmemory-policy allkeys-lru 在您的 ElastiCache 集群上进行配置,以便在集群达到其内存限制时自动删除最近最少使用的内存条目。

  • 监控内存使用情况-使用 Amazon CloudWatch 指标来跟踪内存利用率、缓存命中率和矢量搜索延迟。为高内存使用率设置警报,以主动管理容量。

  • 容量规划 — 每个内存条目通常需要大约 4—6 KB(嵌入维度 × 4 字节 + 元数据)。一个 1 GB 的 ElastiCache 实例可以存储大约 170,000 到 250,000 个内存条目,具体取决于嵌入大小和元数据。