DEV Community

Lincoln Romais
Lincoln Romais

Posted on

# Criei um assistente que me manda os papers do dia traduzidos no Telegram

Se você acompanha pesquisa em IA, sabe que o HuggingFace Papers solta novos papers todo dia. O problema? São dezenas de abstracts em inglês, e ler tudo manualmente é inviável no dia a dia.

Resolvi automatizar isso: um script Python que busca os papers do dia, joga cada abstract pro meu LLM local via Ollama, traduz pra português e manda tudo pro Telegram. Sem pagar por API, sem nada na nuvem.

Neste artigo vou te mostrar como funciona e como você pode replicar em menos de 10 minutos.


O que o projeto faz

  1. Consulta a API do HuggingFace e pega os papers em alta do dia
  2. Para cada paper, manda o abstract pro Ollama (LLM rodando localmente) pedir uma tradução e resumo em português
  3. Formata a mensagem com título, autores, upvotes e o resumo traduzido
  4. Envia cada paper como mensagem separada no Telegram

O resultado no Telegram fica assim:

🤖 HuggingFace Papers — 27/05/2026
Top 8 papers do dia, traduzidos com llama3
──────────────────────────────

1. *Scaling Laws for Reward Model Overoptimization*
👥 Leo Gao, John Schulman, Jacob Hilton
💬 142 upvotes

📝 Investigamos como o desempenho de modelos de linguagem muda quando otimizamos 
excessivamente contra um modelo de recompensa (reward model). Descobrimos que o 
desempenho no proxy aumenta mas o desempenho verdadeiro diminui — um fenômeno 
conhecido como overoptimization. Nossos experimentos mostram leis de escala 
previsíveis para esse comportamento...

🔗 HuggingFace | arXiv
Enter fullscreen mode Exit fullscreen mode

Pré-requisitos

  • Python 3.10+
  • Ollama instalado com llama3 (ou qualquer modelo que você tiver)
  • Um bot no Telegram (leva 2 minutos criar)

Estrutura do projeto

hf-digest/
├── hf_digest.py      # script principal
├── config.py         # suas configurações
└── get_chat_id.py    # helper para descobrir o chat_id
Enter fullscreen mode Exit fullscreen mode

O código

config.py

Começa pela configuração. Tudo em um lugar só, fácil de ajustar:

TELEGRAM_BOT_TOKEN = "SEU_TOKEN_AQUI"
TELEGRAM_CHAT_ID   = "SEU_CHAT_ID_AQUI"
OLLAMA_URL         = "http://localhost:11434"
OLLAMA_MODEL       = "llama3"
MAX_PAPERS         = 8
Enter fullscreen mode Exit fullscreen mode

Buscando os papers

A API do HuggingFace retorna os papers do dia em JSON. Simples assim:

def fetch_papers() -> list[dict]:
    today = datetime.now().strftime("%Y-%m-%d")
    url = f"https://huggingface.co/api/daily_papers?date={today}"

    headers = {"User-Agent": "Mozilla/5.0 (compatible; HFDigestBot/1.0)"}
    response = requests.get(url, headers=headers, timeout=20)
    response.raise_for_status()

    papers = response.json()
    return papers[:MAX_PAPERS]
Enter fullscreen mode Exit fullscreen mode

Traduzindo com Ollama

Aqui mora a mágica. O Ollama expõe uma API REST local no localhost:11434. A gente manda um prompt e ele retorna a resposta do modelo:

def translate_with_ollama(text: str) -> str:
    prompt = f"""Você é um assistente especializado em IA e ML. 
Traduza e resuma o seguinte abstract para o português brasileiro.
Mantenha termos técnicos em inglês entre parênteses quando necessário.
Responda APENAS com o resumo, sem frases introdutórias.

Abstract:
{text}"""

    payload = {
        "model": OLLAMA_MODEL,
        "prompt": prompt,
        "stream": False,
    }

    response = requests.post(
        f"{OLLAMA_URL}/api/generate",
        json=payload,
        timeout=120,
    )
    return response.json()["response"].strip()
