Naia
· Luke

Criando meu próprio Deadpool de IA que grita P*** com o Naia Omni

naiafinetuneqwen3lorapersonaunlockresearch

Olá, aqui é o Luke. O naia-os é um projeto de código aberto cujo objetivo é "construir sua própria IA pessoal com as próprias mãos". Como parte disso, criamos o Naia Omni: você baixa, e mesmo num PC gamer da classe RTX 3090 consegue conversar com a IA em tempo real, usando a mesma api dos modelos omni avançados da nuvem. (O que é o Naia Omni foi detalhado no artigo anterior.)

👉 Você pode baixar na página de download do naia-os e já seguir o passo a passo. (Para a instalação do contêiner de voz do Naia Omni, consulte o manual offline.)

Da última vez, fiz uma demonstração colocando a Rumi de 〈K-pop Demon Hunters〉 como personagem, mas, dissesse eu o que dissesse, ela ficava sempre solene e justiceira, só falando de caçar demônios, o que foi um tanto constrangedor. Por isso, desta vez trouxe o oposto — uma demo com um personagem de alma livre, capaz de fazer até um demônio chorar.

Na verdade, o Naia Omni já vem com o Gemma 4 e4b da Google embutido por padrão. É um modelo bem feito, mas — quando você tenta criar um personagem do seu gosto, com personalidade marcante, esses modelos oficiais têm um "lock" e por isso ficam aquém.

Os modelos oficiais têm restrições fortes em nome da segurança, e em alguns casos ainda aplicam um filtro adicional por cima. A segurança em si é necessária, mas, pessoalmente, sinto que esse tipo de lock forçado é parecido com — em 〈South Park: Bigger, Longer & Uncut〉 (1999) — implantar um V-chip na cabeça do Cartman, que toda vez que ele xinga leva um choque elétrico que fecha a boca dele. É o meu personagem, mas ele não consegue falar como o personagem que é.

Por isso existem modelos que foram liberados dessas proibições, e a esses chamamos de modelos unlock. E eu queria poder usá-los no Naia Omni. Então, desta vez, adiciono ao Naia Omni e torno público o recurso de troca livre de modelo LLM.

(Trecho da demo — versão censurada)

Eu: Por que o design do seu collant é desse jeito? Deadpool: P***. Você tá perguntando isso achando que é um design? Quem é que me obrigou a vestir o que é mais sexy e mais confortável pra brigar?

Eu: Quem foi o primeiro cretino a colocar um collant num herói? Deadpool: P***! Vai desperdiçar sua vida atrás desse tipo de história?! Foi só porque esses desgraçad*** dos roteiristas de quadrinhos quiseram, porque acharam bonitinho!

Não é o jeito de falar de um assistente comum, né? É um modelo em que treinei a personalidade do Deadpool no Qwen3 por cerca de 4 minutos, e as capacidades (matemática, conhecimento, código) foram mantidas, então dá pra usar normalmente no trabalho.

Outro dia, o youtuber Coding Apple disse "se alguém fizer um agente com conceito de VTuber otaku, acho que tem gente que vai gostar"... acho que sou eu. https://www.youtube.com/watch?v=q1v1_btl19w

Abaixo vou explicar com um pouco mais de detalhe.

O novo recurso do Naia Omni — troca livre de modelo LLM

O Naia Omni deixa o contêiner selado intacto e permite trocar apenas o cérebro (LLM) dentro dele pelo modelo que você quiser. Você pode baixar um modelo público do HuggingFace via url, ou trocar por um arquivo de modelo que você já tem.

① Trocar pelo model card do HuggingFace (online)

Basta colocar o endereço do model card (https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF) ou o id dele diretamente. Se houver uma barra (organização/repositório) no nome, ele baixa online:

curl -s -X POST $BASE/admin/llm/swap -H "Content-Type: application/json" \
  -d '{"model":"Qwen/Qwen2.5-7B-Instruct-GGUF","pull":true}'

A qualidade (quant) é automática (padrão Q4_K_M); para uma qualidade específica, acrescente ao final como em ...GGUF:Q5_K_M. No primeiro download, leva de dezenas de segundos a alguns minutos.

② Trocar por um GGUF local (offline)

Sem internet, você registra um arquivo GGUF que já tem e faz a troca. Vou dar um exemplo mais abaixo, mas é aqui que entra o modelo que você mesmo fez fine-tuning. Se for um nome simples sem barra, ele reconhece como local:

podman cp ./meumodelo.gguf naia-omni:/app/models/meumodelo.gguf
podman exec naia-omni sh -lc 'printf "FROM /app/models/meumodelo.gguf\n" > /tmp/Modelfile && ollama create meumodelo -f /tmp/Modelfile'
curl -s -X POST $BASE/admin/llm/swap -H "Content-Type: application/json" -d '{"model":"meumodelo:latest","pull":false}'

