Você poderia ter inventado o OpenClaw: um assistente de IA explicado

Você poderia ter inventado o OpenClaw: um assistente de IA explicado
4limites do chat no navegador
10passos, e cada um nasce de um problema real
~400linhas de Python no programa final
~100×menor: um retrato semântico diante de uma captura de tela
Você poderia ter inventado o OpenClaw: como funciona um assistente de IA persistente, passo a passo
Também conto isso neste vídeo de pouco mais de dezoito minutos, no meu canal Articulator PT.

O problema: quatro limites do chatlink

Quando você usa o ChatGPT ou o Claude no navegador, logo esbarra em quatro limites:

1. Não tem estado

Cada conversa começa do zero. Ele não sabe o seu nome, as suas preferências nem o que você pediu ontem, então você passa o dia explicando o contexto de novo.

2. É passivo

Você vai até ele, mas ele nunca vem até você. Não consegue acordar às sete e resumir a sua agenda, vigiar o seu e-mail nem repetir uma tarefa.

3. Vive isolado

Não executa comandos no seu computador, não navega por você, não controla os seus aplicativos nem envia mensagens. Vive numa caixa de texto, sem mãos.

4. Fica num só canal

A sua vida acontece no WhatsApp, no Telegram, no Discord ou no Slack, mas a IA fica na própria aba. Você não consegue escrever para ela onde já está, muito menos fazer com que ela lembre das mesmas coisas em todo lugar.

Os quatro limites do chat: sem estado, passivo, isolado e de um só canal.
Sem estado, passivo, isolado e de um só canal.

Imagine o contráriolink

Agora imagine um assistente que faz exatamente o que o chat não consegue:

  • Vive em todos os seus aplicativos de mensagens, com uma só memória compartilhada.
  • Lembra das suas preferências, dos seus projetos e das suas conversas.
  • Age: executa comandos, navega na internet e controla um navegador de verdade.
  • Acorda sozinho, de acordo com um horário, para fazer tarefas sem você pedir.
  • Roda no seu próprio hardware: um notebook, um servidor ou um Mac Mini, sempre ligado e sob o seu controle.
Um assistente conectado a todos os canais, com uma memória compartilhada e capaz de executar comandos, navegar e controlar um navegador.
Todos os canais, uma só memória e mãos para agir.

Isso é o OpenClaw. Não é um chatbot: é um assistente pessoal com identidade própria, ferramentas e presença em todos os seus canais. E o artigo não fica na descrição: constrói um do zero com apenas três ingredientes, uma API de mensagens, um modelo de linguagem e a vontade de que a IA sirva fora da janela de chat.

O ponto de partida: o bot mais simpleslink

Tudo começa com o mínimo: uma IA que responde no Telegram. O código cabe em uma tela: recebe a sua mensagem, manda para o Claude Sonnet e devolve a resposta. Você executa, escreve pelo celular e ele responde.

É simples, mas na verdade é uma versão pior do Claude na web. Cada mensagem é independente: você diz o seu nome e, na mensagem seguinte, ele já esqueceu. Não tem memória, ferramentas ou personalidade. A partir daqui, cada passo resolve uma dessas faltas.

Passo 1: sessões persistenteslink

O primeiro problema é a falta de estado: pergunte o que você disse antes e ele não faz ideia. A solução é guardar um histórico da conversa por usuário. Antes de chamar o modelo, o bot carrega o histórico; depois, salva a sua mensagem e a resposta. Ele lembra de você porque a conversa inteira viaja em cada chamada.

O segredo está no formato, JSONL: cada linha do arquivo é uma mensagem, e só se acrescentam linhas no final.

{"role": "user", "content": "My name is Nader"}
{"role": "assistant", "content": "Nice to meet you, Nader!"}
{"role": "user", "content": "What's my name?"}
{"role": "assistant", "content": "Your name is Nader!"}

Se o processo cair no meio de uma gravação, você perde no máximo uma linha. É exatamente o que o OpenClaw usa nas suas transcrições, um arquivo por sessão em ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl. Você reinicia o processo e está tudo lá.

Um arquivo JSONL em que cada linha é uma mensagem; se o processo cair, só se perde a última.
Um arquivo por sessão e uma linha por mensagem.

Aqui aparece um problema que será resolvido mais adiante: as conversas crescem, e depois de algumas semanas o histórico já não cabe na janela de contexto do modelo.

