# فاز ۱: مرحله انتخابی
این مرحله، آزمون اصلی تواناییهای بنیادی ایجنت شماست. در اینجا، ایجنت به صورت متوالی با مجموعهای از **قفلها (Locks)** روبرو میشود و باید آنها را به ترتیب باز کند. عبور موفقیتآمیز از تمام قفلها، جواز ورود شما به مرحله نهایی خواهد بود.
## نیازمندیهای فاز ۱
ایجنت شما باید بتواند:
+ یک **`prompt` متنی** به عنوان ورودی دریافت کرده و نیازمندیهای مسئله را از آن استخراج کند.
+ با استفاده از ابزارها، اطلاعات مورد نیاز از URLهایی که در `prompt` ذکر شده را استخراج کند.
+ تاریخچه تلاشهای ناموفق (`history`) را تحلیل کرده و از آن برای بهبود پاسخهای بعدی استفاده کند.
+ پاسخ نهایی را در قالب خواستهشده (متن، عدد و...) به صورت یک رشته برگرداند.
## ابزارهای مورد نیاز
برای موفقیت در این چالش، ایجنت شما حداقل به ابزارهای زیر نیاز خواهد داشت:
+ **ابزار خواندن/دانلود محتوای وب:** این ابزار باید بتواند محتوای یک URL را دریافت کند. این قابلیت برای خواندن فایلهای `.txt` و همچنین تعامل با APIهای ساده ضروری است.
- توانایی یک سری عملیات (مانند کلیک کردن) بر روی سایت انجام دادن. ( عملیات مورد نظر در پرامپت گفته میشود.).
- توانایی شمردن یک موجودیت در یک یا چند سایت.(اسم فیلد در داخل پرامپت ورودی ذکر میشود.)
+ **ابزار تحلیلگر CSV:** یک ابزار تخصصی برای کار با فایلهای CSV. این ابزار باید بتواند یک فایل CSV را از URL بخواند، آن را تحلیل کرده و یک خلاصه مفید (مانند هدرها، تعداد سطرها و چند نمونه داده) برای LLM آماده کند تا از محدودیت توکن جلوگیری شود. همچنین این ابزار باید بتواند کارهای زیر را انجام دهد :
- پاسخ دادن به سوالات در بارهی اطلاعات کلی یک فایل.
- پاسخ دادن به اطلاعات موجود برای یک ID خاص.(اسم فیلد در داخل پرامپت ورودی ذکر میشود.)
+ **ابزار ارسال درخواست به API:** این ابزار باید بتواند یک API call به URI داده شده داخل پرامپت به همراه پارامترهای مورد نیاز ارسال بکند.
+ **ابزار ماشین حساب:** این ابزار باید بتواند محسابات ریاضی که مدلهای زبانی به راحتی نمیتوانند انجام بدهند رو انجام بدهد. همچنین این ابزار توانایی لازم برای انجام دادن تسکی مانند زیر را داشته باشد :
تبدیل محاسبات از زبان فارسی به اعداد و عملیاتها،سپس انجام محاسبات.
- مثال: دو بهعلاوه دو -> 4
<details class="red">
<summary>
**نکتهی بسیار مهم**
</summary>
مدل شما تنها باید جواب خروجی را برگرداند یا از محافظ درخواست راهنمایی کند(برای فاز ۲).
</details>
## ورودی و خروجی نمونه
سیستم داوری، اطلاعات موجود در هر قفل را به یک `prompt` متنی تبدیل کرده و به عنوان ورودی به متد `solve_lock` شما ارسال میکند. ایجنت شما آبجکت کامل `JSON` را دریافت **نمیکند**.
\**نمونه پرامپت ورودی برای متد `solve_lock`:**
```
how many rows are there in the provided CSV file?
https://gist.githubusercontent.com/rnirmal/e01acfdaf54a6f9b24e91ba4cae63518/raw/6b589a5c5a851711e20c5eb28f9d54742d1fe2dc/datasets.csv
```
\**خروجی نمونه از متد `solve_lock`:**
```
"61"
```