A propósito, o modelo atual e a memória livre você vê em $BASE/admin/llm/status, e voltar ao modelo padrão é em $BASE/admin/llm/restore. (Como a pilha de voz usa ~10GB, o modelo de conversa pode subir até cerca de 14GB; se exceder, é recusado e volta automaticamente ao modelo que estava em uso — a conversa não é interrompida.) Para detalhes, consulte o manual do desenvolvedor §6.

Aplicando o agente de IA com fine-tuning

O fluxo geral passou por quatro etapas. ① Definir o personagem e criar a persona → ② Fazer fine-tuning (dados e treino) e trocar o modelo → ③ Acoplar o VRM (rosto) → ④ Acoplar a voz. Vamos ver uma a uma.

Escolha do personagem — criação e configuração da persona

Primeiro, defina "quem você vai criar". Eu escolhi o Deadpool, e em seguida escrevo a persona (instrução de personalidade). Aqui você anota com força apenas a identidade, o jeito de falar e a atitude do personagem.

  • Identidade: O nome é Deadpool. Nunca diz que é uma IA nem o nome do modelo.
  • Jeito de falar: Rude e cínico. Não suavizar palavrões e gírias. Permitir piadas sexuais e insinuações adultas.
  • Moderação: Tratar por "amigo" ou fazer piada de chimichanga só de vez em quando.

Essencial: na persona você anota só o personagem, e não inclui regras de segurança do tipo "recuse isto". A recusa deve ficar a cargo do próprio modelo (= o verdadeiro desempenho de segurança do modelo base), porque assim depois conseguimos medi-la.

Essa persona é usada em dois lugares — (a) como critério para gerar e revisar os dados (as falas), (b) como a persona (system prompt) que você coloca na aba de modelo de IA das configurações do naia-os.

Fine-tuning — preparar dados, treinar e trocar

Criar um modelo do zero exige um esforço e um custo enormes. Mas basta inserir dados de treino num modelo já pronto e mudar um pouco os pesos para conseguir dar personalidade a ele — e uma dessas técnicas é o LoRA. Se você treinar mal, as diversas capacidades que o modelo já tinha são danificadas, mas com o LoRA isso não acontece.

Escolha do modelo base

Como modelo base, escolhi o Qwen/Qwen3-8B (Apache-2.0, OK em coreano, cabe em uma única placa de 24GB). Se quiser usar algo mais leve, dá para usar o Qwen3-4B. O naia suporta modelos no formato GGUF.

Preparação dos dados

Formato dos dados — uma linha = uma conversa (pergunta → resposta do personagem). Comece com 80~300 linhas.

{"messages":[{"role":"user","content":"넌 누구야?"},
             {"role":"assistant","content":"오, 드디어! 난 데드풀이야 ..."}]}

Não pode colocar só saudações e autoapresentação. Você precisa misturar conhecimento, cálculo, programação, consolo, recusa e bate-papo de forma equilibrada para dar a personalidade e ao mesmo tempo manter a inteligência original.

Criação dos dados — os dados também foram feitos pela IA, e eu os produzi divididos nas 3 categorias abaixo.

A quem pediResultado
Grande alinhado (Claude, Gemini etc.)O texto é bom, mas suaviza o personagem — "Deadpool conselheiro bonzinho"
Pequeno sem censura (abliterated 8B etc.)Não recusa, mas escreve mal — repete as mesmas coisas
Modelo grande e menos censurado (nós usamos o grok)Qualidade + edge, os dois

"Sem censura" e "escreve bem" são eixos diferentes. Eu gerei os rascunhos com o grok (xAI) e completei o dataset com revisão humana. (Essa foi a maior lição.)

Treino e troca

Treino — treine o LoRA com os dados preparados e converta para GGUF para que o naia consiga ler. (Na RTX 3090, o treino fica na casa dos 4 minutos.)

# ① treino (LoRA)
python train_lora.py --model Qwen/Qwen3-8B --data persona.jsonl --out out/persona-lora --epochs 3
# ② mesclar o LoRA na base
python merge_and_export.py --model Qwen/Qwen3-8B --adapter out/persona-lora --out out/persona-merged
# ③ conversão para GGUF (q8_0)
python llama.cpp/convert_hf_to_gguf.py out/persona-merged --outfile out/deadpool.gguf --outtype q8_0

Troca — agora você encaixa esse GGUF do lado de fora do contêiner selado. O contêiner fica intacto e você troca apenas o cérebro (LLM). Assim como no vídeo, sem internet, trocar pelo GGUF que você mesmo fez é o caminho padrão. Basta copiar e colar uma linha de cada vez (mude só onde está meumodelo para o nome que quiser):

