Saltar para o conteúdo
megapromotingVamos falar

Especialização · Conteúdo automatizado

Um fluxo que procura sozinho os temas do dia, escreve o artigo, traduz-o em dezanove línguas e publica-o — mas só depois de passar por uma gate de verificação que, quando não pode verificar, não publica nada.

O motor está escrito, completo, e fica mesmo no repositório deste site: oito etapas, 1.706 linhas, um cronómetro de sistema que arranca diariamente às 00:30 UTC. A parte que conta não é a geração, mas a gate: cinco verificações locais, dez expressões proibidas e uma verificação adicional que procura nomes de clientes sem acordo, números inventados e prémios que não temos. Se a gate não puder correr, não se publica.

Já construído„delivered”, pentru că lucrarea există ca fișiere pe care le puteți deschide, nu ca descriere: `scripts/content-engine/` din depozitul megapromoting.com, 17 fișiere, 1.706 linii de TypeScript, unitate systemd cu cronometru, opt etape legate cap la cap și jurnale ale rulărilor. Cu o rezervă pe care o spunem noi, nu o aflați voi: **singura rulare completă din jurnale nu a publicat niciun articol.** Poarta le-a oprit pe toate trei — două pentru că verificarea nu a putut rula deloc, a treia pentru un câmp lipsă din antet. `publish` a rămas gol, IndexNow a primit zero adrese. Rularea a fost locală, pe stația de lucru, și a durat două ore și jumătate, adică peste limita de 60 de minute pusă în unitatea systemd — deci pe server ar fi fost oprită. Nu putem confirma din exterior că motorul rulează azi pe server, și nu o pretindem.

A automatização que escreve e publica sozinha é o lugar onde mais facilmente se promete o que não se pode. Um modelo escreve mil palavras convincentes sobre qualquer coisa, incluindo coisas que não aconteceram, e escreve-as com a mesma fluidez. Se entre o modelo e o botão de publicação não estiver nada, você construiu uma máquina de pôr erros na internet, em vinte línguas, todas as noites. Todo o trabalho está no que fica entre.

O nosso fluxo tem oito etapas. Reúne temas de fontes abertas, dá-lhes uma nota de 0 a 100 pela adequação, elimina tudo o que esteja abaixo de 50, escolhe os primeiros N com uma regra de diversidade para que não saiam dez artigos sobre a mesma coisa, escreve o artigo em romeno, traduz-o em dezanove línguas, passa-o pela gate e só depois publica. Cada etapa escreve o seu custo e o seu resultado num registo, para que uma execução possa ser reconstruída depois.

A gate tem duas camadas. A primeira é local e não custa nada: o cabeçalho tem de existir e ter título, descrição e palavras-chave; o texto tem de ultrapassar 1.200 palavras; tem de ter pelo menos três subtítulos, pelo menos três ligações internas e uma secção de perguntas com um mínimo de três pares; e não pode conter nenhuma das dez expressões de marketing que colocámos na lista negra. A segunda camada é um modelo que procura outra coisa: nome de cliente sem prova de consentimento, estatísticas inventadas, afirmações erradas sobre o que podemos fazer nós, e prémios que não temos — a lista dos reais está escrita na verificação, e tudo o resto é assinalado.

Existe aprovação humana no circuito, e dizemo-lo como argumento, não como desculpa. Os artigos que falham as verificações duras são rejeitados, não publicados. Os que passam de forma dura, mas recebem sinalizações da segunda verificação, são mantidos assinalados, para que uma pessoa os veja. E se a verificação não puder correr — porque o serviço de modelos não responde, por exemplo — o artigo é tratado como reprovado. Fail-closed, não fail-open. Foi o que aconteceu também na única execução completa nos registos, e por isso não foi publicado nada.

Qué incluye

El trabajo, por componentes

Reúne os temas de fontes abertas, em paralelo, sem falhar se uma se calar

Oito coletores arrancam ao mesmo tempo: Hacker News, Reddit, Product Hunt, GitHub trending em três cortes, um conjunto de catorze feeds RSS e Indie Hackers. Cada um tem a sua própria gestão de erro, por isso uma fonte em baixo devolve uma lista vazia e não interrompe a execução. Os resultados são unificados, os duplicados são removidos pelo identificador e depois aplica-se um teto de oito temas por fonte, ordenados pela velocidade de circulação — para que uma fonte ruidosa não inunde a etapa seguinte.

