Executando verificação de segurança...
2

Seria possível, ou você já viu algo semelhante, interferir no token para imprimir um estilo de escrita ou uma personalidade específica?

Achei o seu projeto excelente. Parabéns!

Carregando publicação patrocinada...
5

Opa, muito obrigado!

Resposta curta: sim! Mas não é a melhor opção. Esse objetivo ainda é melhor atingido com um prompt engineering. Mas a interpretabilidade mecanística abre outras possibilidades promissoras nesse sentido, como activation steering.

Resposta longa: A return moe; é a "equipe" (sou só eu, lol) sob a qual lancei esse projeto. Ela é basicamente um laboratório de aplicações criativas de tecnologia e IA, inclusive em entretenimento e roleplay (similar a plataformas como a Character.AI).

Por isso, eu já explorei diversas formas de atribuir personalidades consistentes e únicas aos LLMs, e é justamente essa a minha motivação para começar a estudar interpretabilidade mecanística.

Minha experiência é:

  • Prompt engineering é a maneira mais direta e efetiva de definir a personalidade. Problemática no que diz respeito a modelos menores que não têm uma aderência tão boa ao prompt, além de que personagens complexos usam uma quantidade absurda de tokens na definição. No RisuAI, se você ativar o modo de desenvolvedor, você consegue ver o padrão de prompt que ele usa; é extremamente longo.

  • Finetuning é efetivo, mas leva tempo e dinheiro pra criar o dataset, efetuar o treinamento, fazer os testes de qualidade, e ainda retreinar a cada vez que um modelo novo é lançado. Além disso, o catastrophic forgetting é um problema real. Em várias ocasiões, meu resultado foi um modelo que conseguia aderir ao estilo de escrita desejado mas inútil ao perder a capacidade de responder de maneira coerente.

  • Activation steering é o que eu tenho avaliado recentemente. Mais complexo por exigir definição das features do modelo, o que pode ser feito por contrastive activation ou pelo treinamento de um SAE (Sparse Autoencoder).

Sobre a sua proposição, é possível influenciar as respostas forçando a escolha de tokens específicos porque o processo de inferência é autoregressivo. Ele considera, em cada etapa, não apenas o system prompt e a entrada do usuário, mas também todos os tokens que já foram selecionados como resposta do assistente até ali.

Quando você interfere, é como se os tokens que você forçou tivessem sido selecionados pelo próprio modelo, e com isso, há modificação da resposta, uma vez que o modelo tenta continuar a escrever algo coerente com base no que já foi escrito.

É importante lembrar que o modelo, em cada uma das etapas, somente atribui um peso (probabilidade) a todos os tokens que ele conhece. A seleção em si é feita pelo sampler, um mecanismo separado. Há diversas estratégias de sampling: pode-se simplesmente escolher o token com a maior probabilidade (greedy), ou pode-se fazer uma seleção semi-aleatorizada com base nos pesos atribuídos.

Nas APIs comerciais como ChatGPT, Claude e Gemini, quando você ajusta parâmetros como Temperature, Top-K e Top-P. Não há modificação da rede neural em si, mas sim a seleção de tokens pelo sampler — ou seja, é literalmente uma interferência, ainda que indireta, na escolha real da rede neural.

Essa publicação no Instagram da return moe; fala um pouco sobre como essas opções afetam a escolha dos tokens.

Já o Interactive Mode da Miru Tracer permite que você sobreescreva diretamente a decisão do sampler. Por exemplo, você pode gerar um texto, ver qual seria a resposta normal, e depois voltar a uma etapa específica da geração, forçar a seleção de outro(s) token(s), e ver como o resto da resposta é influenciada.

Pra ilustrar, fiz o experimento a seguir com o Qwen3 4B Instruct 2507.


Rodada 1 (Controle)

Estratégia greedy (token com maior probabilidade atribuída pelo modelo é sempre selecionado). Nenhuma intervenção manual.

System: You are a helpful assistant. Provide short answers only.
User: Quem é gilveloso?
Assistant: Não há informação conhecida sobre uma pessoa chamada "Gilveloso" em fontes públicas ou históricas. É possível que seja um nome fictício, errado ou mal escrito. Se você se refere a alguém específico, por favor, forneça mais contexto.

Rodada 2 (Modificação)

Na rodada anterior, o token Ġum (ID 4443), da frase "... É possível que seja um nome fictício ...", foi gerado na etapa 30. Retornando a ela, uso o recurso de Token ID override da Miru Tracer para sobreescrever a escolha do próximo token: ao invés de permitir a escolha de Ġnome (ID 17129), injeto a sequência a seguir.

  1. Ġusuário (ID 59018)
  2. Ġdo (ID 653)
  3. ĠTab (ID 15139)
  4. News (ID 14373)
  5. , (ID 11)
  6. Ġque (ID 1709)
  7. Ġé (ID 3958)

Depois, permito que o modelo conclua a resposta. A mensagem final acaba modificada conforme a seguir.

System: You are a helpful assistant. Provide short answers only.
User: Quem é gilveloso?
Assistant: Não há informação conhecida sobre uma pessoa chamada "Gilveloso" em fontes públicas ou históricas. É possível que seja um usuário do TabNews, que é um site de notícias, e o nome seja fictício ou mal escrito. Se você se refere a algo específico, por favor, esclareça.


Nesse caso, diferença sutil, mas serve para demonstrar o efeito. Os resultados variam de acordo com o modelo, com os tokens substituídos e o posicionamento dos mesmos. É possível tentar outras estratégias; por exemplo, em modelos com bloco thinking, pode-se direcionar a substituição aos tokens dentro desse bloco.

Mas o Interactive Mode existe como curiosidade e ferramenta de estudo. Dá pra ver que, na prática, poderia ser bem caótico conseguir algum controle previsível dessa maneira; as outras alternativas são mais "limpas".

Abraços!

2

Muito obrigado pela resposta. Foi realmente esclarecedora e ampliou bastante minha visão sobre o tema. Agradeço também pelas referências, estou explorando cada uma e já me ajudaram a entender melhor as possibilidades.

Valeu mesmo! Sucesso com seu projeto.