Viết trình bổ trợ Genkit

Các tính năng của Firebase Genkit được thiết kế để mở rộng bằng các trình bổ trợ. Trình bổ trợ Genkit là các mô-đun có thể định cấu hình có thể cung cấp các mô hình, chú chó tha mồi, trình lập chỉ mục, kho lưu trữ dấu vết, v.v. Bạn đã thấy các trình bổ trợ trong bằng cách sử dụng Genkit:

import { configureGenkit } from '@genkit-ai/core';
import { vertexAI } from '@genkit-ai/vertexai';

configureGenkit({
  plugins: [vertexAI({ projectId: 'my-project' })],
});

Trình bổ trợ Vertex AI sẽ định cấu hình (chẳng hạn như Google Cloud của người dùng) project ID) và đăng ký nhiều mô hình, trình nhúng mới, v.v. bằng Sổ đăng ký Genkit. Sổ đăng ký hỗ trợ giao diện người dùng cục bộ của Genkit để chạy và kiểm tra mô hình, lời nhắc, v.v. cũng như đóng vai trò là dịch vụ tra cứu cho trong thời gian chạy.

Tạo trình bổ trợ

Để tạo trình bổ trợ, thông thường, bạn cần tạo một gói TLD mới:

mkdir genkitx-my-plugin
cd genkitx-my-plugin
npm init -y
npm i --save @genkit-ai/core
npm i --save-dev typescript
npx tsc --init

Sau đó, xác định và xuất trình bổ trợ từ điểm truy cập chính của bạn:

import { genkitPlugin } from '@genkit-ai/core';

interface MyPluginOptions {
  // add any plugin configuration here
}

export const myPlugin = genkitPlugin(
  'my-plugin',
  async (options: MyPluginOptions) => {
    // initialize your plugin here...
  }
);

Hướng dẫn về các lựa chọn về trình bổ trợ

Nói chung, trình bổ trợ của bạn nên nhận một đối số options duy nhất bao gồm mọi cấu hình cần thiết cho toàn bộ trình bổ trợ để hoạt động. Đối với bất kỳ tuỳ chọn trình bổ trợ nào yêu cầu giá trị bí mật, chẳng hạn như khoá API. Bạn nên cung cấp cả lựa chọn và biến môi trường mặc định để định cấu hình biến đó:

import { genkitPlugin, GenkitError } from '@genkit-ai/core';

interface MyPluginOptions {
  apiKey?: string;
}

export const myPlugin = genkitPlugin(
  'my-plugin',
  async (options: MyPluginOptions) => {
    const apiKey = options.apiKey || process.env.MY_PLUGIN_API_KEY;
    if (!apiKey)
      throw new GenkitError({
        source: 'my-plugin',
        status: 'INVALID_ARGUMENT',
        message:
          'Must supply either `options.apiKey` or set `MY_PLUGIN_API_KEY` environment variable.',
      });
    // ... continue initialization
  }
);

Xây dựng trình bổ trợ

Một trình bổ trợ duy nhất cũng có thể kích hoạt nhiều tính năng mới trong Genkit. Ví dụ: Trình bổ trợ Vertex AI kích hoạt một số mô hình mới cũng như một trình nhúng.

Trình bổ trợ mô hình

Các trình bổ trợ mô hình Genkit sẽ thêm một hoặc nhiều mô hình AI tạo sinh vào sổ đăng ký Genkit. Một mô hình đại diện cho mọi dữ liệu tạo sinh có khả năng nhận câu lệnh dưới dạng dữ liệu đầu vào và tạo văn bản, nội dung nghe nhìn hoặc dữ liệu làm đầu ra. Nói chung, một trình bổ trợ mô hình sẽ thực hiện một hoặc nhiều lệnh gọi defineModel trong hàm khởi chạy.

Một mô hình tuỳ chỉnh thường bao gồm ba thành phần:

  1. Siêu dữ liệu xác định các chức năng của mô hình.
  2. Giản đồ cấu hình có mọi tham số cụ thể mà mô hình hỗ trợ.
  3. Một hàm triển khai mô hình chấp nhận GenerateRequest và trả về GenerateResponse.

Để xây dựng trình bổ trợ mô hình, bạn cần sử dụng gói @genkit-ai/ai:

npm i --save @genkit-ai/ai

Ở cấp độ cao, trình bổ trợ mô hình có thể có dạng như sau:

import { genkitPlugin, GenkitError } from '@genkit-ai/core';
import { defineModel, GenerationCommonConfigSchema } from '@genkit-ai/ai/model';
import { simulateSystemPrompt } from '@genkit-ai/ai/model/middleware';
import { z } from 'zod';

