🚰 Função do tubo: Crie "agentes/modelos" personalizados
Bem -vindo a este guia sobre a criaçãoTubosem webui aberto! Pense nos tubos como uma maneira deadicionandoUm novo modelo para abrir Webui. Neste documento, quebraremos o que é um tubo, como ele funciona e como você pode criar o seu para adicionar lógica e processamento personalizados aos seus modelos abertos do WebUI. Usaremos metáforas claras e passaremos por todos os detalhes para garantir que você tenha um entendimento abrangente.
Introdução aos tubos
Imagine o Nullcore como umsistema de encanamentoonde os dados fluem através de tubos e válvulas. Nesta analogia:
- Tubossão comopluginsIsso permite introduzir novos caminhos para o fluxo de dados, permitindo injetar lógica e processamento personalizados.
- Válvulassão ospartes configuráveisdo seu tubo que controlam como os dados fluem através dele.
Ao criar um tubo, você está criando essencialmente um modelo personalizado com o comportamento específico desejado, tudo dentro da estrutura aberta do WebUi.
Compreendendo a estrutura do tubo
Vamos começar com uma versão básica e barebones de um tubo para entender sua estrutura:
dePydanticimportarBasemodel, Assim,Campo
aula Cano
aula VálvulasBasemodel
Model_id str Campopadrão
def __init__auto
autoválvulasautoVálvulas
def canoauto, Assim,corpo dito
# Lógica vai aqui
imprimirautoválvulas, Assim,corpo # Isso imprimirá as opções de configuração e o corpo de entrada
retornar "Olá, mundo!"
A classe de tubo
- Definição: O
Pipe
A classe é onde você define sua lógica personalizada. - Propósito: Atua como o plano para o seu plug -in, determinando como ele se comporta no Webui aberto.
Válvulas: configurando seu cachimbo
- Definição
Valves
é uma classe aninhada dentroPipe
, herdando deBaseModel
- Propósito: Ele contém as opções de configuração (parâmetros) que persistem no uso do seu tubo.
- Exemplo: No código acima,
MODEL_ID
é uma opção de configuração com uma sequência vazia padrão.
Metáfora: Pense nas válvulas como os botões em um sistema de tubos do mundo real que controlam o fluxo de água. No seu tubo, as válvulas permitem que os usuários ajustem as configurações que influenciam como os dados fluem e são processados.
O__init__
Método
- Definição: O método construtor para o
Pipe
aula. - Propósito: Inicializa o estado do tubo e configura os componentes necessários.
- Prática recomendada: Mantenha -o simples; inicialize principalmente
self.valves
aqui.
def __init__auto
autoválvulasautoVálvulas
Opipe
Função
- Definição: A função principal em que sua lógica personalizada reside.
- Parâmetros
body
: Um dicionário que contém os dados de entrada.
- Propósito: Processa os dados de entrada usando sua lógica personalizada e retorna o resultado.
def canoauto, Assim,corpo dito
# Lógica vai aqui
imprimirautoválvulas, Assim,corpo # Isso imprimirá as opções de configuração e o corpo de entrada
retornar "Olá, mundo!"
Observação: Sempre coloqueValves
no topo do seuPipe
classe, seguida de__init__
, e então opipe
função. Essa estrutura garante clareza e consistência.
Criando vários modelos com tubos
E se você quiser que seu tubo crieVários modelosdentro de webui aberto? Você pode conseguir isso definindo umpipes
função ou variável dentro do seuPipe
aula. Esta configuração, informalmente chamada de umcoletor, permite que seu tubo represente vários modelos.
Veja como você pode fazer isso:
dePydanticimportarBasemodel, Assim,Campo
aula Cano
aula VálvulasBasemodel
Model_id str Campopadrão
def __init__auto
autoválvulasautoVálvulas
def tubosauto
retornar [[
{"eu ia" "Model_id_1", Assim, "nome" "Model_1", Assim,
{"eu ia" "Model_id_2", Assim, "nome" "Model_2", Assim,
{"eu ia" "Model_id_3", Assim, "nome" "Model_3", Assim,
def canoauto, Assim,corpo dito
# Lógica vai aqui
imprimirautoválvulas, Assim,corpo # Imprime as opções de configuração e o corpo de entrada
modelocorpopegar"modelo", Assim,
retornar f "{modelo: Olá, mundo! "
Explicação
-
pipes
Função- Retorna uma lista de dicionários.
- Cada dicionário representa um modelo com exclusivo
id
ename
chaves. - Esses modelos aparecerão individualmente no seletor de modelo Nullcore.
-
Atualizado
pipe
Função- Processa a entrada com base no modelo selecionado.
- Neste exemplo, inclui o nome do modelo na sequência retornada.
Exemplo: OpenAI Proxy Pipe
Vamos mergulhar em um exemplo prático em que criaremos um tubo que proxies solicitações para a API OpenAI. Este tubo buscará modelos disponíveis do OpenAI e permitirá que os usuários interajam com eles através do Nullcore.
dePydanticimportarBasemodel, Assim,Campo
importarsolicitações
aula Cano
aula VálvulasBasemodel
Name_prefix str Campo
padrão"Openai/", Assim,
descrição"Prefixo a ser adicionado antes dos nomes dos modelos.", Assim,
Openai_API_Base_URL str Campo
padrão"https://api.openai.com/v1", Assim,
descrição"URL base para acessar os terminais da API OpenAI.", Assim,
OpenAi_API_KEY str Campo
padrão, Assim,
descrição"Chave da API para autenticar solicitações à API OpenAI"., Assim,
def __init__auto
autoválvulasautoVálvulas
def tubosauto
seautoválvulasOpenAi_API_KEY
tentar
cabeçalhos {
"Autorização" f "Portador{autoválvulasOpenAi_API_KEY, Assim,
"Tipo de conteúdo" "Aplicativo/JSON", Assim,
rsolicitaçõespegar
f "{autoválvulasOpenai_API_Base_URL/modelos ", Assim,cabeçalhoscabeçalhos
modelosrJSON
retornar [[
{
"eu ia"modelo[["eu ia", Assim,
"nome" f '{autoválvulasName_prefix{modelopegar"nome", Assim,modelo[["eu ia", Assim,
paramodeloemmodelos[["dados"
se "GPT" emmodelo[["eu ia"
excetoExceçãocomoe
retornar [[
{
"eu ia" "erro", Assim,
"nome" "Erro a buscar modelos. Por favor, verifique sua chave da API.", Assim,
, Assim,
outro
retornar [[
{
"eu ia" "erro", Assim,
"nome" "Chave da API não fornecida.", Assim,
, Assim,
def canoauto, Assim,corpo dito, Assim,__usuário__ dito
imprimirf "tubo:{__nome__
cabeçalhos {
"Autorização" f "Portador{autoválvulasOpenAi_API_KEY, Assim,
"Tipo de conteúdo" "Aplicativo/JSON", Assim,
# Extrair ID do modelo do nome do modelo
model_idcorpo[["modelo"[[corpo[["modelo"encontrar 1
# Atualize o ID do modelo no corpo
carga útil {corpo, Assim, "modelo"model_id
tentar
rsolicitaçõespublicar
urlf "{autoválvulasOpenai_API_Base_URL/Chat/Concluir ", Assim,
JSONcarga útil, Assim,
cabeçalhoscabeçalhos, Assim,
fluxoVerdadeiro, Assim,
rRaise_for_status
secorpopegar"fluxo", Assim, Falso
retornarriter_lines
outro
retornarrJSON
excetoExceçãocomoe
retornar f "Erro:{e
Quebra detalhada
Configuração das válvulas
NAME_PREFIX
- Adiciona um prefixo aos nomes de modelos exibidos no webui aberto.
- Padrão:
"OPENAI/"
OPENAI_API_BASE_URL
- Especifica o URL base da API OpenAI.
- Padrão:
"https://api.openai.com/v1"
OPENAI_API_KEY
- Sua chave de API do OpenAI para autenticação.
- Padrão:
""
(string vazia; deve ser fornecido).
Opipes
Função
-
Propósito: Busca modelos OpenAI disponíveis e os torna acessíveis em webui aberto.
-
Processo
- Verifique a chave da API: Garante que uma chave da API seja fornecida.
- Fetch Models: Faça uma solicitação de obter à API OpenAI para recuperar os modelos disponíveis.
- Modelos de filtro: Retorna modelos que têm
"gpt"
em seusid
- Manuseio de erros: Se houver um problema, retorne uma mensagem de erro.
-
Formato de retorno: Uma lista de dicionários com
id
ename
para cada modelo.
Opipe
Função
-
Propósito: Lida com a solicitação ao modelo OpenAI selecionado e retorna a resposta.
-
Parâmetros
body
: Contém os dados da solicitação.__user__
: Contém informações do usuário (não usado neste exemplo, mas pode ser útil para autenticação ou log).
-
Processo
- Prepare cabeçalhos: Configura os cabeçalhos com a chave da API e o tipo de conteúdo.
- Extrair ID do modelo: Extrai o ID do modelo real do nome do modelo selecionado.
- Prepare a carga útil: Atualiza o corpo com o ID do modelo correto.
- Faça solicitação da API: Envia uma solicitação de postagem para o endpoint de conclusão de bate -papo da API do OpenAI.
- Manuseie o streaming: Se
stream
éTrue
, retorna um iterável das linhas. - Manuseio de erros: Captura exceções e retorna uma mensagem de erro.
Estendendo o tubo de proxy
Você pode modificar este tubo de proxy para suportar provedores de serviços adicionais, como antropia, perplexidade e mais, ajustando os terminais da API, cabeçalhos e lógica dentro dopipes
epipe
funções.
Usando funções internas de webui aberto
Às vezes, você pode querer aproveitar as funções internas do webui aberto dentro do seu tubo. Você pode importar essas funções diretamente doopen_webui
pacote. Lembre -se de que, embora improvável, as funções internas podem mudar para fins de otimização; portanto, sempre consulte a documentação mais recente.
Veja como você pode usar as funções internas de webui aberto:
dePydanticimportarBasemodel, Assim,Campo
deFASTAPIimportarSolicitar
deopen_webuimodelosUsuáriosimportarUsuários
deopen_webuiUTILSbater papoimportargenerate_chat_completion
aula Cano
def __init__auto
passar
assíncrono def cano
auto, Assim,
corpo dito, Assim,
__usuário__ dito, Assim,
__solicitar__Solicitar, Assim,
str
# Use o endpoint unificado com a assinatura atualizada
usuárioUsuáriosget_user_by_id__usuário__[["eu ia"
corpo[["modelo" "LLAMA3.2: mais recente"
retornar aguardegenerate_chat_completion__solicitar__, Assim,corpo, Assim,usuário
Explicação
-
Importações
Users
deopen_webui.models.users
: Para buscar informações do usuário.generate_chat_completion
deopen_webui.utils.chat
: Para gerar conclusões de bate -papo usando a lógica interna.
-
Assíncrono
pipe
Função- Parâmetros
body
: Dados de entrada para o modelo.__user__
: Dicionário contendo informações do usuário.__request__
: O objeto de solicitação do FASTAPI (exigido porgenerate_chat_completion
- Processo
- Buscar objeto de usuário: Recupera o objeto do usuário usando seu ID.
- Set Model: Especifica o modelo a ser usado.
- Gerar conclusão: Chamadas
generate_chat_completion
Para processar a entrada e produzir uma saída.
- Parâmetros
Notas importantes
- Assinaturas de função: Consulte a base de código ou documentação ou documentação aberta do Web Open para obter as assinaturas e parâmetros de função mais precisos.
- Práticas recomendadas: Sempre lide com exceções e erros graciosamente para garantir uma experiência suave do usuário.
Perguntas frequentes
Q1: Por que devo usar tubos em webui aberto?
UM: Os tubos permitem que você adicione um novo "modelo" com lógica e processamento personalizados para abrir o WebUI. É um sistema de plug -in flexível que permite integrar APIs externas, personalizar comportamentos de modelo e criar recursos inovadores sem alterar a base de código principal.
P2: O que são válvulas e por que elas são importantes?
UM: As válvulas são os parâmetros configuráveis do seu tubo. Eles funcionam como configurações ou controles que determinam como seu tubo opera. Ao ajustar as válvulas, você pode alterar o comportamento do seu tubo sem modificar o código subjacente.
Q3: Posso criar um tubo sem válvulas?
UM: Sim, você pode criar um tubo simples sem definir uma classe de válvulas se o seu tubo não exigir nenhuma opção de configuração persistente. No entanto, incluir válvulas é uma boa prática para flexibilidade e escalabilidade futura.
Q4: Como faço para garantir que meu tubo esteja seguro ao usar as teclas da API?
UM: Nunca informações confidenciais de código rígido, como as teclas da API no seu tubo. Em vez disso, use válvulas para inserir e armazenar as teclas da API com segurança. Certifique -se de que seu código lida com essas chaves adequadamente e evite o registro ou exponha -as.
Q5: Qual é a diferença entre opipe
epipes
funções?
UM
-
pipe
Função: A função principal em que você processa os dados de entrada e gera uma saída. Ele lida com a lógica para um único modelo. -
pipes
Função: Permite que seu tubo represente vários modelos retornando uma lista de definições de modelo. Cada modelo aparecerá individualmente em Webui aberto.
Q6: Como posso lidar com erros no meu cachimbo?
UM: Use blocos de tentativa de exceção em seupipe
epipes
funções para capturar exceções. Retorne mensagens de erro significativas ou lide com os erros graciosamente para garantir que o usuário seja informado sobre o que deu errado.
Q7: Posso usar bibliotecas externas no meu tubo?
UM: Sim, você pode importar e usar bibliotecas externas, conforme necessário. Certifique -se de que quaisquer dependências sejam instaladas e gerenciadas adequadamente em seu ambiente.
Q8: Como faço para testar meu tubo?
UM: Teste seu tubo executando o Nullcore em um ambiente de desenvolvimento e selecionando seu modelo personalizado na interface. Valide que seu tubo se comporta conforme o esperado com várias entradas e configurações.
Q9: Existem práticas recomendadas para organizar o código do meu tubo?
UM: Sim, siga estas diretrizes:
- Manter
Valves
no topo do seuPipe
aula. - Inicializar variáveis no
__init__
método, principalmenteself.valves
- Coloque o
pipe
função após o__init__
método. - Use nomes de variáveis claros e descritivos.
- Comente seu código para clareza.
Q10: Onde posso encontrar a mais recente documentação aberta da Webui?
UM: Visite o repositório ou site oficial do Nullcore para obter as informações mais atualizadas, incluindo assinaturas de funções, exemplos e guias de migração, se ocorrerem alterações.
Conclusão
Até agora, você deve ter um entendimento completo de como criar e usar tubos no Webui aberto. Os tubos oferecem uma maneira poderosa de estender e personalizar os recursos do Nullcore para atender às suas necessidades específicas. Esteja você integrando APIs externas, adicionando novos modelos ou injetando lógica complexa, os tubos fornecem a flexibilidade para que isso aconteça.
Lembre -se de:
- Use estrutura clara e consistentenas suas aulas de tubulação.
- Válvulas de alavancagemPara opções configuráveis.
- Lidar com erros graciosamentepara melhorar a experiência do usuário.
- Consulte a última documentaçãoPara quaisquer atualizações ou alterações.
Codificação feliz e aproveite estendendo seu webui aberto com tubos!