कोड निष्पादन लूप
लिखने-निष्पादित करने-निरीक्षण करने वाला लूप डिज़ाइन करें, जिसमें एजेंट कोड बनाता है, सैंडबॉक्स किया गया निष्पादक उसे चलाता है, stdout और stderr को पकड़ा जाता है और निरीक्षण के रूप में वापस भेजा जाता है, फिर एजेंट त्रुटियाँ ठीक करता है।
कोड निष्पादन लूप, CoddyKit पर AI Engineering Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह AI Engineering Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। AI Engineering Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कोड एजेंट: कोड लिखना और चलाना
कोड निष्पादन एजेंट एक विशेष प्रकार का एआई एजेंट है, जो कोड लिखकर, उसे चलाकर, आउटपुट देखकर और कार्य पूरा होने तक दोहराते हुए समस्याएँ हल करता है। केवल पहले से परिभाषित उपकरणों का उपयोग करने वाले एजेंटों के विपरीत, कोड एजेंट तुरंत नए गणनात्मक उपकरण बना सकते हैं। इससे वे असाधारण रूप से लचीले बनते हैं: जिस कार्य को प्रोग्राम किया जा सकता है, उसे कोड एजेंट आज़मा सकता है।
लिखें-चलाएँ-देखें चक्र
कोड निष्पादन एजेंट का मूल तीन चरणों वाले चक्र में है: लिखें — LLM कार्य के वर्तमान चरण को हल करने के लिए Python कोड बनाता है। चलाएँ — कोड एक सैंडबॉक्स वातावरण में चलाया जाता है और मानक आउटपुट/मानक त्रुटि कैप्चर किए जाते हैं। देखें — निष्पादन आउटपुट को नई निगरानी सूचना के रूप में LLM को वापस दिया जाता है, जिसका उपयोग वह तय करता है कि अगली बार क्या लिखना है। यह चक्र कार्य पूरा होने या पुनरावृत्ति सीमा तक पहुँचने तक चलता रहता है।
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 आउटपुट से कोड ब्लॉक निकालना
LLM सामान्यतः बनाए गए कोड को मार्कडाउन से घिरे कोड ब्लॉकों में रखते हैं: ```python ... ```। चलाने से पहले आपके निष्पादन चक्र को इन ब्लॉकों से कोड विश्वसनीय रूप से निकालना चाहिए। घिरे हुए ब्लॉकों को खोजने और नेस्टेड बैकटिक, एक उत्तर में कई कोड ब्लॉक या भाषा निर्दिष्ट किए बिना लिखे कोड जैसी विशेष स्थितियों को संभालने के लिए नियमित अभिव्यक्ति या सरल पार्सर का उपयोग करें।
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))'मानक आउटपुट और मानक त्रुटि कैप्चर करना
एजेंट द्वारा बनाए गए कोड को चलाते समय, आपको LLM को वापस भेजने के लिए मानक आउटपुट (सामान्य आउटपुट) और मानक त्रुटि (त्रुटि संदेश और ट्रेसबैक) दोनों कैप्चर करने चाहिए। Python के subprocess मॉड्यूल का उपयोग करना सबसे सरल तरीका है: कोड को एक अलग प्रक्रिया के रूप में चलाएँ और दोनों धाराओं को कैप्चर करें। अटक जाने वाले कोड को एजेंट को रोकने से बचाने के लिए समय-सीमा निर्धारित करें।
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त्रुटियों को समझदारी से संभालना
जब कोड कोई त्रुटि उत्पन्न करता है, तो त्रुटि संदेश (ट्रेसबैक, अपवाद प्रकार, पंक्ति संख्या) निगरानी सूचना के रूप में LLM को वापस भेजा जाता है। फिर LLM त्रुटि का विश्लेषण करके सुधारा हुआ कोड लिखता है। LLM को प्रभावी ढंग से डीबग करने में सहायता देने के लिए, निगरानी सूचना में सटीक त्रुटि पाठ और वह कोड पंक्ति जिसने त्रुटि उत्पन्न की शामिल करें, और दोबारा प्रयास करने से पहले LLM से स्पष्ट रूप से उसे ठीक करने के लिए कहें।
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.'कार्य पूर्णता का पता लगाना
कोड निष्पादन चक्र को यह पता होना चाहिए कि कब रुकना है। पूर्णता के सामान्य संकेतों में ये शामिल हैं: LLM बिना किसी कोड ब्लॉक के उत्तर देता है (केवल प्राकृतिक भाषा में उत्तर), LLM # TASK_COMPLETE जैसा विशेष चिह्न लिखता है, कोड वह आउटपुट फ़ाइल बनाता है जिसे एजेंट से बनाने के लिए कहा गया था, या कोई सत्यापन फ़ंक्शन पुष्टि करता है कि आउटपुट सफलता की कसौटियों पर खरा उतरता है। वैकल्पिक उपाय के रूप में हमेशा पुनरावृत्ति सीमा लागू करें।
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')पुनरावृत्तियों के बीच डेटा भेजना
कोड निष्पादन चक्रों की एक चुनौती पुनरावृत्तियों के बीच स्थिति का बने रहना है। प्रत्येक कोड ब्लॉक एक नई Python प्रक्रिया में चलता है, इसलिए एक पुनरावृत्ति में परिभाषित चर अगली पुनरावृत्ति में उपलब्ध नहीं होते। समाधानों में ये शामिल हैं: मध्यवर्ती डेटा को फ़ाइलों में लिखना, exec() के माध्यम से कोड भेजने वाली स्थायी प्रक्रिया का उपयोग करना, या LLM को स्पष्ट रूप से निर्देश देना कि वह प्रत्येक कोड ब्लॉक की शुरुआत में आवश्यक चरों को फिर से परिभाषित करे।
# 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())
'''सिस्टम प्रॉम्प्ट की संरचना बनाना
कोड निष्पादन एजेंट के सिस्टम प्रॉम्प्ट में LLM को यह सिखाया जाना चाहिए कि चक्र का प्रभावी ढंग से उपयोग कैसे करें। इसमें ये मुख्य बातें शामिल करें: चलाए जा सकने वाले Python कोड ब्लॉक कैसे लिखने हैं, आगे बढ़ने से पहले मध्यवर्ती आउटपुट की जाँच कैसे करनी है, कार्य पूर्ण होने का संकेत कैसे देना है, सैंडबॉक्स में कौन-सी लाइब्रेरी उपलब्ध हैं, और एजेंट को किन फ़ाइल पथों से पढ़ने तथा उनमें लिखने की अनुमति है।
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.
'''आउटपुट काटना और टोकन प्रबंधन
एजेंट द्वारा बनाया गया कोड बहुत बड़ा आउटपुट उत्पन्न कर सकता है: DataFrame प्रिंटआउट, लंबी सूचियाँ और विस्तृत लॉग। पूरा आउटपुट LLM को वापस भेजने से टोकन व्यर्थ होते हैं और संदर्भ विंडो भर सकती है। बातचीत में जोड़ने से पहले निष्पादन आउटपुट को हमेशा काट दें। एक अच्छा डिफ़ॉल्ट 2000-5000 वर्ण है। साथ ही यह सूचना दें कि आउटपुट काटा गया है, ताकि LLM को पता रहे कि देखने के लिए और सामग्री हो सकती है।
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)'व्यवहार में कोड चक्र
डेटा विश्लेषण के लिए एक वास्तविक कोड निष्पादन एजेंट 5-15 पुनरावृत्तियाँ चला सकता है: CSV लोड करना, उसकी संरचना देखना, डेटा साफ़ करना, आँकड़ों की गणना करना, चार्ट बनाना और सारांश रिपोर्ट तैयार करना। प्रत्येक पुनरावृत्ति पिछली पर आधारित होती है, और LLM रनटाइम पर खोजे गए वास्तविक डेटा मानों तथा आकारों के आधार पर अपना तरीका बदलता है। यही गतिशील अनुकूलन कोड एजेंटों को खोजपरक कार्यों के लिए इतना शक्तिशाली बनाता है।
कोड चक्रों में सुरक्षा संबंधी विचार
अपने बुनियादी ढाँचे पर LLM द्वारा बनाया गया कोड चलाना एक गंभीर सुरक्षा जोखिम है। सैंडबॉक्स के बिना एजेंट का कोड कभी न चलाएँ। LLM अनजाने में (या प्रॉम्प्ट इंजेक्शन के कारण) ऐसा कोड बना सकता है जो फ़ाइलें मिटाए, डेटा बाहर भेजे, बाहरी सेवाओं को नेटवर्क अनुरोध करे या सिस्टम संसाधनों को समाप्त कर दे। हमेशा कड़े संसाधन सीमाओं, नेटवर्क प्रतिबंधों और फ़ाइल सिस्टम की सीमाओं वाले पृथक वातावरण में निष्पादन करें।
त्वरित जाँच
इस पाठ से कोड निष्पादन चक्र की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: लिखें-चलाएँ-देखें चक्र कोड निष्पादन एजेंटों का मूल प्रतिरूप है; निष्पादन से प्राप्त मानक आउटपुट और मानक त्रुटि निगरानी सूचनाओं के रूप में वापस भेजे जाते हैं, जो LLM द्वारा बनाए जाने वाले अगले कोड का मार्गदर्शन करते हैं; और आउटपुट काटना तथा पुनरावृत्ति सीमाएँ आवश्यक सुरक्षा उपाय हैं। आगे हम Docker और RestrictedPython के साथ कोड निष्पादन को सैंडबॉक्स में चलाने का अध्ययन करेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “कोड निष्पादन लूप” पाठ निःशुल्क है?
हाँ—“कोड निष्पादन लूप” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और AI Engineering Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। AI Engineering Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कोड निष्पादन लूप” में मैं क्या सीखूँगा?
लिखने-निष्पादित करने-निरीक्षण करने वाला लूप डिज़ाइन करें, जिसमें एजेंट कोड बनाता है, सैंडबॉक्स किया गया निष्पादक उसे चलाता है, stdout और stderr को पकड़ा जाता है और निरीक्षण के रूप में वापस भेजा जाता… आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ AI Engineering Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या AI Engineering Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर AI Engineering Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“कोड निष्पादन लूप” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस AI Engineering Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर AI Engineering Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- कोड निष्पादन लूप
- Docker और RestrictedPython के साथ सैंडबॉक्सिंग
- निष्पादन चरणों के दौरान स्थिति प्रबंधन
- डेटा विश्लेषण एजेंट बनाना