Ajan Hatalarını ve Döngülerini Yönetme
Ajanların sonsuza dek döngüye girmesini veya bozuk araçları tekrar tekrar çağırmasını önlemek için zaman aşımı sınırları, en fazla yineleme limitleri ve hata kurtarma istemleri ekleyin.
Ajan Hatalarını ve Döngülerini Yönetme, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
Ajanlar Neden Hata Yapar ve Döngüye Girer
Ajanlar çeşitli nedenlerle başarısızlık döngülerine takılabilir: bozuk bir araç, ajanın nasıl çıkacağını bilemediği bir hata döndürür; model, biçimi bozuk eylem söz dizimini tekrar tekrar üretir; mevcut araçlar verilen bir görev için yetersizdir veya ajan farklı bir sonuç umuduyla aynı aracı küçük değişikliklerle çağırmayı sürdürür. Güvenlik önlemleri olmadan bu durum API bütçesini tüketir ve hiçbir sonuca ulaşmaz.
En Fazla Yineleme Sınırları
En basit koruma, Thought/Action/Observation döngülerinin sayısına kesin bir üst sınır koymaktır. LangChain'in AgentExecutor sınıfı bir max_iterations parametresi kabul eder. Sınıra ulaşıldığında yürütücü döngüyü durdurur ve ajanın görevi tamamlayamadığını belirten bir ileti döndürür.
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
max_iterations=10, # Hard stop after 10 steps
max_execution_time=30.0, # Also stop after 30 wall-clock seconds
early_stopping_method='generate', # Ask the model for a partial answer at the limit
verbose=True
)Erken Durdurma: Son Yanıtı Zorlama
Ajan yineleme sınırına ulaştığında early_stopping_method='generate', modele son bir kez şu istemi gönderir: 'Adım sınırınıza ulaştınız. Şimdiye kadar bildiklerinize dayanarak en iyi son yanıtınızı verin.' Bu, boş bir yanıt döndürmekten veya uygulamanın çökmesine neden olmaktan daha iyidir; çünkü kullanıcıya yararlı bir şey sunar.
# The 'generate' early_stopping_method adds this system instruction
# when max_iterations is reached:
#
# 'You have {N} steps remaining but the task is not complete.
# Give your best final answer based on the information gathered so far.'
#
# Contrast with 'force' which abruptly terminates without generating an answer.
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
max_iterations=7,
early_stopping_method='generate'
)Ayrıştırma Hatalarını Kontrollü Biçimde Ele Alma
Model, Thought/Action biçimiyle eşleşmeyen bir çıktı ürettiğinde — eylem anahtar sözcüğü eksik olduğunda, yanlış araç adı kullanıldığında veya serbest metin çıktığında — ajan bir OutputParserException oluşturur. Modelin kendisini düzeltebilmesi için hatayı bir gözlem olarak geri aktarmak üzere handle_parsing_errors=True ayarını yapın.
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
handle_parsing_errors=True,
# Custom error message fed back to the model:
# handle_parsing_errors='Please format your response as Thought/Action/Action Input.'
)
# When a parse error occurs, the executor automatically adds:
# Observation: Could not parse LLM output. Please follow the format:
# Thought: ...
# Action: tool_name
# Action Input: ...Tekrarlanan Döngüleri Algılama ve Kırma
Yaygın bir döngü kalıbı şudur: ajan search('same query') çağrısını art arda üç kez yapar ve her seferinde aynı işe yaramaz sonucu alır. Son kullanılan (araç, girdi) çiftlerini izleyerek döngü algılama uygulayın. Aynı birleşim ikiden fazla tekrarlanırsa farklı bir yaklaşım öneren bir gözlem ekleyin.
from collections import Counter
class LoopDetector:
def __init__(self, max_repeats: int = 2):
self.max_repeats = max_repeats
self.call_counts = Counter()
def check(self, tool_name: str, tool_input: str) -> bool:
key = f'{tool_name}:{tool_input}'
self.call_counts[key] += 1
if self.call_counts[key] > self.max_repeats:
return True # Loop detected
return False
def get_warning(self) -> str:
return ('You have called this tool with the same input multiple times. '
'Try a different approach, different search terms, or a different tool.')Araç Düzeyinde Hata Ele Alma
Sağlam ajanlar, sağlam araçlar gerektirir. Her araç kendi özel durumlarını yakalamalı ve Python özel durumları oluşturmak yerine yapılandırılmış hata iletileri döndürmelidir. Ajanın yeniden denemesi, yaklaşımını değiştirmesi veya durumu üst makama aktarması gerekip gerekmediğini anlayabilmesi için hata türünü ve bir öneriyi ekleyin.
from langchain_core.tools import tool
import requests
@tool
def get_company_data(company_name: str) -> str:
'''Retrieve company information from the business database.
Input: company name as a string.
'''
try:
resp = requests.get(
f'https://api.example.com/companies/{company_name}',
timeout=5
)
if resp.status_code == 404:
return f'No company found with name "{company_name}". Try the exact legal name or ticker symbol.'
if resp.status_code == 429:
return 'Rate limit exceeded. Wait 60 seconds before trying again.'
resp.raise_for_status()
return resp.json().get('summary', 'No summary available.')
except requests.Timeout:
return 'The database is not responding. Try searching the web instead.'API Hatalarında Üstel Geri Çekilme
Araçlar harici API'leri çağırdığında geçici hatalar yaygındır. Araç işlevinin içine üstel geri çekilme ile yeniden deneme mantığı ekleyin; denemeler arasında giderek artan bekleme süreleriyle en fazla 3 kez yeniden deneyin. Bu yöntem, ajanın yeniden denemeler hakkında bilgi sahibi olmasını gerektirmeden hız sınırlarını ve kısa süreli kesintileri şeffaf biçimde ele alır.
import time
import requests
from langchain_core.tools import tool
@tool
def reliable_search(query: str) -> str:
'''Search with automatic retry on failure. Input: search query string.'''
max_retries = 3
for attempt in range(max_retries):
try:
resp = requests.get(
'https://api.duckduckgo.com/',
params={'q': query, 'format': 'json'},
timeout=10
)
resp.raise_for_status()
data = resp.json()
return data.get('AbstractText', 'No results found.')
except requests.RequestException as e:
if attempt < max_retries - 1:
wait = 2 ** attempt # 1s, 2s, 4s
time.sleep(wait)
else:
return f'Search failed after {max_retries} attempts: {str(e)}'Ajan Düzeyinde Zaman Aşımı Bütçeleri
Bireysel araç yeniden denemeleri yararlıdır, ancak tüm ajan çalıştırması için toplam gerçek zamanlı zaman aşımına da ihtiyacınız vardır. Görev, SLA'nızın izin verdiğinden daha uzun sürerse (örneğin 30 saniye), döngüyü durdurun ve kontrollü bir azaltılmış hizmet yanıtı döndürün. LangChain'in max_execution_time parametresi bunu yürütücü düzeyinde ele alır.
import asyncio
async def run_with_timeout(user_input: str, timeout_seconds: float = 30.0) -> str:
try:
result = await asyncio.wait_for(
agent_executor.ainvoke({'input': user_input}),
timeout=timeout_seconds
)
return result['output']
except asyncio.TimeoutError:
return ('I am taking longer than expected to answer this question. '
'Please try again with a simpler question, or check back later.')Analiz İçin Hataları Günlüğe Kaydetme
Her ajan hatası bir veridir. Kullanıcı girdisini, tüm ara adımları, hata nedenini ve kullanılan yineleme sayısını içeren tam izi bir veritabanına veya gözlemlenebilirlik platformuna kaydedin. Hata kalıplarını analiz etmek; hangi araçların güvenilmez olduğunu, ajanın hangi soru türlerini ele alamadığını ve hangi döngülerin en sık gerçekleştiğini ortaya çıkarır.
import logging
import json
logger = logging.getLogger('agent')
def run_and_log(user_input: str) -> str:
try:
result = agent_executor.invoke(
{'input': user_input},
return_intermediate_steps=True
)
if not result.get('output'):
logger.warning('Agent returned empty output', extra={
'input': user_input,
'steps': len(result.get('intermediate_steps', []))
})
return result['output']
except Exception as e:
logger.error('Agent failed with exception', extra={
'input': user_input,
'error': str(e),
'error_type': type(e).__name__
})
return 'I encountered an error. Please try rephrasing your question.'İsteme Kurtarma İpuçları Ekleme
Bir hata kalıbı algıladığınızda kurtarma talimatlarını ajanın bir sonraki istemine dinamik olarak ekleyebilirsiniz. Örneğin arama aracı başarısız oluyorsa şu türde bir ipucu ekleyin: 'Web arama aracı şu anda güvenilir değil. Bu sorgu için bilgi tabanı aracını tercih edin.' Bu yöntem, sabit kodlanmış geri dönüş mantığı olmadan ajanı çalışan bir çözüme yönlendirir.
Hata Senaryolarını Sınama
Hata senaryoları için açık bir test paketi oluşturun. Şu durumlarda ne olduğunu sınayın: tüm araçların hata döndürmesi, modelin max_iterations sınırına ulaşması, girdinin yanıtlanabilir bir soru içermemesi ve modelin var olmayan bir aracı çağırması. Durum ne kadar karşıt olursa olsun, ajanınız her zaman mantıklı bir ileti döndürmeli ve uygulamanın çökmesine asla neden olmamalıdır.
Hızlı Kontrol
Ajan hatalarını ele alma ve döngüleri önleme konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: max_iterations ve max_execution_time, ajanın çalışma süresine kesin sınırlar koyar, handle_parsing_errors, biçim hatalarını modelin kendisini düzeltmesi için modele geri aktarır ve araçlar özel durumları yakalayıp oluşturmak yerine açıklayıcı hata dizeleri döndürmelidir. Sırada, OpenAI'nin yapılandırılmış araç tümleştirmesi için sunduğu yerel işlev çağırma özelliğini inceleyeceğiz.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Ajan Hatalarını ve Döngülerini Yönetme” dersi ücretsiz mi?
Evet — “Ajan Hatalarını ve Döngülerini Yönetme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“Ajan Hatalarını ve Döngülerini Yönetme” dersinde ne öğreneceğim?
Ajanların sonsuza dek döngüye girmesini veya bozuk araçları tekrar tekrar çağırmasını önlemek için zaman aşımı sınırları, en fazla yineleme limitleri ve hata kurtarma istemleri ekleyin. AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Ajan Hatalarını ve Döngülerini Yönetme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- ReAct Çerçevesi: Düşün, Eyleme Geç, Gözlemle
- Agent'ınız İçin Araçlar Tanımlama
- LangChain ile ReAct Agent Oluşturma
- Ajan Hatalarını ve Döngülerini Yönetme