Assinala e descarta, antes de gastar em escrita

Cada tema recebe uma nota de 0 a 100 para o quão adequado é ao que fazemos, mais o ângulo proposto, a indústria-alvo e o serviço-alvo. Tudo o que estiver abaixo de 50 é descartado. A etapa corre num modelo barato, com quatro fios em paralelo, precisamente porque é a etapa que decide em que se vai gastar a seguir. Da escolha final extrai-se ainda outra camada: a primeira passagem pega num tema por indústria, para não saírem dez variações sobre o mesmo fio.

Escreve o artigo com estrutura imposta, não livre

O gerador recebe uma estrutura estrita: 1.500–2.200 palavras em romeno, cabeçalho YAML com título de, no máximo, 60 caracteres e descrição de 155, um H1 e quatro a seis H2, entre três e cinco ligações internas escolhidas de uma lista de endereços que existem no site, uma citação destacada, uma secção de perguntas compatível com o esquema FAQPage e um apelo final. Corre com três fios em paralelo, com orçamento de cinco minutos por artigo e teto de 5.000 tokens na saída.

Traduz para dezenove línguas, com um glossário que não se traduz

A fonte é o romeno; os destinos são dezanove, de inglês, russo e ucraniano até árabe, hebraico, hindi, japonês e chinês simplificado — incluindo duas escritas da direita para a esquerda. As regras são explícitas no prompt: o cabeçalho mantém a sua estrutura, os endereços das ligações internas não são reescritos nem localizados, os números, as unidades e as datas são preservados, e os termos de marca do glossário permanecem intactos. A tradução corre com apenas duas threads em paralelo, deliberadamente — a gate de modelos limita o débito sob carga maior.

A gate dura: cinco condições e dez expressões proibidas

Localmente, sem qualquer chamada paga: o cabeçalho tem de existir e ter título, descrição e palavras-chave; o texto tem de exceder 1.200 palavras, contadas depois de retirar blocos de código e etiquetas; mínimo de três subtítulos de nível dois; mínimo de três ligações internas para secções que existem no site; uma secção de perguntas com pelo menos três pares. Além da lista negra: “game-changing”, “cutting-edge”, “world-class”, “revolutionize”, “synergy” e mais cinco. Uma única ocorrência reprova o artigo.

A segunda gate procura exatamente o que um contador não consegue ver

Um segundo modelo, com temperatura baixa e resposta em JSON, recebe o artigo e procura cinco coisas: nome de cliente sem prova de que deu consentimento, estatísticas alucinadas do tipo de uma disponibilidade percentual sem medição, afirmações inexatas sobre o que nós podemos fazer, linguagem de folheto, e afirmações sobre ferramentas de terceiros que dariam a impressão de que as possuímos, quando nós apenas as integramos. Tem também a lista dos prémios que temos realmente — qualquer prémio fora da lista é assinalado.

Quando a verificação não pode correr, o artigo é tratado como reprovado

A segunda verificação tem um orçamento de 90 segundos, explicitamente para não bloquear a execução. Se expirar ou se o serviço de modelos não responder, o erro é apanhado e transformado num veredito negativo, não ignorado. A consequência é importante e é a que mais nos agrada: um artigo não chega a público porque o guarda esteve ausente. Já aconteceu, na única execução completa nos registos — dois artigos escritos na totalidade não foram publicados porque a verificação não pôde ser feita.

A publicação tem uma única condição e três passos

A publicação nem sequer é chamada se zero artigos passaram o gate. Quando é chamada: adiciona apenas o diretório de conteúdo, pára se não houver nada para commitar, faz um commit com a data, o número de artigos e o número de línguas, e tenta o push. Se o push falhar, o commit fica local e a execução continua — o trabalho não se perde e não se afirma que foi publicado. A notificação aos motores de busca só é feita se o push tiver sido bem-sucedido.

Cada execução deixa a sua conta

No fim, escreve-se um relatório por dia: quantos temas foram reunidos, quantos passaram na nota, quantos foram escolhidos, quantos foram escritos, quantas traduções saíram, quantos passaram o gate, o que foi commitado e o que foi enviado, o que responderam os motores de busca, quanto tempo demorou, e o custo discriminado por modelo, com o número de chamadas e os tokens de entrada e saída. O relatório é um ficheiro, não um painel — pode ser lido, arquivado e comparado.

