ابزار ایجنت هوش مصنوعی همان چیزی است که ایجنت را از یک چتبات جدا میکند. در قسمت قبل دیدیم ایجنت مغزی از جنس مدل زبانی دارد و بدنی از جنس ابزار. مغز هرقدر هم باهوش باشد، بدون ابزار مناسب نمیتواند کاری در دنیای واقعی انجام دهد.
در این قسمت از مجموعهی «از پرامپت تا دستیار هوش مصنوعی» میبینیم ابزار دقیقاً چیست، مدل چطور از وجودش باخبر میشود و چطور میتوان توضیح ابزار را خودکار از روی کد پایتون ساخت. در پایان هم با پروتکل MCP آشنا میشویم که تعریف ابزار را استاندارد کرده است.
ابزار ایجنت هوش مصنوعی چیست؟
ابزار تابعی است که در اختیار مدل زبانی قرار میگیرد و یک هدف روشن دارد. این تعریف ساده است، اما دو کلمهی کلیدی دارد: «تابع» و «هدف روشن». ابزاری که چند کار نامرتبط انجام دهد، مدل را سردرگم میکند.
چند ابزار رایج در ایجنتها را در جدول زیر میبینید. اینها فقط نمونهاند؛ در عمل برای هر کاربردی میتوان ابزار ساخت.
| ابزار | کاربرد |
|---|---|
| جستجوی وب | گرفتن اطلاعات بهروز از اینترنت |
| تولید تصویر | ساخت تصویر از روی توضیح متنی |
| بازیابی اطلاعات | خواندن داده از یک منبع بیرونی مثل اسناد شرکت |
| رابط API | کار با سرویسهایی مثل GitHub، YouTube یا تقویم |
ابزار خوب، ضعف مدل را جبران میکند
ابزار خوب کاری را انجام میدهد که مدل زبانی بهتنهایی در آن ضعیف است. مثلاً مدلها در محاسبهی دقیق عددهای بزرگ خطا میکنند. دادن یک ابزار ماشینحساب به مدل، نتیجهی بسیار مطمئنتری از تکیه بر توان محاسباتی خودش میدهد.
ضعف دیگر، دانش قدیمی است. مدل ادامهی متن را بر اساس دادههای آموزشیاش پیشبینی میکند. پس از رویدادهای بعد از آموزش خبر ندارد. اگر بدون ابزار جستجو از مدل بپرسید «هوای پاریس الان چطور است؟»، ممکن است با اطمینان کامل عددی ساختگی بگوید.
تصویر زیر همین تفاوت را نشان میدهد. مدل بدون ابزار آفتابی و ۳۰ درجه میگوید، اما ایجنتی که ابزار جستجو دارد، هوای واقعی یعنی باران و ۱۰ درجه را گزارش میکند.

