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 erronil
.Um tipo de struct
Config
. Esse tipo encapsula todo o conteúdo de opções aceitas porInit
.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