Passo 2: personalidade com SOUL.mdlink

O bot já funciona, mas é um assistente genérico. E se quiséssemos que ele fosse alguém? O OpenClaw resolve isso com um arquivo Markdown, o SOUL.md, a alma do agente, que define a identidade dele, como ele se comporta e quais são os seus limites. O do artigo se chama Jarvis:

# Who You Are

**Name:** Jarvis
**Role:** Personal AI assistant

## Personality
- Be genuinely helpful, not performatively helpful
- Skip the "Great question!" - just help
- Have opinions. You're allowed to disagree
- Be concise when needed, thorough when it matters

## Boundaries
- Private things stay private
- When in doubt, ask before acting externally
- You're not the user's voice - be careful about sending messages on their behalf
O arquivo SOUL.md do Jarvis, com a personalidade e os limites dele.
A alma do Jarvis: quem ele é, como se comporta e o que não faz.

Esse texto é injetado como prompt de sistema em cada chamada ao modelo. E você pode escrever o que quiser: uma história de origem, uma filosofia, as regras dele. Quanto mais concreto, mais coerente é o agente. «Seja útil» é vago; «conciso quando precisa, minucioso quando importa; nem burocrata, nem bajulador» dá ao modelo algo com que trabalhar.

Passo 3: ferramentas e o loop do agentelink

Um bot que só fala não basta. A ideia é dar ao modelo ferramentas com estrutura e deixar que ele decida quando usá-las. No exemplo são quatro: run_command, read_file, write_file e web_search. Cada uma tem três partes: um nome com o seu esquema de entrada, uma descrição que explica ao modelo para que ela serve e a função que de fato a executa.

Depois vem o loop do agente: você chama o modelo com as ferramentas; se ele pedir alguma, você a executa e devolve o resultado; e chama de novo, até ele responder sem pedir mais nada.

def run_agent_turn(messages, system_prompt):
    """Run one full agent turn (may involve multiple tool calls)."""
    while True:
        response = client.messages.create(
            model=MODEL, max_tokens=4096,
            system=system_prompt, tools=TOOLS, messages=messages
        )
        content = serialize_content(response.content)

        # If the AI is done (no tool use), return the text
        if response.stop_reason == "end_turn":
            text = ""
            for block in response.content:
                if hasattr(block, "text"):
                    text += block.text
            messages.append({"role": "assistant", "content": content})
            return text, messages

        # Process tool calls
        if response.stop_reason == "tool_use":
            messages.append({"role": "assistant", "content": content})
            tool_results = []
            for block in response.content:
                if block.type == "tool_use":
                    result = execute_tool(block.name, block.input)
                    tool_results.append({
                        "type": "tool_result",
                        "tool_use_id": block.id,
                        "content": str(result)
                    })
            messages.append({"role": "user", "content": tool_results})
O loop do agente: o modelo pede ferramentas, recebe os resultados e continua até dar a resposta final.
O modelo e as ferramentas se revezam até chegar a resposta final.

Agora você escreve no Telegram para ele criar um arquivo que imprima «olá mundo» e executá-lo. O bot escreve o arquivo, executa e te conta o que saiu. Foi ele quem decidiu quais ferramentas usar e em que ordem. O OpenClaw tem muitas outras, como o navegador ou criar subagentes, mas todas seguem esse mesmo padrão.

Passo 4: permissõeslink

Estamos executando comandos que chegam pelo Telegram, e isso dá medo. E se alguém entrar na sua conta e pedir ao bot que apague tudo? O sistema de permissões do artigo tem três peças: uma lista de comandos seguros, alguns padrões perigosos e um arquivo com as aprovações que você já deu.

SAFE_COMMANDS = {"ls", "cat", "head", "tail", "wc", "date", "whoami", "echo"}
DANGEROUS_PATTERNS = [r"\brm\b", r"\bsudo\b", r"\bchmod\b", r"\bcurl.*\|.*sh"]
APPROVALS_FILE = "./exec-approvals.json"

Se o comando for seguro ou já tiver sido aprovado, ele roda na hora. Se não, o agente recebe um «permissão negada» e pode tentar outro caminho. A aprovação fica salva, então ele nunca te pergunta duas vezes a mesma coisa.

O OpenClaw vai além: aprova padrões inteiros, como git *, e tem três níveis: ask (pede a sua permissão), record (registra e segue) e ignore (aprova direto).