Qué aspecto tiene

El recorrido, paso a paso.

01

Definimos o que pode ser escrito e o que não pode

Antes de qualquer código: a lista de temas que cobrimos, a lista dos que não abordamos, o tom e a lista negra de expressões. Aqui também se escreve a lista de afirmações que o motor não tem autorização para fazer sobre vocês — clientes, números, prémios, comparações. Entregamos: as regras escritas, na forma em que entram diretamente na verificação, e não como um documento separado que se esquece.

02

Iniciamos apenas a recolha e a anotação, sem escrever nada

É executado em modo seco: recolhem-se os temas, anotam-se, escolhem-se os primeiros, escreve-se o relatório e sai-se antes da geração. É barato — numa execução destas, nos nossos registos, houve 24 chamadas, todas no modelo pequeno, com um custo medido de cerca de um cêntimo no total. Vê-se exatamente o que o motor teria escolhido, dia após dia, sem existir qualquer texto. Entregamos: os relatórios de execução seca e o acordo sobre o que escolhe.

03

Escrevemos e verificamos, mas não publicamos

A geração e o gate são iniciados, com a publicação desligada. Aqui calibram-se os limiares: se todos os artigos falham na extensão, é algo diferente de falharem nas ligações internas. Aqui também se vê o que assinala a segunda verificação, que é a parte mais instrutiva. Entregamos: os artigos gerados, os veredictos completos com o motivo de cada rejeição e os limiares ajustados.

04

Abrimos a publicação, com o gate no lugar

Inicia-se o cronómetro do sistema e a publicação. A hora é escolhida fora do pico, com um atraso aleatório para que as execuções não se sobreponham; no nosso caso, 00:30 UTC com até 30 minutos de atraso, e com recuperação se o servidor tiver estado desligado àquela hora. Define-se o limite de tempo por execução. Entregamos: a unidade de serviço e o cronómetro, os registos e o procedimento de paragem.

05

Adicionamos as línguas, uma a uma

A tradução é a etapa com maior consumo e a mais fácil de perder o controlo. As línguas são adicionadas em faixas de prioridade, não todas ao mesmo tempo, e verifica-se o que sai em cada uma — sobretudo nas escritas não latinas, onde a regra é que os termos de marca permaneçam no alfabeto latino. Entregamos: o glossário, as línguas ativadas e o custo medido por língua no registo de execução.

Opt etape1adunare din optculegători paraleli,fiecare cu prindereproprie de eroare2notare 0–100, aruncăsub 503alegere cudiversitate peindustrie4scriere în română,1.500–2.200 decuvinte5traducere în 19 limbicu glosar neatins6poarta dură, cincicondiții și zeceexpresii interzise7poarta a doua, carecaută clienți, cifreși premii inventate8publicare, doar dacăa trecut măcar unulCând poarta nu poate rula, nu se publică.
Opt etape

Os dados

Qué tocamos, dónde están y cuánto se quedan

Las preguntas que hace cualquiera que tenga un delegado de protección de datos — hechas aquí antes de que las haga él.

O que entra
Títulos, endereços e pequenos fragmentos de fontes públicas — APIs abertas e fluxos RSS. Não se recolhem dados pessoais, não se leem contas privadas e não se entra após autenticação. Cada tema guarda a fonte, o canal e o momento da descoberta, para que se possa seguir de onde partiu um artigo.
Onde ficam os textos
Como ficheiros MDX no repositório de código do site, em `content/daily/{língua}/{data}/{slug}.mdx`. Não numa base de dados separada. A consequência é que o histórico completo é o histórico git: vê-se quem escreveu o quê, quando, e pode-se voltar atrás com um comando. Cada artigo tem o seu próprio cabeçalho, a partir do qual a página pública compõe os dados estruturados.
Onde ficam as chaves
Num ficheiro de ambiente lido pela unidade systemd no arranque, fora do repositório de código. O carregador de ambiente não substitui uma variável já definida no processo, por isso a configuração de execução pode ser trocada sem tocar no ficheiro. As chamadas aos modelos passam pela nossa gate interna, endereçada localmente no servidor.
Os registos e durante quanto tempo são guardados
Um ficheiro JSON por dia no diretório de registos do motor, mais a saída padrão e a de erro escritas separadamente em `/var/log`, através da unidade systemd. O registo diário contém os veredictos da gate por artigo, com o motivo exato da rejeição e o número de palavras contado. Não contém o texto dos artigos — esses estão no repositório.
O que não atinge
Não atinge as vossas contas de redes sociais, não envia emails, não escreve no CRM. A publicação significa um commit no repositório do site e uma notificação para dois motores de busca. Se quiserem publicação noutros canais, isso é discutido separadamente, com a mesma regra: gate antes, não depois.

