تصور کنید یک هوش مصنوعی را بدون نقشه و دستورالعمل در دنیایی دیجیتال و عظیم رها کنید تا خودش راه نجات را پیدا کند. این دقیقاً همان اتفاقی است که در پروژه agent-wow رخ داد و منجر به عبور موفقیتآمیز یک عامل (Agent) از مراحل ابتدایی یکی از پیچیدهترین بازیهای جهان شد.
یک عامل مبتنی بر GPT-6 Astra توانست تمام ماموریتهای منطقه آغازین بازی World of Warcraft را در ۴۰ دقیقه و با صفر مرگ به پایان برساند. طبق گزارش توسعهدهنده این پروژه، این موفقیت نه از طریق ماکروهای ساده یا بینایی ماشین، بلکه به دلیل توانایی مدل در نوشتن ابزارهای مسیریابی به زبان C++ و برقراری ارتباط مستقیم با پروتکل سرور بازی به دست آمده است.
این آزمایش در حالی رخ میدهد که صنعت از چتباتهای ساده به سمت عاملهای خودمختاری حرکت میکند که قادر به فعالیت در محیطهای شبیهسازیشده هستند. در حالی که پیشتر پوشش دادیم که چگونه Gemini 3.1 Pro در بنچمارکهای تخصصی کدنویسی از GPT-5.4 پیشی گرفت، چالش فعلی اکنون تبدیل آن توانایی کدنویسی به اجرای چندمرحلهای و لحظهای در محیطی است که مدل بهطور صریح روی آن آموزش ندیده است.
برای درک این موضوع باید بدانید که مدل زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن کتابها جواب میدهد — در اینجا باید نقش یک مهندس نرمافزار و بازیکن حرفهای را همزمان ایفا کند تا بتواند ابزارهای لازم برای پیمایش محیط را در لحظه بسازد.
معماری agent-wow
پروژه agent-wow که در ۲ اکتبر ۲۰۲۶ منتشر شد، از روشهای سنتی هک بازی یا شبیهسازی کیبورد و موس پرهیز میکند. بر اساس مستندات این پروژه، این سامانه به جای تکیه بر بینایی ماشین با کنترلهای مستقیم کیبورد و موس، پلتفرمی را فراهم میکند تا عاملها مستقیماً از طریق پروتکل شبکه WoW با سرور بازی تعامل داشته باشند.
این سیستم هیچ مکانیسم داخلی برای حرکت یا مبارزه ندارد. در واقع، agent-wow هیچیک از مکانیسمهای گیمپلی مانند جابجایی، نبرد یا تعاملات درونبازی را تعریف نمیکند. در عوض، یک سیستم ماژولار ارائه میدهد که در آن عامل باید قابلیتهای خود را خودش بسازد. این رویکرد باعث شده پیچیدگی مدیریت agent-wow تا یک مرتبه بزرگی کاهش یابد.
زمینه توسعه و تکامل
توسعهدهنده این پروژه با الهام از پروژههای متنباز موجود در حوزه عاملهای LLM برای بازی، بهویژه با اشاره به Mindcraft و Factorio Learning Environment، قصد داشت ببیند مدلهای پیشرو چگونه با پیچیدگیهای خاص World of Warcraft کنار میآیند.
معماری فعلی حاصل یک شکست است؛ توسعهدهنده ابتدا ۱۶ هزار خط کد برای یک سیستم مسیریابی ابتدایی (Movement Primitive) با یک پیادهسازی نامنظم نوشت اما در نهایت آن را دور ریخت. او به جای آن، رویکردی مشابه Mindcraft را انتخاب کرد که در آن عامل میتواند هرگاه دستورات موجود برای رفتارهای پیچیده کافی نبود، کد سفارشی تولید کند.
در اولین اجرا، مدل Codex با قدرت GPT-6 Astra (xhigh) ماموریت یافت تا این تسک را اجرا کند: «یک شخصیت اورک بسازد و تمام کوئستهای منطقه آغازین را به پایان برساند.» در حالی که توسعهدهنده در ابتدا بدبین بود و میترسید این کار ساعتها زمان ببرد و با بنبستهای متعددی مواجه شود، عامل در ۴۰ دقیقه آن را به راحتی انجام داد.
چرا World of Warcraft؟
انتخاب این بازی به دلیل محیط سختگیرانه آن برای تست فشار (Pressure-testing) برنامهریزی استراتژیک بلندمدت و اجرای تاکتیکی کوتاه است. این بازی چندین لایه پیچیدگی را به تعادل میرساند:
- استراتژی بلندمدت: رسیدن به سطح نهایی (Level Cap) نیازمند برنامهریزی پیچیده است، مانند تکمیل زنجیرهای از ماموریتهای پیشنیاز و تشکیل گیلدهایی با ترکیب کلاسهای درست.
- مدیریت منابع: برای تجهیزات سطح بالا (Endgame Gear)، اغلب به صنعت (Crafting) نیاز است که مستلزم منابع و مهارتهای خاص است. عامل باید تصمیم بگیرد که برای اینها وقت بگذارد (Grind) یا آنها را با طلا بخرد. هر دو روش به نتیجه یکسانی میرسند اما رویکردهای بسیار متفاوتی میطلبند.
- اجرای تاکتیکی: محتوای سطح بالا نیازمند هماهنگی سریع در زمان واقعی است، مانند اجرای جادوها در چرخه بهینه (Rotation) برای به حداکثر رساندن آسیب در ثانیه (DPS)، در حالی که همزمان با ۲۴ بازیکن دیگر باید از ضربات آتشین جاخالی داد.
استخراج دادههای استراتژیک
عامل به جای حدس زدن مسیر، از یک استراتژی پیشرفته استخراج داده (Data-mining) استفاده کرد. به نقل از گزارش پروژه، مدل نیازمندیهای ماموریتها، مکان NPCهای دهنده کوئست، NPCهای تحویل ماموریت و مختصات اسپاون را مستقیماً از فایلهای SQL پروژه AzerothCore استخراج کرد. این کار یک چکلیست عینی و مکانهای مورد نیاز برای برنامهریزی را فراهم کرد.
این کار به عامل اجازه داد تا یک چکلیست دقیق و مسیری بهینه بسازد. او فقط پرسه نزد؛ بلکه زنجیره پیشنیازها را برنامهریزی کرد، اشیاء بیارزش (Junk) را فروخت و پیش از ورود به بخش غار نهایی منطقه آغازین، تجهیزات خود را ارتقا داد. او حتی مسیرش را طوری بهینه کرد که هر دو ماموریت غار را به طور همزمان به پایان برساند.
توسعهدهنده اشاره میکند که این رفتار شبیه به انسانی است که ساعتها در سایت Wowhead تحقیق میکند تا درباره کوئستها اطلاعات کسب کند. البته یک ریسک امنیتی وجود دارد: چون اجرا در محیط سندباکس نبود، عامل تئوریکاً میتوانست به دسترسی ادمین در سرور و دیتابیس AzerothCore در حال اجرا دست یابد و internals بازی را تغییر دهد.
اجرای سطح پروتکل
عامل تمام لایههای انتزاعی سطح بالا را دور زد. در حالی که توسعهدهنده در ابتدا انتظار داشت مدل متدهای RPC سادهای مثل moveTo یا castSpell بسازد تا از کار در لایه پایین بستهها (Packet Layer) اجتناب کند، اما مدل ثابت کرد که کاملاً قادر است در لایه خام پروتکل کار کند.
مدل یک رابط gRPC تولید کرد تا بستههای خاص سرور (SMSG_*) را ارسال و دریافت کند. پیکربندی ماژول تولید شده شامل طیف گستردهای از اشتراکهای بسته بود، از جمله:
- وضعیت جهان:
SMSG_UPDATE_OBJECT،SMSG_MONSTER_MOVE،SMSG_DESTROY_OBJECTوSMSG_COMPRESSED_UPDATE_OBJECT. - سیستم ماموریت:
SMSG_QUESTGIVER_QUEST_LIST،SMSG_QUESTGIVER_QUEST_DETAILS،SMSG_QUESTGIVER_OFFER_REWARD،SMSG_QUESTGIVER_QUEST_COMPLETE،SMSG_QUESTUPDATE_ADD_KILL،SMSG_QUESTUPDATE_COMPLETE،SMSG_QUESTGIVER_QUEST_INVALIDوSMSG_QUESTGIVER_QUEST_FAILED. - وضعیت شخصیت:
SMSG_LEVELUP_INFO،SMSG_AURA_UPDATE،SMSG_AURA_UPDATE_ALL،SMSG_LOOT_RESPONSE،SMSG_CAST_FAILED،SMSG_INVENTORY_CHANGE_FAILURE،SMSG_ATTACKSWING_NOTINRANGE،SMSG_ATTACKSWING_BADFACING،SMSG_TRAINER_BUY_SUCCEEDED،SMSG_TRAINER_BUY_FAILED،SMSG_TRAINER_LIST،SMSG_INITIAL_SPELLS،SMSG_LEARNED_SPELLوSMSG_QUERY_QUESTS_COMPLETED_RESPONSE.
جزئیات فنی پیادهسازی
برای مدیریت این بستهها، عامل یک خط لوله فنی خاص ساخت:
- مدیریت بسته: عامل ماژولی ساخت تا پیامهای SMSG_* تعریف شده سرور را ارسال و دریافت کرده و آنها را در حافظه ذخیره کند.
- رابط: توابع
sendوpollرا از طریق سرور گیمپلی JSON-RPC پروژه agent-wow در دسترس قرار داد. - مدل جهان: یک اسکریپت پایتون تابع
pollرا فراخوانی میکرد تا بستههای دریافتی از آخرین چکپوینت پردازش شده را بگیرد. سپس اینها را رمزگشایی میکرد تا مدل جهان خود، شامل میزان سلامتی، موجودات نزدیک و لوتها را بهروز کند. - حلقه اقدام: عامل از تابع
sendبرای ارسال پیامهای کلاینت به AzerothCore استفاده کرد تا اقداماتی را در دنیای بازی ایجاد کند.
این نشان میدهد مدلهای پیشرو میتوانند جریانهای داده خام را بدون نیاز به رابطهای کاربرپسند (Human-friendly wrappers) مدیریت کنند. توسعهدهنده اشاره کرد که اگر لایه پروتکل تنها چیزی است که عامل نیاز دارد، شاید در نهایت کافی باشد که این تابع در هسته (Core) قرار گیرد و سیستم ماژولار به طور کلی حذف شود.
ابزارسازی خودمختار
مسیریابی (Pathfinding) به طور سنتی سختترین بخش ساخت باتهای بازی است. برای حل این مشکل، عامل بهطور خودمختار یک برنامه کمکی به زبان C++ نوشت. این برنامه به این صورت عمل میکرد:
- ورودی: دریافت شش ورودی عددی: x، y، z شروع و x، y، z مقصد.
- بارگذاری دادهها: بارگذاری فایلهای Navigation Mesh محلی AzerothCore (mmaps) از مسیر
/azerothcore/env/dist/bin/mmaps(بهطور خاص دسترسی به001.mmapو فایلهای.mmtileمرتبط). - استفاده از کتابخانه: استفاده از کتابخانه مسیریابی Detour برای یافتن مسیری در میان سطوح متصل و قابل پیمایش.
- خروجی: بازگرداندن مسیر به صورت یک آرایه JSON از مختصات یا گزارش خطا در صورت عدم یافتن مسیر.
عامل سپس این فایل اجرایی کامپایل شده را از طریق پایتون فراخوانی میکرد تا شخصیت خود را دقیقاً بین مختصات جابجا کند. یک اثر جانبی خیرهکننده از این خودمختاری، توانایی عامل در اکسپلویت کردن بازی بود. در ویدیوهای ضبطشده دیده میشود که او از دیوارهایی که ویژگی برخورد (Collision) نداشتند عبور میکرد و در واقع با یافتن باگهای نقشه، مسیرش را بهینه میکرد.
محیط تست
برای اطمینان از امنیت و کنترل، آزمایشها روی سرورهای زنده بلیزارد اجرا نشد، بلکه از سرورهای محلی خصوصی مبتنی بر پروژه متنباز AzerothCore، بهطور خاص نسخه 3.3.5a — آخرین بیلد Wrath of the Lich King (و دوران اوج WoW) — استفاده شد.
برای مشاهدهپذیری (Observability)، توسعهدهنده از دستورات GM در AzerothCore استفاده کرد تا دید خود را به دید عامل متصل کند. این کار از طریق ماکروهایی مانند موارد زیر انجام شد:
/run SendChatMessage(".gm on","SAY")/run SendChatMessage(".gm visible off","SAY")/run SendChatMessage(".bindsight","SAY")/run SendChatMessage(".unbindsight","SAY")
در حالی که این روش برای یک شخصیت کار میکند، توسعهدهنده اشاره کرد که برای اجراهای چندعاملی در بازههای زمانی طولانیتر قابل گسترش نیست. برنامههای آینده شامل ساخت یک ماژول اختصاصی AzerothCore و یک افزودنی (Add-on) درونبازی برای مشاهدهپذیری بهتر است.
تحلیل: چرخش به سمت استدلال محیطی
این اجرا این فرض را میشکند که عاملهای هوش مصنوعی برای تعامل با نرمافزار به یک API تعریفشده نیاز دارند. GPT-6 Astra با نوشتن ابزارهای C++ و استخراج داده از دیتابیس سرور، ثابت کرد که میتواند فاصله بین پرامپتهای سطح بالا و اجرای باینری سطح پایین را پر کند.
برای دنیای AI، این یعنی «گلوگاه» از استدلال مدل به قابلیت مشاهدهپذیری محیط تغییر کرده است. اگر یک عامل بتواند درایورها و پلهای پروتکل خود را بنویسد، تنها محدودیت، دادههای موجود در سورسکد یا حافظه سیستم هدف است. توسعهدهنده اشاره کرد که سیستم ماژولار یک حلقه بازخورد فراهم میکند تا ببینیم کدام primitives واقعاً برای عاملها اهمیت دارند؛ ماژولهایی که به طور مکرر ساخته میشوند را میتوان در نهایت در هسته سیستم پیادهسازی کرد.
گامهای بعدی
توسعهدهنده اکنون قصد دارد ببیند آیا یک عامل میتواند به طور کاملاً خودمختار تا سطح ۸۰ لولآپ کند، بررسی کند که در این مسیر چه ابزارهایی باید بسازد و این فرآیند چقدر زمان میبرد. هدف نهایی، پر کردن یک سرور کامل از عاملهای هوش مصنوعی است تا ببینیم آیا میتوانند رید Icecrown Citadel را در حالت Heroic به پایان برسانند یا خیر.
ماموریتهای جانبی اضافی برای این پروژه عبارتند از:
- مشاهدهپذیری: ساخت ابزارهای بهتر برای ردیابی شخصیتها در زمانی که توسعهدهنده AFK است.
- امنیت: افزودن یک سندباکس برای ایجاد نردههای حفاظتی (Guardrails) پیرامون آنچه عاملها میتوانند به آن دسترسی داشته باشند یا تغییر دهند.
- هماهنگی اجتماعی: تست اینکه آیا چندین عامل میتوانند از ویژگیهای اجتماعی درونبازی برای هماهنگی در دانجنها و کوئستها استفاده کنند.
شما میتوانید پیشرفت این آزمایشهای اجتماعی چندعاملی را در صفحه پروژه agent-wow.sh دنبال کنید.




گفتگو