İçeriğe geç

Multi-Step Agent Tasarımı: Loop, Termination, Guardrails

Agent loop'u nasıl yazarsın? Adım sayısı, budget, error handling, infinite loop önleme. Production patterns.

Şükrü Yusuf KAYA
12 dakikalık okuma
İleri

Multi-Step Agent: Production Pattern

python
# Üretim için minimum agent skeleton
import os, json, time
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv()
 
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
 
# Tools (gerçek implementasyonu)
def search(query: str) -> str:
return f"[Mock search] Top 3 results for '{query}'..."
 
def calculator(expr: str) -> float:
return eval(expr) # PRODUCTION'DA: ast.literal_eval veya sympy
 
TOOLS = [
{"name": "search", "description": "Web araması", "input_schema": {
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"]
}},
{"name": "calculator", "description": "Matematik hesabı", "input_schema": {
"type": "object",
"properties": {"expr": {"type": "string"}},
"required": ["expr"]
}},
]
 
def run_tool(name: str, args: dict) -> str:
if name == "search": return search(**args)
if name == "calculator": return str(calculator(**args))
return f"Unknown tool: {name}"
 
def agent(goal: str, max_steps: int = 10, max_tokens_total: int = 50000):
messages = [{"role": "user", "content": goal}]
total_tokens = 0
start = time.time()
 
for step in range(max_steps):
# Termination check
if total_tokens > max_tokens_total:
return "🚨 Token bütçesi aşıldı"
if time.time() - start > 60:
return "🚨 Timeout"
 
r = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2000,
tools=TOOLS,
messages=messages,
)
total_tokens += r.usage.input_tokens + r.usage.output_tokens
 
if r.stop_reason == "end_turn":
return r.content[0].text
 
# Tool çağrısı varsa
messages.append({"role": "assistant", "content": r.content})
tool_results = []
for block in r.content:
if block.type == "tool_use":
print(f"[step {step+1}] {block.name}({block.input})")
result = run_tool(block.name, block.input)
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result
})
messages.append({"role": "user", "content": tool_results})
 
return "🚨 Max steps aşıldı"
 
print(agent("100 USD kaç TL ediyor? Sonra bu rakamı 2 ile çarp."))
 
Production agent skeleton — termination guards dahil.

5 Guardrail#

Maksimum N adım. Aşılırsa abort.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler