Podrías haber inventado OpenClaw: un asistente de IA, paso a paso

Podrías haber inventado OpenClaw: un asistente de IA, paso a paso
4límites del chat en el navegador
10pasos, y cada uno nace de un problema real
~400líneas de Python en el programa final
~100×más pequeña una instantánea semántica que una captura
Podrías haber inventado OpenClaw: cómo funciona un asistente de IA persistente, paso a paso
También lo cuento en este vídeo de casi diecisiete minutos, en mi canal Articulator ES.

El problema: cuatro límites del chatenlace

Cuando usas ChatGPT o Claude en el navegador, chocas enseguida con cuatro límites:

1. No tiene estado

Cada conversación empieza de cero. No sabe tu nombre, ni tus preferencias, ni lo que le pediste ayer, así que te pasas el día explicándole el contexto otra vez.

2. Es pasivo

Tú vas a él, pero él nunca viene a ti. No puede despertarse a las siete y resumirte la agenda, vigilar tu correo ni repetir una tarea.

3. Está aislado

No ejecuta comandos en tu ordenador, no navega por ti, no controla tus apps ni envía mensajes. Vive en una caja de texto, sin manos.

4. Vive en un solo canal

Tu vida pasa por WhatsApp, Telegram, Discord o Slack, pero la IA está en su propia pestaña. No puedes escribirle donde ya estás, y menos aún que recuerde lo mismo en todas partes.

Los cuatro límites del chat: sin estado, pasivo, aislado y de un solo canal.
Sin estado, pasivo, aislado y de un solo canal.

Imagina lo contrarioenlace

Ahora imagina un asistente que hace justo lo que el chat no puede:

  • Vive en todas tus apps de mensajería, con una sola memoria compartida.
  • Recuerda tus preferencias, tus proyectos y vuestras conversaciones.
  • Actúa: ejecuta comandos, navega por internet y maneja un navegador de verdad.
  • Se despierta solo, según un horario, para hacer tareas sin que se lo pidas.
  • Corre en tu propio hardware: un portátil, un servidor o un Mac Mini, siempre encendido y bajo tu control.
Un asistente conectado a todos los canales, con una memoria compartida y capaz de ejecutar comandos, navegar y manejar un navegador.
Todos los canales, una sola memoria y manos para actuar.

Eso es OpenClaw. No es un chatbot: es un asistente personal con identidad propia, herramientas y presencia en todos tus canales. Y el artículo no se queda en la descripción: lo construye desde cero con solo tres ingredientes, una API de mensajería, un modelo de lenguaje y las ganas de que la IA sirva fuera de la ventana de chat.

El punto de partida: el bot más simpleenlace

Todo empieza con lo mínimo: una IA que responde en Telegram. El código cabe en una pantalla: recibe tu mensaje, se lo manda a Claude Sonnet y te devuelve su respuesta. Lo ejecutas, le escribes desde el móvil y contesta.

Es sencillo, pero en realidad es una versión peor de la web de Claude. Cada mensaje es independiente: le dices tu nombre y, en el siguiente mensaje, ya lo ha olvidado. No tiene memoria, ni herramientas, ni personalidad. A partir de aquí, cada paso arregla una de estas carencias.

Paso 1: sesiones persistentesenlace

El primer problema es la falta de estado: pregúntale qué le dijiste antes y no tiene ni idea. La solución es guardar un historial de la conversación por cada usuario. Antes de llamar al modelo, el bot carga el historial; después, guarda tu mensaje y su respuesta. Se acuerda de ti porque la conversación entera viaja en cada llamada.

La clave está en el formato, JSONL: cada línea del archivo es un mensaje, y solo se añaden líneas al 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!"}

Si el proceso se cae a mitad de una escritura, pierdes como mucho una línea. Es justo lo que usa OpenClaw para sus transcripciones, un archivo por sesión en ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl. Reinicias el proceso y todo sigue ahí.

Un archivo JSONL en el que cada línea es un mensaje; si el proceso se cae, solo se pierde la última.
Un archivo por sesión y una línea por mensaje.

Aquí asoma un problema que se resuelve más adelante: las conversaciones crecen, y con las semanas el historial acaba siendo más grande que la ventana de contexto del modelo.

Paso 2: personalidad con SOUL.mdenlace

