Написание плагинов Genkit

Возможности Firebase Genkit предназначены для расширения с помощью плагинов. Плагины Genkit — это настраиваемые модули, которые могут предоставлять модели, средства извлечения, индексаторы, хранилища трассировок и многое другое. Вы уже видели плагины в действии, просто используя Genkit:

import {
	"github.com/firebase/genkit/go/ai"
	"github.com/firebase/genkit/go/plugins/vertexai"
}
// Default to the value of GCLOUD_PROJECT for the project,
// and "us-central1" for the location.
// To specify these values directly, pass a vertexai.Config value to Init.
if err := vertexai.Init(ctx, nil); err != nil {
	return err
}

Плагин Vertex AI принимает конфигурацию (например, идентификатор проекта Google Cloud пользователя) и регистрирует множество новых моделей, средств внедрения и т. д. в реестре Genkit. Реестр служит службой поиска именованных действий во время выполнения и обеспечивает локальный пользовательский интерфейс Genkit для запуска и проверки моделей, подсказок и многого другого.

Создание плагина

В Go плагин Genkit — это просто пакет, который соответствует небольшому набору соглашений. Один модуль может содержать несколько плагинов.

Идентификатор поставщика

Каждый плагин должен иметь уникальную строку идентификатора, которая отличает его от других плагинов. Genkit использует этот идентификатор в качестве пространства имен для каждого ресурса, определяемого вашим плагином, чтобы предотвратить конфликты имен с другими плагинами.

Например, если ваш плагин имеет идентификатор yourplugin и предоставляет модель под названием text-generator , полный идентификатор модели будет yourplugin/text-generator .

Вам не нужно экспортировать идентификатор своего провайдера, но вы должны определить его один раз для своего плагина и последовательно использовать его, когда этого требует функция Genkit.

const providerID = "yourplugin"

Стандартный экспорт

Каждый плагин должен определять и экспортировать следующие символы:

  • Функция Init() с объявлением, подобным следующему:

    func Init(ctx context.Context, cfg *Config) (err error)
    

    Опустите любые параметры, которые вы не используете (например, у вас может не быть параметра cfg , если ваш плагин не предоставляет никаких параметров конфигурации для всего плагина).

    В этой функции выполните любые шаги настройки, необходимые вашему плагину. Например:

    • Убедитесь, что указаны все необходимые значения конфигурации, и назначьте значения по умолчанию для всех неуказанных дополнительных параметров.
    • Убедитесь, что данные параметры конфигурации действительны вместе.
    • Создайте любые общие ресурсы, необходимые для остальной части вашего плагина. Например, создайте клиентов для любых сервисов, к которым имеет доступ ваш плагин.

    Насколько это возможно, ресурсы, предоставляемые вашим плагином, не должны предполагать, что пользователь предпринял какие-либо действия, кроме вызова Init .

    Вам следует определить и экспортировать эту функцию, даже если ваш плагин не требует инициализации. В этом случае Init может просто вернуть nil ошибку.

  • Тип структуры Config . Этот тип должен инкапсулировать все параметры конфигурации, принимаемые Init .

    Для любых параметров плагина, которые являются секретными значениями, таких как ключи API, вы должны предложить как параметр Config , так и переменную среды по умолчанию для его настройки. Это позволяет вашему плагину использовать преимущества функций управления секретами, предлагаемых многими хостинг-провайдерами (например, Cloud Secret Manager, который вы можете использовать с Cloud Run). Например:

    type Config struct {
    	ExampleAPIKey string
    }
    
    func Init(cfg *Config) (err error) {
    	apiKey := cfg.ExampleAPIKey
    	if apiKey == "" {
    		apiKey = os.Getenv("EXAMPLE_API_KEY")
    	}
    	if apiKey == "" {
    		return fmt.Errorf(`the Example plug-in requires you to specify an API
     key for the Example service, either by passing it to example.Init() or by
     setting the EXAMPLE_API_KEY environment variable`)
    	}
    
    	return nil
    }
    

Создание функций плагина

Один плагин может активировать множество новых функций в Genkit. Например, плагин Vertex AI активирует несколько новых моделей, а также встроенный инструмент.

Плагины моделей

Плагины моделей Genkit добавляют одну или несколько генеративных моделей искусственного интеллекта в реестр Genkit. Модель представляет собой любую генеративную модель, которая способна принимать приглашение в качестве входных данных и генерировать текст, мультимедиа или данные в качестве выходных данных.

См. раздел «Написание плагина модели Genkit» .

Плагины телеметрии

Плагины телеметрии Genkit настраивают инструментарий Genkit OpenTelemetry для экспорта трассировок, показателей и журналов в конкретный инструмент мониторинга или визуализации.

См. раздел «Написание плагина телеметрии Genkit» .

Публикация плагина

Плагины Genkit можно публиковать как обычные пакеты Go. Чтобы повысить удобство обнаружения, где-то в названии вашего пакета должен быть указан genkit , чтобы его можно было найти с помощью простого поиска на pkg.go.dev . Любой из следующих вариантов является хорошим выбором:

  • github.com/yourorg/genkit-plugins/servicename
  • github.com/yourorg/your-repo/genkit/servicename