# به المپیک ایجنتهای NLP خوش آمدید!
بسیار خوشحالیم که در مسابقه بزرگ ایجنتهای NLP همراه ما هستید. این رویداد فرصتی بینظیر برای به چالش کشیدن مهارتها، یادگیری عمیق در زمینه پردازش زبان طبیعی و ساخت ایجنتهای هوشمند است. چه یک متخصص باتجربه در زمینه LLMها باشید و چه به تازگی وارد این دنیای شگفتانگیز شده باشید، این مسابقه برای شما طراحی شده تا از حل مسائل پیچیده و رقابت با بهترینها لذت ببرید.
در این رقابت، شما وظیفه ساخت یک **ایجنت هوشمند** را بر عهده دارید که باید از سد مجموعهای از چالشهایی با تمرکز روی NLP (قفلها) عبور کند. ایجنت شما باید بتواند مسائل را تحلیل کند، از ابزارهای مختلف استفاده کند و بهترین راهحل را برای باز کردن هر قفل پیدا کند.
## ساختار مسابقه
این مسابقه در دو فاز برگزار میشود:
### فاز اول: مرحله انتخابی
در این مرحله، ایجنت شما باید به صورت خطی با مجموعهای از **قفلها** روبرو شود. هر قفل، یک مسئله منحصربهفرد است که برای حل آن به ترکیبی از تحلیل متن، استدلال منطقی، و استفاده از ابزارها نیاز است.
+ **هدف:** حل کردن موفقیتآمیز تمام قفلها به ترتیب.
+ **امتیازدهی:** امتیاز نهایی شما بر اساس ترکیبی از عوامل زیر محاسبه میشود:
+ تعداد قفلهای باز شده.
+ تعداد تلاشهای ناموفق برای هر قفل (امتیاز منفی).
+ تعداد راهنماییهای (Hint) استفاده شده (امتیاز منفی).
+ **ملاک سنجش:** در این فاز، تواناییهای بنیادی ایجنت شما مانند درک مسئله، کار با ابزارها (مثل خواندن فایل از URL) و استفاده از تاریخچه مکالمات برای یادگیری از اشتباهات، ارزیابی میشود.
### فاز دوم: مرحله نهایی
<details class="red">
<summary>
\**نکتهی بسیار مهم**
</summary>
برای این بخش نیاز نیست شما به صورت کلی کدتون رو تغییر بدید، در این فاز صرفا قفلها **چالشی تر** میشود و متد **choose_path** هم استفاده میشود. که در قسمت فاز دو، توضیحات به صورت کامل آورده شده است.
</details>
\**۸ ایجنت برتر** از مرحله اول به این فاز راه پیدا میکنند. در این مرحله، ۴ ایجنت به صورت همزمان در یک **ماز (Maze)** زنده و پویا با یکدیگر به رقابت میپردازند.
+ **هدف:** قبل از شروع رقابت، یک سوال استراتژیک از ایجنتها پرسیده میشود تا مسیر خود را در ماز انتخاب کنند. پس از انتخاب مسیر، رقابت برای رسیدن به هدف نهایی در ماز آغاز میشود.
+ **ملاک سنجش:** این فاز آزمونی برای سنجش قدرت تصمیمگیری لحظهای، انتخاب استراتژی بهینه و عملکرد ایجنت در یک محیط رقابتی و پویا است.
## توضیحات فنی
برای موفقیت در این مسابقه، ایجنت شما باید نیازمندیهای فنی مشخصی را برآورده کند.
### نیازمندیهای ایجنت
فایل ارسالی شما باید با نام `solution.py` شامل کلاسی به نام `ContestantAgent` با ساختار زیر باشد:
```py
class ContestantAgent:
def __init__(self, api_key: str):
# پیادهسازی شما برای مقداردهی اولیه ایجنت
# شامل تعریف مدل، ابزارها و ...
def solve_lock(self, problem: Dict[str, Any], history: List[Tuple[str, str]]) -> str:
# پیادهسازی شما برای حل یک قفل
# این متد باید پاسخ نهایی را به صورت یک رشته برگرداند
def choose_path(self, scenario_prompt: str) -> List[str]:
# پیادهسازی شما برای انتخاب مسیر در فاز دوم
```
### محیط توسعه و داوری
+ توجه کنید که **در کل مسابقه فقط 3 دلار اعتبار در محیط داوری دارید** و این اعتبار رو باید تا پایان مسابقه مدیریت کنید.
+ پس از هر ارسال، با کلیک بر روی **نمرهی خود** در ستون «وضعیت» از بخش «**همهی ارسالها**» میتونید میزان اعتبار باقیماندهی اختصاص یافته به خود را مطابق تصویر زیر مشاهده کنید.

+ دقت کنید که در کد ارسالی حتما مقدار base_url را برابر با
"https://api.metisai.ir/openai/v1 قرار دهید و حتما از توکن داده شده در ورودی سوال استفاده کنید. استفاده از توکنهای لوکال در جوابهای ارسالی ممنوع میباشد.
#### قوانین استفاده از LLM
+ در این مسابقه حتما باید از مدل `gpt-4.1-mini` استفاده کنید.
+ میتوانید tools جدید بنویسید و از آن استفاده کنید اما استفاده از از tool های آمادهی LLM مانند web_search ،file_search و ... مجاز نیست. ( در صورت مشاهده، دیسکوالیفای میشود)
+ حالت stream پیشتیبانی نمیشود.
### نحوه ارسال پاسخ
شما باید یک فایل `zip` با ساختار زیر ارسال کنید:
```
solution.zip
├── solution.py
└── python_requirements.txt
```
### نمونه پاسخ با استفاده از `pydantic-ai`
برای استفاده از pydantic-ai باید خط زیر را در فایل `python_requirements.txt` قرار دهید:
```txt python_requirements.txt
pydantic-ai-slim[openai]
```
سپس به صورت زیر از آن استفاده کنید.
\**توجه: هنگام ایجاد `OpenAIProvider` مقدار http_client را حتما به صورت دستی در آن ست کنید وگرنه کد شما در سامانهی داوری به درستی اجرا نمیشود!**
این یک قالب کلی از ساختار `solution.py` است که از شما انتظار میرود.
```py
import os
from typing import Dict, Any, List, Tuple
from pydantic_ai import Agent, RunContext
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.openai import OpenAIProvider
class ContestantAgent:
def __init__(self, api_key: str):
if not api_key:
raise ValueError("OpenAI API key is required.")
provider = OpenAIProvider(api_key=api_key,
base_url="https://api.metisai.ir/openai/v1",
http_client=httpx.AsyncClient()) # Don't forget!
model = OpenAIChatModel(provider=provider,
model_name="gpt-4.1-mini")
self.agent = Agent(
model=model,
system_prompt=(
"You are an expert problem-solving assistant. Your goal is to provide "
"only the final, precise answer..."
)
)
def solve_lock(self, problem: Dict[str, Any], history: List[Tuple[str, str]]) -> str:
prompt = self._construct_prompt(problem, history)
try:
result = self.agent.run_sync(prompt)
return str(result.output)
except Exception as e:
return f"Agent execution failed with an error: {e}"
def _construct_prompt(self, problem: Dict[str, Any], history: List[Tuple[str, str]]) -> str:
description = problem.get('description', '')
files = problem.get('input_files', [])
for file in files:
name = file['filename']
file_type = file['type']
url = file['url']
return "A well-formed prompt for the agent."
def choose_path(self, scenario_prompt: str) -> List[str]:
return ["Path_A"]
```
موفق و پیروز باشید و از این چالش لذت ببرید!
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.