El bot ya funciona, pero es un asistente genérico. ¿Y si quisiéramos que fuera alguien? OpenClaw lo resuelve con un archivo Markdown, SOUL.md, el alma del agente, que define su identidad, cómo se comporta y cuáles son sus límites. El del artículo se llama 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
El archivo SOUL.md de Jarvis, con su personalidad y sus límites.
El alma de Jarvis: quién es, cómo se comporta y qué no hace.

Ese texto se inyecta como prompt de sistema en cada llamada al modelo. Y puedes escribir lo que quieras: una historia de origen, una filosofía, sus reglas. Cuanto más concreto, más coherente es el agente. «Sé útil» es vago; «conciso cuando hace falta, minucioso cuando importa; ni un burócrata, ni un pelota» le da al modelo algo con lo que trabajar.

Paso 3: herramientas y el bucle del agenteenlace

Un bot que solo habla se queda corto. La idea es darle al modelo herramientas con estructura y dejar que él decida cuándo usarlas. En el ejemplo hay cuatro: run_command, read_file, write_file y web_search. Cada una tiene tres partes: un nombre con su esquema de entrada, una descripción que le explica al modelo para qué sirve y la función que la ejecuta de verdad.

Después viene el bucle del agente: llamas al modelo con las herramientas; si pide usar alguna, la ejecutas y le devuelves el resultado; y vuelves a llamarlo, hasta que responde sin pedir nada más.

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})
El bucle del agente: el modelo pide herramientas, recibe los resultados y sigue hasta dar la respuesta final.
El modelo y las herramientas se turnan hasta que llega la respuesta final.

Ahora le escribes por Telegram que cree un archivo que imprima «hola mundo» y lo ejecute. El bot escribe el archivo, lo ejecuta y te cuenta lo que ha salido. Ha decidido él qué herramientas usar y en qué orden. OpenClaw tiene muchas más, como el navegador o lanzar subagentes, pero todas siguen este mismo patrón.

Paso 4: permisosenlace

Estamos ejecutando comandos que llegan por Telegram, y eso da miedo. ¿Qué pasa si alguien entra en tu cuenta y le pide al bot que lo borre todo? El sistema de permisos del artículo tiene tres piezas: una lista de comandos seguros, unos patrones peligrosos y un archivo con las aprobaciones que ya diste.

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"

Si el comando es seguro o ya lo aprobaste, se ejecuta al momento. Si no, el agente recibe un «permiso denegado» y puede probar otro camino. La aprobación queda guardada, así que nunca te pregunta dos veces por lo mismo.

OpenClaw va más allá: permite aprobar patrones enteros, como git *, y tiene tres niveles: ask (te pide permiso), record (lo registra y sigue) e ignore (lo aprueba directamente).

Un solo patrón, git asterisco, aprueba muchos comandos; debajo, los tres niveles: ask, record e ignore.
Patrones enteros y tres niveles de permiso en OpenClaw.

Paso 5: la pasarelaenlace

Hasta ahora tenemos un bot de Telegram. Pero ¿y si también lo quieres en Discord, en WhatsApp y en Slack? Podrías escribir un bot por plataforma, pero cada uno tendría su sesión, su memoria y su configuración, y el de Telegram no sabría nada de tus otras conversaciones.

La solución es una pasarela (gateway): un proceso central que gestiona todos los canales. Y fíjate en lo que ya tenemos: run_agent_turn no sabe nada de Telegram. Recibe mensajes y devuelve texto, así que la lógica del agente ya está separada del canal.

Para demostrarlo, el artículo añade una segunda puerta: una API HTTP con Flask junto al bot de Telegram, las dos hablando con el mismo agente y las mismas sesiones.

# 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!"}
El bot de Telegram y una API HTTP hablan con el mismo agente y las mismas sesiones.
Un solo agente, una sola memoria y dos interfaces.

El siguiente paso es llevarlo a un archivo de configuración que diga qué canales arrancar y cómo autenticarse. Es lo que hace OpenClaw: una sola pasarela para Telegram, Discord, WhatsApp, Slack, Signal, iMessage y más, con las sesiones agrupadas por usuario, por canal o en una sola compartida.

Paso 6: compactación del contextoenlace

