React Flow mini map
🌍 Gerçek Dünyaileri18 dk

Agent'lar ve Tool Use

ReAct döngüsü ile chatbot'tan agent'a

🎯

30 saniyede özet · Ne öğreneceksin

  • ReAct döngüsünün 4 fazını (Thought, Action, Observation, Final) tanımak
  • Function calling şeması yazmak
  • Sonsuz döngü ve hata durumlarına önlem almak
18 dk okuma·ileri·🧪 interaktif sandbox

Bir chatbot, kullanıcının sorusuna cevap ÜRETİR. Bir agent, kullanıcının hedefine ULAŞMAK İÇİN ADIM ATAR. Aradaki fark fonksiyon farkıdır: bir kütüphaneci kitap önerir; bir araştırmacı asistan kitabı bulur, fişler, gerekirse alıntı yapar, raporu yazar. Yao ve ekibinin 2022 yılındaki ReAct makalesi, LLM'lerin nasıl araç kullanan sistemlere dönüşebileceğini gösterdi — "düşün → araç çağır → gözlemle → tekrar düşün" döngüsüyle.

👨‍🍳Şefin Sous-Chef'i

Bir baş şef yemeği planlar, malzemeyi bulmaz. Sous-chef'i ne bulmasını söyler: "buzdolabından bal getir", "limonu kes". Sous-chef yapar, sonuç bildirir; şef sonraki adıma karar verir. LLM = baş şef, tool'lar = sous-chef'ler. Şef yalnızken sadece reçete söyleyebilir; sous-chef'leri varsa yemeği gerçekten yapar.

ReAct (Reasoning + Acting), bir agent'ın temel kontrol akışıdır:

LLM'e bir tool'u nasıl kullanacağını söylemek için JSON şeması verirsin. Şema şunları içer…

Bir agent'a verdiğin tool seti hangi problemleri çözebileceğini belirler. Genel reçeteler:

Agent'lar takılabilir veya döngüye girebilir. Yaygın senaryolar:

agent_cost = Σ (in_tokens_step_i × $/M_in + out_tokens_step_i × $/M_out)

Agent maliyeti, döngüdeki HER step'in inference maliyetinin toplamıdır. Sonsuz döngüye giren bir agent gerçekten sonsuz pahalı olur. Production agent'larda max-step ve max-cost limitleri olmazsa olmazdır. Tipik 5-step agent: ~$0.05-0.20 / istek (Sonnet ile). Aynı görev tek chatbot çağrısı: ~$0.01-0.03. Yani agent = chatbot × 3-5x maliyet, ama gerçek görev yapabilme yeteneği.

Formül → Kod Karşılığı

step_istep_indexdöngüdeki i'inci adım
in_tokensinput_tokenso step'te yollanan input
out_tokensoutput_tokenso step'te dönen output
Σsum(steps)tüm step'ler üzerinden toplam

Chatbot

  • ·Tek LLM çağrısı — cevap üretir
  • ·Hız: ~1-3 saniye
  • ·Maliyet: $0.01-0.03 / istek
  • ·Hata yapma riski: model bilgisiyle sınırlı
  • ·Use case: SSS, müşteri sorusu, içerik üretimi

Agent

  • ·Çoklu LLM + tool çağrısı — hedef gerçekleştirir
  • ·Hız: ~5-30 saniye (step sayısı × LLM latency)
  • ·Maliyet: $0.05-0.50 / istek
  • ·Hata yapma riski: tool fail + reasoning loop + halüsinasyon
  • ·Use case: araştırma, kod, veri analizi, multi-step iş

Minimal ReAct agent — Anthropic Tools API ile

Python
1from anthropic import Anthropic
2
3# ÖNEMLİ: LearNN bu kodu çalıştırmaz. Kendi makinende API key'inle çalıştır.
4client = Anthropic()
5
6# Tool şemaları
7tools = [
8 {
9 "name": "calculator",
10 "description": "Aritmetik ifadeyi değerlendirir, örn. '17 * 23 + 5'",
11 "input_schema": {
12 "type": "object",
13 "properties": {"expression": {"type": "string"}},
14 "required": ["expression"],
15 },
16 },
17 {
18 "name": "web_search",
19 "description": "Web'de güncel bilgi arar",
20 "input_schema": {
21 "type": "object",
22 "properties": {"query": {"type": "string"}},
23 "required": ["query"],
24 },
25 },
26]
27
28# Tool implementations (mock — gerçekte gerçek API'lerle değiştirilir)
29def execute_tool(name: str, args: dict) -> str:
30 if name == "calculator":
31 return str(eval(args["expression"])) # NOT: production'da eval güvensiz!
32 if name == "web_search":
33 return f"[mock] {args['query']} hakkında 3 sonuç bulundu..."
34 raise ValueError(f"Unknown tool: {name}")
35
36def run_agent(user_query: str, max_steps: int = 10):
37 messages = [{"role": "user", "content": user_query}]
38
39 for step in range(max_steps):
40 response = client.messages.create(
41 model="claude-sonnet-4-6-20260101",
42 max_tokens=1024,
43 tools=tools,
44 messages=messages,
45 )
46
47 # Final cevap mı geldi?
48 if response.stop_reason == "end_turn":
49 return response.content[0].text
50
51 # Tool kullanıyor — execute et, observation'ı geri yolla
52 messages.append({"role": "assistant", "content": response.content})
53
54 tool_uses = [b for b in response.content if b.type == "tool_use"]
55 tool_results = []
56 for tu in tool_uses:
57 result = execute_tool(tu.name, tu.input)
58 tool_results.append({
59 "type": "tool_result",
60 "tool_use_id": tu.id,
61 "content": result,
62 })
63 messages.append({"role": "user", "content": tool_results})
64
65 return "Max iterations reached."
66
67# Çağrı örneği
68print(run_agent("17 × 23 + 5 ne eder ve sonuca 100 ekle?"))
69

✦ Quiz

Bir agent sonsuz döngüye giriyor — aynı web_search'ü farklı kelimelerle defalarca çağırıyor. En etkili önlem hangisidir?

⚠️Production'a alınmadan önce tool'ları sandbox'lamak şart. Özellikle code_interpreter ve shell tool'ları, model halüsinasyon yaptığında veya prompt injection saldırısı altında sistemine zarar verebilir. Tool'u container'da (Docker, Firecracker), read-only file system ile, network isolation ile çalıştır. Anthropic Claude Code agent SDK'sı bu izolasyonu sağlar; kendi sıfırdan yazıyorsan sandboxing kütüphanelerini araştır.

Bu konunun pratiği

🧪

Bu konuyu interaktif dene

Az önce okuduğun kavramın parametrelerini değiştir, etkisini canlı gör

Aç →