View a markdown version of this page

最佳實務 - Amazon ElastiCache

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

最佳實務

記憶體生命週期管理

  • 針對短期記憶體使用 TTL – 在記憶體項目上設定適當的 TTL 值,以自動使暫時性資訊過期。針對工作階段內容,請使用 30 分鐘到 24 小時TTLs。對於長期使用者偏好設定,請使用較長TTLs 或無限期保留。

  • 實作記憶體衰減 – Mem0 提供內建的衰減機制,可隨著時間移除不相關的資訊。當代理程式累積更多互動時,設定這些項目以防止記憶體膨脹。

  • 重複刪除記憶體 – 儲存新記憶體之前,請先使用向量相似性搜尋檢查類似的記憶體是否已存在。更新現有的記憶體,而不是建立重複項目。

向量索引組態

  • 選擇正確的索引類型FLAT用於更小型的記憶體存放區 (低於 100,000 個項目),其中可進行精確搜尋。HNSW 用於近似最接近的鄰搜尋提供更大規模效能的大型商店。

  • 選取適當的維度 – 將內嵌維度與您的模型相符。Amazon Titan Text Embeddings V2 會產生 1024 維向量。OpenAI 的 text-embedding-3-small 會產生 1536 維向量。

  • 使用 COSINE 距離指標 – 對於來自 Amazon Titan 和 OpenAI 等模型的文字內嵌,COSINE 距離通常是測量語意相似性最適當的指標。

多使用者隔離

  • 依使用者 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", )

大規模的記憶體管理

  • 設定最大記憶體政策 – 在 ElastiCache 叢集maxmemory-policy allkeys-lru上設定 ,以在叢集達到其記憶體限制時自動移出least-recently-used記憶體項目。

  • 監控記憶體用量 – 使用 Amazon CloudWatch 指標來追蹤記憶體使用率、快取命中率和向量搜尋延遲。設定高記憶體用量的警示,以主動管理容量。

  • 規劃容量 – 每個記憶體項目通常需要大約 4-6 KB (嵌入維度 × 4 個位元組 + 中繼資料)。1 GB ElastiCache 執行個體可以儲存約 170,000–250,000 個記憶體項目,具體取決於內嵌大小和中繼資料。