Volvemos al problema que dejamos apuntado. Tras semanas hablando con el bot, el historial tiene miles de mensajes y su tamaño supera la ventana de contexto del modelo. La solución es compactar: resumir los mensajes antiguos y quedarse con los recientes.

Primero se estiman los tokens con una regla aproximada, cuatro caracteres por token. Si la conversación pasa de 100.000, más o menos el 80 % de una ventana de 128.000, se parte en dos: la mitad antigua se manda al modelo para que la resuma, y la reciente se queda tal cual.

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:]
    ...
La sesión se parte en dos: la mitad antigua va al modelo para que la resuma y la reciente se queda tal cual.
La mitad antigua se resume; la reciente no se toca.

El resumen tiene que conservar lo importante: los datos del usuario, como su nombre o sus preferencias, las decisiones tomadas y las tareas pendientes. Ese resumen sustituye a todos los mensajes viejos, de modo que el bot sigue recordando lo esencial y el archivo es mucho más pequeño. Para probarlo sin pasarte horas chateando, baja el umbral a 1.000 tokens.

La compactación de OpenClaw es más fina: parte los mensajes en trozos según sus tokens, resume cada trozo por separado y deja un margen de seguridad, porque la estimación nunca es exacta. Pero la idea es la misma.

Paso 7: memoria a largo plazoenlace

El historial es la memoria de la conversación, pero si reinicias la sesión o empiezas otra, todo desaparece. Hace falta una memoria aparte que sobreviva a los reinicios. La idea: dos herramientas más, save_memory y memory_search, sobre archivos Markdown en una carpeta.

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?
Tras reiniciar la sesión, el bot busca en la carpeta de memoria y recuerda el restaurante favorito.
La memoria está en archivos, no en la sesión.

Funciona porque la memoria está en archivos. Nuestra búsqueda es por palabras clave, y basta para empezar. OpenClaw usa búsqueda vectorial con embeddings, que encuentra por significado: así, «auth bug» da con «authentication issues».

Paso 8: la cola de comandosenlace

Este paso resuelve un problema sutil pero crítico: ¿qué pasa si llegan dos mensajes a la vez? Le pides por Telegram que mire tu agenda y, al mismo tiempo, por la web, qué tiempo hace. Los dos cargan la misma sesión, los dos escriben en ella y el archivo acaba corrupto.

La solución es sencilla: un candado por sesión. Solo se procesa un mensaje a la vez en cada sesión. Los mensajes del mismo usuario hacen cola, y los de usuarios distintos van en 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)

OpenClaw lo amplía con carriles separados para los mensajes, las tareas programadas y los subagentes.

Los carriles de OpenClaw: mensajes, tareas programadas y subagentes avanzan por separado.
Un carril para cada tipo de trabajo.

Paso 9: latidos (tareas programadas)enlace

Hasta ahora el agente solo responde cuando le hablas. ¿Y si quieres que mire tu correo cada mañana, o que te resuma la agenda antes de las reuniones? Hacen falta latidos (heartbeats): tareas que despiertan al agente con un temporizador. El ejemplo del artículo es un resumen matinal, todos los días a las 7:30:

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)

Lo importante es que cada latido usa su propia sesión (cron:morning-briefing), para no llenar de ruido tu conversación principal. Y llama a la misma run_agent_turn: es un mensaje más, solo que lo dispara un reloj en vez de una persona.

OpenClaw acepta expresiones cron completas, como 30 7 * * *, y les da su propio carril para que nunca bloqueen los mensajes en tiempo real.

La expresión cron 30 7 asterisco asterisco asterisco significa a las 7:30 todos los días; los latidos van por su carril y no bloquean los mensajes.
Expresiones cron y un carril propio.

Paso 10: varios agentesenlace

Con más tareas, una sola personalidad y un solo juego de herramientas no llegan a todo: un asistente de investigación necesita otras instrucciones que uno general. La solución son varias configuraciones de agente, cada una con su alma y su sesión, y un enrutador que elige a quién va cada mensaje.

En el ejemplo hay dos: Jarvis, el asistente general, y Scout, especialista en investigación, que tiene que citar fuentes para cada afirmación.

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 y Scout, cada uno con su sesión, un enrutador que reparte los mensajes y una carpeta de memoria compartida.
Conversaciones separadas y una misma carpeta de memoria.

