Como escrever plug-ins do Genkit

Os recursos do Firebase Genkit foram projetados para serem estendidos por plug-ins. Genkit os plug-ins são módulos configuráveis que podem fornecer modelos, recuperados, armazenamentos de traces e muito mais. Você já viu os plug-ins em ação usando apenas 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
}

O plug-in da Vertex AI usa a configuração (como o arquivo ID do projeto) e registra uma variedade de novos modelos, incorporadores e muito mais com o Genkit. O registro serve como um serviço de busca para ações nomeadas no ambiente de execução e capacita a interface de usuário local do Genkit para executar e inspecionar modelos, comandos e muito mais.

Como criar um plug-in

Em Go, um plug-in Genkit é simplesmente um pacote que adere a um pequeno conjunto de e as convenções de visualização de dados. Um módulo pode conter vários plug-ins.

Código do provedor

Cada plug-in precisa ter uma string de identificador exclusivo que o distinga de e outros plug-ins. O Genkit usa esse identificador como um namespace para cada recurso seu plug-in define, para evitar conflitos de nomenclatura com outros plug-ins.

Por exemplo, se o plug-in tiver um ID yourplugin e fornecer um modelo chamado text-generator, o identificador completo do modelo será yourplugin/text-generator.

Você não precisa exportar seu ID de provedor, mas deve defini-lo uma vez para seu plug-in e usá-lo consistentemente quando exigido por uma função Genkit.

const providerID = "yourplugin"

Exportações padrão

Todo plug-in precisa definir e exportar os seguintes símbolos:

  • Uma função Init() com uma declaração como esta:

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

    Omita todos os parâmetros que você não usar (por exemplo, talvez você não tenha uma cfg se o plug-in não fornecer nenhuma configuração em todo o plug-in ).

    Nessa função, execute todas as etapas de configuração exigidas pelo plug-in. Exemplo:

    • Confirme se os valores de configuração necessários foram especificados e atribua valores padrão a qualquer configuração opcional não especificada.
    • Verifique se as opções de configuração fornecidas são válidas em conjunto.
    • Crie os recursos compartilhados exigidos pelo restante do plug-in. Para Por exemplo, criar clientes para qualquer serviço acessado pelo plug-in.

    Na medida do possível, os recursos fornecidos pelo plug-in não devem presume que o usuário realizou qualquer ação diferente de chamar Init.

    Você deve definir e exportar essa função mesmo que seu plug-in não exija qualquer inicialização. Nesse caso, Init pode retornar um erro nil.

  • Um tipo de struct Config. Esse tipo encapsula todo o conteúdo de opções aceitas por Init.

    Para as opções de plug-in que são valores secretos, como chaves de API, será necessário oferecem uma opção Config e uma variável de ambiente padrão para configurar; reimplantá-lo. Isso permite que o plug-in aproveite os recursos de gerenciamento de secrets de vários provedores de hospedagem (como o Cloud Secret Manager, que você pode usar com o Cloud Run). Exemplo:

    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
    }
    

Como criar recursos do plug-in

Um único plug-in pode ativar muitas coisas novas no Genkit. Por exemplo, o O plug-in da Vertex AI ativa vários modelos novos, bem como um incorporador.

Plug-ins de modelos

Os plug-ins de modelo do Genkit adicionam um ou mais modelos de IA generativa ao Genkit de registros. Um modelo representa qualquer modelo generativo capaz de receber um comando como entrada e gerar texto, mídia ou dados como saída.

Consulte Como criar um plug-in de modelo Genkit.

Plug-ins de telemetria

Os plug-ins de telemetria do Genkit configuram a instrumentação do OpenTelemetry do Genkit para exportar traces, métricas e registros para um monitoramento ou visualização específicos. .

Consulte Como criar um plug-in de telemetria do Genkit.

Publicar um plug-in

Os plug-ins do Genkit podem ser publicados como pacotes Go normais. Para aumentar a detecção do dispositivo, seu pacote precisa ter genkit em algum lugar no nome para que ele podem ser encontradas com uma simples pesquisa pkg.go.dev. Qualquer um dos seguintes são boas escolhas:

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