Tool Definitions Caching: 50 Tool'lu Agent'ta Strateji
Modern agent'larda 20-50 tool var. Her tool definition ortalama 200-500 token. Toplam 10-25K token sadece tool listesi. Bu derste tool cache stratejilerini, dinamik tool seçimini ve sıralama trick'lerini öğreneceksin.
Şükrü Yusuf KAYA
14 min read
AdvancedTool Definitions: Cache'in Gizli Kazancı
Bir LLM agent'ı 50 tool'a sahip olsun (CRM, takvim, mail, dosya, kod, web, vb.). Her tool def 300 token = 15K token sadece tool listesi. Bu, çoğu uygulamada en büyük cache adayı.
Tool Cache'in Önemi#
Production agent'larda yapı:
[System: 2K] [Tools: 15K] ← burası genelde unutuluyor [KB: 30K] [History: 5K] [Query: 100]
Tools'u cache'lememek %25-30 cache miss demek. Üstüne bir de "exact prefix" gereği — bir tool eklersen tüm tools yeniden write.
Strateji 1: Sabit Tool Listesi + cache_control Son Tool'a#
En basit yöntem (Modül 3'te gördük):
python
TOOLS = [ {"name": "tool_1", "description": "...", "input_schema": {...}}, {"name": "tool_2", "description": "...", "input_schema": {...}}, # ... { "name": "tool_N", "description": "...", "input_schema": {...}, "cache_control": {"type": "ephemeral", "ttl": "1h"}, # ← son },]# Tüm tools cache'lenirSabit liste + tek breakpoint
Avantaj: Basit, çalışır.
Dezavantaj: Tools'u dinamik seçemiyorsun (örn. user role'üne göre).
Strateji 2: Tool Sırasını Stabilize Etme#
Tools listesini Python set'ten oluşturursan sıra değişebilir → cache miss:
python
# ❌ KÖTÜ — sıralama belirsiztools = list(tool_registry.values()) # dict ordering Python'da insertion order ama dependency olabilir # ✅ İYİ — deterministik sıratools = sorted(tool_registry.values(), key=lambda t: t["name"])Tool listesini deterministik sırala
Strateji 3: Tool Set'leri (Hierarchical Cache)#
Eğer farklı user'lara farklı tools gösterecekse, set'lere böl:
python
# Tool set'lerini sabit tutBASE_TOOLS = [...] # herkes için (10 tool)ADMIN_TOOLS = [...] # sadece admin (5 tool)DEV_TOOLS = [...] # sadece geliştirici (8 tool) def get_tools_for(user): tools = list(BASE_TOOLS) # kopyala if user.is_admin: tools += ADMIN_TOOLS if user.is_dev: tools += DEV_TOOLS # Cache_control'ü son tool'a koy tools[-1] = {**tools[-1], "cache_control": {"type": "ephemeral"}} return tools # 4 user kategori = 4 ayrı cache pool (kullanıcı sayısı milyon olsa bile)Tool set'lerini stabilize et
Hierarchical Pooling
Anahtar fikir: user-spesifik tool listesi olmaması, user kategorisine göre fixed set'ler olması. 1M user → 1M cache pool yok; 4 user category → 4 cache pool.
Strateji 4: Tool Description Stabilizasyonu#
Bazen tool description'ları dinamik üretiliyor (örn. internationalization):
python
# ❌ KÖTÜ — locale ile tool description değişirdef get_search_tool(locale): if locale == "tr": return {"name": "search", "description": "Ürün ara"} elif locale == "en": return {"name": "search", "description": "Search products"} # ✅ İYİ — tek dilde, locale user message'adef get_search_tool(): return {"name": "search", "description": "Search products in catalog"} # Kullanıcı locale'i her zaman user mesajında belirtuser_msg = f"[Locale: {user.locale}]\n{query}"# Asistan bu locale'i okur, tools'ta değilTool description'ları monolingual tut
Strateji 5: Tool Schema'larını JSON Stabilize Etme#
Tool input_schema'sı bazen JSON üretilirken farklı sıralanır:
python
import json def stable_tool_schema(schema): """JSON schema'sını deterministik string'leştir.""" return json.loads(json.dumps(schema, sort_keys=True)) TOOLS = [ { "name": "search", "description": "...", "input_schema": stable_tool_schema({ "type": "object", "properties": {"query": {"type": "string"}, "limit": {"type": "integer"}}, "required": ["query"], }), },]JSON schema stabilization
Anti-Pattern: Tool'u Her Çağrıda Filtrelemek#
python
# ❌ KÖTÜ — query'ye göre relevant tools seçdef get_relevant_tools(query): # Embedding similarity ile en alakalı 10 tool'u seç relevant = vector_db.search(query, k=10) return relevant# Her query farklı tool subset'i → cache miss daimi # ✅ İYİ — tüm tool'ları her zaman gönderTOOLS = [...] # 50 tool# 15K token cache'lenmiş; LLM zaten alakasız tool'ları çağırmazTool subsetting → cache killer
Modern LLM'ler 50-100 tool'u sorunsuz değerlendirebiliyor. Alakasız tool'ları çağırmıyorlar. Subsetting'in eski mantığı (context limit'e sığsın diye) artık geçerli değil.
✓ Pekiştir#
Bir Sonraki Derste#
Modül 4 bitirme sınavı. Bilgini test et, geçince Modül 5'e (Context Engineering Prensipleri) ilerle.
Frequently Asked Questions
Genelde hayır. Modern modeller (Claude 3.5+, GPT-4o) 100+ tool'la çalışabiliyor. Bazı edge case'lerde 'tool confusion' olur (benzer 2 tool arasında karar). Önerim: tool description'larını net ayır ve test et.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
Related Content
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Start Learning1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Start Learning1. Temeller — Context Penceresi Ekonomisi
Context Window Evrimi: 4K'dan 1M'a 5 Yılda Ne Oldu?
Start LearningConnected pillar topics