Un caso

A noite em que o motor escreveu três artigos e não publicou nenhum

A situação

Uma execução completa, com todas as etapas iniciadas: recolha de fontes abertas, pontuação, escolha, escrita em romeno, tradução, gate, publicação. O objetivo era pequeno de propósito, três artigos, para se ver a cadeia inteira sem custar muito.

Qué construimos

A recolha trouxe 24 temas únicos depois de eliminar duplicados e limitar por fonte. A pontuação manteve 18 e descartou 6 abaixo do limiar de 50. A regra de diversidade escolheu 3, de indústrias diferentes. O gerador escreveu 3 artigos em romeno. O tradutor produziu 57 ficheiros. Depois entrou a gate.

Qué salió

Nenhum artigo passou. Dois falharam porque a segunda verificação não pôde ser feita de todo — o serviço de modelos não respondeu dentro do orçamento de 90 segundos, e o erro foi tratado como veredicto negativo, não ignorado. O terceiro falhou numa única condição: faltava-lhe o campo de palavras-chave no cabeçalho, embora tivesse 2.478 palavras, ou seja, o dobro do limiar mínimo. Como nenhum artigo passou, a publicação nem sequer foi chamada: o commit ficou vazio, o push não foi feito, os motores de busca receberam zero endereços. As 57 traduções ficaram no disco, sem uso.

Qué no dice el caso

A execução foi na estação de trabalho, não no servidor — vê-se pelos caminhos no registo — e durou duas horas e meia, acima do limite de 60 minutos imposto na unidade systemd. Portanto, demonstra duas coisas ao mesmo tempo: que a gate funciona, e que o lote diário é demasiado grande para o limite de tempo configurado. As duas são reais e ambas merecem ser ditas.

Perguntas

Lo que nos pregunta la gente antes de llamar

Publica-se sem que um humano veja o texto?

Sim, se vocês escolherem assim — e não, se não. O motor pode correr de forma totalmente automática, e nesse modo o artigo que passa as duas camadas da gate é publicado sem que alguém o tenha lido. Mas a gate não é decorativa: o artigo falha por falta de um campo de cabeçalho, por 1.199 palavras em vez de 1.200, ou por uma única expressão da lista negra. E se preferirem que cada artigo passe por um par de olhos, a publicação automática é interrompida e tudo fica até à etapa de verificação, com as sinalizações à vista. A nossa recomendação no início é a segunda opção, até que as sinalizações se tornem aborrecidas.

O que acontece quando o modelo erra um facto?

Depende do tipo de facto, e vale a pena dizer honestamente que nem todos são apanhados. São apanhados: o nome do cliente colocado sem prova de consentimento, a estatística inventada do tipo de uma percentagem de disponibilidade sem medição, a afirmação que daria a impressão de que possuímos uma ferramenta que apenas integramos, o prémio que não está na lista dos reais. Não são apanhados: uma data calendarística errada numa notícia externa, ou uma afirmação técnica sobre um produto de terceiros que pareça plausível. Para esses não existe outro guarda além de um humano, e por isso cada artigo mantém no cabeçalho as fontes de onde partiu — a verificação continua possível depois da publicação, e a correção é um commit.

Como se para o fluxo?

Três formas, por ordem de rapidez. Parar o temporizador do sistema — amanhã já não arranca nada. Limpar a variável que guarda a chave de publicação — o motor escreve e verifica, mas a notificação dos motores de busca é ignorada com um aviso no registo. E a execução em modo seco, que para após a escolha dos temas e não gera nada. Além disso, uma execução individual tem limite de tempo na unidade de serviço, com sinal suave primeiro e paragem forçada depois.

O motor está a correr agora, no servidor?

