Xây dựng hệ thống nhiều tác nhân

Một ứng dụng mạnh mẽ của mô hình ngôn ngữ lớn là các tác nhân dựa trên LLM. Tác nhân là một hệ thống có thể thực hiện các tác vụ phức tạp bằng cách lập kế hoạch cách chia các tác vụ thành các tác vụ nhỏ hơn và (nhờ sự trợ giúp của tính năng gọi công cụ) thực thi các tác vụ tương tác với các tài nguyên bên ngoài như cơ sở dữ liệu hoặc thậm chí là thiết bị thực.

Dưới đây là một số trích đoạn từ một nhân viên hỗ trợ khách hàng rất đơn giản được tạo bằng một câu lệnh và một số công cụ:

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],
});

Bạn có thể sử dụng một cấu trúc đơn giản như cấu trúc ở trên khi tác nhân của bạn chỉ có một vài chức năng. Tuy nhiên, ngay cả đối với ví dụ hạn chế ở trên, bạn cũng có thể thấy rằng có một số chức năng mà khách hàng có thể mong đợi: ví dụ: liệt kê các yêu cầu đặt trước hiện tại của khách hàng, huỷ yêu cầu đặt trước, v.v. Khi xây dựng ngày càng nhiều công cụ để triển khai các chức năng bổ sung này, bạn bắt đầu gặp phải một số vấn đề:

  • Bạn càng thêm nhiều công cụ, mô hình càng có khả năng sử dụng công cụ phù hợp một cách nhất quán và chính xác cho công việc.
  • Một số tác vụ có thể được phân phát tốt nhất thông qua quá trình trao đổi tập trung hơn giữa người dùng và tác nhân, thay vì một lệnh gọi công cụ duy nhất.
  • Một số tác vụ có thể hưởng lợi từ lời nhắc chuyên biệt. Ví dụ: nếu nhân viên hỗ trợ của bạn đang phản hồi một khách hàng không hài lòng, thì bạn có thể muốn giọng điệu của họ mang tính chuyên nghiệp hơn, trong khi nhân viên hỗ trợ chào đón khách hàng ban đầu có thể có giọng điệu thân thiện và nhẹ nhàng hơn.

Một phương pháp bạn có thể sử dụng để giải quyết những vấn đề này phát sinh khi xây dựng các tác nhân phức tạp là tạo nhiều tác nhân chuyên biệt và sử dụng một tác nhân có mục đích chung để uỷ quyền các tác vụ cho chúng. Genkit hỗ trợ cấu trúc này bằng cách cho phép bạn chỉ định lời nhắc dưới dạng công cụ. Mỗi lời nhắc đại diện cho một tác nhân chuyên biệt, với bộ công cụ riêng và các tác nhân đó lần lượt có sẵn dưới dạng công cụ cho tác nhân điều phối duy nhất của bạn, đây là giao diện chính với người dùng.

Dưới đây là phiên bản mở rộng của ví dụ trước dưới dạng hệ thống nhiều tác nhân:

// 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);