Kod Çalıştırma Döngüsü
Ajanın kod oluşturduğu, yalıtılmış çalıştırıcının bunu çalıştırdığı, stdout ve stderr'nin yakalanıp gözlem olarak geri gönderildiği ve ajanın hataları düzelttiği yaz-çalıştır-gözlemle döngüsünü tasarlayın.
Kod Çalıştırma Döngüsü, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 1. 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.
Kod Ajanları: Kod Yazma ve Çalıştırma
Kod yürütme ajanı, kod yazarak, bu kodu çalıştırıp çıktıyı gözlemleyerek ve görev tamamlanana kadar yineleyerek sorunları çözen özel bir yapay zekâ ajanı türüdür. Yalnızca önceden tanımlanmış araçları kullanan ajanların aksine, kod ajanları anında yeni hesaplama araçları oluşturur. Bu, onları olağanüstü esnek kılar: Programlanabilen her görev, bir kod ajanı tarafından denenebilir.
Yazma-Yürütme-Gözlemleme Döngüsü
Kod yürütme ajanının temelinde üç adımlı bir döngü bulunur: Write — LLM, görevin mevcut adımını çözmek için Python kodu üretir. Execute — kod, yalıtılmış bir ortamda çalıştırılır ve standart çıktı ile standart hata yakalanır. Observe — yürütme çıktısı yeni bir gözlem olarak LLM'ye geri gönderilir ve LLM bu gözlemi bir sonraki adımda ne yazacağına karar vermek için kullanır. Bu döngü, görev tamamlanana veya yineleme sınırına ulaşılana kadar devam eder.
def code_execution_loop(task: str, max_iterations=10):
messages = [
{'role': 'system', 'content': 'You are a Python coding agent. Write code to solve tasks step by step.'},
{'role': 'user', 'content': task}
]
for i in range(max_iterations):
# WRITE: LLM generates code
response = llm.complete(messages)
code = extract_code_block(response)
if not code:
return response # LLM gave a final answer without code
# EXECUTE: run the code
output, error = execute_safely(code)
# OBSERVE: feed output back
observation = f'Output:\n{output}' if not error else f'Error:\n{error}'
messages.append({'role': 'assistant', 'content': response})
messages.append({'role': 'user', 'content': observation})
return 'Max iterations reached'LLM Çıktısından Kod Bloklarını Çıkarma
LLM'ler genellikle ürettikleri kodu Markdown çitli kod bloklarının içine yerleştirir: ```python ... ```. Yürütme döngünüz, kodu çalıştırmadan önce bu bloklardan kodu güvenilir biçimde çıkarmalıdır. Çitli blokları bulmak ve iç içe ters tırnaklar, tek yanıtta birden çok kod bloğu veya dil belirteci olmayan kod gibi özel durumları ele almak için bir düzenli ifade ya da basit bir ayrıştırıcı kullanın.
import re
def extract_code_block(response: str) -> str | None:
# Match ```python ... ``` or ``` ... ```
pattern = r'```(?:python)?\n(.*?)```'
matches = re.findall(pattern, response, re.DOTALL)
if not matches:
return None
# Return the LAST code block (often the most complete version)
return matches[-1].strip()
# Test
sample_response = '''I will calculate the sum:\n\n```python\nnumbers = [1, 2, 3, 4, 5]\nprint(sum(numbers))\n```'''
code = extract_code_block(sample_response)
print(repr(code)) # 'numbers = [1, 2, 3, 4, 5]\nprint(sum(numbers))'stdout ve stderr'yi Yakalama
Ajan tarafından üretilen kodu çalıştırırken, LLM'ye geri göndermek üzere hem stdout'u (normal çıktı) hem de stderr'yi (hata iletileri ve geri izlemeler) yakalamanız gerekir. Python'ın subprocess modülünü kullanmak en basit yaklaşımdır: kodu ayrı bir işlem olarak çalıştırın ve her iki akışı da yakalayın. Takılıp kalan kodun ajanı engellemesini önlemek için bir zaman aşımı belirleyin.
import subprocess
import tempfile
import os
def execute_code(code: str, timeout_seconds=30) -> tuple[str, str]:
# Write code to a temp file
with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
f.write(code)
tmp_path = f.name
try:
result = subprocess.run(
['python', tmp_path],
capture_output=True,
text=True,
timeout=timeout_seconds
)
stdout = result.stdout[:5000] # cap output length
stderr = result.stderr[:2000] # cap error length
return stdout, stderr
except subprocess.TimeoutExpired:
return '', f'TimeoutError: code exceeded {timeout_seconds}s limit'
finally:
os.unlink(tmp_path) # always clean up temp fileHataları Akıllıca Ele Alma
Kod bir hata ürettiğinde, hata iletisi (geri izleme, özel durum türü, satır numarası) gözlem olarak LLM'ye geri gönderilir. Ardından LLM hatayı analiz eder ve düzeltilmiş kodu yazar. LLM'nin hatayı etkili biçimde ayıklamasına yardımcı olmak için gözleme tam hata metnini ve hataya neden olan kod satırını ekleyin; yeniden denemeden önce hatayı düzeltmesini LLM'den açıkça isteyin.
def format_error_observation(code: str, error: str) -> str:
lines = code.split('\n')
# Extract line number from traceback if available
line_match = re.search(r'line (\d+)', error)
error_context = ''
if line_match:
line_num = int(line_match.group(1))
if 1 <= line_num <= len(lines):
error_context = f'\nFailing line: {lines[line_num - 1].strip()}'
return f'''Execution failed with error:{error_context}\n\n{error}\n\nPlease analyze the error and write corrected code.'''
# Usage in loop
output, err = execute_code(code)
if err:
observation = format_error_observation(code, err)
else:
observation = f'Output:\n{output}\n\nContinue with the next step or provide the final answer.'Görev Tamamlanmasını Algılama
Kod yürütme döngüsü ne zaman duracağını bilmelidir. Yaygın tamamlanma işaretleri şunlardır: LLM'nin kod bloğu içermeyen, yalnızca doğal dilden oluşan bir yanıt döndürmesi; LLM'nin # TASK_COMPLETE gibi özel bir işaret yazması; kodun ajandan oluşturması istenen bir çıktı dosyası üretmesi veya bir doğrulama işlevinin çıktının başarı ölçütlerini karşıladığını onaylaması. Her zaman yedek önlem olarak bir yineleme sınırı uygulayın.
COMPLETION_MARKERS = ['TASK COMPLETE', 'FINAL ANSWER:', 'DONE:']
def is_task_complete(response: str, code: str | None, output: str, success_fn=None) -> bool:
# Check for explicit completion markers
for marker in COMPLETION_MARKERS:
if marker in response.upper():
return True
# No code generated - LLM is done
if code is None:
return True
# Custom success function (e.g., check output file exists)
if success_fn and success_fn(output):
return True
return False
# Example success function
def report_was_generated(output: str) -> bool:
import os
return os.path.exists('analysis_report.pdf')Yinelemeler Arasında Veri Aktarma
Kod yürütme döngülerindeki zorluklardan biri, yinelemeler arasındaki durumun korunmasıdır. Her kod bloğu yeni bir Python işleminde çalıştığından, bir yinelemede tanımlanan değişkenler bir sonrakinde kullanılamaz. Çözümler arasında ara verileri dosyalara yazmak, kodu exec() aracılığıyla kalıcı bir işleme aktarmak veya LLM'ye gerekli değişkenleri her kod bloğunun başında yeniden tanımlamasını açıkça bildirmek bulunur.
# Strategy 1: Save to files between iterations
# Iteration 1: LLM writes
'''
import pandas as pd
df = pd.read_csv('data.csv')
df_cleaned = df.dropna()
df_cleaned.to_parquet('cleaned.parquet') # save for next iteration
print('Cleaned rows:', len(df_cleaned))
'''
# Iteration 2: LLM reads previous output
'''
import pandas as pd
df = pd.read_parquet('cleaned.parquet') # reload from file
result = df.groupby('category').sum()
result.to_csv('result.csv')
print(result.head())
'''Sistem İstemini Yapılandırma
Kod yürütme ajanının sistem istemi, LLM'ye döngüyü etkili biçimde nasıl kullanacağını öğretmelidir. Eklenmesi gereken temel unsurlar şunlardır: çalıştırılabilir Python kod bloklarının nasıl yazılacağı, devam etmeden önce ara çıktıların nasıl denetleneceği, görev tamamlanmasının nasıl bildirileceği, yalıtılmış ortamda hangi kitaplıkların kullanılabildiği ve ajanın hangi dosya yollarından okuma ve bu yollara yazma iznine sahip olduğu.
CODE_AGENT_SYSTEM_PROMPT = '''
You are a Python code execution agent. Solve tasks by writing and running code.
Rules:
1. Write ALL code inside ```python ... ``` blocks.
2. Write small, testable code blocks - do not try to do everything in one block.
3. When you see execution output, analyze it and decide whether to continue or fix errors.
4. Available libraries: pandas, numpy, matplotlib, requests, json, os, pathlib.
5. You can read/write files only in /workspace/ directory.
6. When the task is fully complete, say TASK COMPLETE and summarize the result.
7. If you are stuck after 3 attempts at the same error, say ESCALATE and explain the problem.
'''Çıktı Kırpma ve Belirteç Yönetimi
Ajan tarafından üretilen kod çok büyük çıktılar oluşturabilir: DataFrame yazdırmaları, uzun listeler ve ayrıntılı günlükler. Çıktının tamamını LLM'ye geri göndermek belirteçleri boşa harcar ve bağlam penceresini aşabilir. Konuşmaya eklemeden önce yürütme çıktısını her zaman kırpın. İyi bir varsayılan değer 2.000-5.000 karakterdir; ayrıca LLM'nin keşfedilecek daha fazla içerik olabileceğini bilmesi için çıktının kırpıldığına dair bir not ekleyin.
MAX_OUTPUT_CHARS = 3000
def format_observation(stdout: str, stderr: str) -> str:
if stderr:
# Errors take priority - show full error
return f'Error:\n{stderr[:MAX_OUTPUT_CHARS]}'
if len(stdout) > MAX_OUTPUT_CHARS:
truncated = stdout[:MAX_OUTPUT_CHARS]
remaining = len(stdout) - MAX_OUTPUT_CHARS
return f'{truncated}\n... [output truncated, {remaining} more characters]'
return f'Output:\n{stdout}' if stdout else 'Code executed successfully (no output)'Kod Döngüsü Uygulamada
Gerçek bir veri analizi kod yürütme ajanı; bir CSV'yi yüklemek, yapısını incelemek, verileri temizlemek, istatistikleri hesaplamak, bir grafik oluşturmak ve özet raporu hazırlamak için 5-15 yineleme çalıştırabilir. Her yineleme bir öncekini temel alır; LLM, çalışma zamanında keşfedilen gerçek veri değerlerine ve şekillerine göre yaklaşımını uyarlar. Kod ajanlarını keşif amaçlı görevlerde bu kadar güçlü kılan, bu dinamik uyarlamadır.
Kod Döngülerinde Güvenlik Hususları
LLM tarafından üretilen kodu altyapınızda çalıştırmak önemli bir güvenlik riskidir. Ajan kodunu yalıtım olmadan asla çalıştırmayın. LLM, istem enjeksiyonu nedeniyle veya yanlışlıkla şu işlemleri yapan kodlar üretebilir: dosyaları silmek, verileri dışarı aktarmak, harici hizmetlere ağ istekleri göndermek veya sistem kaynaklarını tüketmek. Her zaman katı kaynak sınırları, ağ kısıtlamaları ve dosya sistemi sınırları olan yalıtılmış bir ortamda yürütün.
Kısa Kontrol
Bu dersteki kod yürütme döngüsü konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: yazma-yürütme-gözlemleme döngüsü, kod yürütme ajanlarının temel kalıbıdır; yürütmeden elde edilen stdout ve stderr, LLM'nin bir sonraki kod üretimine yön veren gözlemler olarak geri gönderilir; çıktı kırpma ve yineleme sınırları temel güvenlik mekanizmalarıdır. Sırada Docker ve RestrictedPython ile kod yürütmeyi yalıtmayı inceleyeceğiz.
Sıkça Sorulan Sorular
“Kod Çalıştırma Döngüsü” dersi ücretsiz mi?
Evet — “Kod Çalıştırma Döngüsü” 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.
“Kod Çalıştırma Döngüsü” dersinde ne öğreneceğim?
Ajanın kod oluşturduğu, yalıtılmış çalıştırıcının bunu çalıştırdığı, stdout ve stderr'nin yakalanıp gözlem olarak geri gönderildiği ve ajanın hataları düzelttiği yaz-çalıştır-gözlemle döngüsünü tasar… 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 1. dersidir.
“Kod Çalıştırma Döngüsü” 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
- Kod Çalıştırma Döngüsü
- Docker ve RestrictedPython ile Yalıtımlı Çalıştırma
- Çalıştırma Adımları Arasında Durum Yönetimi
- Veri Analizi Ajanı Oluşturma