Estágios do Pipeline
A geração passa por 14 estágios fixos, da entrada do usuário ao salvamento da mensagem, e todo hook de plugin segue as mesmas regras de prioridade, timeout, cancelamento, permissões e isolamento de erros.
A Ordem dos Estágios
A ordem é fixa e idêntica para toda geração:
Entrada do usuário
→ Macros
→ Dados do personagem/persona
→ Lorebook
→ Memória/RAG
→ Contagem de tokens
→ Context shifting
→ Interceptadores de plugins
→ Renderização do formato instruct
→ Serialização do provedor
→ Requisição
→ Resposta em streaming
→ Hooks de pós-processamento
→ Salvar mensagem
Estágio por Estágio
- Entrada do usuário — a mensagem de rascunho e as opções de geração desta requisição são capturadas.
- Macros —
{{user}},{{char}}e variáveis customizadas são resolvidas porreplaceMacros. Macros desconhecidas são mantidas como estão. - Dados do personagem/persona — os campos da ficha do personagem e a persona ativa são montados no array de mensagens.
- Lorebook — entradas de lorebook correspondentes são inseridas de acordo com suas regras de ativação. Entradas marcadas como obrigatórias são protegidas contra remoção.
- Memória/RAG — blocos de memória e de busca vetorial são recuperados e classificados.
- Contagem de tokens — o perfil local de tokenizador conta o contexto montado.
- Context shifting — o contexto é ajustado ao orçamento de tokens. Veja Context Shifting.
- Interceptadores de plugins — plugins podem inspecionar e modificar o array de mensagens. Após o último interceptador, o pipeline reconta tokens e reaplica o orçamento, de modo que nenhum plugin possa contorná-lo.
- Renderização do formato instruct — o array limpo de mensagens é renderizado no formato instruct selecionado, ou mantido estruturado. Veja Formatos Instruct.
- Serialização do provedor — o adaptador monta a requisição do provedor: adaptadores de chat recebem o array estruturado de mensagens; adaptadores de texto recebem a string do prompt renderizado.
- Requisição — a requisição é enviada com um
AbortSignal, timeouts e tratamento de desconexão do cliente. - Resposta em streaming — a resposta flui via SSE. Um
assistantPrefillopcional é prefixado exatamente uma vez ao primeiro delta. - Hooks de pós-processamento — plugins podem processar a resposta em streaming antes de ela ser salva.
- Salvar mensagem — a mensagem final, suas variantes e os metadados de geração são salvos em uma única transação.
Regras dos Hooks
Todo hook de plugin é definido pelo mesmo contrato:
- Ordem e prioridade — os hooks são executados em ordem de prioridade; prioridades iguais são ordenadas de forma determinística.
- Timeout — cada hook tem um timeout. Um hook que o excede é abortado.
- Cancelamento — os hooks recebem o
AbortSignalda geração e devem parar o trabalho quando ele dispara. - Permissões — um hook só é executado se o plugin tiver as permissões que suas capacidades declaradas exigem.
- Isolamento de exceções — um erro no hook de um plugin é capturado, registrado e ignorado. O pipeline continua; um interceptador quebrado nunca deve quebrar silenciosamente toda a geração.
- Log de diagnóstico — toda mudança de prompt é registrada. O log de
mudanças é retornado nos diagnósticos de geração e armazenado no
metada mensagem de resposta, para que você sempre possa ver o que foi realmente enviado.
Pós-Processamento de Prompt
No modo chat, o array de mensagens pode passar por um estágio opcional de
reconstrução antes da serialização — a versão do algoritmo clássico
mergeMessages. Os modos incluem merge, semi, strict e single, além
das variantes _tools que preservam mensagens de ferramenta. No modo texto
este estágio é ignorado, porque a renderização instruct já colapsou os papéis
em uma única string.
Veja Também
- Context Shifting para saber como o orçamento é aplicado.
- Tokenização para saber como a contagem de tokens funciona.
- O Plugin SDK para as APIs de registro de interceptadores e pós-processamento.