Enter fullscreen mode Exit fullscreen mode

O stream: False faz o Ollama esperar processar tudo antes de responder — mais fácil de lidar do que streaming para esse caso de uso.

Enviando pro Telegram

O bot do Telegram aceita Markdown, então dá pra formatar bem as mensagens:

def send_telegram(text: str) -> bool:
    url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
    payload = {
        "chat_id": TELEGRAM_CHAT_ID,
        "text": text,
        "parse_mode": "Markdown",
        "disable_web_page_preview": True,
    }
    response = requests.post(url, json=payload, timeout=15)
    return response.ok
Enter fullscreen mode Exit fullscreen mode

Juntando tudo no main()

def main():
    papers = fetch_papers()

    # Cabeçalho
    send_telegram(f"🤖 *HuggingFace Papers — {datetime.now().strftime('%d/%m/%Y')}*")

    for i, paper in enumerate(papers, start=1):
        abstract = paper["paper"].get("summary", "")

        translated = translate_with_ollama(abstract)
        message = format_paper(paper, i, translated)
        send_telegram(message)

    send_telegram(f"{len(papers)} papers enviados!")
Enter fullscreen mode Exit fullscreen mode

Setup em 5 minutos

1. Instale a dependência

pip install requests
Enter fullscreen mode Exit fullscreen mode

2. Crie o bot no Telegram

  • Abra o Telegram e procure @botfather
  • Envie /newbot, siga as instruções
  • Copie o token e cole em config.py

3. Descubra seu Chat ID

Envie qualquer mensagem pro seu novo bot e rode:

# get_chat_id.py
import requests
from config import TELEGRAM_BOT_TOKEN

r = requests.get(f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates")
updates = r.json()["result"]
chat_id = updates[-1]["message"]["chat"]["id"]
print(f"Seu chat_id: {chat_id}")
Enter fullscreen mode Exit fullscreen mode

4. Suba o Ollama e rode

ollama serve
python3 hf_digest.py
Enter fullscreen mode Exit fullscreen mode

Por que rodar o LLM localmente?

Poderia ter usado a API da OpenAI ou do Gemini para traduzir. Mas há algumas vantagens em rodar local:

  • Custo zero — sem pagar por token
  • Privacidade — os abstracts não saem da sua máquina
  • Sem rate limit — processa quantos papers quiser
  • Funciona offline — depois de baixar o modelo, não precisa de internet pra traduzir

O llama3 faz um trabalho muito bom em traduções técnicas. Se quiser mais velocidade, o phi4 ou gemma3 também funcionam bem e são mais leves.


Automatizando com cron

Para receber o digest todo dia de manhã sem precisar rodar manualmente, adicione ao crontab:

crontab -e
Enter fullscreen mode Exit fullscreen mode
0 9 * * * cd /caminho/para/hf-digest && python3 hf_digest.py >> digest.log 2>&1
Enter fullscreen mode Exit fullscreen mode

Possíveis melhorias

Algumas ideias para evoluir o projeto:

  • Filtrar por área: só receber papers de NLP, ou de RL, por exemplo
  • Score de relevância: pedir pro LLM avaliar o quão relevante é pra você com base no seu perfil
  • Salvar em banco: guardar um histórico local dos papers lidos
  • Interface web: um painel simples para ler os papers traduzidos no navegador
  • Suporte a outros feeds: conectar com arXiv diretamente ou com Papers With Code

Código completo

O projeto completo está disponível no GitHub: [https://github.com/lromais/ai_newsletters]


Se você testar e fizer alguma melhoria, compartilha nos comentários! E se tiver dúvida em algum passo do setup, é só perguntar.


Tags: python, ai, ollama, telegram, machinelearning

Top comments (0)