توضیحات مسابقه


سلام AI Software Engineer آینده دیوار.

امیدوارم کانتست بهت خوش بگذره و چیزهای جدید یاد بگیری. 😊

در طول مسابقه، می‌توانید سؤالات خود را از قسمت «سوال بپرسید» مطرح کنید. لطفا دکمه «فعال کردن اطلاعیه‌ها» رو بزن تا در طول مسابقه از آخرین اطلاعیه‌ها باخبر بشی.

ساختار مسابقه🔗

🔰 این مسابقه در اصل فقط یک چالش و یک مسئله دارد! در تمام بخش‌ها شما یک هدف دارید: ایجنتی بسازید که پرچمی که دنبالش می‌گردید، پیدا کند؛ در واقع، این یک رقابت پرچم‌یابی یا همان Capture the Flag بین ایجنت‌های هوش مصنوعی است!

پس قرار است شما و بقیه شرکت‌کنندگان در این چند ساعت ایجنت‌هایی بسازید که با هم بر سر پیدا کردن پرچم‌های بیشتر رقابت کنند.

  • اگر قبلاً با مفهوم Agents آشنا نیستید، جای نگرانی نیست؛ وقت کافی در نظر گرفته‌ایم تا مستندات اول را مطالعه کنید و کار با آن‌ها را یاد بگیرید.

مدل این مسابقه به این شکل است که به ازای هر سوال، شما باید یک AI Agent بنویسید که کارهایی را که در public.json مربوط به ماموریت‌ها است، انجام بدهد و اگر موفق شد پرچم را پیدا کند و اعلام کند. این جیسون در صورت هر سوال آمده‌است.

برای این که بدانید این ماموریت‌ها چه چیزهایی هستند تا Agent خودتان را توسعه دهید، ما یک مجموعه سوال عمومی در قالب یک جیسون به شما می‌دهیم. Agent شما باید بتواند سوالات این جیسون را بخواند و با استفاده از قابلیت‌های مختلفی - از جمله فانکشن‌های مختلفی که ایجنت می‌تواند از آن‌ها استفاده کند و … - که شما بر روی آن توسعه می‌دهید، بتواند پرچم را برگرداند.

به عنوان مثال:🔗

Question: "download the file of from divar-contest.darkube.app, this file contains some number, add them and the flag is the result number."

برای این سوال شما باید یک تابع دانلود و خواندن فایل و یک فانکشن جمع کردن اعداد بنویسید که ایجنت شما ابتدا با استفاده از تابع اول فایل را دانلود کند و بعد از خواندن فایل با استفاده از تابع دوم اعداد را با هم جمع کند و خروجی بدهد.

در مرحله ارسال کد و برای داوری یک جیسون دیگر وجود دارد که Agent شما آن را می‌خواند و با توجه به آن فلگ را باید بتواند به دست بیاورد و برگرداند.

نکته‌ای که وجود دارد این است که پرچم‌های عمومی و پرچم‌های سامانه داوری از لحاظ درجه پیچیدگی و سختی کاملا شبیه هم هستند ولی مقادیر متفاوتی دارند.

  • به عنوان مثال، در نمونه سوال بالا فقط اعداد موجود در فایل متفاوت است - در نتیجه اگر Agent شما بتواند سوال موجود در جیسون عمومی را حل کند، در صورت پیاده‌سازی درست قاعدتا می‌تواند پرچم مورد استفاده در سامانه داوری را نیز کشف کند.

مراحل مسابقه🔗

در حالت Development شما می‌توانید به هر شکلی و از طریق هر سایتی که دسترسی دارید، فقط از مدل gpt-4.1-mini استفاده کنید. هم‌چنین از طرف ما می‌توانید از پلتفرم متیس ۱ دلار شارژ هدیه برای این مسابقه بگیرید.

  • متیس به شما این قابلیت را می‌دهد که از مدل مدل gpt-4.1-mini استفاده کنید.

  • برای این کار روی لینک زیر کلیک کنید و با شماره تلفنی که در کوئرا ثبت‌نام کرده‌اید، در متیس لاگین کنید:

https://quera.org/contest/22753/create-metis-account

آدرس متیس به منظور لاگین و گرفتن api-key:

https://metisai.ir/

و هم‌چنین لینک داکیومنت متیس به منظور استفاده از openai:

https://shorturl.at/wa9rc


پس از توسعه ایجنت، برای ارسال کد و امتیاز گرفتن در مسابقه، کافی است فایل ZIP را در هر سوال در سامانه کوئرا ارسال کنید. توجه کنید که شما در کل مسابقه، برای داوری ارسال‌های خود در کوئرا ۱ دلار معادل حدودا ۲ میلیون توکن از فقط مدل gpt-4.1-mini دارید. مقدار اعتبار باقی‌مانده خود را می‌توانید با کلیک بر روی نمره‌ای که از هر ارسال خود گرفته‌اید، مشاهده کنید. با کلیک بر روی نمره خودتان کادری مشابه این باز می شود که می‌توانید میزان اعتبار باقی‌مانده خود را مشاهده کنید

توضیح تصویر توجه کنید که این تمام اعتبار شما در این مسابقه است و سعی کنید با ایجاد Agentهایی بهینه مدیریتش کنید.

نکات مهم در هر سوال:🔗

  • شما باید تابع capture_the_flag در کلاس DivarContest را پیاده‌سازی کنید.

  • تنها از self.api_token برای ارسال درخواست استفاده کنید.

  • توجه کنید که سامانه داوری مسابقات با مدل gpt-4.1-mini به ایجنت شما نمره‌دهی می‌کند. حتما از همین مدل برای ارسال کد استفاده کنید. در غیر این صورت نمره شما بعد از بررسی صفر می‌شود.

  • برنامه‌ی شما برای هر یک از فلگ‌ها یک به یک اجرا می‌شود و اگر جواب برگردانده شده درست باشد، امتیاز مربوطه را دریافت خواهید کرد.

  • دلیل این که ماموریت‌های Agent به چند سوال شکسته شده‌است این است که بتوانید مصرف توکن خود را مدیریت کنید.

  • توجه کنید نوع داده ورودی و خروجی هر دو رشته باشند.

  • ما در نمونه پارامتر temperature را ۰.۱ ست کرده‌ایم که خروجی مدل‌ها تصادفی نباشند. شما نیز از این پارامتر به این شکل استفاده کنید.

  • دقت کنید که برای استفاده از متیس، باید در self.client آدرس base_url را مطابق نمونه پایین بگذارید. به شکل کلی قالب کد پایین را حفظ کنید و Agentهای خود را حول این قالب بنویسید.

نمونه پیاده‌سازی برای سوال محاسباتی🔗

به عنوان مثال، فرض کنید سوال به این صورت باشد:

Question: "3*5 + 2 // 3"

نمونه‌ای از کد پیاده‌سازی تابع capture_the_flag را در زیر می‌بینید:

extensionFromNamesolution.py
import requests
from openai import OpenAI

class DivarContest:
    def __init__(self, api_token):
        self.api_token = api_token
        self.model = "gpt-4.1-mini"
        self.client = OpenAI(api_key=self.api_token, base_url="https://api.metisai.ir/openai/v1")

    def capture_the_flag(self, question):
        response = self.client.chat.completions.create(
            model=self.model,
            messages=[{"role": "user", "content": f"calculate {question}. just print answer"}],
            max_tokens=100,
            temperature=0.1
        )
        return response.choices[0].message.content.strip()
Python

پروژه اولیه🔗

برای شروع، می‌توانید فایل اولیه این سوال را از این لینک دریافت کنید و آن را کامل کنید.

initial-project.zip
├── python_requirements.txt
└── solution.py
Plain text

آنچه باید ارسال کنید🔗

یک فایل به نام solution.py که در آن تابع capture_the_flag از کلاس DivarContest به‌درستی پیاده‌سازی شده باشد. همچنین برای استفاده از کتابخانه‌های مختلف می‌توانید همراه فایل ارسالی، فایلی به نام python_requirements.txt در ZIP خود بگذارید که در آن نام کتاب‌خانه‌های مورد نیاز و شماره نسخه‌ی آن‌ها به فرمت زیر در آن موجود باشد: (اگر شماره نسخه را ننویسید آخرین نسخه‌ی آن کتابخانه نصب می‌شود). توجه کنید که در فایل نصب‌ها عدد ورژن نزنید.

firstlib
secondlib
...
Plain text

در نهایت یک فایل ZIP حاوی دو فایل خواسته شده را آپلود کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.