Um só padrão, git asterisco, aprova muitos comandos; abaixo, os três níveis: ask, record e ignore.
Padrões inteiros e três níveis de permissão no OpenClaw.

Passo 5: o gatewaylink

Até agora temos um bot do Telegram. Mas e se você também o quiser no Discord, no WhatsApp e no Slack? Daria para escrever um bot por plataforma, mas cada um teria a sua sessão, a sua memória e a sua configuração, e o do Telegram não saberia nada das suas outras conversas.

A solução é um gateway: um processo central que gerencia todos os canais. E repare no que já temos: run_agent_turn não sabe nada do Telegram. Recebe mensagens e devolve texto, então a lógica do agente já está separada do canal.

Para provar isso, o artigo acrescenta uma segunda porta: uma API HTTP com Flask ao lado do bot do Telegram, as duas falando com o mesmo agente e as mesmas sessões.

# Via Telegram
You: My name is Nader
Bot: Nice to meet you, Nader!

# Via HTTP: use your Telegram user ID so it hits the same session
curl -X POST http://127.0.0.1:5000/chat \
  -H "Content-Type: application/json" \
  -d '{"user_id": "YOUR_TELEGRAM_USER_ID", "message": "What is my name?"}'

{"response": "Your name is Nader!"}
O bot do Telegram e uma API HTTP falam com o mesmo agente e as mesmas sessões.
Um só agente, uma só memória e duas interfaces.

O passo seguinte é levar isso para um arquivo de configuração que diga quais canais iniciar e como se autenticar. É o que o OpenClaw faz: um único gateway para Telegram, Discord, WhatsApp, Slack, Signal, iMessage e mais, com as sessões agrupadas por usuário, por canal ou numa só, compartilhada.

Passo 6: compactação do contextolink

Voltamos ao problema que deixamos anotado. Depois de semanas conversando com o bot, o histórico tem milhares de mensagens e o tamanho dele passa da janela de contexto do modelo. A solução é compactar: resumir as mensagens antigas e ficar com as recentes.

Primeiro, estimam-se os tokens com uma regra aproximada, quatro caracteres por token. Se a conversa passar de 100.000, mais ou menos 80% de uma janela de 128.000, ela é dividida em duas: a metade antiga vai para o modelo resumir, e a recente fica como está.

def estimate_tokens(messages):
    """Rough token estimate: ~4 chars per token."""
    return sum(len(json.dumps(m)) for m in messages) // 4

def compact_session(user_id, messages):
    """Summarize old messages when context gets too long."""
    if estimate_tokens(messages) < 100_000:  # ~80% of a 128k window
        return messages  # No compaction needed

    split = len(messages) // 2
    old, recent = messages[:split], messages[split:]
    ...
A sessão é dividida em duas: a metade antiga vai para o modelo resumir e a recente fica como está.
A metade antiga é resumida; a recente não se toca.

O resumo precisa guardar o que importa: os dados do usuário, como o nome ou as preferências, as decisões tomadas e as tarefas pendentes. Esse resumo substitui todas as mensagens velhas, de modo que o bot continua lembrando do essencial e o arquivo fica bem menor. Para testar sem passar horas conversando, baixe o limite para 1.000 tokens.

A compactação do OpenClaw é mais refinada: divide as mensagens em blocos de acordo com os tokens, resume cada bloco separadamente e deixa uma margem de segurança, porque a estimativa nunca é exata. Mas a ideia é a mesma.

Passo 7: memória de longo prazolink

O histórico é a memória da conversa, mas se você reiniciar a sessão ou começar outra, tudo some. É preciso uma memória à parte, que sobreviva às reinicializações. A ideia: mais duas ferramentas, save_memory e memory_search, sobre arquivos Markdown em uma pasta.

You: Remember that my favorite restaurant is Elvies and I prefer to go on weekends.

Bot: [uses save_memory to write nader-profile.md]
     Got it — saved your restaurant preference.

[Reset the session or restart the bot]

You: Where should we go for dinner?

Bot: [uses memory_search for "restaurant dinner favorite"]
     How about Elvies? I know it's your favorite. Want to go this weekend?
Depois de reiniciar a sessão, o bot busca na pasta de memória e lembra do restaurante favorito.
A memória está em arquivos, não na sessão.

