قابلیت Tool Calling در AI SDK


در AI SDK، یک tool می‌تواند هم در generateText استفاده شود، هم در streamText. این کار با قرار دادن یک یا چند Tool در پارامتری به نام tools، انجام می‌شود. یک tool، شامل سه خصیصه (property)، می‌باشد:

  • description: توضیحات اختیاری در مورد ابزار که هنگام استفاده مدل از ابزار، می‌تواند تاثیرگذار باشد.
  • parameters: یک Zod Schema یا یک JSON Schema که پارامترهای مورد نیاز tool را تعریف می‌کند. این اسکیما توسط مدل استفاده می‌شود.
  • execute: یک تابع async اختیاری که با آرگومان‌های داده شده در فراخوانی tool، صدا زده می‌شود. این خصیصه، یک مقدار از نوع RESULT ایجاد می‌کند.

پارامتر tools در generateText و streamText، یک آبجکت است که باید در آن، اسم toolها را به عنوان کلید تعریف کرده و خود toolها را به‌عنوان مقدار، به کلید تعریف شده، بدهید:

کپی
// npm i @ai-sdk/openai-compatible
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText, tool } from 'ai';
import { z } from 'zod';

const result = await generateText({
model: createOpenAICompatible({
baseURL: "<baseUrl>",
name: 'example',
apiKey: "<LIARA_API_KEY>",
}).chatModel("openai/gpt-4o-mini"),

tools: {
weather: tool({
description: 'Get the weather in a location',
parameters: z.object({
location: z.string().describe('The location to get the weather for'),
}),
execute: async ({ location }) => ({
location,
temperature: 72 + Math.floor(Math.random() * 21) - 10,
}),
}),
},

prompt: 'What is the weather in San Francisco?',
});

در قطعه کد فوق، در فیلد tools، یک tool به نام weather تعریف شده است که در آن، پارامتر location با استفاده از ماژول zod مشخص شده است. وقتی که این tool فراخوانی شود. تابع تعریف شده در بخش execute فراخوانی می‌شود و خروجی که بر اساس location است، یک دما را به‌صورت تصادفی (بین 62 تا 82 درجه فارنهایت)، تولید می‌کند.

وقتی که مدل تصمیم می‌گیرد از یک tool استفاده کند؛ یک tool call ایجاد می‌کند. در صورتی که فیلد execute، در یک tool تعریف شده باشد، در حین tool calling، تابع آن فیلد، اجرا می‌شود. در نهایت، خروجی تابع اجرا شده توسط tool calling، با استفاده از tool result object، برگردانده می‌شود.

شما می‌توانید با استفاده از قابلیت فراخوانی چند مرحله‌ای (multi-step calls)، خروجی یک tool را مجدداً به LLM برگردانید.