Perulangan Eksekusi Kode
Rancang perulangan tulis-jalankan-amati, yaitu agen menghasilkan kode, pelaksana dalam kotak pasir menjalankannya, stdout dan stderr ditangkap lalu diberikan kembali sebagai pengamatan, dan agen memperbaiki galat.
Perulangan Eksekusi Kode adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Agen Kode: Menulis dan Menjalankan Kode
Agen eksekusi kode adalah jenis agen AI khusus yang menyelesaikan masalah dengan menulis kode, menjalankannya, mengamati hasilnya, lalu mengulanginya hingga tugas selesai. Berbeda dari agen yang hanya menggunakan alat yang telah ditentukan, agen kode membuat alat komputasi baru secara langsung saat diperlukan. Hal ini membuatnya sangat fleksibel: tugas apa pun yang dapat diprogram dapat dicoba oleh agen kode.
Perulangan Tulis-Jalankan-Amati
Inti dari agen eksekusi kode adalah perulangan dengan tiga langkah: Tulis — LLM membuat kode Python untuk menyelesaikan langkah tugas saat ini. Jalankan — kode dijalankan di lingkungan terisolasi dan stdout/stderr ditangkap. Amati — keluaran eksekusi diberikan kembali kepada LLM sebagai pengamatan baru, yang digunakannya untuk menentukan hal yang harus ditulis berikutnya. Perulangan ini berlanjut hingga tugas selesai atau batas iterasi tercapai.
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'Mengekstrak Blok Kode dari Keluaran LLM
LLM biasanya membungkus kode yang dibuat dalam blok kode berpagar markdown: ```python ... ```. Perulangan eksekusi Anda harus dapat mengekstrak kode dari blok-blok tersebut secara andal sebelum menjalankannya. Gunakan regex atau pengurai sederhana untuk menemukan blok berpagar dan menangani kasus khusus seperti backtick bertingkat, beberapa blok kode dalam satu respons, atau kode tanpa penentu bahasa.
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))'Menangkap stdout dan stderr
Saat menjalankan kode yang dibuat agen, Anda harus menangkap stdout (keluaran normal) dan stderr (pesan kesalahan dan pelacakan balik) untuk diberikan kembali kepada LLM. Menggunakan modul Python subprocess merupakan pendekatan paling sederhana: jalankan kode sebagai proses terpisah dan tangkap kedua aliran tersebut. Tetapkan batas waktu untuk mencegah kode yang macet menghambat agen.
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 fileMenangani Kesalahan secara Cerdas
Ketika kode menghasilkan kesalahan, pesan kesalahan (pelacakan balik, jenis pengecualian, nomor baris) diberikan kembali kepada LLM sebagai pengamatan. LLM kemudian menganalisis kesalahan tersebut dan menulis kode yang telah diperbaiki. Agar LLM dapat men-debug secara efektif, sertakan teks kesalahan yang persis dalam pengamatan, sertakan baris kode yang menyebabkan kesalahan, dan minta LLM secara eksplisit untuk memperbaikinya sebelum mencoba lagi.
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.'Mendeteksi Penyelesaian Tugas
Perulangan eksekusi kode harus mengetahui kapan harus berhenti. Sinyal penyelesaian yang umum meliputi: LLM mengembalikan respons tanpa blok kode (hanya jawaban dalam bahasa alami), LLM menulis penanda khusus seperti # TASK_COMPLETE, kode menghasilkan berkas keluaran yang diminta untuk dibuat oleh agen, atau fungsi validasi mengonfirmasi bahwa keluaran memenuhi kriteria keberhasilan. Selalu terapkan batas iterasi sebagai cadangan.
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')Meneruskan Data Antariterasi
Salah satu tantangan dalam perulangan eksekusi kode adalah persistensi status antariterasi. Setiap blok kode berjalan dalam proses Python baru, sehingga variabel yang ditentukan pada satu iterasi tidak tersedia pada iterasi berikutnya. Solusinya meliputi: menulis data perantara ke berkas, menggunakan proses persisten dengan kode yang disisipkan melalui exec(), atau menginstruksikan LLM secara eksplisit untuk mendefinisikan ulang variabel yang diperlukan di awal setiap blok kode.
# 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())
'''Menyusun Perintah Sistem
Perintah sistem untuk agen eksekusi kode harus mengajarkan LLM cara menggunakan perulangan secara efektif. Elemen penting yang perlu disertakan: cara menulis blok kode Python yang dapat dijalankan, cara memeriksa keluaran perantara sebelum melanjutkan, cara menandai penyelesaian tugas, pustaka apa yang tersedia di lingkungan terisolasi, serta jalur berkas mana yang boleh dibaca dan ditulis oleh agen.
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.
'''Pemotongan Keluaran dan Pengelolaan Token
Kode yang dibuat agen dapat menghasilkan keluaran yang sangat besar: cetakan DataFrame, daftar panjang, atau log yang berlebihan. Memberikan seluruh keluaran kembali kepada LLM memboroskan token dan dapat melampaui jendela konteks. Selalu potong keluaran eksekusi sebelum menambahkannya ke percakapan. Batas awal yang baik adalah 2000–5000 karakter, ditambah catatan bahwa keluaran telah dipotong agar LLM mengetahui bahwa mungkin masih ada bagian lain untuk ditelusuri.
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)'Perulangan Kode dalam Praktik
Agen eksekusi kode nyata untuk analisis data mungkin menjalankan 5–15 iterasi untuk: memuat CSV, menjelajahi strukturnya, membersihkan data, menghitung statistik, membuat diagram, dan menghasilkan laporan rangkuman. Setiap iterasi dibangun berdasarkan iterasi sebelumnya, sementara LLM menyesuaikan pendekatannya berdasarkan nilai dan bentuk data aktual yang ditemukan saat runtime. Adaptasi dinamis inilah yang membuat agen kode sangat kuat untuk tugas eksploratif.
Pertimbangan Keamanan dalam Perulangan Kode
Menjalankan kode yang dibuat LLM di infrastruktur Anda merupakan risiko keamanan yang signifikan. Jangan pernah menjalankan kode agen tanpa pengisolasian. LLM dapat secara tidak sengaja (atau akibat injeksi perintah) membuat kode yang: menghapus berkas, mengekstrak data secara ilegal, mengirim permintaan jaringan ke layanan eksternal, atau menghabiskan sumber daya sistem. Selalu jalankan kode di lingkungan terisolasi dengan batas sumber daya yang ketat, pembatasan jaringan, dan batasan sistem berkas.
Pemeriksaan Singkat
Uji pemahaman Anda tentang perulangan eksekusi kode dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: perulangan tulis-jalankan-amati merupakan pola inti agen eksekusi kode; stdout dan stderr dari eksekusi diberikan kembali sebagai pengamatan yang memandu pembuatan kode berikutnya oleh LLM; dan pemotongan keluaran serta batas iterasi merupakan mekanisme keselamatan yang penting. Selanjutnya, kita akan membahas pengisolasian eksekusi kode dengan Docker dan RestrictedPython.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Perulangan Eksekusi Kode” gratis?
Ya — teks lengkap “Perulangan Eksekusi Kode” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Perulangan Eksekusi Kode”?
Rancang perulangan tulis-jalankan-amati, yaitu agen menghasilkan kode, pelaksana dalam kotak pasir menjalankannya, stdout dan stderr ditangkap lalu diberikan kembali sebagai pengamatan, dan agen memp… Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?
Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Perulangan Eksekusi Kode” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Perulangan Eksekusi Kode
- Pengotakan Pasir dengan Docker dan RestrictedPython
- Mengelola Status di Berbagai Langkah Eksekusi
- Membangun Agen Analisis Data