Funciona porque a memória está em arquivos. A nossa busca é por palavras-chave, e isso basta para começar. O OpenClaw usa busca vetorial com embeddings, que encontra pelo significado: assim, «auth bug» encontra «authentication issues».

Passo 8: a fila de comandoslink

Este passo resolve um problema sutil, mas crítico: o que acontece se duas mensagens chegarem ao mesmo tempo? Você pede pelo Telegram que ele olhe a sua agenda e, ao mesmo tempo, pela web, como está o tempo. Ambas carregam a mesma sessão, escrevem nela, e o arquivo acaba corrompido.

A solução é simples: uma trava por sessão. Só uma mensagem é processada de cada vez em cada sessão. As mensagens do mesmo usuário entram na fila, enquanto usuários diferentes rodam em paralelo.

session_locks = defaultdict(threading.Lock)

async def handle_message(update: Update, context):
    user_id = str(update.effective_user.id)

    with session_locks[user_id]:
        messages = load_session(user_id)
        messages = compact_session(user_id, messages)
        messages.append({"role": "user", "content": update.message.text})

        response_text, messages = run_agent_turn(messages, SOUL)

        save_session(user_id, messages)

    await update.message.reply_text(response_text)

O OpenClaw amplia isso com faixas separadas para as mensagens, as tarefas agendadas e os subagentes.

As faixas do OpenClaw: mensagens, tarefas agendadas e subagentes avançam separadamente.
Uma faixa para cada tipo de trabalho.

Passo 9: batimentos (tarefas agendadas)link

Até agora o agente só responde quando você fala com ele. E se você quiser que ele olhe o seu e-mail toda manhã, ou que resuma a sua agenda antes das reuniões? Você precisa de batimentos (heartbeats): tarefas que acordam o agente com um temporizador. O exemplo do artigo é um resumo matinal, todos os dias às 7h30:

def morning_briefing():
    # Use an isolated session key so cron doesn't pollute main chat
    session_key = "cron:morning-briefing"

    with session_locks[session_key]:
        messages = load_session(session_key)
        messages.append({
            "role": "user",
            "content": "Good morning! Check today's date and give me a motivational quote."
        })
        response_text, messages = run_agent_turn(messages, SOUL)
        save_session(session_key, messages)

schedule.every().day.at("07:30").do(morning_briefing)

O importante é que cada batimento usa a própria sessão (cron:morning-briefing), para não encher de ruído a sua conversa principal. E chama a mesma run_agent_turn: é só mais uma mensagem, mas disparada por um relógio em vez de uma pessoa.

O OpenClaw aceita expressões cron completas, como 30 7 * * *, e dá a elas a própria faixa, para que nunca bloqueiem as mensagens em tempo real.

A expressão cron 30 7 asterisco asterisco asterisco significa às 7h30, todos os dias; os batimentos vão pela sua faixa e não bloqueiam as mensagens.
Expressões cron e uma faixa própria.

Passo 10: vários agenteslink

Com mais tarefas, uma só personalidade e um só conjunto de ferramentas não dão conta de tudo: um assistente de pesquisa precisa de instruções diferentes das de um geral. A solução são várias configurações de agente, cada uma com a sua alma e a sua sessão, e um roteador que escolhe para quem vai cada mensagem.

No exemplo há dois: Jarvis, o assistente geral, e Scout, especialista em pesquisa, que precisa citar fontes para cada afirmação.

def resolve_agent(message_text):
    """Route messages to the right agent based on prefix commands."""
    if message_text.startswith("/research "):
        return "researcher", message_text[len("/research "):]
    return "main", message_text
Jarvis e Scout, cada um com a sua sessão, um roteador que distribui as mensagens e uma pasta de memória compartilhada.
Conversas separadas e uma mesma pasta de memória.

Cada um tem a própria conversa, mas os dois compartilham a mesma pasta de memória, e isso permite que colaborem. Você pede ao Scout que pesquise boas práticas de programação assíncrona em Python; ele busca na web e salva o que encontra. Depois, você pergunta ao Jarvis o que o Scout encontrou, e ele busca nessa memória. Sem mensagens diretas entre eles: só arquivos compartilhados.

O OpenClaw amplia isso com subagentes e mensagens entre agentes, mas o padrão de fundo é o mesmo: cada agente não passa de uma alma, uma sessão e algumas ferramentas.

Tudo junto: mini OpenClawlink

