AI Engineering Academy · Pelajaran

Gelung Pelaksanaan Kod

Reka bentuk gelung tulis-laksana-perhati, iaitu ejen menjana kod, pelaksana dalam kotak pasir menjalankannya, stdout dan stderr ditangkap lalu dihantar kembali sebagai pemerhatian, dan ejen membetulkan ralat.

Pelajaran 1 daripada 413 langkah

Gelung Pelaksanaan Kod ialah pelajaran AI Engineering Academy 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 AI Engineering Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.

Ejen Kod: Menulis dan Menjalankan Kod

Ejen pelaksanaan kod ialah jenis ejen AI khas yang menyelesaikan masalah dengan menulis kod, menjalankannya, memerhatikan output dan mengulanginya sehingga tugasan selesai. Tidak seperti ejen yang hanya menggunakan alat yang telah ditentukan, ejen kod mencipta alat pengiraan baharu secara dinamik. Hal ini menjadikannya sangat fleksibel: apa-apa tugasan yang boleh diprogramkan boleh dicuba oleh ejen kod.

Gelung Tulis-Laksana-Perhati

Teras ejen pelaksanaan kod ialah gelung dengan tiga langkah: Tulis — LLM menjana kod Python untuk menyelesaikan langkah semasa tugasan. Laksana — kod dijalankan dalam persekitaran terkotak pasir dan stdout/stderr ditangkap. Perhati — output pelaksanaan dihantar semula kepada LLM sebagai pemerhatian baharu, yang digunakan untuk menentukan perkara yang perlu ditulis seterusnya. Gelung ini berterusan sehingga tugasan selesai atau had lelaran dicapai.

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 Kod daripada Output LLM

LLM biasanya membungkus kod yang dijana dalam blok kod berpagar Markdown: ```python ... ```. Gelung pelaksanaan anda mesti mengekstrak kod daripada blok ini dengan boleh dipercayai sebelum menjalankannya. Gunakan ungkapan nalar atau penghurai ringkas untuk mencari blok berpagar dan mengendalikan kes pinggir seperti tanda backtick bersarang, berbilang blok kod dalam satu respons atau kod 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

Apabila menjalankan kod yang dijana ejen, anda mesti menangkap kedua-dua stdout (output biasa) dan stderr (mesej ralat serta jejak tindanan) untuk dihantar semula kepada LLM. Menggunakan modul Python subprocess ialah pendekatan paling mudah: jalankan kod sebagai proses berasingan dan tangkap kedua-dua aliran. Tetapkan had masa untuk mengelakkan kod yang tersekat daripada menyekat ejen.

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 file

Mengendalikan Ralat dengan Bijak

Apabila kod menghasilkan ralat, mesej ralat (jejak tindanan, jenis pengecualian, nombor baris) dihantar semula kepada LLM sebagai pemerhatian. LLM kemudiannya menganalisis ralat tersebut dan menulis kod yang telah diperbetulkan. Untuk membantu LLM menyahpepijat dengan berkesan, sertakan teks ralat yang tepat dalam pemerhatian, sertakan baris kod yang menyebabkan ralat dan minta LLM membetulkannya dengan jelas sebelum mencuba 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.'

Mengesan Penyelesaian Tugasan

Gelung pelaksanaan kod mesti mengetahui bila perlu berhenti. Isyarat penyelesaian yang lazim termasuk: LLM mengembalikan respons tanpa blok kod (hanya jawapan dalam bahasa semula jadi), LLM menulis penanda khas seperti # TASK_COMPLETE, kod menghasilkan fail output yang diminta oleh ejen atau fungsi pengesahan mengesahkan bahawa output memenuhi kriteria kejayaan. Sentiasa laksanakan had lelaran sebagai pilihan sandaran.

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')

Menghantar Data antara Lelaran

Satu cabaran dalam gelung pelaksanaan kod ialah kekekalan keadaan antara lelaran. Setiap blok kod dijalankan dalam proses Python baharu, jadi pemboleh ubah yang ditakrifkan dalam satu lelaran tidak tersedia dalam lelaran seterusnya. Penyelesaiannya termasuk: menulis data perantaraan ke dalam fail, menggunakan proses berterusan dengan kod yang disuntik melalui exec() atau mengarahkan LLM secara jelas untuk mentakrifkan semula pemboleh ubah yang diperlukan pada permulaan setiap blok kod.

