Çok aracılı sistemler oluşturma

Büyük dil modellerinin güçlü bir uygulaması, LLM destekli temsilcilerdir. Temsilci, görevleri nasıl daha küçük parçalara ayıracağını planlayarak karmaşık görevleri yerine getirebilir ve (araç çağırma yardımıyla) veritabanları veya fiziksel cihazlar gibi harici kaynaklarla etkileşime geçen görevleri yürütebilir.

Tek bir istem ve çeşitli araçlar kullanılarak oluşturulan çok basit bir müşteri temsilcisinden bazı alıntılar aşağıda verilmiştir:

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

Temsilcinizin yalnızca birkaç özelliği varsa yukarıda gösterilen gibi basit bir mimari yeterli olabilir. Ancak yukarıdaki sınırlı örnekte bile müşterilerin muhtemelen beklediği bazı özellikler olduğunu görebilirsiniz. Örneğin, müşterinin mevcut rezervasyonlarını listeleme, rezervasyonu iptal etme vb. Bu ek özellikleri uygulamak için daha fazla araç geliştirdikçe bazı sorunlarla karşılaşmaya başlarsınız:

  • Ne kadar çok araç eklerseniz modelin iş için doğru aracı tutarlı ve doğru bir şekilde kullanma becerisi o kadar zorlaşır.
  • Bazı görevler, tek bir araç çağrısı yerine kullanıcı ile temsilci arasında daha odaklanmış bir şekilde gidip gelerek en iyi şekilde yerine getirilebilir.
  • Bazı görevler için özel istemler faydalı olabilir. Örneğin, müşteriniz memnun değilse müşteri temsilcinizin üslubunun daha resmi olmasını isteyebilirsiniz. Müşteriyi ilk karşılayan müşteri temsilcisinin üslubu ise daha samimi ve neşeli olabilir.

Karmaşık aracılar oluştururken ortaya çıkan bu sorunları gidermek için kullanabileceğiniz bir yaklaşım, birçok uzmanlaşmış aracı oluşturmak ve görevleri onlara devretmek için genel amaçlı bir aracı kullanmaktır. Genkit, istemleri araç olarak belirtmenize olanak tanıyarak bu mimariyi destekler. Her istem, kendi araç setine sahip tek bir uzman aracıyı temsil eder. Bu aracılar da kullanıcıyla birincil arayüz olan tek orkestrasyon aracınızın araçları olarak kullanılabilir.

Önceki örneğin genişletilmiş bir sürümü, çoklu ajanslı sistem olarak aşağıdaki gibi görünebilir:

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