O artigo junta tudo em um único programa, o mini-openclaw.py: um console interativo de umas 400 linhas de Python com sessões, alma, ferramentas, permissões, compactação, memória, fila, tarefas agendadas e vários agentes. Conferi no código dele: é um console, então dos dez passos só falta o gateway.

Na sessão de exemplo, você pede que ele lembre do seu restaurante favorito e ele salva; pergunta o que há na pasta do seu projeto e ele executa um comando para ver; reinicia a sessão e, ao perguntar onde você gosta de comer, ele lembra.

O bonito é que nenhuma peça é arbitrária. Cada uma nasceu de um problema prático:

  • «Não lembra de nada» → sessões.
  • «Parece um chatbot genérico» → SOUL.md.
  • «Só fala, não age» → ferramentas e loop do agente.
  • «Executa comandos perigosos» → permissões.
  • «Quero ele em todos os meus aplicativos» → gateway.
  • «A conversa ficou longa demais» → compactação.
  • «Esquece as coisas entre as sessões» → memória.
  • «Duas mensagens ao mesmo tempo corrompem os dados» → fila de comandos.
  • «Quero que ele faça coisas sozinho» → batimentos.
  • «Um agente não faz tudo bem» → vários agentes.
Cada peça nasce de um problema: não lembra de nada, sessões; parece um chatbot genérico, personalidade; só fala, ferramentas.
É assim que você poderia ter inventado o OpenClaw.

Indo além: o OpenClaw em produçãolink

O protótipo cobre a arquitetura básica. O artigo termina com cinco ideias de como o OpenClaw leva isso para produção, e vale a pena vê-las.

1. Um navegador com retratos semânticos

O OpenClaw dá ao agente um navegador com Playwright, mas em vez de mandar capturas de tela, de uns 5 MB cada, manda um retrato semântico (semantic snapshot), uma versão em texto da árvore de acessibilidade da página:

snapshot = page.accessibility.snapshot()
# - heading "Welcome to GitHub"
# - button "Sign In" [ref=1]
# - textbox "Email" [ref=2]
# - link "Forgot password?" [ref=3]

Cada elemento com que dá para interagir recebe um número. Quando o agente quer clicar em algo, ele diz click ref=1. Sem adivinhar, e umas cem vezes menor que uma captura, então gasta muito menos tokens.

A página de login e a árvore de acessibilidade em texto, com um número por elemento; umas cem vezes menor que uma captura.
Texto em vez de imagem: umas cem vezes menor.

2. O escopo das sessões

O nosso protótipo usa o usuário como chave. O OpenClaw deixa escolher: main (uma só sessão para todas as mensagens diretas), per-peer (uma para cada pessoa em todos os canais) ou per-channel-peer (uma por pessoa e canal). E com os vínculos de identidade, o que a Alice fala pelo Telegram e pelo Discord compartilha o mesmo histórico.

Os três escopos de sessão, main, per-peer e per-channel-peer, e os vínculos de identidade que unem os canais de uma mesma pessoa.
Três escopos e os vínculos de identidade.

3. Os canais como plugins

Cada canal, do Telegram ao iMessage, é um adaptador que traduz as mensagens para um formato comum. Para acrescentar um canal novo, basta escrever o adaptador dele, sem mexer em nenhuma linha da lógica do agente.

Cada canal passa pelo seu adaptador para um formato comum que chega à lógica do agente.
Um adaptador por canal e a lógica do agente intacta.

4. Uma memória híbrida

Combina vetores, que encontram pelo significado, com um índice de texto completo (FTS5) para as palavras exatas. Tudo em um banco de dados local, SQLite, e com embeddings da OpenAI, do Gemini, da Voyage ou de modelos locais.

Busca por vetores e por texto completo sobre um mesmo banco de dados local, com vários provedores de embeddings.
Pelo significado e pelas palavras exatas.

5. Subagentes

No nosso protótipo, o roteamento é manual. No OpenClaw, um agente pode criar outro por conta própria com sessions_spawn. O filho trabalha no próprio contexto, com um tempo limite, e devolve o resultado ao pai. Assim, o principal delega uma pesquisa a fundo e segue quando o especialista termina.

O agente principal cria um subagente com sessions_spawn; ele trabalha no próprio contexto e devolve um resultado.
Delegar, esperar o resultado e seguir.