Cada uno tiene su propia conversación, pero los dos comparten la misma carpeta de memoria, y eso permite que colaboren. Le pides a Scout que investigue buenas prácticas de programación asíncrona en Python; busca en la web y guarda lo que encuentra. Luego le preguntas a Jarvis qué encontró Scout, y lo busca en esa memoria. Sin mensajes directos entre ellos: solo archivos compartidos.

OpenClaw lo amplía con subagentes y con mensajes entre agentes, pero el patrón de fondo es el mismo: cada agente no es más que un alma, una sesión y unas herramientas.

Todo junto: mini OpenClawenlace

El artículo lo junta todo en un único programa, mini-openclaw.py: una consola interactiva de unas 400 líneas de Python con sesiones, alma, herramientas, permisos, compactación, memoria, cola, tareas programadas y varios agentes. Lo he comprobado en su código: es una consola, así que de los diez pasos solo falta la pasarela.

En la sesión de ejemplo, le pides que recuerde tu restaurante favorito y lo guarda; le preguntas qué hay en tu carpeta de proyecto y ejecuta un comando para verlo; reinicias la sesión y, al preguntarle dónde te gusta comer, lo recuerda.

Lo bonito es que ninguna pieza es arbitraria. Cada una nació de un problema práctico:

  • «No se acuerda de nada» → sesiones.
  • «Suena a chatbot genérico» → SOUL.md.
  • «Solo habla, no actúa» → herramientas y bucle del agente.
  • «Ejecuta comandos peligrosos» → permisos.
  • «Lo quiero en todas mis apps» → pasarela.
  • «La conversación se hizo demasiado larga» → compactación.
  • «Olvida las cosas entre sesiones» → memoria.
  • «Dos mensajes a la vez corrompen los datos» → cola de comandos.
  • «Quiero que haga cosas solo» → latidos.
  • «Un agente no lo hace todo bien» → varios agentes.
Cada pieza nace de un problema: no se acuerda de nada, sesiones; suena a chatbot genérico, personalidad; solo habla, herramientas.
Así es como podrías haber inventado OpenClaw.

Ir más allá: OpenClaw en producciónenlace

El prototipo cubre la arquitectura básica. El artículo termina con cinco ideas de cómo la lleva OpenClaw a producción, y merece la pena verlas.

1. Un navegador con instantáneas semánticas

OpenClaw le da al agente un navegador con Playwright, pero en vez de mandarle capturas de pantalla, de unos 5 MB cada una, le manda una instantánea semántica, una versión en texto del árbol de accesibilidad de la 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 con el que se puede interactuar lleva un número. Cuando el agente quiere pulsar algo, dice click ref=1. Sin adivinar, y unas cien veces más pequeño que una captura, así que gasta muchos menos tokens.

La página de inicio de sesión y su árbol de accesibilidad en texto, con un número por elemento; unas cien veces más pequeño que una captura.
Texto en vez de imagen: unas cien veces más pequeño.

2. El ámbito de las sesiones

Nuestro prototipo usa el usuario como clave. OpenClaw deja elegir: main (una sola sesión para todos los mensajes directos), per-peer (una para cada persona en todos los canales) o per-channel-peer (una por persona y canal). Y con los enlaces de identidad, lo que Alicia habla por Telegram y por Discord comparte historial.

Los tres ámbitos de sesión, main, per-peer y per-channel-peer, y los enlaces de identidad que unen los canales de una misma persona.
Tres ámbitos y los enlaces de identidad.

3. Los canales como plugins

Cada canal, de Telegram a iMessage, es un adaptador que traduce sus mensajes a un formato común. Para añadir un canal nuevo basta con escribir su adaptador, sin tocar ni una línea de la lógica del agente.

Cada canal pasa por su adaptador a un formato común que llega a la lógica del agente.
Un adaptador por canal y la lógica del agente intacta.

4. Una memoria híbrida

Combina vectores, que encuentran por significado, con un índice de texto completo (FTS5) para las palabras exactas. Todo en una base de datos local, SQLite, y con embeddings de OpenAI, de Gemini, de Voyage o de modelos locales.

Búsqueda por vectores y por texto completo sobre una misma base de datos local, con varios proveedores de embeddings.
Por significado y por palabras exactas.

