Static Cache + Dynamic Retrieval: Hybrid'ın Çekirdek Yapısı
Hybrid pattern'in temel yapısı: system + tools + KB cache, retrieved doc'lar dinamik. Bu derste kod yapısını ve cache hit hesabını öğreneceksin.
Şükrü Yusuf KAYA
13 dakikalık okuma
OrtaStatic Cache + Dynamic Retrieval
Hybrid pattern'in çekirdek yapısı çok basit:
[Cache: system + tools + general KB] ← cache'lenir, %95+ hit rate [RAG: sorguya özel doc'lar] ← cache'siz, retrieval her sorguda [User query] ← dinamik, cache'siz
Kod Yapısı (Anthropic)#
python
import anthropicfrom your_vector_db import retrieve_relevant_docs client = anthropic.Anthropic() def hybrid_query(user_query: str) -> str: # 1. Dinamik: RAG retrieve retrieved_docs = retrieve_relevant_docs(user_query, k=5) # vector DB rag_context = "\n\n---\n\n".join( f"[Doc {i+1}]\n{doc}" for i, doc in enumerate(retrieved_docs) ) # 2. Statik: cache'lenir system_blocks = [ { "type": "text", "text": GENERAL_KB, "cache_control": {"type": "ephemeral", "ttl": "1h"}, # Cache layer 1 }, { "type": "text", "text": SYSTEM_INSTRUCTIONS, "cache_control": {"type": "ephemeral", "ttl": "5m"}, # Cache layer 2 }, ] # 3. Tools cache'leniyor tools = [ *TOOLS[:-1], {**TOOLS[-1], "cache_control": {"type": "ephemeral", "ttl": "1h"}}, ] # 4. Dynamic RAG + query — cache YOK response = client.messages.create( model="claude-sonnet-4-6", max_tokens=512, system=system_blocks, tools=tools, messages=[ { "role": "user", "content": ( f"# İlgili belgeler\n\n{rag_context}\n\n" f"# Sorum\n\n{user_query}" ), } ], ) return response.content[0].textHybrid pattern — Anthropic implementasyonu
Telemetri Beklentisi#
İdeal hybrid'ta:
cache_creation: 0 (ilk istek hariç) cache_read: 65K (system + tools) input: 10K (RAG context + query) output: 500
Cache hit rate: . RAG context cache_read'i bozar ama büyük çoğunluk hâlâ cache'te.
65K / (65K + 10K) = %86Optimizasyon: Frequently-Retrieved Doc'ları Cache'le#
Eğer bazı doc'lar çok sık retrieve oluyorsa (örneğin %80 sorguda aynı 5 doc), onları statik cache'in parçası yap:
python
# Top 20 most-retrieved doc'u önceden ekleHOT_DOCS = top_k_retrieved_docs(threshold=0.5) # son 30 günde >%50 sorguda görüldüHOT_DOCS_TEXT = "\n\n".join(HOT_DOCS) system_blocks = [ {"type": "text", "text": GENERAL_KB, "cache_control": {"type": "ephemeral", "ttl": "1h"}}, {"type": "text", "text": HOT_DOCS_TEXT, "cache_control": {"type": "ephemeral", "ttl": "1h"}}, # ← extra cache {"type": "text", "text": SYSTEM_INSTRUCTIONS, "cache_control": {"type": "ephemeral", "ttl": "5m"}},] # Şimdi retrieve sadece long-tail içinretrieved = retrieve_relevant_docs(user_query, k=5, exclude=HOT_DOCS_IDS)Hot doc cache'i — RAG'ın common path'ini cache'le
Production Pattern
Bu pattern Perplexity, Notion AI gibi sistemlerde kullanılıyor. Long-tail için RAG, frequently-accessed için cache.
✓ Pekiştir#
Bir Sonraki Derste#
CAG (Cache-Augmented Generation) — RAG'ın yeni rakibi mi?
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Context Window Evrimi: 4K'dan 1M'a 5 Yılda Ne Oldu?
Öğrenmeye BaşlaBağlantılı Pillar Konular