عاملها در حال حاضر بر تمام گفتگوهای هوش مصنوعی مسلط هستند. دموها آنها را به گونهای نشان میدهند که گویی دستیاران دیجیتال خودمختاری هستند که بدون کمک انسان فکر میکنند، استراتژی میچینند و مسائل را حل میکنند. اما اگر لایههای زیرین رابط کاربری را کنار بزنید، با چیزی بسیار سادهتر روبرو خواهید شد. یک عامل صرفاً یک مدل زبانی است که درون یک حلقه در حال اجراست. این یک الگوی طراحی است، نه یک هوشیاری. درک این تمایز بسیار مهم است، زیرا نحوه ساخت، عیبیابی و اعتماد شما به این سیستمها را تغییر میدهد.
یک عامل در واقع چیست
یک چتبات استاندارد، یک تابع تکمرحلهای (single-shot) است. شما یک دستور (prompt) تایپ میکنید. مدل توکنهای بعدی را پیشبینی کرده و یک بلوک متن برمیگرداند. سپس متوقف میشود. مدل بررسی نمیکند که آیا پاسخش دقیق بوده است یا خیر. بررسی نمیکند که آیا یک لینک وب کار میکند یا یک محاسبه درست است یا نه. مدل در همان یک مرحله، بهترین حدس خود را به شما میدهد و سپس ساکت میشود.
یک عامل، آن مرحله تکمرحلهای را به یک چرخه تکرار شونده تبدیل میکند. مدل همچنان متن تولید میکند، اما اکنون درون یک حلقه کنترلشده عمل میکند که در آن میتواند بر دنیای بیرون تأثیر بگذارد و به آنچه اتفاق میافتد واکنش نشان دهد.
این چرخه به این صورت است:
- ارزیابی هدف و استدلال درباره آنچه باید انجام شود.
- انجام یک اقدام، معمولاً از طریق فراخوانی یک ابزار یا API.
- مشاهده نتیجه آن اقدام.
- استدلال مجدد بر اساس آن اطلاعات جدید.
این چرخه تا زمانی که کار تمام شود یا سیستم به یک حد ایمنی برسد، تکرار میشود. تمام راز کار همین است. هیچ موتور استدلال پنهانی وجود ندارد. جادو از این ویژگی ناشی میشود که به مدل فرصت داده میشود تا با استفاده از دادههای واقعی از ابزارهای واقعی، مسیر خود را اصلاح کند.
ReAct: چرخه فکر-اقدام-مشاهده
رایجترین راه برای پیادهسازی این حلقه، الگوی ReAct است که مخفف Reason (استدلال) بهعلاوه Act (اقدام) میباشد. در هر بار عبور از حلقه، مدل سه مرحله متمایز را طی میکند.
ابتدا، مدل یک فکر (Thought) تولید میکند. مدل درباره وضعیت فعلی تأمل میکند، هدف اصلی را به خود یادآوری میکند و تصمیم میگیرد که در مرحله بعد به چه چیزی نیاز دارد. دوم، یک اقدام (Action) را انتخاب میکند. این اقدام میتواند جستجوی وب، پرسوجوی پایگاه داده، فراخوانی ماشینحساب یا درخواستی برای خواندن یک فایل باشد. سوم، یک مشاهده (Observation) دریافت میکند. سیستم، اقدام را خارج از مدل اجرا کرده و نتیجه خام را به تاریخچه گفتگو بازمیگرداند. سپس مدل با استفاده از آن مشاهده تازه به عنوان واقعیت جدید خود، حلقه بعدی را شروع میکند.
یک مثال ساده را در نظر بگیرید. فرض کنید از یک عامل میخواهید به شما بگوید که آیا فردا در آستین باران خواهد بارید یا خیر. مدل ممکن است فکر کند: «من به پیشبینی هواشناسی برای آستین نیاز دارم.» اقدام آن، فراخوانی یک API هواشناسی با نام شهر است. مشاهده به صورت یک JSON خام بازمیگردد: یک قرائت دما و یک احتمال بارش. سپس مدل دوباره فکر میکند: «پیشبینی نشاندهنده احتمال هفتاد درصدی بارش است» و اقدام نهایی آن، ترکیب این اطلاعات در قالب یک پاسخ ساده به زبان انگلیسی برای شماست.
این ساختار اهمیت دارد زیرا مدل را مستند (grounded) میکند. اگر مدل مجبور باشد قبل از ادامه کار، یک جستجو انجام داده و نتایج را بخواند، نمیتواند به سادگی حقایق را از خود در بیاورد. مشاهده به عنوان یک محدودیت سختگیرانه برای فکر بعدی عمل میکند. این حلقه، جعل کردن را بسیار دشوارتر میکند، زیرا مدل باید قبل از صحبت کردن، نگاهی به واقعیت بیندازد.
آنچه برای ساخت یک حلقه قابل اعتماد نیاز دارید
اجرای این الگو در محیط عملیاتی (production) به چیزی فراتر از یک دستور (prompt) هوشمندانه نیاز دارد. شما به سه حفاظ (guardrail) عملیاتی نیاز دارید.
یک بودجه برای گامها تعیین کنید. همیشه حداکثر تعداد تکرارهای حلقه را مشخص کنید. بدون تعیین سقف، یک عامل میتواند در یک چرخه بیپایان گرفتار شود—جستجو، مشاهده، استدلال، دوباره جستجو—تا زمانی که بودجه API شما را تمام کند. محدودیت گامها باعث توقف اجباری میشود. شما میتوانید تصمیم بگیرید که پس از رسیدن به حد مجاز، یک نتیجه ناقص برگردانید، موضوع را به یک انسان ارجاع دهید یا صرفاً با مدیریت صحیح خطا متوقف شوید.
اجرای کد را خودتان مدیریت کنید. مدل زبانی ابزارها را اجرا نمیکند. مدل فقط اقدامات را پیشنهاد میدهد، که معمولاً از طریق خروجی دادن یک متن ساختاریافته یا JSON انجام میشود که نام یک ابزار را ذکر کرده و پارامترهای آن را ارائه میدهد. کد شما باید