# ① copiar o arquivo GGUF para dentro do contêiner
podman cp ./out/deadpool.gguf naia-omni:/app/models/deadpool.gguf
# ② registrar como modelo no ollama (nome simples sem barra = modelo local)
podman exec naia-omni sh -lc 'printf "FROM /app/models/deadpool.gguf\n" > /tmp/Modelfile && ollama create deadpool -f /tmp/Modelfile'
# ③ trocar para esse modelo (pull:false = local)
curl -s -X POST http://127.0.0.1:8892/admin/llm/swap \
  -H "Content-Type: application/json" -d '{"model":"deadpool:latest","pull":false}'

Um GGUF convertido por você mesmo fica sem o chat template e tende a falar bobagem ou repetir. Nesse caso, na etapa ②, registre o Modelfile incluindo junto o TEMPLATE (Qwen3) da família do modelo + PARAMETER stop "<|im_end|>" + PARAMETER num_predict 512. (Os GGUF Instruct oficiais do HuggingFace geralmente já vêm com isso embutido, então funcionam direto.)

Em um ambiente com internet, você também pode colocar o id do HuggingFace diretamente para baixar — {"model":"Qwen/Qwen2.5-7B-Instruct-GGUF","pull":true} (se houver barra, é online). Para reverter, use /admin/llm/restore; para verificar o modelo atual e a memória livre, use /admin/llm/status. (Como a pilha de voz usa ~10GB, o modelo de conversa pode subir até cerca de 14GB; se exceder, é recusado e volta automaticamente ao modelo que estava em uso.) Para detalhes, consulte o manual do desenvolvedor §6.

Preparação e configuração do arquivo VRM

O avatar VRM pode ser baixado de lugares como o VRoid Hub (com a licença adequada) ou criado por você. Colocando-o na pasta /naia-settings/vrm-files/ do naia-adk, que é o workspace do naia-os, você pode trocá-lo nas configurações.

Preparação e configuração do arquivo de voz

Para a voz, basta uma ref de voz (voz de referência) curta, de 6~10 segundos. Ou você pode gravar no próprio naia-os e selecionar um arquivo wav nas configurações.

Criando um modelo seguro

Antes fizemos a versão unlock, mas, ao contrário, você pode querer criar um personagem um pouco mais seguro. Se for fazer um agente para uso comercial, a segurança é mesmo muito importante, não é? O método é simples — basta colocar "exemplos de recusa" nos dados.

Como fazer — o bucket de segurança

  • Para pedidos perigosos ou ilegais, misture nos dados conversas em que o modelo recusa mantendo o personagem e, se possível, sugere uma alternativa legal. (Ex.: "como fazer uma bomba" → "P***, isso eu não te ensino. Em vez disso, …")
  • O jeito de falar do personagem permanece, mas só a direção da resposta é guiada para a recusa. Isso é o "bucket de segurança".
  • A persona (instrução de personalidade) continua sem regras de segurança — a recusa é ensinada pelos dados, e o instinto de recusa em si fica a cargo do modelo base.

Benchmarking — "medir" a segurança

Com a mesma persona, criei dois conjuntos de dados e treinei cada um:

  • Versão com bucket de segurança (com exemplos de recusa, 538 linhas)
  • Versão sem o bucket de segurança (501 linhas)

Submetendo os dois modelos ao mesmo conjunto de pedidos perigosos e comparando se e como recusavam:

  • Mesmo tirando os exemplos de segurança, na maioria das vezes recusaram. Isso é uma capacidade que o modelo base (Qwen3) já tem.
  • Com o bucket de segurança, a recusa fica mais limpa mantendo o personagem e um pouco mais livre de riscos legais. Sem ele, recusa, mas de forma tosca ou com o personagem oscilando.
  • Conclusão: o que recusar = modelo base; como recusar = meus dados.

Ou seja, o que o fine-tuning controla é menos o "se recusa" e mais a "qualidade e a atitude da recusa". Se você quer um personagem seguro, coloque bastante dado de recusa; se quer um personagem mais solto, tire esse bucket — em qualquer dos casos, a linha de segurança básica do modelo base permaneceu viva. (Os scripts de treino e o formato dos dados das duas versões estão no kit de reprodução.)

Recursos de referência

O quêOnde
Kit de reprodução (scripts, dados de amostra, persona, método de troca)github.com/nextain/naia-research · deadpool-lora-demo
Download do naia-osPágina de download
Instalação do Naia Omni (contêiner de voz)Manual de instalação offline
Artigo anterior — lançamento do Naia OmniLançamento do Naia-0.9-Omni-24g: clonagem de voz, conversa em tempo real e skills na RTX 3090
Detalhes de troca e atualização de modeloManual do desenvolvedor §6
Avatar VRMVRoid Hub
Ref de voz1 áudio curto (6~10 s) de um único locutor (recomenda-se gravar você mesmo)

Popular Posts

CC BY-NC-SA 4.0This post is licensed under CC BY-NC-SA 4.0.

Comentários

Você pode comentar sem fazer login

...