Se você quer construir o seulink

O conselho do artigo é ir aos poucos:

  1. Comece com um único canal: um bot do Telegram ou do Discord com sessões.
  2. Acrescente ferramentas uma de cada vez: primeiro ler e escrever arquivos, depois o terminal.
  3. Some a memória quando precisar: assim que as sessões reiniciarem, você vai querer.
  4. Acrescente canais quando um não bastar: o gateway surge naturalmente.
  5. Acrescente agentes quando as tarefas se especializarem: melhor dois do que dez.

Ou use direto o OpenClaw, que é de código aberto e resolve os casos-limite. Mas agora você já sabe como ele funciona por dentro.

Resumindolink

Um assistente persistente é um loop de agente cercado de peças simples: sessões, uma alma, ferramentas, permissões, um gateway, memória e tarefas agendadas.

Em uma frase

Nenhuma peça é mágica: cada uma resolve um problema concreto.

Que peça você acrescentaria ao seu assistente?

Fonteslink

Continuar lendo

Últimos posts -->

Você viu esses projetos?

Gymnasia

Gymnasia Gymnasia
Expo
React Native
TypeScript
OpenAI
Anthropic

App de fitness com dois agentes que são executados integralmente no dispositivo, sem backend, de forma que os dados do usuário nunca saem do celular. Um coach conversacional BYOK com tools locais e system prompt remoto com fallback offline, e um estimador de refeições que tira os macronutrientes de uma foto do prato, com leitura de códigos de barras contra o OpenFoodFacts.

LangGraph Deep Researcher

LangGraph Deep Researcher LangGraph Deep Researcher
Python
LangGraph
FastAPI
React
TypeScript
Docker

Sistema multiagente de pesquisa construído com LangGraph. Um supervisor decompõe sua pergunta em tópicos e lança subagentes de busca em paralelo; cada um comprime seus achados antes de repassá-los a um agente redator que escreve o relatório final em markdown com suas fontes. Streaming ao vivo por WebSockets, modelo configurável por papel e chaves de API próprias que nunca são armazenadas no servidor.

Tau

Tau Tau
Python
LangChain

Sistema multiagente de tutoria para estudantes do ensino médio, com um agente por disciplina e material de curso elaborado e validado por uma equipe de professores. Chegou a ser usado com alunos reais em um colégio privado na Espanha e em uma escola de ensino médio na Colômbia.

Ver todos os projetos -->
>_ Disponível para projetos

Tem um projeto com IA?

Vamos conversar.

maximofn@gmail.com

Especialista em Machine Learning e Inteligência Artificial. Desenvolvo soluções com IA generativa, agentes inteligentes e modelos personalizados.

Quer assistir alguma palestra?

Últimas palestras -->

Quer melhorar com essas dicas?

Últimos tips -->

Use isso localmente

Os espaços do Hugging Face nos permitem executar modelos com demos muito simples, mas e se a demo quebrar? Ou se o usuário a deletar? Por isso, criei contêineres docker com alguns espaços interessantes, para poder usá-los localmente, aconteça o que acontecer. Na verdade, se você clicar em qualquer botão de visualização de projeto, ele pode levá-lo a um espaço que não funciona.

Flow edit

Flow edit Flow edit

Edite imagens com este modelo de Flow. Baseado em SD3 ou FLUX, você pode editar qualquer imagem e gerar novas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos os contêineres -->
>_ Disponível para projetos

Tem um projeto com IA?

Vamos conversar.

maximofn@gmail.com

Especialista em Machine Learning e Inteligência Artificial. Desenvolvo soluções com IA generativa, agentes inteligentes e modelos personalizados.

Você quer treinar seu modelo com esses datasets?

short-jokes-dataset

HuggingFace

Dataset com piadas em inglês

Uso: Fine-tuning de modelos de geração de texto humorístico

231K linhas 2 colunas 45 MB
Ver no HuggingFace →

opus100

HuggingFace

Dataset com traduções de inglês para espanhol

Uso: Treinamento de modelos de tradução inglês-espanhol

1M linhas 2 colunas 210 MB
Ver no HuggingFace →

netflix_titles

HuggingFace

Dataset com filmes e séries da Netflix

Uso: Análise de catálogo Netflix e sistemas de recomendação

8.8K linhas 12 colunas 3.5 MB
Ver no HuggingFace →
Ver mais datasets -->