Kegagalan Gelung Ejen yang Lazim
Gelung tanpa penghujung, mengulangi panggilan alat yang sama dan tidak pernah mencapai jawapan akhir.
Kegagalan Gelung Ejen yang Lazim ialah pelajaran Ejen AI percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Ejen AI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.
Gelung Ejen dan Mod Kegagalannya
Gelung ejen berjalan berulang kali: membuat penaakulan → memanggil alat → memerhati hasil → membuat penaakulan sekali lagi. Gelung ini berkuasa tetapi rapuh. Beberapa mod kegagalan yang diketahui umum boleh memerangkap ejen, membazirkan token dan tidak menghasilkan hasil yang berguna.
Memahami kegagalan ini ialah langkah pertama untuk melindungi diri daripadanya.
Kegagalan 1: Gelung Tanpa Kesudahan
Gelung tanpa kesudahan berlaku apabila ejen memanggil alat yang sama berulang kali dengan argumen yang sama tanpa menunjukkan kemajuan. Keadaan ini boleh berlaku apabila alat mengembalikan hasil yang tidak membantu dan ejen tidak dapat mencari jalan keluar melalui penaakulan.
# Example of an agent in an infinite loop:
# Step 1: reasoning='Need to search for Python docs'
# tool='search_web', args={'query': 'Python documentation'}
# Step 2: reasoning='Search result was unhelpful, try again'
# tool='search_web', args={'query': 'Python documentation'}
# Step 3: reasoning='Search result was unhelpful, try again'
# tool='search_web', args={'query': 'Python documentation'}
# ... repeats until max_iterations or token budget is exhausted
print('Symptom: same tool + same arguments appearing repeatedly in steps')
print('Fix: detect repeated (tool, args) pairs and break the loop')Kegagalan 2: Keadaan Tersekat
Keadaan tersekat ialah versi gelung tanpa kesudahan yang lebih sukar dikesan. Ejen terus membuat penaakulan dan memanggil alat yang berbeza tetapi tidak dapat mencapai jawapan akhir. Ejen berulang-alik antara pendekatan tanpa menunjukkan kemajuan.
# Example of a stuck agent:
# Step 1: tool='search_web', args={'query': 'topic A'}
# Step 2: tool='search_web', args={'query': 'topic B'} # different args
# Step 3: tool='search_web', args={'query': 'topic A'} # back to first
# Step 4: tool='read_document', args={'url': '...'}
# Step 5: tool='search_web', args={'query': 'topic A'}
# ... no FINAL_ANSWER ever produced
print('Symptom: agent takes many steps but never calls FINAL_ANSWER')
print('Fix: max_iterations guard + force final answer if limit is near')Kegagalan 3: Jawapan Akhir Tiada
Sesetengah ejen terus berulang tanpa menyedari bahawa tugas telah selesai. Ejen mengumpulkan maklumat tetapi tidak pernah berhenti untuk merumuskan dan mengembalikannya. Keadaan ini membazirkan token dan masa.
# An agent that never concludes:
def run_agent_bad(query: str, max_steps: int = 20) -> str:
for step in range(max_steps):
action = llm_decide_action(query, history)
if action['type'] == 'tool':
result = execute_tool(action)
history.append(result)
# BUG: No check for 'final_answer' type!
# The agent loops until max_steps, returning None
return None # never actually returns an answer
# Fix: explicitly check for final_answer signal
def run_agent_good(query: str, max_steps: int = 20) -> str:
for step in range(max_steps):
action = llm_decide_action(query, history)
if action['type'] == 'final_answer':
return action['answer'] # exit cleanly
execute_tool(action)
return 'Reached step limit without a conclusion.'Kegagalan 4: Ralat Penguraian Panggilan Alat
Apabila LLM menjana JSON yang tidak sah untuk panggilan fungsi, pelaksana alat gagal mengurainya. Ejen yang ditulis dengan kurang baik akan ranap atau melangkau langkah itu tanpa sebarang makluman. Ejen yang teguh memerangkap ralat penguraian dan menghantar semula ralat itu kepada LLM.
import json
def safe_parse_tool_call(arguments_str: str) -> dict:
try:
return json.loads(arguments_str)
except json.JSONDecodeError as e:
print(f'Failed to parse tool arguments: {e}')
print(f'Raw: {arguments_str}')
return None
def execute_step(tool_call) -> str:
args = safe_parse_tool_call(tool_call.function.arguments)
if args is None:
# Feed the error back to the LLM in the next step
return f'ERROR: Could not parse tool arguments. Raw: {tool_call.function.arguments}'
return run_tool(tool_call.function.name, args)Kegagalan 5: Alat Tidak Mengembalikan Data Berguna
Sesuatu alat mungkin berjaya secara teknikal (tiada pengecualian) tetapi mengembalikan data yang kosong atau tidak berguna. Ejen mesti mengendalikan keadaan ini dan tidak menganggap bahawa setiap panggilan alat akan mengembalikan maklumat yang boleh diambil tindakan.
def run_agent_with_empty_result_handling(query: str) -> str:
for step in range(20):
action = decide_next_action(query, history)
if action['type'] == 'final_answer':
return action['answer']
result = execute_tool(action['tool'], action['args'])
# Detect empty results and provide context
if not result or result.strip() == '':
observation = f'Tool {action["tool"]} returned no data. Try a different approach or different arguments.'
elif 'error' in result.lower():
observation = f'Tool error: {result}. Consider a different tool or query.'
else:
observation = result
history.append({'tool': action['tool'], 'result': observation})
return 'Could not complete task within step limit.'Kegagalan 6: Nama Alat yang Tidak Wujud
LLM kadangkala menjana nama alat yang tidak wujud. Sentiasa sahkan nama alat terhadap alat yang telah didaftarkan sebelum cuba memanggilnya. Apabila keadaan ini berlaku, kembalikan ralat yang bermaklumat kepada ejen.
REGISTERED_TOOLS = {
'search_web': search_web_function,
'get_weather': get_weather_function,
'calculate': calculate_function
}
def dispatch_tool(tool_name: str, args: dict) -> str:
if tool_name not in REGISTERED_TOOLS:
available = ', '.join(REGISTERED_TOOLS.keys())
return (
f'ERROR: Unknown tool "{tool_name}". '
f'Available tools: {available}. '
f'Please use one of the available tools.'
)
tool_fn = REGISTERED_TOOLS[tool_name]
return tool_fn(**args)Kegagalan 7: Kehabisan Belanjawan Token
Ejen yang berjalan lama dan menyimpan hasil alat penuh dalam konteksnya mungkin mencapai had tetingkap konteks LLM. Rumuskan atau pendekkan hasil alat yang besar sebelum menambahkannya pada sejarah.
def truncate_tool_result(result: str, max_chars: int = 2000) -> str:
if len(result) <= max_chars:
return result
truncated = result[:max_chars]
return f'{truncated}\n... [result truncated to {max_chars} chars]'
def add_observation_to_history(history: list, tool_name: str, result: str):
safe_result = truncate_tool_result(result, max_chars=2000)
history.append({
'role': 'tool',
'content': safe_result,
'tool_name': tool_name
})
print(f'[Step] Tool={tool_name}, Result length={len(result)} (stored {len(safe_result)})')
if __name__ == '__main__':
demo_history = []
add_observation_to_history(demo_history, 'search_web', 'x' * 3000)
Mengesan Mod Kegagalan Secara Terprogram
Tulis fungsi diagnostik yang menganalisis sejarah langkah ejen untuk mengenal pasti mod kegagalan yang berlaku. Fungsi ini amat berguna semasa penyahpepijatan.
def diagnose_agent_failure(steps: list) -> str:
if not steps:
return 'No steps recorded'
# Check for infinite loop: same (tool, args) repeated
seen = {}
for s in steps:
key = (s.get('tool'), str(s.get('args')))
seen[key] = seen.get(key, 0) + 1
repeated = {k: v for k, v in seen.items() if v > 2}
if repeated:
return f'INFINITE_LOOP: repeated actions: {repeated}'
# Check for missing final answer
has_answer = any(s.get('type') == 'final_answer' for s in steps)
if not has_answer and len(steps) >= 15:
return 'STUCK_STATE: many steps taken but no final answer'
# Check for parse errors
errors = [s for s in steps if 'ERROR' in str(s.get('result', ''))]
if len(errors) > 2:
return f'TOOL_ERROR: {len(errors)} tool errors in pipeline'
return 'OK'
if __name__ == '__main__':
demo_steps = [{'tool': 'search_web', 'args': {'q': 'weather'}} for _ in range(3)]
print('Diagnosis:', diagnose_agent_failure(demo_steps))
Melaksanakan Had Langkah Mudah
Setiap gelung ejen untuk pengeluaran mesti mempunyai had langkah yang tetap. Ini ialah mekanisme keselamatan yang paling penting — mekanisme ini menjamin bahawa gelung tamat tanpa mengira keputusan LLM.
def run_agent_with_budget(query: str, max_steps: int = 15) -> dict:
history = []
for step in range(1, max_steps + 1):
print(f'[Step {step}/{max_steps}]')
action = decide_next_action(query, history)
if action['type'] == 'final_answer':
return {
'status': 'success',
'answer': action['answer'],
'steps_taken': step
}
result = execute_tool(action['tool'], action['args'])
history.append({'step': step, 'tool': action['tool'], 'result': result})
if step == max_steps - 1:
# Warn the agent it must conclude
history.append({'role': 'system',
'content': 'You must provide a FINAL_ANSWER on the next step.'})
return {'status': 'timeout', 'answer': None, 'steps_taken': max_steps}Rujukan Pantas: Mod Kegagalan dan Pembetulan
Ringkasan enam mod kegagalan gelung ejen dan pembetulannya:
- Gelung tanpa kesudahan: kesan pasangan (alat, argumen) yang berulang; hentikan gelung dengan maklum balas ralat
- Keadaan tersekat: gunakan pengawal bilangan lelaran maksimum; paksa jawapan akhir apabila had hampir dicapai
- Jawapan akhir tiada: semak secara jelas isyarat jawapan akhir dalam tindakan
- Ralat penguraian: gunakan blok cuba/kecuali untuk penguraian JSON; hantar semula ralat kepada LLM
- Hasil alat kosong: kesan rentetan kosong; berikan maklum balas "tiada data"
- Nama alat yang tidak wujud: sahkan terhadap senarai alat yang didaftarkan; kembalikan mesej ralat
Semakan Pengetahuan: Kegagalan Gelung Ejen
Uji pemahaman anda tentang mod kegagalan gelung ejen yang biasa berlaku.
Imbas Kembali: Kegagalan Gelung Ejen yang Biasa
Anda kini boleh mengenal pasti dan melindungi ejen daripada mod kegagalan gelung ejen yang utama:
- Gelung tanpa kesudahan, keadaan tersekat dan jawapan akhir tiada semuanya memerlukan pengawal bilangan lelaran maksimum
- Ralat penguraian panggilan alat memerlukan blok cuba/kecuali di sekeliling penguraian JSON
- Hasil alat yang kosong memerlukan pengesanan dan maklum balas yang bermaklumat kepada LLM
- Nama alat yang tidak wujud memerlukan pengesahan terhadap senarai alat yang didaftarkan
- Kehabisan belanjawan token memerlukan hasil dipendekkan
Gelung ejen yang teguh menjangka semua mod kegagalan ini dan mengendalikannya dengan baik.
Pelajari Ejen AI dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 60
- Pelajaran
- 239
Soalan Lazim
Adakah pelajaran “Kegagalan Gelung Ejen yang Lazim” percuma?
Ya — teks penuh “Kegagalan Gelung Ejen yang Lazim” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Ejen AI, tingkat taraf kepada CoddyKit PRO. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Kegagalan Gelung Ejen yang Lazim”?
Gelung tanpa penghujung, mengulangi panggilan alat yang sama dan tidak pernah mencapai jawapan akhir. Anda berlatih Ejen AI menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Ejen AI?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Ejen AI di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Kegagalan Gelung Ejen yang Lazim” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Ejen AI ini?
Ya. Setiap pelajaran Ejen AI menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Kegagalan Gelung Ejen yang Lazim
- Pengelogan Jejak untuk Langkah Ejen
- Mengesan dan Memutuskan Gelung Tanpa Penghujung
- Teknik Penyahpepijatan Langkah demi Langkah