export const myPlugin = genkitPlugin('my-plugin', async (options: {apiKey?: string}) => {
  defineModel({
    // be sure to include your plugin as a provider prefix
    name: 'my-plugin/my-model',
    // label for your model as shown in Genkit Developer UI
    label: 'My Awesome Model',
    // optional list of supported versions of your model
    versions: ['my-model-001', 'my-model-001'],
    // model support attributes
    supports: {
      multiturn: true, // true if your model supports conversations
      media: true, // true if your model supports multimodal input
      tools: true, // true if your model supports tool/function calling
      systemRole: true, // true if your model supports the system role
      output: ['text', 'media', 'json'], // types of output your model supports
    },
    // Zod schema for your model's custom configuration
    configSchema: GenerationCommonConfigSchema.extend({
      safetySettings: z.object({...}),
    }),
    // list of middleware for your model to use
    use: [simulateSystemPrompt()]
  }, async request => {
    const myModelRequest = toMyModelRequest(request);
    const myModelResponse = await myModelApi(myModelRequest);
    return toGenerateResponse(myModelResponse);
  });
});

Biến đổi yêu cầu và phản hồi

Công việc chính của trình bổ trợ mô hình Genkit là biến đổi GenerateRequest từ định dạng phổ biến của Genkit thành định dạng được chấp nhận và được API của mô hình hỗ trợ, sau đó chuyển đổi phản hồi từ sang định dạng GenerateResponseData mà Genkit sử dụng.

Trong một số trường hợp, bạn có thể phải sử dụng khối hoặc điều khiển dữ liệu để khắc phục các hạn chế của mô hình. Ví dụ: nếu mô hình của bạn vốn không hỗ trợ thông báo system, thì bạn có thể cần phải chuyển đổi thông báo hệ thống của lời nhắc thành một cặp thông báo người dùng/mô hình.

Tài liệu tham khảo về mô hình

Sau khi đăng ký một mô hình bằng defineModel, mô hình đó sẽ luôn có sẵn khi được yêu cầu theo tên. Tuy nhiên, để cải thiện khả năng nhập và tự động hoàn thành IDE, bạn có thể xuất tham chiếu mô hình từ gói của bạn chỉ bao gồm siêu dữ liệu cho một nhưng không triển khai mô hình đó:

import { modelRef } from "@genkit-ai/ai/model";

export myModelRef = modelRef({
  name: "my-plugin/my-model",
  configSchema: MyConfigSchema,
  info: {
    // ... model-specific info
  },
})

Khi gọi generate(), bạn có thể sử dụng tham chiếu mô hình và tên mô hình chuỗi thay thế cho nhau:

import { myModelRef } from 'genkitx-my-plugin';
import { generate } from '@genkit-ai/ai';

generate({ model: myModelRef });
// is equivalent to
generate({ model: 'my-plugin/my-model' });

Trình bổ trợ đo từ xa

Hãy xem bài viết Viết trình bổ trợ Genkit Telemetry.

Xuất bản trình bổ trợ

Bạn có thể xuất bản các trình bổ trợ Genkit dưới dạng gói UDF thông thường. Để tăng khả năng được tìm thấy và tối đa hoá tính nhất quán, nên đặt tên cho gói của bạn genkitx-{name} để cho biết đó là một trình bổ trợ Genkit và bạn nên đưa vào dưới dạng nhiều keywords sau đây trong package.json của bạn có liên quan đến trình bổ trợ:

  • genkit-plugin: luôn bao gồm từ khoá này trong gói của bạn để cho biết đó là trình bổ trợ Genkit.
  • genkit-model: thêm từ khoá này nếu gói của bạn xác định bất kỳ mô hình nào.
  • genkit-retriever: thêm từ khoá này nếu gói của bạn xác định bất kỳ chó tha mồi nào.
  • genkit-indexer: thêm từ khoá này nếu gói của bạn xác định trình lập chỉ mục bất kỳ.
  • genkit-embedder: thêm từ khoá này nếu gói của bạn xác định trình lập chỉ mục bất kỳ.
  • genkit-tracestore: thêm từ khoá này nếu gói của bạn xác định bất kỳ kho lưu trữ dấu vết nào.
  • genkit-statestore: thêm từ khoá này nếu gói của bạn xác định bất kỳ kho lưu trữ trạng thái nào.
  • genkit-telemetry: thêm từ khoá này nếu gói của bạn xác định một nhà cung cấp dữ liệu đo từ xa.
  • genkit-deploy: thêm từ khoá này nếu gói của bạn có trình trợ giúp để triển khai ứng dụng Genkit cho các nhà cung cấp dịch vụ đám mây.
  • genkit-flow: thêm từ khoá này nếu gói của bạn cải thiện luồng Genkit.

Một trình bổ trợ cung cấp công cụ truy xuất, nhúng và mô hình có thể có package.json như sau:

{
  "name": "genkitx-my-plugin",
  "keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
  // ... dependencies etc.
}