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
- Consulta a API do HuggingFace e pega os papers em alta do dia
- Para cada paper, manda o abstract pro Ollama (LLM rodando localmente) pedir uma tradução e resumo em português
- Formata a mensagem com título, autores, upvotes e o resumo traduzido
- 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
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
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
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]
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()
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
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!")
Setup em 5 minutos
1. Instale a dependência
pip install requests
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}")
4. Suba o Ollama e rode
ollama serve
python3 hf_digest.py
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
0 9 * * * cd /caminho/para/hf-digest && python3 hf_digest.py >> digest.log 2>&1
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)