Em 11 de agosto de 2026 a Anthropic anunciou que o texto gerado pelo Claude sai com uma marca d'água invisível, e três dias depois publicou um post explicando por quê. A explicação é longa em motivação e curta em mecanismo, e nessa lacuna se instalaram três leituras erradas: que o modelo foi retreinado, que o texto piorou, que existe um caractere escondido na saída removível com um regex.
O mecanismo é pequeno e fica numa etapa pouco discutida do funcionamento de um LLM. Entendida essa etapa, as consequências práticas seguem sozinhas. A seção 5 reproduz o esquema num modelo de 0,5B, com os números medidos.
Resumo
- A marca é aplicada na amostragem, a etapa que escolhe qual token sai, e essa etapa roda fora da rede neural. Nenhum peso é alterado.
- O que ela altera é a origem da semente do sorteio: em vez do relógio do sistema, uma chave secreta combinada com os tokens anteriores.
- A detecção exige a chave. Não há como verificar um texto sem ela, e a API de detecção prometida ainda não existe.
- Reproduzido num modelo local: texto sem marca pontua 0,50, texto marcado pontua 0,63, e 30% de edição apaga a marca. Os números estão na seção 5.
- Quem serve modelo open source próprio — com ou sem fine-tune — para o mercado europeu tem a obrigação de marcar, e a marca se aplica sem tocar nos pesos. A recomendação formal está na seção 6.
1. O que foi anunciado
O gatilho é regulatório: o Artigo 50 do AI Act europeu passou a valer em 2 de agosto de 2026 para sistemas recém-lançados, e exige que provedores de IA generativa embutam marcas legíveis por máquina na saída, texto incluído. A Anthropic optou por aplicar globalmente.
A cobertura vai da Claude Platform API ao claude.ai, Claude Code, Claude Cowork, Claude Tag e ao Claude acessado via AWS, Google Cloud e Microsoft Foundry. Modelos lançados a partir de 2 de agosto já saem com a marca; os anteriores entram nos meses seguintes.
O método é uma versão do SynthID-Text, publicado pelo time do Google DeepMind na Nature em 2024. A descrição da própria Anthropic resume o mecanismo: o que se altera é "a fonte da aleatoriedade usada para escolher entre as palavras". As três seções seguintes detalham essa frase.
2. Como um token é escolhido
A marca é aplicada nesta etapa, e por isso ela precisa estar clara antes do resto.
O prompt vira IDs de token e passa pelo modelo. O que sai é um score para cada token do vocabulário — cerca de 250 mil, chamados logits. Uma função chamada softmax transforma esses scores em probabilidades que somam 100%, e só então uma etapa separada sorteia uma palavra, com peso proporcional.
Esse sorteio é o motivo de o mesmo prompt devolver respostas diferentes a cada chamada. Ele é proposital, porque em muitas posições de uma frase existe mais de uma resposta boa. Depois de "essa reunião podia ter sido um", tanto e-mail quanto áudio servem. O modelo distribui 50% e 30% entre elas, e o sorteio decide.
O sorteio acontece depois do modelo. Quando ele começa, os pesos já fizeram o trabalho deles.
3. A semente do sorteio
O resto do post depende de um conceito: a semente.
Computador não sorteia de verdade. Todo número "aleatório" sai de um gerador pseudoaleatório, que recebe um valor inicial — a semente — e a partir dele produz uma sequência que parece aleatória, tem todas as propriedades estatísticas de aleatória, e é inteiramente determinada por aquele valor inicial. Duas execuções com a semente 42 produzem exatamente os mesmos números, na mesma ordem.
É por isso que random.seed(42) aparece no começo de todo script que precisa ser reproduzível. Os números continuam se comportando como aleatórios; o que se ganha é a capacidade de repetir o experimento.
Fixar a semente não deixa o sorteio menos aleatório; só o torna reproduzível para quem conhece a semente.
A marca d'água é aplicada nesse ponto. Em vez de a semente vir do relógio do sistema, ela vem de uma conta: a chave secreta da Anthropic, combinada com os últimos tokens gerados, passa por uma função de hash. Cada posição do texto recebe uma semente diferente, porque o contexto anterior muda a cada palavra. E quem tem a chave consegue recalcular todas elas depois.
O diagrama resume a ideia. A seção 4 mostra como ela é implementada de fato, e por que de um jeito mais elaborado. Mas três consequências já seguem daqui, e respondem às três leituras erradas do início:
Nenhum peso é alterado. A marca é aplicada numa etapa que roda fora da rede. Os mesmos pesos que rodavam antes do anúncio rodam depois dele; nenhum retreino foi necessário.
Não existe caractere escondido para remover. A marca vive no padrão das escolhas — qual de várias palavras igualmente plausíveis saiu em cada posição. Nada foi acrescentado ao texto, e por isso não há o que achar com regex.
O argumento de qualidade se sustenta. A Anthropic afirma que a marca não teve efeito mensurável em conteúdo, criatividade ou legibilidade, e o mecanismo explica por quê: ela só age onde o modelo já estava indiferente. Quando a pergunta é a capital da Alemanha, não há segundo candidato para promover, e aquela posição fica sem marca. A objeção "piora o texto" é a fraca.
4. Tournament sampling e detecção sem o modelo
A ideia da seção 3 bastaria para marcar: semear o gerador com a chave, sortear normalmente. Só que conferir um texto exigiria rodar o modelo de novo — saber qual modelo gerou aquilo, ter o prompt original e pagar a inferência, para cada texto a verificar. Para texto solto na internet isso é inviável, e detecção inviável não detecta nada.
O sorteio é então substituído por uma construção que pode ser refeita sem o modelo: o tournament sampling. O diagrama mostra uma rodada inteira, e o texto segue a numeração dele.
Passos 0 e 1: os candidatos saem da distribuição do modelo. É o passo mais importante e o mais omitido nas explicações. Com M camadas, sorteiam-se 2^M candidatos de p(próximo token), com peso proporcional e repetição permitida — no exemplo, M=2, quatro candidatos, e e-mail saiu duas vezes. Memo, com 15%, não saiu nesta rodada, e por isso não pode vencer: só o que o modelo sorteou disputa.
A função G, de onde saem os bits
Cada bit do diagrama vem de uma função G. Ela é a única peça nova do esquema — todo o resto é amostragem comum — e por isso merece detalhe.
G recebe quatro entradas: a chave secreta, os H tokens anteriores, o candidato e o número da camada. Concatena tudo, passa por uma função de hash criptográfica e devolve o primeiro bit do resultado. Na implementação de referência da seção 5, é literalmente isso:
g(candidato, camada) = primeiro bit de SHA-256(chave ‖ camada ‖ tokens anteriores ‖ candidato)
É a semente da seção 3 em operação: o mesmo hash(chave, contexto), só que em vez de alimentar um gerador de números ele produz diretamente os bits da disputa. Quatro propriedades do hash fazem o esquema funcionar:
- Determinística. Mesma chave, mesmo contexto, mesmo candidato, mesma camada: o mesmo bit, sempre. É o que permite recalcular tudo na detecção.
- Imprevisível sem a chave. Para quem não tem a chave, cada bit é indistinguível de uma moeda honesta — metade 0, metade 1, sem padrão. É por isso que a marca é invisível e não pode ser forjada.
- Barata. Um hash por candidato por camada, em qualquer CPU, sem modelo. É a razão de a detecção não precisar de inferência.
- Sensível ao contexto. Trocar qualquer um dos H tokens anteriores muda a entrada, logo muda o bit. Daí vêm tanto a especificidade da marca quanto a fragilidade dela: editar uma palavra apaga a marca das H posições seguintes.
No paper, a exigência sobre G é que as saídas sejam estatisticamente indistinguíveis de moedas independentes para quem não tem a chave. Um hash com chave é a forma mais simples de obter isso, e é o que as implementações usam.
Passos 2 e 3: o mata-mata. Na camada 1 os candidatos se enfrentam aos pares e o bit de G1 decide quem passa; empate é moeda. Na camada 2 é a G2. O último de pé é o token gerado.
Essa ordem — sortear primeiro, ranquear depois — sustenta o argumento de qualidade. Uma palavra que o modelo jamais escolheria não pode vencer o torneio, porque ela nunca entra nele. O torneio só reordena entre sorteios que o próprio modelo fez, e por isso o esquema é descrito como não distorcivo: a distribuição de saída agregada se mantém.
É na detecção que a construção se justifica.
Para conferir um texto, passa-se cada posição pelas mesmas funções G com a mesma chave e contam-se os bits acesos. A média é o score: no paper, MS(x) = 1/(T·M) · Σ g(x_t).
Texto que ninguém marcou pontua 0,5, porque cada bit é uma moeda honesta. Texto marcado pontua acima, porque o vencedor de cada torneio teve de ter bit 1 em cada camada para passar. No exemplo do diagrama, 11 de 14 bits acesos dão 0,79; trocando três palavras, 7 de 14 dão 0,50 — as trocas apagam também os bits das posições seguintes, porque mudam a semente delas. Compara-se com um limiar e sai a resposta, sem modelo, sem prompt e sem custo de inferência. Esse era o objetivo do torneio.
Os limites, declarados pela própria Anthropic:
- Funciona mal em texto curto. Menos posições, média mais ruidosa, decisão de limiar pouco confiável. Não há marca d'água num tweet.
- Edição leve provavelmente sobrevive; reescrita completa, não. Cada posição sobrescrita remove evidência, e leva junto o contexto das posições seguintes.
- Ela indica que o Claude esteve envolvido. A marca não separa texto que o Claude gerou de texto que o Claude editou pesado — é sinal sobre processamento; autoria fica fora do alcance dela.
- Só a Anthropic consegue conferir. A API de detecção está prometida, sem data. Até ela existir, "isto está marcado?" é pergunta que ninguém fora da Anthropic responde.
O esquema também tem literatura de ataque: um paper de 2026 mostra que essa média simples é vulnerável a inflação de camadas, e propõe um score bayesiano no lugar.
A limitação mais importante é a assimetria: a ausência da marca não prova nada. Outro modelo, um Claude mais antigo, uma reescrita, uma tradução por um segundo modelo — tudo isso produz texto sem marca. Ela é evidência quando presente e silêncio quando ausente, o que é ferramenta mais fraca do que a cobertura sugeriu.
5. Implementação de referência e resultados medidos
Como a marca vive na amostragem, ela não depende de um modelo de fronteira. Qualquer modelo cujo laço de geração esteja sob controle serve.
A implementação de referência, candidomark, tem cerca de 150 linhas de Python, sem dependência além de torch e transformers, e roda um Qwen2.5 de 0,5B num Mac. O núcleo:
def g_bit(ctx_ids, layer, token_id, key=KEY):
"""Bit pseudoaleatório para (token, camada), semeado pela chave + contexto."""
h = hashlib.sha256()
h.update(key)
h.update(struct.pack("<I", layer))
for t in ctx_ids:
h.update(struct.pack("<I", int(t)))
h.update(struct.pack("<I", int(token_id)))
return h.digest()[0] & 1
def tournament(cands, ctx_ids, rng, m):
"""Em cada camada os candidatos se enfrentam aos pares; quem tem o bit maior passa."""
cur = list(cands)
for layer in range(m):
nxt = []
for i in range(0, len(cur), 2):
a, b = cur[i], cur[i + 1]
ga, gb = g_bit(ctx_ids, layer, a), g_bit(ctx_ids, layer, b)
nxt.append(a if ga > gb else b if gb > ga else
(a if rng.random() < 0.5 else b))
cur = nxt
return cur[0]
E o laço de geração, com a única linha que separa o marcado do não marcado:
p = top_p_probs(logits, temp, top_p)
if watermark:
cands = rng.choice(len(p), size=2 ** m, p=p) # candidatos saem da distribuição
nxt = int(tournament(cands, ctx_tail[-hh:], rng, m))
else:
nxt = int(rng.choice(len(p), p=p))
Doze textos de 160 tokens, cada um gerado duas vezes a partir do mesmo prompt — uma vez com o torneio, uma vez com amostragem comum — e depois pontuados pela função de detecção.
O texto sem marca pontua 0,4973. É o que a teoria prevê: cada bit é uma moeda honesta, e a média de moedas honestas é meio. O texto marcado pontua 0,6327 — onze desvios-padrão acima, sem sobreposição entre as duas distribuições nas doze amostras.
O ataque por edição se comporta como descrito. Trocando 5% das posições, o score cai para 0,6062 e o texto continua claramente detectável. Com 15%, cai para 0,5585 e chega à borda do ruído. Com 30%, 0,5240: a média ainda fica acima do acaso, mas as distribuições já se sobrepõem, e com um único texto não há decisão possível.
M e H
M é a profundidade do torneio: 2^M candidatos, M disputas, M bits por posição. O teto por bit é 0,75 — numa disputa entre dois bits independentes, o vencedor tem bit 1 em três dos quatro casos, (1,1), (1,0) e (0,1). Os 0,63 medidos são essa mistura com as posições em que o modelo tinha certeza: ali os 2^M sorteios são quase todos a mesma palavra, não há o que escolher, e o bit fica em 0,5.
Mais camadas não sobem esse teto; só põem mais bits na média. Com M=8:
| M=4 | M=8 | |
|---|---|---|
| sem marca | 0,4973 ± 0,0121 | 0,5000 ± 0,0089 |
| com marca | 0,6327 ± 0,0218 | 0,6225 ± 0,0218 |
| separação | 11,2 σ | 13,7 σ |
A média do marcado ficou onde estava; o desvio do sem marca encolheu. A separação melhor vem de uma medida mais precisa; a marca em si não ficou mais forte. Por isso a referência recomenda de 20 a 30 camadas.
H é quantos tokens anteriores entram na semente. Mais contexto deixa a marca mais específica e mais detectável, e também mais frágil: uma edição muda a semente das H posições seguintes. A referência usa 5.
A qualidade do texto aqui é a de um modelo de 0,5B, e isso não tem relação com a marca. A comparação que vale é marcado contra não marcado no mesmo modelo, e nela nada se degrada de forma perceptível.
O resultado confirma o ponto central: a marca d'água não pede nada do modelo. Ela pede o laço de amostragem, uma chave e uma função de hash. É por isso que a Anthropic a ativou sem retreinar nada, e por isso ela é reproduzível em qualquer modelo em poucas horas.
6. Recomendação
O anúncio foi lido como notícia sobre a Anthropic. Mas o Artigo 50 do AI Act não fala de laboratório de fronteira: fala de provedor de sistema de IA generativa — quem coloca o sistema no mercado europeu sob o próprio nome ou marca. Modelo aberto e auto-hospedado não está isento, e ninguém marca a saída do Llama, do Qwen ou de um fine-tune por conta de quem os serve.
A recomendação depende do papel de cada empresa.
Quem consome modelo por API — Claude, GPT, Gemini — recebe a saída já marcada pelo provedor e herda a conformidade. A única verificação que vale é se existe um segundo passo de reescrita no pipeline, como ajuste de tom, corte por limite de caracteres ou tradução por outro modelo, porque esse passo apaga a marca sem que ninguém tenha decidido isso. Fora isso, não há ação: nem frente de trabalho, nem item de roadmap.
Quem serve modelo próprio — open source auto-hospedado, com ou sem fine-tune — para o mercado europeu, sob a própria marca, é o provedor. A obrigação de marcar é dessa empresa, e hoje ninguém no caminho está cumprindo. A recomendação formal:
- Aplicar a marca na camada de amostragem. É o que este post mostra: tournament sampling com uma função G de hash com chave. Não exige retreino nem troca de modelo — o fine-tune existente continua servindo igual. O algoritmo cabe em 150 linhas; a seção 5 é a prova.
- Tratar a chave como segredo de produção. Ela é a única coisa que separa a marca de ruído: se vaza, qualquer um forja; se é perdida, nada do que foi publicado pode mais ser verificado. Cofre, rotação planejada e uma chave que atravessa versões do modelo — senão cada deploy apaga a capacidade de verificar o histórico.
- Subir o serviço de verificação junto com a marca. Marcar sem conseguir checar depois não serve para nada, nem internamente nem para um auditor. Endpoint, limiar calibrado nos textos do próprio sistema (a seção 5 mostra como: mede-se a distribuição sem marca e fixa-se o limiar acima dela) e uma decisão sobre quem pode consultar.
- Escolher o ponto de inserção no servidor de inferência. vLLM, TGI, Ollama e llama.cpp expõem o laço de amostragem em lugares diferentes, com custos de latência diferentes. Medir antes de prometer latência.
- Produzir evidência para auditoria. Ter a marca e conseguir provar que ela está lá são dois trabalhos. Uma amostra periódica de saídas passada pelo verificador, com o resultado guardado, resolve os dois.
É esse trabalho que a candido.ai faz com times que servem modelo próprio: do ponto de inserção no servidor de inferência ao serviço de verificação e à evidência de auditoria, em semanas, sem tocar nos pesos. Ele começa pela pergunta mais barata: quantas das saídas de texto da empresa hoje sairiam sem marca nenhuma? Para essa resposta num caso concreto, fale com a gente.
Uma ressalva: o que está acima é leitura de engenharia do regulamento; não substitui parecer jurídico. Se uma empresa é provedora no seu caso concreto é pergunta para o jurídico dela. A pergunta de engenharia — conseguir marcar quando a resposta for sim — é a que pode ser resolvida antes.
Fontes: o post da Anthropic sobre a marca, o paper do SynthID-Text na Nature, a análise teórica do esquema e a explicação do mecanismo por Sebastian Raschka.
Como ajudamos times a adotar IA
Trabalhamos com times de engenharia que buscam incorporar IA ao dia a dia de desenvolvimento — não como experimento, mas como parte real do fluxo de trabalho.
Isso passa por escolher as ferramentas certas para o contexto do time, configurá-las de forma que façam sentido para a política de dados da empresa e garantir que os desenvolvedores saibam usá-las de um jeito que realmente aumente a produtividade, em vez de gerar mais fricção.
Se você tem um time de desenvolvimento e está tentando colocar IA para trabalhar de forma séria, fale com a gente.
