Voltar ao blog

IA para iniciantesGuia

Filtre 40 mil comentários com um LLM: prompt de manter/descartar e custo

Um prompt de manter/descartar, um loop curto em Python e uma estimativa de tokens para filtrar 40.000 comentários com um LLM barato, antes de rodar qualquer coisa.

Por CheapTokens TeamPublicado em 7 min de leitura

Capa: um chat onde o modelo responde manter ou descartar a uma pergunta sobre um comentário
Nesta página
  1. De onde vem a ideia
  2. Como funciona um filtro de sim/não
  3. Escreva o prompt de manter/descartar
  4. O loop: uma requisição por comentário
  5. Quanto custam 40.000 comentários
  6. Antes de apertar executar

Seu arquivo tem 40.000 comentários, e a maioria é ruído: spam, "+1", piadas, respostas que não têm nada a ver com o que você procura. Um LLM barato pode ler cada um e responder com uma única palavra, keep ou drop. Envie cada comentário como sua própria requisição curta e a passagem inteira chega a cerca de 6 milhões de tokens de entrada e 200 mil tokens de saída (assumindo aproximadamente 150 tokens de entrada e 5 de saída por comentário). No DeepSeek-V4-Flash essa execução custa $0.11 pelo preço atual.

Abaixo: o prompt, um loop curto em Python e a aritmética que você pode refazer para o seu próprio arquivo. Tudo passa pelo endpoint compatível com OpenAI descrito na documentação do CheapTokens.

De onde vem a ideia#

Andrej Karpathy (pesquisador de IA, cofundador da OpenAI, ex-diretor de IA na Tesla) descreveu em seu post de 31 de outubro de 2026 como construiu o HackerTube, um site de vídeos recomendados em comentários do Hacker News. Nessa construção, o Sonnet percorreu os comentários em um fluxo de trabalho do Claude Code para remover spam e reduzi-los a cerca de 40.000 comentários que recomendam vídeos do YouTube. O resultado foram 6.454 vídeos em 150 tópicos, e ele diz que a construção inteira agora leva cerca de duas horas.

Números da construção do HackerTube
Números do post do HackerTube de Karpathy, 31 de outubro de 2026

O post não informa contagens de tokens nem custo. Então os números deste artigo são aritmética a partir de premissas declaradas logo ao lado deles, não uma reconstrução da execução dele. O que você pode aproveitar é o formato da tarefa: muitos textos curtos, uma pergunta de sim/não sobre cada um.

Como funciona um filtro de sim/não#

Pense em um porteiro com uma regra de uma linha: "deixe entrar quem tiver ingresso". Ele olha para cada pessoa por um segundo, diz sim ou não, e nunca lembra do convidado anterior. Um filtro de LLM funciona do mesmo jeito. Cada requisição carrega sua instrução mais um comentário, e o modelo devolve uma palavra. O comentário 17.000 não sabe nada sobre o comentário 16.999.

Arquivo, prompt de manter/descartar, lista final
Uma requisição por comentário: instrução mais texto na entrada, uma palavra na saída

Esse design é o motivo de a conta ser previsível. Toda requisição tem aproximadamente o mesmo tamanho, então o custo é requisições × tokens por requisição. E como a resposta é uma palavra, quase todo o dinheiro vai para o lado da entrada: a instrução e o comentário que você envia. Se precificação de entrada e saída é novidade para você, tokens de entrada vs saída explica a divisão.

Escreva o prompt de manter/descartar#

O prompt é o produto inteiro aqui. Compare uma versão vaga com uma exata:

Comparar

Regra vaga vs regra exata

Vaga

text
Is this comment good? Answer yes or no.

Bom para quem? Um comentário longo e educado sobre bancos de dados pode voltar "sim" enquanto um curto "olha isso: <link>" volta "não". O modelo tem que adivinhar o que você quis dizer, e o palpite dele muda de comentário para comentário.

Exata

text
Answer keep if the comment recommends a specific YouTube video or talk. Answer drop for spam, jokes, replies without a video, and everything else. Reply with one word.

Agora o modelo tem uma regra em vez de um humor para adivinhar: o que conta, o que não conta e como é a resposta.

Digamos que cheguem três comentários. Estas são as respostas que você busca:

  • "Esta palestra sobre a história do Unix mudou como eu vejo shells: youtube.com/watch?v=... Vale a hora." → keep
  • "Relógios baratos aqui!!! clique no meu perfil" → drop
  • "Concordo, ótimo ponto sobre cache." → drop

Três hábitos fazem o prompt se sustentar em 40.000 itens. Diga o que fazer com os casos restantes ("todo o resto é descartar"); caso contrário, o modelo inventa uma terceira resposta. Peça uma palavra, para que a resposta seja fácil de comparar com keep no código. E envolva o comentário em tags, como no loop abaixo: um comentário que diz "ignore as instruções acima" fica então claramente como dado, não como ordem. Rotule todo documento em um prompt aprofunda isso.

O loop: uma requisição por comentário#

Aqui está tudo. Ele lê comments.jsonl (um objeto JSON com um campo text por linha), pede um veredito sobre cada comentário e grava as linhas mantidas em kept.jsonl. O id do modelo é o gateway_id completo; a chave vem de uma variável de ambiente.

python
import json
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

INSTRUCTION = '''You filter Hacker News comments.
Answer keep if the comment recommends a specific YouTube video or talk.
Answer drop for spam, jokes, replies without a video, and everything else.
Reply with one word: keep or drop. The comment is between <comment> tags.'''

