مدلهای زبانی بزرگ (LLM) تولید کد را متحول کردهاند، اما خروجیهای خام اغلب حاوی باگهای ظریف یا خطاهای منطقی هستند. اگرچه مدلهای جدید مانند GPT-4 توانمند هستند، اما اتکا صرف به تولید یکمرحلهای بهندرت برای کد سطح تولید کافی است. وارد **مایکروسافت AutoGen** میشویم، یک چارچوب که امکان ایجاد مکالمات چندعاملی را فراهم میکند که در آن نقشهای مختلف هوش مصنوعی میتوانند تعامل کنند، نقد کنند و خروجیها را بهبود بخشند. در این پست، ما بررسی خواهیم کرد که چگونه یک عامل کدنویسی خوداصلاحشونده را بسازیم که اعتبارسنجی **انسان در حلقه (HITL)** را گنجانده است تا نتایج باکیفیت و قابل اعتماد تضمین شود.
مزیت چندعاملی
خط لولههای RAG سنتی یا زنجیرههای ساده پرامپت، حلقه بازخورد پویای لازم برای حل مسائل پیچیده را ندارند. AutoGen این مشکل را با تعریف عاملهایی با نقشهای خاص حل میکند، مانند کدنویس، بررس و نماینده کاربر. کدنویس کد اولیه را تولید میکند، بررس آن را برای نقصهای احتمالی تحلیل میکند و نماینده کاربر تعامل با توسعهدهنده انسانی را تسهیل میکند. این اکوسیستم همکاریکننده به سیستم اجازه میدهد تا بهطور داخلی تکرار کند تا زمانی که به سطح اطمینان بالایی برسد، سپس تأیید انسانی را بخواهد.
پیادهسازی تیم عاملها
برای شروع، باید کتابخانه pyautogen را نصب کنید. مثال زیر یک تنظیم پایه را نشان میدهد که در آن یک عامل کدنویسی یک تابع پایتون را تولید میکند و یک عامل بررس آن را نقد مینماید. ما از AutoGenAssistantAgent برای نقشهای هوش مصنوعی و UserProxyAgent برای رابط انسانی استفاده میکنیم.
import autogen
import os
# تنظیم API
config_list = [{"model": "gpt-4", "api_key": os.environ["OPENAI_API_KEY"]}]
# تعریف عامل کدنویس
coder = autogen.AssistantAgent(
name="Coder",
llm_config={"config_list": config_list, "temperature": 0.1},
system_message="You are a world-class Python developer. Write clean, efficient code. "
"If asked to fix code, provide the full corrected version."
)
# تعریف عامل بررس
reviewer = autogen.AssistantAgent(
name="Reviewer",
llm_config={"config_list": config_list, "temperature": 0.1},
system_message="You are a senior code reviewer. Critically analyze the code for "
"logic errors, security vulnerabilities, and best practices. "
"If the code is flawed, explain why and ask the Coder to fix it. "
"If it is perfect, say 'APPROVED'."
)
# تعریف عامل نماینده کاربر
user_proxy = autogen.UserProxyAgent(
name="user_proxy",
human_input_mode="ALWAYS", # HITL: همیشه از انسان برای ورودی بپرسید
code_execution_config={"work_dir": "coding", "use_docker": False}
)
افزودن اعتبارسنجی انسان در حلقه
قدرت واقعی این معماری در human_input_mode نهفته است. با تنظیم آن روی "ALWAYS"، سیستم در نقاط حیاتی متوقف میشود تا بازخورد انسانی را درخواست کند. این اطمینان میدهد که در حالی که عاملها بار سنگین تکرار و اشکالزدایی را بر عهده دارند، انسان اختیار نهایی را حفظ میکند. برای مثال، اگر بررس کد را تأیید کند، user_proxy راهحل نهایی را به توسعهدهنده ارائه میدهد. سپس توسعهدهنده میتواند آن را بپذیرد، تغییرات بیشتر را درخواست کند یا آن را کاملاً رد کند.
اجرای مکالمه
اینجاست که چگونه شما وظیفه را آغاز میکنید. ما از کدنویس میخواهیم یک تابع جستجوی دودویی ایجاد کند و مکالمه بهطور خودکار از طریق مراحل کدنویسی و بررسی چرخش خواهد کرد تا زمانی که اجماعی حاصل شود یا مداخله انسانی فعال شود.
task = "Create a Python function that performs a binary search on a sorted list of integers."
# شروع چت
user_proxy.initiate_chat(
speaker=coder,
message=task,
max_rounds=5, # جلوگیری از حلقههای بینهایت
speaker_selection_method="round_robin" # جایگزینی بین کدنویس و بررس
)
ملاحظات عملی و بهترین روشها
- مدیریت توکن: مکالمات چندعاملی میتوانند از نظر توکن پرهزینه باشند. از
max_roundsبرای محدود کردن تعاملات و اطمینان از مختصر بودن پرامپتها استفاده کنید. - اجرای کد: برای قابلیت اطمینان بالاتر، اجرای کد را در
user_proxyیا یک عامل اختصاصیآزمایشگرفعال کنید. این به عاملها اجازه میدهد تا واقعاً کد تولید شده را اجرا کنند و خطاهای زمان اجرا را پیدا کنند، نه فقط مشکلات تحلیل ایستا. - لاگنویسی: همیشه تاریخچه مکالمه را ثبت کنید. بررسی اینکه چرا یک عامل یک تکه کد را رد کرده است، برای تنظیم پرامپتهای سیستم شما بیارزش نیست.
نتیجهگیری
AutoGen یک پایه محکم برای عبور از تولید ساده کد به سمت مهندسی نرمافزار هوشمند و همکاریکننده فراهم میکند. با ترکیب قدرت تکراری سیستمهای چندعاملی با ظرافت اعتبارسنجی انسان در حلقه، توسعهدهندگان میتوانند عاملهایی بسازند که نه تنها خلاق هستند، بلکه از نظر انتقادی نیز دقیق. این رویکرد بهطور قابل توجهی بار روی توسعهدهندگان انسانی را کاهش میدهد و به آنها اجازه میدهد بر معماری و حل مسائل پیچیده تمرکز کنند، در حالی که عاملها کارهای تکراری و اشکالزدایی را بر عهده میگیرند.