آموزش Agent-بخش 10: ساخت agent با smolagents

بیایید اولین Agent خود را با استفاده از smolagents بسازیم
در بخش قبلی، یاد گرفتیم که چگونه میتوانیم Agentها را از ابتدا با استفاده از کد Python ایجاد کنیم، و دیدیم که این فرآیند چقدر میتواند خستهکننده باشد. خوشبختانه، بسیاری از کتابخانههای Agent این کار را با انجام بخش زیادی از کارهای سنگین برای شما سادهتر میکنند.
در این آموزش، شما اولین Agent خود را که قادر به انجام اقداماتی مانند تولید تصویر (image generation)، جستجوی وب (web search)، بررسی منطقه زمانی (time zone checking) و بسیاری موارد دیگر است را خواهید ساخت.
همچنین، میآموزیم که چگونه Agent خود را روی Hugging Face Space منتشر کنیم تا آن را با دوستان و همکاران خود به اشتراک بگذاریم.
smolagents چیست؟
در این پست برای ساخت Agent، ما از smolagents
استفاده خواهیم کرد، کتابخانهای که چارچوبی برای توسعه آسان Agentها را فراهم میکند.
این کتابخانه سبک برای سادگی طراحی شده و بسیاری از پیچیدگیهای ساخت یک Agent را از دید شما مخفی کرده و شما میتوانید روی طراحی رفتار Agent خود تمرکز کنید.
ما در پستهای بعدی عمیقتر به smolagents
خواهیم پرداخت. در این بین، میتوانید این پست وبلاگ یا مخزن کتابخانه در GitHub را نیز بررسی کنید.
به طور خلاصه، smolagents کتابخانهای است که بر codeAgent تمرکز دارد، نوعی از Agent که اقدامات (Actionها) را از طریق بلوکهای کد انجام میدهد و سپس با اجرای کد، نتایج را مشاهده (Observe) میکند.
اینجا نمونهای از آنچه خواهیم ساخت، آمده است!
ما به Agent خود یک ابزار تولید تصویر دادیم و از آن خواستیم تصویری از یک گربه تولید کند.
Agent داخل smolagents همان رفتارهایی را خواهد داشت که قبلاً در Agent سفارشی خود ساختیم: در یک چرخه، فکر میکند، اقدام میکند و مشاهده میکند تا به یک پاسخ نهایی برسد:
بیایید Agent خود را بسازیم!
برای شروع، این فضا را duplicate کنید: https://huggingface.co/spaces/agents-course/First_agent_template
duplicate کردن این فضا به معنای ایجاد یک نسخه در پروفایل خودتان است:
بعد از اینکه فضا را duplicate کردید، باید توکن API هاگینگ فیس خود را اضافه کنید تا Agent بتواند به مدل دسترسی داشته باشد:
- اگر توکن ندارید، یک توکن با مجوز inference از hf.co/settings/tokens بگیرید.
- به فضای duplicate شده خود بروید و روی Settings کلیک کنید.
- به بخش Variables and Secrets بروید و روی New Secret کلیک کنید.
- یک secret با نام
HF_TOKEN
ساخته و توکن خود را در آن وارد کنید. - برای ذخیره توکن، روی Save کلیک کنید.
در این آموزش، فقط باید فایل app.py (که هنوز کامل نیست) را ویرایش کنید. میتوانید فایل اصلی را در قالب ببینید. برای پیدا کردن فایل خودتان، به فضای کپی شده بروید، روی Files کلیک کنید و سپس روی app.py در فهرست فایلها کلیک کنید.
حالا بیایید کد را بررسی کنیم:
فایل با چند دستور import ساده و ضروری شروع میشود.
from smolagents import CodeAgent, DuckDuckGoSearchTool, FinalAnswerTool, HfApiModel, load_tool, tool import datetime import requests import pytz import yaml
همانطور که قبلاً توضیح داده شد، ما مستقیماً از کلاس CodeAgent از smolagents استفاده خواهیم کرد.
ابزارها
حالا بیایید به ابزارها بپردازیم! اگر میخواهید مروری بر ابزارها داشته باشید، میتوانید به بخش Tools آموزشهای قبلی مراجعه کنید.
@tool def my_custom_tool(arg1:str, arg2:int)-> str: # it's important to specify the return type # Keep this format for the tool description / args description but feel free to modify the tool """A tool that does nothing yet Args: arg1: the first argument arg2: the second argument """ return "What magic will you build ?" @tool def get_current_time_in_timezone(timezone: str) -> str: """A tool that fetches the current local time in a specified timezone. Args: timezone: A string representing a valid timezone (e.g., 'America/New_York'). """ try: # Create timezone object tz = pytz.timezone(timezone) # Get current time in that timezone local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") return f"The current local time in {timezone} is: {local_time}" except Exception as e: return f"Error fetching time for timezone '{timezone}': {str(e)}"
ابزارها همان چیزهایی هستند که قرار است در این بخش بسازید! بدین منظور دو مثال ارائه شده است:
- یک ابزار ساختگی که میتوانید بعداً خودتان آن را تغییر دهید تا یک چیز مفید بسازید.
- یک ابزار که واقعاً کار میکند و زمان فعلی را در یک منطقه زمانی خاص دریافت میکند.
برای تعریف ابزار خود، مهم است که:
- نوع ورودی و خروجی تابع خود را مشخص کنید، مانند
get_current_time_in_timezone(timezone: str) -> str:
- یک توضیحات (docstring) با فرمت مناسب ارائه دهید. smolagents انتظار دارد که تمام آرگومانها در docstring یک توضیح متنی داشته باشند.
Agent
این Agent از Qwen/Qwen2.5-Coder-32B-Instruct به عنوان موتور LLM استفاده میکند. این مدل بسیار قدرتمند است که ما از طریق API بدون سرور (serverless API) به آن دسترسی خواهیم داشت.
final_answer = FinalAnswerTool() model = HfApiModel( max_tokens=2096, temperature=0.5, model_id='Qwen/Qwen2.5-Coder-32B-Instruct', custom_role_conversions=None, ) with open("prompts.yaml", 'r') as stream: prompt_templates = yaml.safe_load(stream) # We're creating our CodeAgent agent = CodeAgent( model=model, tools=[final_answer], # add your tools here (don't remove final_answer) max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name=None, description=None, prompt_templates=prompt_templates ) GradioUI(agent).launch()
این Agent هنوز از InferenceClient
که در بخشهای قبلی دیدیم، در پس کلاس HfApiModel
استفاده میکند!
در آموزشهای بعدی کلاس ویژن مثالهای دقیقتری را ارائه خواهیم داد. در حال حاضر، باید روی اضافه کردن ابزارهای جدید به لیست ابزارها با استفاده از پارامتر tools
در Agent خود تمرکز کنیم.
به عنوان مثال، میتوانید از DuckDuckGoSearchTool
که در خط اول کد import شده است، استفاده کنید، یا میتوانید image_generation_tool
را که بعداً از Hub بارگذاری میشود، بررسی کنید.
اضافه کردن ابزارها به Agent شما قابلیتهای جدیدی میدهد، سعی کنید خلاق باشید!
System Prompt
System promptهای Agent در یک فایل جداگانه به نام prompts.yaml
ذخیره میشوند. این فایل شامل دستورالعملهای از پیش تعریفشدهای است که رفتار Agent را هدایت میکند.
ذخیره promptها در یک فایل YAML، سفارشیسازی و استفاده مجدد آسان را در Agentهای مختلف یا موارد استفاده فراهم میکند.
میتوانید ساختار فایل Space را بررسی کنید تا ببینید فایل prompts.yaml
در کجا قرار دارد و چگونه در پروژه سازماندهی شده است.
فایل کامل “app.py”:
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool import datetime import requests import pytz import yaml from tools.final_answer import FinalAnswerTool from Gradio_UI import GradioUI # Below is an example of a tool that does nothing. Amaze us with your creativity! @tool def my_custom_tool(arg1:str, arg2:int)-> str: # it's important to specify the return type # Keep this format for the tool description / args description but feel free to modify the tool """A tool that does nothing yet Args: arg1: the first argument arg2: the second argument """ return "What magic will you build ?" @tool def get_current_time_in_timezone(timezone: str) -> str: """A tool that fetches the current local time in a specified timezone. Args: timezone: A string representing a valid timezone (e.g., 'America/New_York'). """ try: # Create timezone object tz = pytz.timezone(timezone) # Get current time in that timezone local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") return f"The current local time in {timezone} is: {local_time}" except Exception as e: return f"Error fetching time for timezone '{timezone}': {str(e)}" final_answer = FinalAnswerTool() model = HfApiModel( max_tokens=2096, temperature=0.5, model_id='Qwen/Qwen2.5-Coder-32B-Instruct', custom_role_conversions=None, ) # Import tool from Hub image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) # Load system prompt from prompt.yaml file with open("prompts.yaml", 'r') as stream: prompt_templates = yaml.safe_load(stream) agent = CodeAgent( model=model, tools=[final_answer], # add your tools here (don't remove final_answer) max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name=None, description=None, prompt_templates=prompt_templates # Pass system prompt to CodeAgent ) GradioUI(agent).launch()
هدف شما این است که با این فضا و Agent آشنا شوید.
در حال حاضر، Agent موجود در الگو از هیچ ابزاری استفاده نمیکند، بنابراین سعی کنید برخی از ابزارهای آماده را به آن اضافه کنید یا حتی خودتان ابزارهای جدیدی بسازید!
مشتاقانه منتظر خروجی Agentهای شگفتانگیز شما در نظرات این پست هستیم!
تبریک! شما اولین Agent خود را ساختید! در به اشتراک گذاشتن آن با دوستان و همکارانتان دریغ نکنید.
از آنجایی که این اولین تلاش شماست، کاملاً طبیعی است که کمی باگ داشته باشد یا کند باشد. در بخش های بعدی، می آموزیم که چگونه Agentهای بهتری بسازیم.
بهترین راه برای یادگیری، تلاش کردن است، بنابراین در بهروزرسانی آن، افزودن ابزارهای بیشتر، امتحان کردن با یک مدل دیگر و … دریغ نکنید.
دیدگاهتان را بنویسید