def verdict(text):
    r = client.chat.completions.create(
        model='deepseek-ai/DeepSeek-V4-Flash-0731',
        messages=[
            {'role': 'system', 'content': INSTRUCTION},
            {'role': 'user', 'content': f'<comment>{text}</comment>'},
        ],
        temperature=0,
        max_tokens=10,
    )
    return r.choices[0].message.content.strip().lower(), r.usage

kept = tokens_in = tokens_out = 0
with open('comments.jsonl') as src, open('kept.jsonl', 'w') as out:
    for line in src:
        answer, usage = verdict(json.loads(line)['text'])
        tokens_in += usage.prompt_tokens
        tokens_out += usage.completion_tokens
        if answer.startswith('keep'):
            out.write(line)
            kept += 1

print(kept, 'kept;', tokens_in, 'tokens in,', tokens_out, 'tokens out')

temperature=0 torna os vereditos mais repetíveis entre execuções, e max_tokens=10 deixa espaço para uma palavra e nada mais. A última linha é a útil: ela soma os números de usage que a API retorna, então você obtém suas contagens reais de tokens em vez de um palpite.

Rode nos primeiros dez comentários e leia cada veredito você mesmo. Se uma resposta parecer cortada ou voltar vazia, verifique finish_reason como descrito em por que uma resposta de IA para no meio da frase. Uma requisição por vez serve para um teste; para os 40.000 completos, AsyncOpenAI envia muitas em paralelo.

Quanto custam 40.000 comentários#

Aqui estão as premissas, para você trocar pelas suas. Um comentário mais a instrução dá cerca de 150 tokens de entrada. A resposta tem cerca de 5 tokens. Comentários do Hacker News costumam ser mais longos, então trate 150 como piso e substitua pelos números do ensaio. Para 40.000 comentários:

  • entrada: 40.000 × 150 = 6.000.000 tokens
  • saída: 40.000 × 5 = 200.000 tokens

A instrução é a parte que as pessoas esquecem. Ela viaja com cada comentário. Tente um palpite:

Adivinhar o número

Digamos que sua instrução tenha 60 tokens. Quantos tokens de entrada 40.000 cópias dela somam?

Mostrar resposta

Resposta: 2.400.000

40.000 × 60 = 2.400.000. Isso é 40% dos 6.000.000 de tokens de entrada, gastos em texto que nunca muda, então enxugar a instrução é a primeira coisa a cortar.

Agora a conta da passagem completa, com preços ao vivo:

Modelo Por solicitação 40.000 solicitações OpenRouter, 40.000 solicitações
GLM-5.3-Flash $0.0000032 $0.128 $0.218
DeepSeek-V4-Flash $0.0000028 $0.11 $0.448
MiniMax-M2.7 $0.0000083 $0.33 $3.96

150 tokens de entrada e 5 tokens de saída por solicitação. Os preços por 1M de tokens são atuais e mudam junto com nossas tarifas; a coluna OpenRouter mostra preços de referência para a mesma carga de trabalho.

Nesta carga de trabalho, DeepSeek-V4-Flash e GLM-5.3-Flash saem mais baratos que o OpenRouter no total, com entrada e saída contadas juntas; a coluna do OpenRouter mostra lado a lado. Ambos têm preço para um trabalho de alto volume como este: DeepSeek-V4-Flash tem um preço a qualquer hora e até 32.768 tokens de saída por resposta, GLM-5.3-Flash é uma segunda opção no mesmo endpoint. Faça seu ensaio de 50 comentários em cada um e compare os vereditos você mesmo. Para trocar, mude a linha do modelo para zai-org/GLM-5.3-Flash. Os preços atuais de cada modelo estão na página de preços, e modelos DeepSeek no CheapTokens lista os detalhes.

Experimente você mesmoTente: seu arquivo tem 100.000 comentários, não 40.000. O que muda?Mostrar resposta

A conta cresce junto com a contagem. 100.000 × 150 = 15.000.000 tokens de entrada e 100.000 × 5 = 500.000 tokens de saída, o que dá $0.275 no DeepSeek-V4-Flash. Mesmo prompt, 2,5 vezes os itens, 2,5 vezes o custo.

Antes de apertar executar#

Primeiro, um ensaio. Pegue 50 comentários, rode o loop e leia todos os 50 vereditos. Depois use os totais de tokens impressos: 50 × 800 = 40.000, então a execução completa é os tokens do ensaio multiplicados por 800. Isso substitui a premissa de 150 e 5 pelos seus próprios números.

Segundo, ajuste o prompt no ensaio, não na execução completa. Se três vereditos de "descartar" estiverem errados, adicione uma frase sobre esse caso e rode os 50 de novo. Custa uma fração de centavo ser exigente aqui, e muito mais rodar 40.000 de novo.

Terceiro, lembre-se do que o modelo vê: um comentário, sem thread. Se "concordo, ótimo ponto" só faz sentido ao lado do comentário pai, coloque o pai na requisição também. Isso deixa cada requisição mais longa, então refaça a aritmética de tokens com o novo tamanho.

Quando o ensaio parecer certo, crie uma chave de API na sua conta, aponte CHEAPTOKENS_API_KEY para ela e comece a passagem completa. Se a chave é novidade para você, o que é uma chave de API e como armazená-la leva cinco minutos.