İçeriğe geç

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
Orta

Static 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 anthropic
from 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].text
Hybrid 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:
65K / (65K + 10K) = %86
. RAG context cache_read'i bozar ama büyük çoğunluk hâlâ cache'te.

Optimizasyon: 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 ekle
HOT_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çin
retrieved = 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

Bağlantılı Pillar Konular

Bu yazının bağlandığı pillar konular