اجزای یک ابزار
هر ابزار چهار جزء دارد. اول، توضیح متنی که میگوید تابع چه کاری انجام میدهد. دوم، خود بخش اجرایی؛ یعنی کدی که واقعاً کار را انجام میدهد. سوم، ورودیها همراه نوع دادهشان.
جزء چهارم اختیاری است: خروجی و نوع آن. تعریف خروجی به مدل کمک میکند بداند بعد از اجرای ابزار چه چیزی دریافت میکند و چطور از آن استفاده کند. هرچه این چهار جزء دقیقتر باشند، مدل ابزار را درستتر به کار میبرد.
ابزارها چطور کار میکنند؟
مدل زبانی فقط متن میگیرد و متن تولید میکند. خودش نمیتواند هیچ ابزاری را اجرا کند. وقتی میگوییم «به ایجنت ابزار میدهیم»، منظورمان این است که به مدل یاد میدهیم چنین ابزارهایی وجود دارند و هر وقت لازم شد، متنی بنویسد که فراخوانی ابزار را نشان دهد.
نقش ایجنت در اجرای ابزار
فرض کنید ابزار «هواشناسی» را به ایجنت دادهاید و کاربر دربارهی هوای پاریس میپرسد. مدل تشخیص میدهد وقت استفاده از این ابزار است. بهجای ساختن جواب، متنی مثل weather_tool('Paris') تولید میکند.
حالا نوبت ایجنت است؛ یعنی کدی که دور مدل را گرفته است. ایجنت این متن را میخواند، میفهمد فراخوانی ابزار لازم است، ابزار را اجرا میکند و دادهی واقعی هوا را میگیرد. این همان تقسیم کاری است که در function calling هم دیدیم.
پنهان از چشم کاربر
مراحل فراخوانی ابزار معمولاً به کاربر نشان داده نمیشود. ایجنت نتیجهی ابزار را بهعنوان یک پیام تازه به گفتوگو اضافه میکند و دوباره آن را به مدل میفرستد. مدل حالا با این زمینهی جدید، یک پاسخ طبیعی برای کاربر مینویسد.
از نگاه کاربر به نظر میرسد مدل مستقیم با ابزار کار کرده است. اما در واقع ایجنت کل فرایند اجرا را پشت صحنه مدیریت کرده است. در قسمت بعد همین چرخه را با جزئیات کامل بررسی میکنیم.
معرفی ابزار به مدل در پیام سیستمی
سادهترین راه معرفی ابزار، نوشتن توضیح متنی آن در پیام سیستمی است. برای این کار باید دربارهی دو چیز کاملاً دقیق باشیم: ابزار چه میکند و دقیقاً چه ورودیهایی لازم دارد. به همین دلیل توضیح ابزارها را معمولاً با ساختارهای دقیقی مثل JSON یا کد مینویسند.
مثال ماشینحساب
یک ابزار ماشینحساب ساده میسازیم که فقط دو عدد صحیح را ضرب میکند:
def calculator(a: int, b: int) -> int:
"""Multiply two integers."""
return a * bنام ابزار calculator است، دو عدد صحیح a و b میگیرد و حاصلضربشان را که عدد صحیح است برمیگرداند. همهی این جزئیات را در یک رشتهی متنی جمع میکنیم تا مدل بفهمد:
Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: intوقتی این متن بخشی از ورودی مدل شود، مدل آن را بهعنوان ابزار میشناسد و میداند چه ورودیای بدهد و چه خروجیای انتظار داشته باشد. اگر ابزار دیگری اضافه کنید، باید دقیقاً همین قالب را تکرار کنید. این کار دستی شکننده است و ممکن است جزئیاتی از قلم بیفتد.
ساخت خودکار توضیح ابزار با دکوراتور
خبر خوب این است که کد پایتون همهی اطلاعات لازم را از قبل دارد. نام تابع، توضیح آن در docstring، نوع ورودیها و نوع خروجی. کافی است این اطلاعات را با ماژول inspect پایتون بیرون بکشیم.
کتابخانههای ایجنت دقیقاً همین کار را با یک دکوراتور انجام میدهند. شما فقط @tool را بالای تابع میگذارید:
@tool
def calculator(a: int, b: int) -> int:
"""Multiply two integers."""
return a * b
print(calculator.to_string())خروجی همان رشتهای است که بالاتر دستی نوشتیم. پشت این دکوراتور یک کلاس Tool قرار دارد که نام، توضیح، تابع، ورودیها و خروجی را نگه میدارد. متد to_string هم توضیح متنی را میسازد و فراخوانی خود شیء، تابع اصلی را اجرا میکند.
توضیح ساختهشده سپس در پیام سیستمی جا میگیرد؛ درست مثل تصویر زیر.