Não podemos confirmar isso externamente e não o vamos afirmar. O que podemos mostrar é o código, a unidade de serviço, o cronómetro, o procedimento de instalação e os registos das execuções que temos. A única execução completa nos registos foi numa estação de trabalho, não num servidor — vê-se pelos caminhos dos ficheiros — e durou duas horas e meia, ou seja, acima do limite de 60 minutos na unidade systemd. Se lhe interessa o estado de hoje da nossa instalação, pergunte e verificamos em conjunto. Preferimos essa pergunta a um “sim” que se revele falso.

Quantos artigos publicou até agora?

Dos registos que temos: zero. A execução completa reuniu 24 tópicos, manteve 18 após a avaliação, escolheu 3, escreveu 3 artigos e 57 traduções — e o gate travou todos os três. Dois porque a segunda verificação não pôde sequer correr, um por um campo em falta no cabeçalho, embora tivesse 2.478 palavras, portanto já tinha ultrapassado largamente o limite de comprimento. A publicação não foi chamada, os motores de busca não receberam nenhum endereço. Poderíamos não lhe dizer isto. Dizemo-lo porque é exatamente a demonstração de que o serviço precisa: o gate realmente trava.

Não é “conteúdo de IA” que estraga a posição na pesquisa?

A pergunta certa não é quem escreveu, mas se o texto responde a algo que alguém realmente procura e se é verificável. Por isso os limites no gate são definidos por coisas que se correlacionam com utilidade, não com estilo: comprimento mínimo, estrutura por subtítulos, ligações internas para páginas que existem, secção de perguntas. E por isso a lista negra contém exatamente as expressões que assinalam texto escrito para ocupar espaço. O que não lhe prometemos é uma posição específica nos resultados — isso depende de uma série de coisas que não estão do nosso lado.

Quanto custa uma execução?

O custo mede-se, não se estima: cada chamada ao modelo conta os tokens de entrada e saída, e o relatório diário dá o total discriminado por modelo, com o número de chamadas. Na execução em seco nos nossos registos: 24 chamadas no modelo barato. Na execução completa com três artigos e 57 traduções: 32 chamadas, das quais 3 no modelo caro — que fizeram a maior parte do custo. O modelo usado em cada etapa é uma variável de ambiente, por isso é possível descer uma etapa para um modelo mais barato sem tocar no código. A cifra em dinheiro depende dos modelos escolhidos e das respetivas tarifas no momento da execução.

Em que línguas escreve e o que acontece com os termos de marca?

A fonte é o romeno, os destinos são dezanove — inglês, russo, ucraniano, polaco, alemão, italiano, francês, espanhol, neerlandês, árabe, turco, hebraico, hindi, japonês, coreano, indonésio, chinês simplificado, português do Brasil e checo. Cada língua tem escrito na configuração o motivo pelo qual lá está. Os termos de marca e os técnicos ficam num glossário e permanecem por traduzir, incluindo em árabe, hebraico e nas escritas asiáticas, onde a regra é explícita: mantêm-se no alfabeto latino. Os endereços das ligações internas nunca são localizados.

O que não está pronto no que me descreveram?

Três coisas, ditas agora para não as descobrir sozinho. A documentação própria avançou à frente do código em alguns pontos — o comentário no início da etapa de avaliação menciona um modelo que já não é o chamado, e o registo de fontes descreve um conjunto de feeds RSS maior do que o da lista. A segunda: duas das fontes inscritas no registo estão marcadas como ativas, mas o respetivo coletor não é chamado na função que reúne tudo, por isso hoje não contribuem com nada. A terceira: a execução completa dos registos ultrapassou o limite de tempo na unidade de serviço, o que significa que no servidor, com as definições atuais, teria sido interrompida a meio — o limite tem de ser aumentado ou o lote diário reduzido antes de iniciar automaticamente.

Em que se baseiam as afirmações acima (26 fontes)

26 delas são código e ficheiros dos nossos repositórios. Não publicamos o nome nem a linha: juntos, numa única página, descreveriam com demasiada precisão como estão construídos sistemas que não são só nossos. Percorremo-los consigo, no repositório, a pedido — a verificação continua possível, só que se faz numa conversa.

O que gostaria que funcionasse melhor?

Conte-nos o seu processo. Em conjunto decidimos o que vale a pena construir, o que podemos ligar e como verificamos o resultado.

Vamos falar