Prompt Engineering

فراتر از چت: تسلط بر استفاده از ابزار در برنامه‌های LLM مدرن

برای سال‌ها، مدل‌های زبانی بزرگ (LLMs) عمدتاً به عنوان پیش‌بین‌کننده‌های متنی پیشرفته دیده می‌شدند. اگرچه توانایی‌های گفتگویی به شدت بهبود یافته‌اند، اما قدرت تحول‌آفرین واقعی هوش مصنوعی مولد در توانایی آن برای تعامل با دنیای بیرون نهفته است. این تعامل از طریق استفاده از ابزار (که اغلب به آن فراخوانی تابع گفته می‌شود) تسهیل می‌شود. برای توسعه‌دهندگان متوسط تا پیشرفته، درک نحوه معماری مؤثر استفاده از ابزار دیگر یک انتخاب نیست—این سنگ بنای ساخت عامل‌های هوش مصنوعی در سطح تولید است.

استفاده از ابزار چیست؟

استفاده از ابزار به یک LLM امکان می‌دهد تا اقدامات خاصی را فراتر از تولید متن اجرا کند. به جای تلاش برای توهم‌سازی یک پاسخ یا تکیه صرف بر داده‌های آموزشی ایستا، مدل می‌تواند یک تابع تعریف‌شده را با آرگومان‌های ساختاریافته فراخوانی کند. این توابع می‌توانند یک پایگاه داده را پرس‌وجو کنند، یک مقدار را محاسبه کنند، ایمیلی ارسال کنند یا یک خط لوله استقرار را فعال کنند.

مزیت اصلی در اینجا دقت است. LLMها به طور مشهوری در ریاضیات دقیق، بازیابی داده‌های بلادرنگ یا اقدامات قطعی ضعیف عمل می‌کنند. با سپردن این وظایف به کد، شما قابلیت‌های استدلال LLM را با قابلیت اطمینان مهندسی نرم‌افزار سنتی ترکیب می‌کنید.

معماری فراخوانی تابع

پیاده‌سازی استفاده از ابزار معمولاً از یک حلقه سه مرحله‌ای پیروی می‌کند: LLM تصمیم می‌گیرد که یک ابزار را فراخوانی کند، برنامه کد را اجرا می‌کند و نتیجه برای یک پاسخ نهایی به LLM بازگردانده می‌شود. این جریان ناهمگام نیاز به مدیریت دقیق وضعیت و زمینه دارد.

هنگام تعریف ابزارها، ارائه متاداده غنی حیاتی است. توضیح طرحواره به عنوان پل ارتباطی بین زبان طبیعی و کد عمل می‌کند. توضیحات مبهم منجر به فراخوانی‌های API نادرست می‌شود.

تعریف طرحواره یک ابزار

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

tool_definition = {
    "name": "get_current_weather",
    "description": "Get the current weather in a given location",
    "parameters": {
        "type": "object",
        "properties": {
            "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA"
            },
            "unit": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"],
                "description": "The temperature unit to use"
            }
        },
        "required": ["location"]
    }
}

بهترین شیوه‌ها برای پیاده‌سازی مقاوم

1. اعتبارسنجی سخت‌گیرانه

هرگز به خروجی LLM به صورت کورکورانه اعتماد نکنید. حتی با طرح‌واره‌های کامل، مدل‌ها ممکن است فیلدهای مورد نیاز را حذف کنند یا انواع داده نادرست ارائه دهند. همیشه اعتبارسنجی سمت سرور را با استفاده از ابزارهایی مانند Pydantic یا Zod قبل از اجرای هرگونه منطق تجاری پیاده‌سازی کنید. این امر اطمینان حاصل می‌کند که برنامه شما مستقل از تغییرات مدل، امن و پایدار باقی می‌ماند.

2. کاهش پیچیدگی ابزار

ابزارهای فردی را متمرکز نگه دارید. یک ابزار باید یک کار را به خوبی انجام دهد. رویه‌های پیچیده و چندمرحله‌ای مدل را گیج کرده و تأخیر را افزایش می‌دهند. اگر یک کار به چندین مرحله نیاز دارد، آن‌ها را به توابع گسسته و اتمی تقسیم کنید. این اجازه می‌دهد تا LLM گام به گام استدلال کند، تکنیکی که به آن پرامپت‌دهی زنجیره‌ای تفکر (chain-of-thought prompting) گفته می‌شود.

3. مدیریت خطاها به صورت شایسته

هنگامی که یک ابزار شکست می‌خورد (مثلاً زمان‌بندی پایگاه داده)، پیام خطا باید به LLM بازگردانده شود، نه به کاربر. این به مدل فرصت می‌دهد تا دوباره تلاش کند، درخواست شفاف‌سازی کند یا مشکل را به زبان قابل فهم توضیح دهد. حلقه به این صورت است:

  1. کاربر سوالی می‌پرسد.
  2. LLM search_docs را فراخوانی می‌کند.
  3. سرور یک خطا را برمی‌گرداند: "اتصال به نمای زمان‌بندی شد."
  4. LLM خطا را می‌بیند و دوباره تلاش می‌کند یا از کاربر عذرخواهی می‌کند.

مثال عملی: یک دستیار آب‌وهوا

یک دستیار آب‌وهوای ساده را در نظر بگیرید. خود پرامپت نیازی به تغییرات اساسی ندارد، اما دستورالعمل سیستم باید به صراحت استفاده از ابزار را فعال کند.

system_message = """
You are a helpful weather assistant. 
If the user asks about the weather, use the get_current_weather tool.
Do not make up weather data.
"""

هنگامی که کاربر پرس‌وجو می‌کند: "وضعیت آب‌وهوا در برلین چگونه است؟"، مدل قصد را تشخیص داده و یک پیکربندی JSON ساختاریافته برای فراخوانی تابع خروجی می‌دهد، به جای یک پاراگراف متنی. بک‌اند شما این را دریافت می‌کند، تابع پایتون را اجرا می‌کند و نتیجه را در تاریخچه مکالمه تزریق می‌کند.

نتیجه‌گیری

استفاده از ابزار، LLMها را از مخازن اطلاعات ایستا به عامل‌های پویایی تبدیل می‌کند که قادر به انجام اقدامات هستند. برای توسعه‌دهندگان، این به معنای تغییر تمرکز از تنظیم پرامپت‌ها به طراحی APIها و طرح‌واره‌های مقاوم و مستندسازی‌شده است. با در نظر گرفتن تعاریف ابزار به عنوان شهروندان درجه یک در معماری برنامه شما، پتانسیل واقعی هوش مصنوعی را آزاد می‌کنید: توانایی نه تنها صحبت کردن، بلکه انجام دادن.

Share: