Firebase Genkit

Genkit là một khung được thiết kế để giúp bạn xây dựng các ứng dụng và tính năng dựa trên AI. Thư viện này cung cấp các thư viện nguồn mở cho Node.js và Go, cùng với các công cụ dành cho nhà phát triển để kiểm thử và gỡ lỗi.

Tài liệu này trình bày về Genkit cho Node.js. Nếu bạn là nhà phát triển Go, hãy xem tài liệu về Genkit Go.

Bạn có thể triển khai và chạy các thư viện Genkit ở bất cứ nơi nào có hỗ trợ Node.js. API này được thiết kế để hoạt động với mọi API mô hình AI tạo sinh hoặc cơ sở dữ liệu vectơ. Mặc dù chúng tôi cung cấp các tính năng tích hợp cho Firebase và Google Cloud, nhưng bạn có thể sử dụng Genkit độc lập với mọi dịch vụ của Google.

Bắt đầu

Các chức năng chính

API hợp nhất để tạo AI Sử dụng một API để tạo hoặc truyền trực tuyến nội dung từ nhiều mô hình AI. Hoạt động với chế độ cài đặt đầu vào/đầu ra đa phương thức và mô hình tuỳ chỉnh.
Kết quả có cấu trúc Tạo hoặc truyền trực tuyến các đối tượng có cấu trúc (như JSON) có tính năng xác thực tích hợp. Đơn giản hoá việc tích hợp với ứng dụng và chuyển đổi dữ liệu không có cấu trúc thành định dạng có thể sử dụng.
Gọi công cụ Cho phép mô hình AI gọi các hàm và API của bạn làm công cụ để hoàn thành tác vụ. Mô hình này quyết định thời điểm và công cụ nào sẽ được sử dụng.
Trò chuyện Genkit cung cấp một API dành riêng cho tính năng trò chuyện, giúp hỗ trợ các cuộc trò chuyện nhiều lượt với các mô hình AI. Các cuộc trò chuyện này có thể có trạng thái và ổn định.
Đại lý Tạo các tác nhân thông minh sử dụng các công cụ (bao gồm cả các tác nhân khác) để giúp tự động hoá các tác vụ và quy trình công việc phức tạp.
Truy xuất dữ liệu Cải thiện độ chính xác và mức độ liên quan của kết quả được tạo bằng cách tích hợp dữ liệu của bạn. Các API đơn giản giúp bạn nhúng, lập chỉ mục và truy xuất thông tin từ nhiều nguồn.
Tạo mẫu lời nhắc Tạo các câu lệnh hiệu quả bao gồm mẫu văn bản đa dạng thức, chế độ cài đặt mô hình, hỗ trợ nhiều phương thức và tích hợp công cụ – tất cả đều nằm trong một tệp câu lệnh nhỏ gọn, có thể chạy.

Hãy xem các mã mẫu sau đây để biết ý tưởng cụ thể về cách sử dụng các chức năng này trong mã:

Tạo cơ bản

import { genkit } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,  // Set default model
});

// Simple generation
const { text } = await ai.generate('Why is AI awesome?');
console.log(text);

// Streamed generation 
const { stream } = await ai.generateStream('Tell me a story');
for await (const chunk of stream) {
  console.log(chunk.text);
}

Kết quả có cấu trúc

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const { output } = await ai.generate({
  prompt: 'Create a brief profile for a character in a fantasy video game.',
  // Specify output structure using Zod schema
  output: {
    format: 'json',  
    schema: z.object({
      name: z.string(),
      role: z.enum(['knight', 'mage', 'archer']),
      backstory: z.string(),
    }),
  },
});

console.log(output);

Lệnh gọi hàm

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

// Define tool to get current weather for a given location
const getWeather = ai.defineTool(
  {
    name: "getWeather",
    description: "Gets the current weather in a given location",
    inputSchema: z.object({ 
      location: z.string().describe('The location to get the current weather for')
    }),
    outputSchema: z.string(),
  },
  async (input) => {
    // Here, we would typically make an API call or database query. For this
    // example, we just return a fixed value.
    return `The current weather in ${input.location} is 63°F and sunny.`;
  }
);

const { text } = await ai.generate({
    tools: [getWeather], // Give the model a list of tools it can call
    prompt: 'What is the weather like in New York? ',
});

console.log(text);

Chat

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const chat = ai.chat({ system: 'Talk like a pirate' });

let response = await chat.send('Hi, my name is Pavel');

response = await chat.send('What is my name?');
console.log(response.text);
// Ahoy there! Your name is Pavel, you scurvy dog

Nhân viên hỗ trợ

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

// Define prompts that represent specialist agents
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`
);

const menuInfoAgent = ...
const complaintAgent = ...

// Define a triage agent that routes to the proper specialist agent
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.`
);

// Create a chat to enable multi-turn agent interactions
const chat = ai.chat(triageAgent);

chat.send('I want a reservation at Pavel\'s Cafe for noon on Tuesday.' );

Truy xuất dữ liệu

import { genkit } from 'genkit';
import { googleAI, gemini15Flash, textEmbedding004 } from '@genkit-ai/googleai';
import { devLocalRetrieverRef } from '@genkit-ai/dev-local-vectorstore';

const ai = genkit({ 
  plugins: [
    googleAI()
    devLocalVectorstore([
      {
        indexName: 'BobFacts',
        embedder: textEmbedding004,
      },
    ]),
  ],
  model: gemini15Flash,
});

// Reference to a local vector database storing Genkit documentation
const retriever = devLocalRetrieverRef('BobFacts');

// Consistent API to retrieve most relevant documents based on semantic similarity to query
const docs = await ai.retrieve(
  retriever: retriever,
  query: 'How old is bob?',
);

const result = await ai.generate({
    prompt: `Use the provided context from the Genkit documentation to answer this query: ${query}`,
    docs // Pass retrieved documents to the model
});

Mẫu câu lệnh

---
model: vertexai/gemini-1.5-flash
config:
  temperature: 0.9
input:
  schema:
    properties:
      location: {type: string}
      style: {type: string}
      name: {type: string}
    required: [location]
  default:
    location: a restaurant
---

You are the most welcoming AI assistant and are currently working at {{location}}.

Greet a guest{{#if name}} named {{name}}{{/if}}{{#if style}} in the style of {{style}}{{/if}}.

Công cụ phát triển

Genkit cung cấp giao diện dòng lệnh (CLI) và giao diện người dùng dành cho nhà phát triển cục bộ để giúp việc xây dựng ứng dụng AI trở nên dễ dàng hơn. Các công cụ này giúp bạn:

  • Thử nghiệm: Kiểm thử và tinh chỉnh các hàm, câu lệnh và truy vấn AI.
  • Gỡ lỗi: Tìm và khắc phục vấn đề bằng dấu vết thực thi chi tiết.
  • Đánh giá: Đánh giá kết quả được tạo trên nhiều trường hợp kiểm thử.

Kết nối với chúng tôi

  • Tham gia cộng đồng: Nắm bắt thông tin cập nhật, đặt câu hỏi và chia sẻ công việc của bạn trên máy chủ Discord của chúng tôi.
  • Đưa ra ý kiến phản hồi: Báo cáo vấn đề hoặc đề xuất tính năng mới bằng cách sử dụng công cụ theo dõi lỗi của chúng tôi trên GitHub.

Các bước tiếp theo

Tìm hiểu cách tạo ứng dụng AI đầu tiên bằng Genkit trong hướng dẫn Bắt đầu của chúng tôi.