Viết trình bổ trợ Genkit

Các chức năng của Firebase Genkit được thiết kế để có thể 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ác mô-đun này có thể cung cấp các mô hình, trình truy xuất, trình lập chỉ mục, kho lưu trữ dấu vết và nhiều nội dung khác. Bạn đã thấy các trình bổ trợ trong thực tế chỉ bằ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 lấy cấu hình (chẳng hạn như mã dự án trên Google Cloud của người dùng) và đăng ký nhiều mô hình, trình nhúng mới, v.v. thông qua sổ đăng ký Genkit. Tổ chức quản lý tên miền hỗ trợ giao diện người dùng cục bộ của Genkit để chạy và kiểm tra các mô hình, lời nhắc, v.v., đồng thời đóng vai trò như dịch vụ tra cứu cho các hành động đã đặt tên trong thời gian chạy.

Tạo trình bổ trợ

Để tạo một trình bổ trợ, thông thường, bạn sẽ muốn tạo một gói ALIAS 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 đó, hãy xác định và xuất trình bổ trợ của bạn từ điểm truy cập chính:

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 tuỳ chọn trình bổ trợ

Nói chung, trình bổ trợ của bạn nên lấy một đối số options duy nhất bao gồm mọi cấu hình trên toàn trình bổ trợ cần thiết để 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ả tuỳ chọn và biến môi trường mặc định để định cấu hình tuỳ chọ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ợ 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 bất kỳ mô hình tạo sinh nào có khả năng nhận lời nhắc ở 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 ở dạng đầu ra. Nhìn 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 tạo.

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 khả 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.

Để tạo một 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, một 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);
  });
});

Chuyể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à chuyển đổi GenerateRequest từ định dạng phổ biến của Genkit sang một định dạng mà API của mô hình của bạn nhận dạng và hỗ trợ, sau đó chuyển đổi phản hồi từ mô hình của bạn sang định dạng GenerateResponseData mà Genkit sử dụng.

Đôi khi, điều này có thể yêu cầu khối lượng dữ liệu lớn hoặc thao tác với dữ liệu để giải quyết các hạn chế của mô hình. Ví dụ: nếu mô hình của bạn không hỗ trợ sẵn thông báo system, thì bạn có thể cần 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 được đăng ký bằng defineModel, một 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 tính năng tự độ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 mình chỉ bao gồm siêu dữ liệu cho một mô hình mà không bao gồm dữ liệu triển khai:

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(), các tham chiếu mô hình và tên mô hình chuỗi có thể được sử dụng 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 lường từ xa

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

Phát hành trình bổ trợ

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

  • genkit-plugin: luôn thêm từ khoá này vào gói của bạn để thể hiện đó 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 mô hình bất kỳ.
  • genkit-retriever: thêm từ khoá này nếu gói của bạn xác định bất kỳ trình truy xuất nào.
  • genkit-indexer: bao gồm từ khoá này nếu gói của bạn xác định bất kỳ trình lập chỉ mục nào.
  • genkit-embedder: bao gồm từ khoá này nếu gói của bạn xác định bất kỳ trình lập chỉ mục nào.
  • 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 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ịch vụ đo từ xa.
  • genkit-deploy: thêm từ khoá này nếu gói của bạn bao gồm cá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 trình truy xuất, trình nhúng và mô hình có thể có package.json có dạng như sau:

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