ظهور مدلهای زبانی بزرگ (LLM) امکان ایجاد عاملهای هوش مصنوعی پیشرفتهای را فراهم کرده است که قادر به اجرای وظایف پیچیده و چندمرحلهای هستند. با این حال، یک چالش پایدار باقی مانده است: مدلهای زبانی بزرگ احتمالی هستند، نه قطعی. آنها ممکن است توهم کنند، در پیروی دقیق از دستورالعملها شکست بخورند، یا کدی تولید کنند که در تستهای واحد شکست بخورد. معماریهای سنتی عاملها اغلب به تلاشهای مجدد ثابت یا راهکارهای جایگزین ساده تکیه میکنند، که این موارد کارآمد نیستند و به ندرت خطاهای منطقی پیچیده را حل میکنند.
اینجاست که بازاندیشی (Reflexion) وارد میشود. بازاندیشی که توسط شین و همکارانش پیشنهاد شده است، چارچوبی است که به عاملها اجازه میدهد با بازاندیشی کلامی درباره شکستهای گذشته خود، عملکردشان را بهبود بخشند. به جای تلاش مجدد برای همان پرامپت، عامل یک نقد متنی از شکست خود تولید میکند و از آن بازخورد برای آگاهسازی تلاش بعدی خود استفاده میکند. در این مقاله، ما بررسی خواهیم کرد که چگونه میتوان این حلقههای خوداصلاحشونده را پیادهسازی کرد تا مکانیزمهای بازیابی پویا از خطاها را در عاملهای هوش مصنوعی خود ایجاد کنید.
درک معماری بازاندیشی
حلقه بازاندیشی از سه نقش یا مرحله متمایز در چرخه حیات یک عامل تشکیل شده است:
- اقدام: عامل با استفاده از زمینه فعلی خود، تلاش میکند وظیفه را حل کند.
- ارزیابی: خروجی توسط یک اعتبارسنج خارجی (مثلاً تستهای واحد، بازخورد انسانی، یا یک داور LLM جداگانه) ارزیابی میشود. اگر شکست بخورد، مرحله ارزیابی سیگنالهای خطای خاصی را برمیگرداند.
- بازاندیشی: عامل سیگنالهای خطا را به یک «بازاندیشی» مختصر و به زبان طبیعی تبدیل میکند. این بازاندیشی به حافظه یا زمینه عامل برای تکرار بعدی افزوده میشود.
با تبدیل خطاهای سختکد شده یا شکستهای تست به بازخورد معنایی، عامل میتواند بدون نیاز به بازآموزی مدل، استراتژی استدلال خود را تنظیم کند.
استراتژی پیادهسازی
پیادهسازی یک حلقه بازاندیشی نیاز به رویکردی ساختاریافته برای مدیریت زمینه و بازخورد دارد. در زیر یک نمونه شبهکد سادهشده به سبک پایتون که منطق اصلی را نشان میدهد، آورده شده است. اگرچه جزئیات به ارائهدهنده LLM و چارچوب شما (مانند LangChain یا LlamaIndex) بستگی دارد، اما الگو ثابت میماند.
import json
from llm_client import generate_response, execute_code
class ReflexionAgent:
def __init__(self, max_iterations=3):
self.max_iterations = max_iterations
self.memory = []
def run(self, task):
for i in range(self.max_iterations):
# 1. ساخت زمینه
context = self._build_context(task, i)
# 2. اقدام
code_snippet = generate_response(
prompt=f"Task: {task}\nPrevious Reflections: {self.memory}\nWrite Python code to solve this."
)
# 3. ارزیابی
error_msg = self._evaluate(code_snippet)
if not error_msg:
return code_snippet # موفقیت
# 4. بازاندیشی
reflection_prompt = f"""
You are an AI agent that failed to solve a task.
Task: {task}
Your Code: {code_snippet}
Error: {error_msg}
Generate a short, actionable reflection on what went wrong and how to fix it in the next attempt.
"""
reflection = generate_response(prompt=reflection_prompt)
self.memory.append(f"Iteration {i+1} Failure: {reflection}")
raise Exception("Failed to solve task after maximum iterations")
def _evaluate(self, code):
try:
execute_code(code)
return None
except Exception as e:
return str(e)
def _build_context(self, task, iteration):
# مدیریت پویای زمینه برای جلوگیری از محدودیت توکن حیاتی است
recent_memories = self.memory[-3:] if len(self.memory) > 3 else self.memory
return f"Current Task: {task}\nRelevant History: {recent_memories}"
بهترین روشها برای بازیابی پویا از خطاها
۱. بازاندیشیهای خود را ساختار دهید
بازاندیشیهای مبهم مانند «کار نکرد» بیفایده هستند. به LLM خود دستور دهید خاص باشد. از بازاندیشیها در قالب زیر بخواهید: علت ریشهای: [X], اشتباه: [Y], استراتژی اصلاح: [Z]. این کار تولید بعدی را مؤثرتر هدایت میکند.
۲. طول زمینه را مدیریت کنید
با افزایش تکرارها، انباشت بازاندیشیها میتواند پرامپت را متورم کند. یک پنجره لغزان یا مرحله خلاصهسازی پیادهسازی کنید که در آن بازاندیشیهای قدیمی و نامرتبط به یک بیان خلاصهای واحد فشرده میشوند.
۳. هر زمان که ممکن است از اعتبارسنجهای خارجی استفاده کنید
اگرچه LLMها میتوانند خروجی سایر LLMها را قضاوت کنند، اما اعتبارسنجهای عینی (تستهای واحد، لینترها یا بررسیهای API) حقیقت را ارائه میدهند. هر زمان که امکانپذیر است، همیشه سیگنالهای عینی را برای مرحله «ارزیابی» ترجیح دهید، زیرا این کار خطر تقویت سوگیریهای خود عامل را کاهش میدهد.
نتیجهگیری
برنامهریزی خوداصلاحشونده از طریق حلقههای بازاندیشی، عاملهای هوش مصنوعی را از مجریان اسکریپت شکننده به حلکنندگان مسائل تطبیقپذیر تبدیل میکند. با یکپارچهسازی بازخورد معنایی در زمینه عامل، شما بازیابی پویا از خطاها را فعال میکنید که با پیچیدگی وظیفه مقیاسپذیر است. با ادامه رشد قابلیتهای LLM، کیفیت پرامپت بازاندیشی و ساختار حلقه ارزیابی به تمایزسازهای حیاتی در ساخت سیستمهای هوش مصنوعی محکم و آماده تولید تبدیل خواهند شد. با وظایف کدنویسی ساده شروع کنید، پرامپتهای بازاندیشی خود را اصلاح کنید و شاهد تکامل عاملهای خود باشید.