5. Subagentes

En nuestro prototipo, el enrutado es manual. En OpenClaw, un agente puede lanzar otro por su cuenta con sessions_spawn. El hijo trabaja en su propio contexto, con un tiempo límite, y le devuelve el resultado al padre. Así el principal delega una investigación a fondo y sigue cuando el especialista termina.

El agente principal lanza un subagente con sessions_spawn; este trabaja en su propio contexto y le devuelve un resultado.
Delegar, esperar el resultado y seguir.

Si quieres construir el tuyoenlace

El consejo del artículo es ir poco a poco:

  1. Empieza con un solo canal: un bot de Telegram o de Discord con sesiones.
  2. Añade herramientas de una en una: primero leer y escribir archivos, luego la terminal.
  3. Suma memoria cuando la necesites: en cuanto las sesiones se reinicien, la querrás.
  4. Añade canales cuando uno se te quede corto: la pasarela sale de forma natural.
  5. Añade agentes cuando las tareas se especialicen: mejor dos que diez.

O usa directamente OpenClaw, que es de código abierto y resuelve los casos límite. Pero ahora ya sabes cómo funciona por dentro.

En resumenenlace

Un asistente persistente es un bucle de agente rodeado de piezas sencillas: sesiones, un alma, herramientas, permisos, una pasarela, memoria y tareas programadas.

En una frase

Ninguna pieza es magia: cada una resuelve un problema concreto.

¿Qué pieza le añadirías tú a tu asistente?

Fuentesenlace

Seguir leyendo

Últimos posts -->

¿Has visto estos proyectos?

Gymnasia

Gymnasia Gymnasia
Expo
React Native
TypeScript
OpenAI
Anthropic

App de fitness con dos agentes que se ejecutan íntegramente en el dispositivo, sin backend, de forma que los datos del usuario nunca salen del móvil. Un coach conversacional BYOK con tools locales y system prompt remoto con fallback offline, y un estimador de comidas que saca los macronutrientes de una foto del plato, con lectura de códigos de barras contra OpenFoodFacts.

LangGraph Deep Researcher

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

Sistema multiagente de investigación construido con LangGraph. Un supervisor descompone tu pregunta en temas y lanza subagentes de búsqueda en paralelo; cada uno comprime sus hallazgos antes de pasarlos a un agente redactor que escribe el informe final en markdown con sus fuentes. Streaming en vivo por WebSockets, modelo configurable por rol y claves de API propias que nunca se guardan en el servidor.

Tau

Tau Tau
Python
LangChain

Sistema multiagente de tutoría para estudiantes de secundaria, con un agente por asignatura y material de curso elaborado y validado por un equipo de profesores. Llegó a usarse con alumnos reales en un colegio privado en España y en un instituto en Colombia.

Ver todos los proyectos -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres ver alguna charla?

Últimas charlas -->

¿Quieres mejorar con estos tips?

Últimos tips -->

Usa esto en local

Los espacios de Hugging Face nos permite ejecutar modelos con demos muy sencillas, pero ¿qué pasa si la demo se rompe? O si el usuario la elimina? Por ello he creado contenedores docker con algunos espacios interesantes, para poder usarlos de manera local, pase lo que pase. De hecho, es posible que si pinchas en alún botón de ver proyecto te lleve a un espacio que no funciona.

Flow edit

Flow edit Flow edit

Edita imágenes con este modelo de Flow. Basándose en SD3 o FLUX puedes editar cualquier imagen y generar nuevas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos los contenedores -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres entrenar tu modelo con estos datasets?

short-jokes-dataset

HuggingFace

Dataset de chistes en inglés

Uso: Fine-tuning de modelos de generación de texto humorístico

231K filas 2 columnas 45 MB
Ver en HuggingFace →

opus100

HuggingFace

Dataset con traducciones de inglés a español

Uso: Entrenamiento de modelos de traducción inglés-español

1M filas 2 columnas 210 MB
Ver en HuggingFace →

netflix_titles

HuggingFace

Dataset con películas y series de Netflix

Uso: Análisis de catálogo de Netflix y sistemas de recomendación

8.8K filas 12 columnas 3.5 MB
Ver en HuggingFace →
Ver más datasets -->