Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menerapkan cache semantik dengan ElastiCache untuk Valkey
Panduan berikut menunjukkan cara menerapkan cache semantik read-through menggunakan Valkey dengan Amazon Bedrock. ElastiCache
Langkah 1: Buat cluster ElastiCache untuk Valkey
Buat cluster ElastiCache for Valkey dengan versi 8.2 atau yang lebih baru menggunakan: AWS CLI
aws elasticache create-replication-group \ --replication-group-id "valkey-semantic-cache" \ --cache-node-type cache.r7g.large \ --engine valkey \ --engine-version 8.2 \ --num-node-groups 1 \ --replicas-per-node-group 1
Langkah 2: Connect ke cluster dan konfigurasikan embeddings
Dari kode aplikasi yang berjalan di instans Amazon EC2, sambungkan ke ElastiCache klaster dan siapkan model penyematan:
from valkey.cluster import ValkeyCluster from langchain_aws import BedrockEmbeddings # Connect to ElastiCache for Valkey valkey_client = ValkeyCluster( host="mycluster.xxxxxx.clustercfg.use1.cache.amazonaws.com", # Your cluster endpoint port=6379, decode_responses=False ) # Set up Amazon Bedrock Titan embeddings embeddings = BedrockEmbeddings( model_id="amazon.titan-embed-text-v2:0", region_name="us-east-1" )
Ganti nilai host dengan titik akhir konfigurasi ElastiCache klaster Anda. Untuk petunjuk tentang menemukan titik akhir klaster Anda, lihat Mengakses klaster Anda ElastiCache .
Langkah 3: Buat indeks vektor untuk cache semantik
Konfigurasikan a ValkeyStore yang secara otomatis menyematkan kueri menggunakan indeks HNSW dengan jarak COSINE untuk pencarian vektor:
from langgraph_checkpoint_aws import ValkeyStore from hashlib import md5 store = ValkeyStore( client=valkey_client, index={ "collection_name": "semantic_cache", "embed": embeddings, "fields": ["query"], # Fields to vectorize "index_type": "HNSW", # Vector search algorithm "distance_metric": "COSINE", # Similarity metric "dims": 1024 # Titan V2 produces 1024-d vectors } ) store.setup() def cache_key_for_query(query: str): """Generate a deterministic cache key for a query.""" return md5(query.encode("utf-8")).hexdigest()
catatan
ElastiCache untuk Valkey menggunakan indeks untuk menyediakan pencarian vektor yang cepat dan akurat. FT.CREATEPerintah menciptakan indeks yang mendasarinya. Untuk informasi selengkapnya, lihat Pencarian vektor untuk ElastiCache.
Langkah 4: Menerapkan fungsi pencarian dan pembaruan cache
Buat fungsi untuk mencari cache untuk kueri semantik serupa dan untuk menyimpan pasangan kueri-respons baru:
def search_cache(user_message: str, k: int = 3, min_similarity: float = 0.8): """Look up a semantically similar cached response from ElastiCache.""" hits = store.search( namespace="semantic-cache", query=user_message, limit=k ) if not hits: return None # Sort by similarity score (highest first) hits = sorted(hits, key=lambda h: h["score"], reverse=True) top_hit = hits[0] score = top_hit["score"] if score < min_similarity: return None # Below similarity threshold return top_hit["value"]["answer"] # Return cached answer def store_cache(user_message: str, result_message: str): """Store a new query-response pair in the semantic cache.""" key = cache_key_for_query(user_message) store.put( namespace="semantic-cache", key=key, value={ "query": user_message, "answer": result_message } )
Langkah 5: Menerapkan pola cache read-through
Integrasikan cache ke dalam penanganan permintaan aplikasi Anda:
import time def handle_query(user_message: str) -> dict: """Handle a user query with read-through semantic cache.""" start = time.time() # Step 1: Search the semantic cache cached_response = search_cache(user_message, min_similarity=0.8) if cached_response: # Cache hit - return cached response elapsed = (time.time() - start) * 1000 return { "response": cached_response, "source": "cache", "latency_ms": round(elapsed, 1), } # Step 2: Cache miss - invoke LLM llm_response = invoke_llm(user_message) # Your LLM invocation function # Step 3: Store the response in cache for future reuse store_cache(user_message, llm_response) elapsed = (time.time() - start) * 1000 return { "response": llm_response, "source": "llm", "latency_ms": round(elapsed, 1), }
Perintah Valkey yang mendasari
Tabel berikut menunjukkan perintah Valkey yang digunakan untuk mengimplementasikan cache semantik:
| Operasi | Perintah Valkey | Latensi khas |
|---|---|---|
| Buat indeks | FT.CREATE semantic_cache SCHEMA query TEXT answer TEXT embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 1024 DISTANCE_METRIC COSINE |
One-time penyiapan |
| Pencarian cache | FT.SEARCH semantic_cache "*=>[KNN 3 @embedding $query_vec]" PARAMS 2 query_vec [bytes] DIALECT 2 |
Mikrodetik |
| Tanggapan toko | HSET cache:{hash} query "..." answer "..." embedding [bytes] |
Mikrodetik |
| Setel TTL | EXPIRE cache:{hash} 82800 |
Mikrodetik |
| Inferensi LLM (miss) | Panggilan API eksternal ke Amazon Bedrock | 500—6000 ms |