# 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())
'''

Menstrukturkan Gesaan Sistem

Gesaan sistem untuk ejen pelaksanaan kod mesti mengajar LLM cara menggunakan gelung dengan berkesan. Unsur penting yang perlu disertakan ialah: cara menulis blok kod Python boleh laksana, cara menyemak output perantaraan sebelum meneruskan, cara menandakan penyelesaian tugasan, pustaka yang tersedia dalam kotak pasir dan laluan fail yang dibenarkan untuk dibaca serta ditulis oleh ejen.

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.
'''

Pemendekan Output dan Pengurusan Token

Kod yang dijana ejen boleh menghasilkan output yang sangat besar: cetakan DataFrame, senarai panjang dan log terperinci. Menghantar keseluruhan output kembali kepada LLM membazirkan token dan boleh melimpahi tetingkap konteks. Sentiasa pendekkan output pelaksanaan sebelum menambahkannya pada perbualan. Nilai lalai yang baik ialah 2000-5000 aksara, bersama nota bahawa output telah dipendekkan supaya LLM tahu bahawa masih banyak perkara yang mungkin boleh diterokainya.

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)'

Gelung Kod dalam Amalan

Ejen pelaksanaan kod sebenar untuk analisis data mungkin menjalankan 5-15 lelaran untuk: memuatkan CSV, meneroka strukturnya, membersihkan data, mengira statistik, menjana carta dan menghasilkan laporan ringkasan. Setiap lelaran dibina berdasarkan lelaran sebelumnya, dengan LLM menyesuaikan pendekatannya berdasarkan nilai serta bentuk data sebenar yang ditemui semasa masa jalan. Penyesuaian dinamik inilah yang menjadikan ejen kod begitu berkuasa untuk tugasan penerokaan.

Pertimbangan Keselamatan dalam Gelung Kod

Menjalankan kod yang dijana LLM pada infrastruktur anda merupakan risiko keselamatan yang besar. Jangan sekali-kali menjalankan kod ejen tanpa pengkotakpasiran. LLM mungkin secara tidak sengaja (atau akibat suntikan gesaan) menjana kod yang: memadam fail, mengeksfiltrasi data, membuat permintaan rangkaian kepada perkhidmatan luaran atau menghabiskan sumber sistem. Sentiasa jalankan kod dalam persekitaran terpencil dengan had sumber yang ketat, sekatan rangkaian dan sempadan sistem fail.

Semakan Pantas

Uji pemahaman anda tentang gelung pelaksanaan kod daripada pelajaran ini.

Imbas Kembali Pelajaran

Dalam pelajaran ini, anda telah mempelajari bahawa: gelung tulis-laksana-perhati ialah corak teras ejen pelaksanaan kod, stdout dan stderr daripada pelaksanaan dihantar semula sebagai pemerhatian yang membimbing penjanaan kod LLM seterusnya, dan pemendekan output serta had lelaran ialah mekanisme keselamatan yang penting. Seterusnya, kita akan meneroka pengkotakpasiran pelaksanaan kod dengan Docker dan RestrictedPython.

Percuma untuk bermula

Pelajari Python 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
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Gelung Pelaksanaan Kod” percuma?

Ya — teks penuh “Gelung Pelaksanaan Kod” 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 AI Engineering Academy, tingkat taraf kepada CoddyKit PRO. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Gelung Pelaksanaan Kod”?

Reka bentuk gelung tulis-laksana-perhati, iaitu ejen menjana kod, pelaksana dalam kotak pasir menjalankannya, stdout dan stderr ditangkap lalu dihantar kembali sebagai pemerhatian, dan ejen membetulk… Anda berlatih AI Engineering Academy 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 AI Engineering Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran AI Engineering Academy 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 “Gelung Pelaksanaan Kod” 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 AI Engineering Academy ini?

Ya. Setiap pelajaran AI Engineering Academy 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

  1. Gelung Pelaksanaan Kod
  2. Pengasingan Kotak Pasir dengan Docker dan RestrictedPython
  3. Pengurusan Keadaan Merentasi Langkah Pelaksanaan
  4. Membina Ejen Analisis Data
← Kembali ke AI Engineering Academy