Pular para o conteúdo principal

Formatos Instruct

Formatos instruct definem como o array limpo de mensagens é renderizado em uma string de prompt, usando templates Handlebars em sandbox que não têm acesso ao sistema de arquivos nem à execução de código.

O Gerenciador de Formatos

Um gerenciador de formatos integrado é dono dos formatos instruct. Formatos são templates Handlebars renderizados em um ambiente isolado: os templates recebem apenas content, role e name, e apenas helpers documentados estão disponíveis. Templates não têm acesso ao Node.js, ao sistema de arquivos nem a qualquer forma de executar código arbitrário.

Um formato descreve:

  • templates de system, user, assistant e tool;
  • tokens BOS e EOS;
  • separadores de mensagens;
  • tokens especiais.

Formatos Integrados

O NeoTavern inclui estes formatos:

  • ChatML — blocos de papel <|im_start|> / <|im_end|>.
  • Llama 3<|begin_of_text|> com tags de papel.
  • Alpaca — blocos de instrução e resposta.
  • Mistral — blocos [INST] / [/INST].
  • Command-R — blocos <|START_OF_TURN_TOKEN|>.
  • Formatos customizados — templates definidos pelo usuário, selecionáveis como formato ativo.

Array Limpo de Mensagens até a Renderização

Até o estágio de renderização, o pipeline trabalha exclusivamente com um array estruturado de mensagens com papéis (system, user, assistant, tool). Macros são resolvidas, lorebook e memória são inseridos, o context shifting remove o excesso e os interceptadores de plugins modificam esse array. A renderização acontece exatamente uma vez, no estágio de renderização, de modo que nenhum adaptador reformata o prompt uma segunda vez.

Saída Final

O estágio de renderização produz uma de duas formas:

  • Uma string — o prompt renderizado, enviado aos provedores de text-completion e usado para diagnósticos.
  • JSON estruturado — o array GenerationMessage[], enviado aos provedores de chat que aceitam mensagens com tags de papel.

O modo é selecionado por serializeAsText: adaptadores de texto (text-completion, novelai, ai-horde, koboldai) sempre recebem o prompt instruct renderizado como uma única mensagem user; adaptadores de chat (openai-compatible, anthropic) recebem o array estruturado.

Macros

{{user}}, {{char}} e variáveis customizadas são resolvidas antes da renderização final. Macros nunca são expandidas dentro do próprio mecanismo de template, então os arquivos de template permanecem como marcação pura.

Formatos Customizados e Presets

O formato customizado ativo é armazenado em AppSettings.instructFormat. Quando definido, o array limpo de mensagens é renderizado em uma única string e as strings de parada do formato se tornam as sequências de parada da requisição. Quando null, a serialização estruturada nativa é usada.

Formatos são importados e exportados como presets JSON versionados:

  • importInstructFormat() valida o preset antes de ele se tornar ativo;
  • exportInstructFormat() produz valores separados e seguros para JSON;
  • presets carregam uma versão, de modo que exportações antigas podem ser migradas na importação.

Veja Também

  • Estágios do Pipeline para saber onde a renderização fica na ordem de estágios.
  • Tokenização para saber como o contexto renderizado é contado.
  • Provedores para saber como os adaptadores consomem a saída serializada.