یک برنامه قدرتمند از مدل های زبان بزرگ، عواملی هستند که از LLM پشتیبانی می کنند. عامل سیستمی است که میتواند وظایف پیچیدهای را با برنامهریزی نحوه تقسیم وظایف به وظایف کوچکتر انجام دهد و (با کمک ابزار فراخوانی ) وظایفی را اجرا کند که با منابع خارجی مانند پایگاههای داده یا حتی دستگاههای فیزیکی تعامل دارند.
در اینجا چند گزیده از یک نماینده خدمات مشتری بسیار ساده است که با استفاده از یک اعلان واحد و چندین ابزار ساخته شده است:
const menuLookupTool = ai.defineTool(
{
name: 'menuLookupTool',
description: 'use this tool to look up the menu for a given date',
inputSchema: z.object({
date: z.string().describe('the date to look up the menu for'),
}),
outputSchema: z.string().describe('the menu for a given date'),
},
async (input) => {
// Retrieve the menu from a database, website, etc.
// ...
}
);
const reservationTool = ai.defineTool(
{
name: 'reservationTool',
description: 'use this tool to try to book a reservation',
inputSchema: z.object({
partySize: z.coerce.number().describe('the number of guests'),
date: z.string().describe('the date to book for'),
}),
outputSchema: z
.string()
.describe(
"true if the reservation was successfully booked and false if there's" +
' no table available for the requested time'
),
},
async (input) => {
// Access your database to try to make the reservation.
// ...
}
);
const chat = ai.chat({
model: gemini15Pro,
system:
"You are an AI customer service agent for Pavel's Cafe. Use the tools " +
'available to you to help the customer. If you cannot help the ' +
'customer with the available tools, politely explain so.',
tools: [menuLookupTool, reservationTool],
});
یک معماری ساده مانند آنچه در بالا نشان داده شده است زمانی می تواند کافی باشد که عامل شما فقط چند قابلیت داشته باشد. با این حال، حتی برای مثال محدود بالا، میتوانید ببینید که برخی از قابلیتها وجود دارد که مشتریان احتمالاً انتظار دارند: به عنوان مثال، فهرست کردن رزروهای فعلی مشتری، لغو رزرو، و غیره. با ایجاد ابزارهای بیشتر و بیشتری برای اجرای این قابلیت های اضافی، با مشکلاتی مواجه می شوید:
- هرچه ابزارهای بیشتری اضافه کنید، توانایی مدل برای به کارگیری مداوم و صحیح ابزار مناسب برای کار را بیشتر می کنید.
- برخی از وظایف ممکن است از طریق یک تماس با ابزار متمرکزتر بین کاربر و عامل انجام شود.
- برخی از کارها ممکن است از یک اعلان تخصصی بهره مند شوند. به عنوان مثال، اگر نماینده شما به مشتری ناراضی پاسخ می دهد، ممکن است بخواهید لحن آن بیشتر تجاری باشد، در حالی که نماینده ای که در ابتدا به مشتری سلام می کند می تواند لحن دوستانه و سبک تری داشته باشد.
یکی از روشهایی که میتوانید برای مقابله با این مسائل که هنگام ساخت عوامل پیچیده به وجود میآیند استفاده کنید، ایجاد بسیاری از نمایندگان تخصصی و استفاده از یک عامل با هدف عمومی برای واگذاری وظایف به آنها است. Genkit از این معماری پشتیبانی میکند و به شما اجازه میدهد تا دستورات را به عنوان ابزار مشخص کنید. هر اعلان یک نماینده تخصصی واحد را نشان می دهد، با مجموعه ابزارهای خاص خود که در دسترس است، و آن عوامل به نوبه خود به عنوان ابزار برای عامل هماهنگ کننده واحد شما، که رابط اصلی با کاربر است، در دسترس هستند.
در اینجا یک نسخه توسعه یافته از مثال قبلی ممکن است به عنوان یک سیستم چند عاملی به نظر برسد:
// Define a prompt that represents a specialist agent
const reservationAgent = ai.definePrompt(
{
name: 'reservationAgent',
description: 'Reservation Agent can help manage guest reservations',
tools: [reservationTool, reservationCancelationTool, reservationListTool],
},
'{{role "system"}} Help guests make and manage reservations'
);
// Or load agents from .prompt files
const menuInfoAgent = ai.prompt('menuInfoAgent');
const complaintAgent = ai.prompt('complaintAgent');
// The triage agent is the agent that users interact with initially
const triageAgent = ai.definePrompt(
{
name: 'triageAgent',
description: 'Triage Agent',
tools: [reservationAgent, menuInfoAgent, complaintAgent],
},
`{{role "system"}} You are an AI customer service agent for Pavel's Cafe.
Greet the user and ask them how you can help. If appropriate, transfer to an
agent that can better handle the request. If you cannot help the customer with
the available tools, politely explain so.`
);
// Start a chat session, initially with the triage agent
const chat = ai.chat(triageAgent);