AI Agents

تسلط بر فراخوانی ابزار: موتور محرک عامل‌های هوش مصنوعی خودمختار

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

تعریف مکانیسم

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

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

تعریف ابزارها و اسکیمای‌ها

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

یک ابزار ساده آب‌وهوا را در نظر بگیرید. اسکیما باید به وضوح تعریف کند که ورودی یک رشته (string) است که یک مکان را نشان می‌دهد. اگر اسکیما مبهم باشد، LLM ممکن است مختصات را ارسال کند در حالی که نام شهر مورد انتظار است، یا برعکس.

پیاده‌سازی: یک نمونه پایتون

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

import json
import openai

# 1. تعریف تابعی که LLM می‌تواند از آن استفاده کند
def get_current_weather(location: str) -> str:
    """
    دریافت آب‌وهوای فعلی در یک مکان مشخص.
    """
    # در یک اپلیکیشن واقعی، این تابع از یک API خارجی استفاده می‌کند
    return f"The weather in {location} is sunny, 72F."

# 2. تعریف اسکیمای ابزار برای LLM
tools = [
    {
        "type": "function",
        "function": {
            "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"
                    }
                },
                "required": ["location"]
            }
        }
    }
]

# 3. ارسال درخواست کاربر به LLM
response = openai.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "What's the weather like in Paris?"}
    ],
    tools=tools,
)

# 4. پردازش فراخوانی ابزار
message = response.choices[0].message
if message.tool_calls:
    for tool_call in message.tool_calls:
        function_name = tool_call.function.name
        function_args = json.loads(tool_call.function.arguments)
        
        # اجرای تابع محلی
        if function_name == "get_current_weather":
            result = get_current_weather(**function_args)
        
        # بازگرداندن نتیجه به LLM
        messages = [
            {"role": "user", "content": "What's the weather like in Paris?"},
            message,
            {"role": "tool", "tool_call_id": tool_call.id, "content": result}
        ]
        
        # دریافت پاسخ نهایی
        final_response = openai.chat.completions.create(
            model="gpt-4o",
            messages=messages,
        )
        print(final_response.choices[0].message.content)

چالش‌ها و بهترین روش‌ها

پیاده‌سازی مؤثر فراخوانی ابزار نیازمند رسیدگی به چندین چالش است:

  • تأخیر (Latency): فراخوانی ابزارها شامل چندین رفت‌وآمد با API است. هر جا ممکن است، برای اجرای ناهمگام طراحی کنید.
  • مدیریت خطا: اگر ابزاری شکست بخورد، پیام خطا باید به گونه‌ای به LLM بازگردانده شود که امکان تلاش مجدد با آرگومان‌های اصلاح‌شده را داشته باشد یا کاربر را مطلع کند.
  • امنیت: هرگز به LLM اجازه ندهید مستقیماً کد دلخواه را اجرا کند. تمام ابزارها باید در یک محیط ایزوله (Sandbox) قرار گیرند و به طور سختگیرانه تعریف شوند.
  • مدیریت پنجره زمینه: زنجیره‌های طولانی از فراخوانی ابزارها می‌توانند پنجره زمینه را فراتر از حد مجاز ببرند. استراتژی‌های حذف (Truncation) یا خلاصه‌سازی برای مراحل میانی پیاده‌سازی کنید.

نتیجه‌گیری

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

Share: