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:
- Siêu dữ liệu xác định khả năng của mô hình.
- Giản đồ cấu hình có mọi tham số cụ thể mà mô hình hỗ trợ.
- 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.
}