MCP؛ رابط یکپارچهی ابزارها
تا اینجا هر فریمورک روش خودش را برای تعریف ابزار داشت. اگر ابزاری برای یک فریمورک میساختید، برای استفاده در فریمورک دیگر باید دوباره مینوشتیدش. Model Context Protocol یا MCP برای حل همین مشکل ساخته شده است.
MCP چه مزیتی دارد؟
MCP یک پروتکل باز است که روش ارائهی ابزار به مدلهای زبانی را استاندارد میکند. هر فریمورکی که MCP را پیاده کند، میتواند از ابزارهای تعریفشده در این پروتکل استفاده کند:
- اتصالهای آماده: فهرست رو به رشدی از ابزارهای آماده که مدل مستقیم به آنها وصل میشود.
- آزادی انتخاب: امکان جابهجایی میان ارائهدهندگان مختلف مدل بدون بازنویسی ابزارها.
- امنیت داده: روشهای پیشنهادی برای نگهداشتن دادهها داخل زیرساخت خودتان.
MCP در عمل برای ابزارهای ایجنت همان نقشی را دارد که یک استاندارد برای قطعههای الکترونیکی دارد. ابزار را یک بار میسازید و همهجا استفاده میکنید. برای یادگیری عمیقتر، Hugging Face یک دورهی رایگان MCP هم دارد.
نکتههای طراحی ابزار خوب
چند اصل ساده کیفیت ابزارها را بهشدت بالا میبرد. هر ابزار فقط یک کار انجام دهد. نامش گویا باشد؛ search_courses بهتر از tool1 است. توضیحش بگوید ابزار کی باید استفاده شود، نه فقط چه میکند.
ورودیها را با نوع دقیق و توضیح کوتاه تعریف کنید و خروجی را طوری برگردانید که مدل راحت بفهمد. پیام خطا هم بخشی از طراحی است؛ اگر ابزار شکست خورد، متنی روشن برگرداند تا مدل بتواند راه دیگری امتحان کند.
تمرین عملی؛ ابزارهای دستیار دورهها
برای دستیار پروژهی مشترک سه ابزار طراحی کنید. لازم نیست هنوز کدشان را کامل بنویسید؛ تعریف دقیق کافی است:
search_courses(topic: str, level: str) -> list؛ جستجوی دوره بر اساس موضوع و سطح.get_course_details(course_id: str) -> dict؛ گرفتن مشخصات کامل یک دوره.check_capacity(course_id: str) -> int؛ بررسی ظرفیت خالی کلاس.
برای هر ابزار یک docstring بنویسید که بگوید ابزار کی باید استفاده شود. بعد با دکوراتور @tool توضیح متنی هر سه را بسازید و کنار هم بگذارید. همین متن، پیام سیستمی ایجنت ما در قسمت یازدهم خواهد بود.
سخن پایانی
ابزار ایجنت هوش مصنوعی تابعی با هدف روشن است که کمبودهای مدل را جبران میکند؛ از محاسبهی دقیق تا دسترسی به دادهی زنده. مدل خودش ابزار را اجرا نمیکند، بلکه با خواندن توضیح ابزار میفهمد کی و با چه ورودیای آن را صدا بزند. ایجنت اجرا را انجام میدهد و نتیجه را برمیگرداند. توضیح دقیق، ورودی نوعدار و استانداردهایی مثل MCP، ابزار را قابلاعتماد و قابلاستفادهی دوباره میکنند.
در قسمت دهم چرخهی کامل کار ایجنت را میبینیم: فکر، اقدام و مشاهده.
این آموزش بر پایهی بخش What are Tools? از دورهی آزاد Agents Course در Hugging Face (مجوز Apache-2.0) به فارسی بازنویسی و تکمیل شده است.
پرسشهای پرتکرار
ابزار در ایجنت هوش مصنوعی دقیقاً چیست؟
تابعی که در اختیار مدل زبانی قرار میگیرد و یک هدف روشن دارد؛ مثل جستجوی وب، محاسبه یا ارسال ایمیل. هر ابزار یک نام، توضیح متنی، ورودیهای نوعدار و در صورت امکان خروجی مشخص دارد.
مدل زبانی چطور از وجود ابزارها باخبر میشود؟
توضیح متنی ابزارها در پیام سیستمی یا در فیلد مخصوص ابزار در API قرار میگیرد. مدل با خواندن این توضیح میفهمد هر ابزار چه میکند و چه ورودیای لازم دارد.
MCP چیست؟
Model Context Protocol یک پروتکل باز است که روش ارائهی ابزار به مدلهای زبانی را استاندارد میکند. ابزاری که یک بار با MCP تعریف شود، در هر فریمورک و برنامهای که از MCP پشتیبانی کند قابل استفاده است.
چه چیزی یک ابزار را خوب میکند؟
هدف واحد و روشن، نام گویا، توضیح دقیق، ورودیهای نوعدار و خروجی قابلفهم. ابزار خوب کاری را انجام میدهد که مدل بهتنهایی در آن ضعیف است؛ مثل محاسبهی دقیق یا دسترسی به دادهی زنده.







دیدگاهها
هنوز دیدگاهی ثبت نشده است. شروعکننده باشید — پرسش و اصلاح را با آغوش باز میپذیریم.