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 nội dung 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:
- Siêu dữ liệu xác định các chức 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
.
Để 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.
}