Qwen 3.6 un modelo, múltiples configuraciones

La familia de modelos Qwen 3.6 ha resultado ser de los mejores modelos en cuanto a «inteligencia» / tamaño. Hay modelos más pequeños o más inteligentes, pero no con un equilibrio tan bueno.

Además permiten múltiples configuracione para diversas tareas, no es que vayas a ver u, gran cambio entre ellos, pero si que, en algunos casos, se puede notar una mejora en cierto tipo de tareas.

Voy a centrarme en los modelos Qwen 3.6 27B y Qwen 3.6 35B A3B, pero lo aquí mostrado sirve para todos los modelos de la familia.

Aunque aquí voy a usar los parámetros de Llama.cpp es fácil adaptarlo a cualquier otro motor de LLM

General

Es el caso genérico, una configuración pensada para un uso general

--temp 1.0
--top-p 0.95
--top-k 20
--min-p 0.00

Si entra en bucles añadir:

--presence-penalty 1.0

Coder

Es la configuración que mejor funciona para la creación de código.

--temp 0.6
--top-p 0.95
--top-k 20
--min-p 0.00

Si entra en bucles añadir:

--presence-penalty 1.0

Agent

Es un caso específico de la anterior configuración para su uso en tareas agenticas. Además de tener el razonamiento activado se preservan las trazas de este razonamiento en la conversación. Esto mejora su capacidad de realizar tareas de varios pasos, a cambio  consume más contexto.

--temp 0.6
--top-p 0.95
--top-k 20
--min-p 0.00
--chat-template-kwargs '{"preserve_thinking":true}'

Si entra en bucles añadir:

--presence-penalty 1.0

Fast

La configuración más rápida, sin razonamiento. Destaca por su creatividad…aunque eso no tiene por qué ser bueno en según que tareas.

A la versión 27B no le veo mucho sentido, si queremos velocidad podemos usar alguna de las configuraciones de 35B-A3 y razonamiento activado.

Si lo que quieres es aumentar su lado creativo  puedes probar a ir subiendo poco a poco la temperatura.

--temp 0.7
--top-p 0.8
--top-k 20
--min-p 0.00
--chat-template-kwargs '{"enable_thinking":false}'

¿Con o sin MTP?

La respuesta es MTP siempre que sea posible. MTP permite estimar más de un token por iteración del modelo. Esto ocurre sin afectar a la calidad del texto generado que es el mismo token a token

Usar MTP:

--spec-type draft-mtp
--spec-draft-n-max 2

El valor habitualmente recomendado es 2 pero hay gente que reporta mejores resultados con valor 3 (¡Probad!)

Bonus Plus: MTP + NGram

Una ventaja de Llama.cpp es que te permite usar múltiples estrategias para predecir el siguiente token. NGram puede resultar un buen predictor cuando hablamos de código. Combinar ambas estrategia puede ayudar a ganar un poco de velocidad.

--spec-type draft-mtp,ngram-simple
--spec-draft-n-max 2

En este caso uso ngram-simple porque es la estrategia más sencilla, pero Llama.cpp cuenta con diversas variantes y múltiples parámetros de configuración

Buenos compañeros:

Es una buena opción tener un LLM alternativo para ayudar a nuestro LLM principal cuando tiene problemas con alguna tarea.

En el caso de Qwen unos buenos compañeros de viaje son los modelos Gemma 4. Yo uso Gema 4 31B como alternativa a Qwen 3.6 27B y Gemma 4 26B A4B como alternativa a Qwen 3.6 35B A3B

Por suerte, configurarlos es más sencillo, la configuratión recomendada es:

--temp 1.0
--top-p 0.95
--top-k 64

Y si tienes la versión MTP:

--spec-type draft-mtp
--spec-draft-n-max 4

Lo miso que con Qwen, probar diferentes valores

Cómo usar un LLM para controlar un Arduino usando MCP

En este post tenéis el código necesario para lanzar un un MCP en Arduino UNU R4 WiFi que permita a un LLM mostrar diferentes imágenes pre-configuradas en la matriz de leds, para más información puedes ver el vídeo:

/*
  Servidor MCP mínimo para Arduino UNO R4 WiFi.

  Dependencias:
    - WiFiS3 (incluida con el core Arduino Renesas)
    - Arduino_LED_Matrix (incluida con el core Arduino Renesas)
    - ArduinoJson 7.x (instalar desde el gestor de bibliotecas)

  Transporte MCP: Streamable HTTP, respuestas JSON (sin SSE), endpoint /mcp.
  Las dos funciones de hardware están vacías intencionadamente.
*/

#include <WiFiS3.h>
#include <Arduino_LED_Matrix.h>
#include <ArduinoJson.h>


#define DEBUG 1

#if DEBUG
  #define DEBUG_MSG(x) Serial.print(x)
  #define DEBUG_BR() Serial.println()
#else
  #define DEBUG_MSG(x) ((void)0)
  #define DEBUG_BR() ((void)0)
#endif


// ---------- Configuración WiFi ----------
const char WIFI_SSID[] = "WIFI_NAME";
const char WIFI_PASSWORD[] = "WIFI_PASSWORD";

// Ajusta estas constantes a la red local donde se conectará la placa.
const IPAddress MCP_IP(192, 168, 1, 15);
const uint16_t MCP_PORT = 8080;
const IPAddress MCP_DNS(192, 168, 1, 1);
const IPAddress MCP_GATEWAY(192, 168, 1, 1);
const IPAddress MCP_SUBNET(255, 255, 255, 0);

const char MCP_PROTOCOL_VERSION[] = "2025-06-18";
const char MCP_PATH[] = "/mcp";
const size_t MAX_HTTP_BODY = 4096;
const unsigned long CLIENT_TIMEOUT_MS = 3000;

// Estados admitidos por la pantalla.
static const char* const VALID_STATES[] = {
  "alegre", "triste", "enfado", "corazon","risa", "si", "no", "ok", "ko"
};
static const size_t VALID_STATES_COUNT =
  sizeof(VALID_STATES) / sizeof(VALID_STATES[0]);

WiFiServer mcpServer(MCP_PORT);
ArduinoLEDMatrix matrix;

const uint32_t EMPTY_FRAME[3] = {0x00000000, 0x00000000, 0x00000000};


byte OK_FRAME[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0 },
  { 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0 },
  { 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0 },
  { 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

byte HAPPY_FRAME[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0 },
  { 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
  { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};


byte SAD_FRAME[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0 },
  { 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
  { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }
};

byte KO_FRAME[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0 },
  { 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 },
  { 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0 },
  { 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0 },
  { 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 },
  { 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};


byte YES_FRAME[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

byte NO_FRAME[8][12] = {
  { 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
  { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 },
  { 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 },
  { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 },
  { 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 }
};


byte XD_FRAME[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 },
  { 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0 },
  { 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0 },
  { 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0 },
  { 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0 },
  { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

byte HEART_FRAME[8][12] = {
  { 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0 },
  { 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0 },
  { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
  { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
  { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
  { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
  { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }
};

byte ANGRY_FRAME[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0 },
  { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};




//Plantilla vacia
/*byte _FRAME[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};*/



// ---------- Funciones que debe completar el usuario ----------

void pantalla(const char* estado) {
  if (strcmp(estado, "alegre") == 0) {
    // Mostrar cara alegre
    matrix.renderBitmap(HAPPY_FRAME, 8, 12);
  }
  else if (strcmp(estado, "triste") == 0) {
    // Mostrar cara triste
    matrix.renderBitmap(SAD_FRAME, 8, 12);
  }
  else if (strcmp(estado, "risa") == 0) {
    // Mostrar cara riendo
    matrix.renderBitmap(XD_FRAME, 8, 12);
  }
  else if (strcmp(estado, "si") == 0) {
    // Mostrar símbolo sí
    matrix.renderBitmap(YES_FRAME, 8, 12);
  }
  else if (strcmp(estado, "no") == 0) {
    // Mostrar símbolo no
    matrix.renderBitmap(NO_FRAME, 8, 12);
  }
  else if (strcmp(estado, "ok") == 0) {
    // Mostrar OK
    matrix.renderBitmap(OK_FRAME, 8, 12);
  }
  else if (strcmp(estado, "ko") == 0) {
    // Mostrar KO
    matrix.renderBitmap(KO_FRAME, 8, 12);
  }
  else if (strcmp(estado, "corazon") == 0) {
    // Mostrar KO
    matrix.renderBitmap(HEART_FRAME, 8, 12);
  }
  else if (strcmp(estado, "enfado") == 0) {
    // Mostrar KO
    matrix.renderBitmap(ANGRY_FRAME, 8, 12);
  }
}


void ventilador(uint8_t velocidad) {
  // Intencionadamente vacía.
  // Aquí se puede convertir 0..100 al PWM o al control requerido por el motor.
}

// ---------- Utilidades HTTP ----------

void sendCorsHeaders(WiFiClient& client) {
  client.println("Access-Control-Allow-Origin: *");
  client.println("Access-Control-Allow-Methods: POST, GET, OPTIONS");
  client.println("Access-Control-Allow-Headers: Content-Type, Accept, MCP-Protocol-Version");
  client.println("Access-Control-Expose-Headers: MCP-Protocol-Version");
  client.println("Access-Control-Max-Age: 86400");
}

void sendEmptyResponse(WiFiClient& client, int statusCode, const char* statusText) {
  client.print("HTTP/1.1 ");
  client.print(statusCode);
  client.print(' ');
  client.println(statusText);
  client.println("Content-Length: 0");
  sendCorsHeaders(client);
  client.println("Connection: close");
  client.println();
}

void sendJsonResponse(WiFiClient& client, int statusCode, const char* statusText,
                      JsonDocument& response) {
  const size_t length = measureJson(response);

  client.print("HTTP/1.1 ");
  client.print(statusCode);
  client.print(' ');
  client.println(statusText);
  client.println("Content-Type: application/json; charset=utf-8");
  client.print("MCP-Protocol-Version: ");
  client.println(MCP_PROTOCOL_VERSION);
  client.print("Content-Length: ");
  client.println(length);
  sendCorsHeaders(client);
  client.println("Connection: close");
  client.println();
  serializeJson(response, client);
}

void setResponseId(JsonDocument& response, JsonVariantConst id) {
  if (id.is<const char*>()) {
    response["id"] = id.as<const char*>();
  } else if (id.is<long>()) {
    response["id"] = id.as<long>();
  } else if (id.is<unsigned long>()) {
    response["id"] = id.as<unsigned long>();
  } else {
    response["id"] = nullptr;
  }
}

void makeError(JsonDocument& response, JsonVariantConst id, int code,
               const char* message) {
  response.clear();
  response["jsonrpc"] = "2.0";
  setResponseId(response, id);
  response["error"]["code"] = code;
  response["error"]["message"] = message;
}

void makeToolError(JsonDocument& response, JsonVariantConst id,
                   const char* message) {
  response.clear();
  response["jsonrpc"] = "2.0";
  setResponseId(response, id);
  response["result"]["isError"] = true;
  JsonObject item = response["result"]["content"].add<JsonObject>();
  item["type"] = "text";
  item["text"] = message;
}

void makeToolSuccess(JsonDocument& response, JsonVariantConst id,
                     const char* message) {
  response.clear();
  response["jsonrpc"] = "2.0";
  setResponseId(response, id);
  response["result"]["isError"] = false;
  JsonObject item = response["result"]["content"].add<JsonObject>();
  item["type"] = "text";
  item["text"] = message;
}

bool validScreenState(const char* state) {
  DEBUG_MSG("Validando estado: ");
  DEBUG_MSG(state);
  DEBUG_BR();
  
  if (state == nullptr) return false;

  for (size_t i = 0; i < VALID_STATES_COUNT; ++i) {
    if (strcmp(state, VALID_STATES[i]) == 0) return true;
  }
  return false;
}

// ---------- Métodos MCP ----------

void handleInitialize(JsonDocument& response, JsonVariantConst id) {
  response["jsonrpc"] = "2.0";
  setResponseId(response, id);
  response["result"]["protocolVersion"] = MCP_PROTOCOL_VERSION;
  response["result"]["capabilities"]["tools"]["listChanged"] = false;
  response["result"]["serverInfo"]["name"] = "arduino-uno-r4-wifi";
  response["result"]["serverInfo"]["version"] = "1.0.0";
}

void handleToolsList(JsonDocument& response, JsonVariantConst id) {
  response["jsonrpc"] = "2.0";
  setResponseId(response, id);

  JsonArray tools = response["result"]["tools"].to<JsonArray>();

  JsonObject screenTool = tools.add<JsonObject>();
  screenTool["name"] = "pantalla";
  screenTool["description"] = "Muestra en la matriz LED uno de los estados permitidos.";
  JsonObject screenSchema = screenTool["inputSchema"].to<JsonObject>();
  screenSchema["type"] = "object";
  JsonObject screenProperties = screenSchema["properties"].to<JsonObject>();
  JsonObject stateProperty = screenProperties["estado"].to<JsonObject>();
  stateProperty["type"] = "string";
  JsonArray states = stateProperty["enum"].to<JsonArray>();
  for (size_t i = 0; i < VALID_STATES_COUNT; ++i) {
    states.add(VALID_STATES[i]);
  }
  screenSchema["required"].add("estado");
  screenSchema["additionalProperties"] = false;

  JsonObject fanTool = tools.add<JsonObject>();
  fanTool["name"] = "ventilador";
  fanTool["description"] = "Fija la velocidad del ventilador entre 0 y 100.";
  JsonObject fanSchema = fanTool["inputSchema"].to<JsonObject>();
  fanSchema["type"] = "object";
  JsonObject fanProperties = fanSchema["properties"].to<JsonObject>();
  JsonObject speedProperty = fanProperties["velocidad"].to<JsonObject>();
  speedProperty["type"] = "integer";
  speedProperty["minimum"] = 0;
  speedProperty["maximum"] = 100;
  fanSchema["required"].add("velocidad");
  fanSchema["additionalProperties"] = false;
}

void handleToolCall(JsonDocument& request, JsonDocument& response,
                    JsonVariantConst id) {
  const char* name = request["params"]["name"].as<const char*>();
  JsonObjectConst arguments = request["params"]["arguments"].as<JsonObjectConst>();
    
  #if DEBUG
    DEBUG_MSG("JSON recibido:");
    serializeJson(request, Serial);
    DEBUG_BR();
  #endif
  
  DEBUG_MSG("Name: ");
  DEBUG_MSG(name);
  DEBUG_BR();

  if (strcmp(name, "pantalla") == 0) {
    const char* state = arguments["estado"].as<const char*>();
    if (!validScreenState(state)) {
      makeToolError(response, id,
                    "estado no válido; consulte tools/list para ver los permitidos");
      return;
    }

    pantalla(state);
    makeToolSuccess(response, id, "Estado de pantalla recibido");
    return;
  }

  if (strcmp(name, "ventilador") == 0) {
    JsonVariantConst speedValue = arguments["velocidad"];
    if (!speedValue.is<int>()) {
      makeToolError(response, id, "velocidad debe ser un número entero");
      return;
    }

    const int speed = speedValue.as<int>();
    if (speed < 0 || speed > 100) {
      makeToolError(response, id, "velocidad debe estar entre 0 y 100");
      return;
    }

    ventilador(static_cast<uint8_t>(speed));
    makeToolSuccess(response, id, "Velocidad del ventilador recibida");
    return;
  }

  makeToolError(response, id, "Herramienta desconocida");
}

void processMcpRequest(WiFiClient& client, const String& body) {
  JsonDocument request;
  JsonDocument response;

  DeserializationError error = deserializeJson(request, body);
  if (error) {
    makeError(response, JsonVariantConst(), -32700, "Parse error");
    sendJsonResponse(client, 200, "OK", response);
    return;
  }

  const char* method = request["method"] | "";
  JsonVariantConst id = request["id"];
  const bool isNotification = id.isNull();

  if (strcmp(method, "notifications/initialized") == 0) {
    sendEmptyResponse(client, 202, "Accepted");
    return;
  }

  if (isNotification) {
    sendEmptyResponse(client, 202, "Accepted");
    return;
  }

  if (strcmp(method, "initialize") == 0) {
    handleInitialize(response, id);
  } else if (strcmp(method, "ping") == 0) {
    response["jsonrpc"] = "2.0";
    setResponseId(response, id);
    response["result"].to<JsonObject>();
  } else if (strcmp(method, "tools/list") == 0) {
    handleToolsList(response, id);
  } else if (strcmp(method, "tools/call") == 0) {
    handleToolCall(request, response, id);
  } else {
    makeError(response, id, -32601, "Method not found");
  }

  sendJsonResponse(client, 200, "OK", response);
}

// ---------- Servidor ----------

bool readHttpRequest(WiFiClient& client, String& method, String& path,
                     String& body) {
  client.setTimeout(CLIENT_TIMEOUT_MS);

  String requestLine = client.readStringUntil('\n');
  requestLine.trim();
  const int firstSpace = requestLine.indexOf(' ');
  const int secondSpace = requestLine.indexOf(' ', firstSpace + 1);
  if (firstSpace <= 0 || secondSpace <= firstSpace) return false;

  method = requestLine.substring(0, firstSpace);
  path = requestLine.substring(firstSpace + 1, secondSpace);

  size_t contentLength = 0;
  while (true) {
    String header = client.readStringUntil('\n');
    header.trim();
    if (header.length() == 0) break;

    const int separator = header.indexOf(':');
    if (separator > 0) {
      String name = header.substring(0, separator);
      name.toLowerCase();
      if (name == "content-length") {
        contentLength = static_cast<size_t>(header.substring(separator + 1).toInt());
      }
    }
  }

  if (contentLength > MAX_HTTP_BODY) {
    sendEmptyResponse(client, 413, "Payload Too Large");
    return false;
  }

  body = "";
  body.reserve(contentLength + 1);
  const unsigned long deadline = millis() + CLIENT_TIMEOUT_MS;
  while (body.length() < contentLength &&
         static_cast<long>(deadline - millis()) > 0) {
    while (client.available() && body.length() < contentLength) {
      body += static_cast<char>(client.read());
    }
  }

  return body.length() == contentLength;
}

void handleClient(WiFiClient& client) {
  String method;
  String path;
  String body;

  if (!readHttpRequest(client, method, path, body)) return;

  if (path != MCP_PATH) {
    sendEmptyResponse(client, 404, "Not Found");
  } else if (method == "OPTIONS") {
    // Respuesta al preflight CORS del navegador.
    sendEmptyResponse(client, 204, "No Content");
  } else if (method == "POST") {
    processMcpRequest(client, body);
  } else if (method == "GET") {
    // Este servidor no abre un canal SSE iniciado por GET.
    sendEmptyResponse(client, 405, "Method Not Allowed");
  } else {
    sendEmptyResponse(client, 405, "Method Not Allowed");
  }
}

void connectWiFi() {
  if (WiFi.status() == WL_NO_MODULE) {
    DEBUG_MSG("No se ha detectado el módulo WiFi.");
    while (true) delay(1000);
  }

  WiFi.config(MCP_IP, MCP_DNS, MCP_GATEWAY, MCP_SUBNET);

  DEBUG_MSG("Conectando a ");
  DEBUG_MSG(WIFI_SSID);
  while (WiFi.begin(WIFI_SSID, WIFI_PASSWORD) != WL_CONNECTED) {
    DEBUG_MSG('.');    
    delay(3000);
  }

  DEBUG_BR();
  DEBUG_MSG("Servidor MCP: http://");
  DEBUG_MSG(WiFi.localIP());
  DEBUG_MSG(':');
  DEBUG_MSG(MCP_PORT);
  DEBUG_MSG(MCP_PATH);
  DEBUG_BR();
}

void setup() {
  Serial.begin(115200);
  while (!Serial && millis() < 3000) {}

  // La matriz 12x8 queda lista para que pantalla() cargue imágenes.
  matrix.begin();
  matrix.loadFrame(EMPTY_FRAME);

  connectWiFi();
  mcpServer.begin();
}

void loop() {
  WiFiClient client = mcpServer.available();
  if (client) {
    handleClient(client);
    client.stop();
  }
}

¿La solución a los Doom Loops en los LLM?

El fenómeno conocido como el «bucle de la muerte» es uno de los problemas más persistentes y molestos en el uso de modelos de lenguaje. Se produce cuando la IA entra en un ciclo de repetición infinita, algo que resulta especialmente crítico durante flujos de trabajo agénticos, como el desarrollo de código.

Más información en el vídeo

¿Qué modelos están en riesgo?

Aunque cualquier modelo puede sufrirlo, este problema afecta principalmente a los modelos que comparten cuatro características clave:

  • Son pequeños
  • Están diseñados para el razonamiento
  • Operan con baja temperatura
  • Se utilizan con contextos muy largas

Estas características encajan sobre todo con los modelos locales, que son los que más se ven afectados por estos bucles

Las 3 causas principales del bucle de la muerte

Según investigaciones recientes de Liquid AI, existen tres factores fundamentales que desencadenan estas repeticiones:

  1. Palabras sobreentrenadas: Los modelos tienden a recurrir a «muletillas» (palabras o frases que usa con mayor frecuencia de la que debería) cuando no tienen claro cómo continuar. Si el estado de duda persiste, la probabilidad de elegir esa misma palabra aumenta, iniciando el bucle.
  2. Refuerzo de frases existentes: Cuando una frase ya aparece en el texto, las probabilidades de que el modelo la repita crecen, con cada uso esta posibilidad sigue creciendo.
  3. Baja temperatura: Para razonar correctamente, muchos modelos operan a temperaturas muy bajas o cercanas a cero. Esto reduce la variedad de las respuestas y hace que el modelo elija siempre el token más probable, volviéndose determinista y propenso a repetir las mismas frases.

El desafío de las soluciones actuales

Actualmente, se suele utilizar una penalización por repetición, la cual baja la probabilidad de una palabra si ya ha aparecido recientemente. Sin embargo, esta técnica requiere un equilibrio muy difícil: si la penalización es muy alta, el modelo puede fallar al escribir código (donde es necesario repetir palabras habitualmente); si es muy baja, no lograra romper el bucle.

La propuesta de Liquid AI: FTPO

Liquid AI ha presentado una técnica innovadora llamada Final Token Preference Optimization (FTPO). Su enfoque consiste en un ajuste fino (fine-tuning) muy específico:

  • Se fuerza al modelo a entrar en bucle repetidamente para recolectar datos.
  • Se identifica el primer token que origina cada bucle.
  • Se reentrena el modelo para aumentar las probabilidades de las alternativas que tenía en ese momento inicial.

Este proceso es iterativo, ya que al solucionar un bucle suelen aparecer otros nuevos causados por tokens distintos.

Resultados prometedores

Los resultados son contundentes: al aplicar FTPO en modelos como Qwen 3.5, se ha logrado reducir la tasa de bucles de la muerte de un 10-22% a tan solo un 1% aproximadamente. Además de mejorar la fluidez, esta técnica permite que los modelos superen mejor ciertos benchmarks en los que antes fallaban por quedarse bloqueados en repeticiones.

Este avance representa un paso fundamental para hacer que los modelos locales sean herramientas verdaderamente fiables en tareas complejas y autónomas.

La Revolución de los Orquestadores: ¿Es el fin de los modelos gigantes?

En el mundo de la inteligencia artificial, la tendencia suele ser «cuanto más grande, mejor». Sin embargo, el laboratorio japonés Sakana AI está desafiando esta idea con un enfoque radicalmente distinto: en lugar de entrenar modelos masivos, ¿qué pasaría si usamos un modelo pequeño pero extremadamente inteligente para orquestar a los mejores modelos actuales?.

Esta es la premisa detrás de Fugu y Fugu Ultra, dos orquestadores que están demostrando que la unión (bien dirigida) hace la fuerza.

Más información en el vídeo

¿Por qué orquestar en lugar de entrenar?

La realidad es que no existe un modelo que sea perfecto en todo. Incluso los modelos más potentes fallan en tareas donde otros, quizás menos conocidos, aciertan. Un orquestador actúa como un director de orquesta que decide a qué modelo «SOTA» (State of the Art) enviarle cada tarea específica, logrando resultados que superan incluso a los modelos individuales que utiliza.

Fugu y el sistema Trinity: El poder de los roles

El modelo Fugu se basa en el paper Trinity. Su funcionamiento es fascinante:

  • Cerebro pequeño: Utiliza un modelo base Qwen-3 de solo 600 millones de parámetros.
  • Arquitectura «Frankenstein»: Los ingenieros modificaron el modelo conectando una red neuronal propia a su penúltima capa para decidir dos cosas: qué modelo usar y qué rol asignarle.
  • Tres Roles Clave: El sistema asigna tareas de Planificador, Ejecutor o Verificador en un bucle continuo hasta que la tarea se completa correctamente o se alcanza un límite de tokens.

Fugu Ultra y Conductor: Flujos agénticos complejos

Por otro lado, Fugu Ultra (basado en el paper Conductor) lleva la orquestación al siguiente nivel:

  • Mayor capacidad: Utiliza un modelo Qwen-2.5 de 7.000 millones de parámetros entrenado con aprendizaje por refuerzo.
  • Flujos dinámicos: Puede dividir una tarea en subtareas, definir prompts específicos para cada una y decidir qué información pasar entre modelos, permitiendo incluso flujos en paralelo.
  • Control de costes: Una ventaja clave es que se le puede pasar un listado de modelos disponibles en el prompt, permitiendo optimizar el gasto según la necesidad.

No todo es perfecto

A pesar de sus ventajas, este enfoque conlleva desventajas:

  1. Latencia: Al añadir una capa extra de decisión y procesos en bucle, el tiempo de respuesta aumenta.
  2. Coste: El uso de más tokens y múltiples modelos puede encarecer el proceso, aunque una buena selección de modelos podría compensarlo.
  3. Mantenimiento: Sakana AI debe reentrenar sus orquestadores constantemente cada vez que sale un nuevo modelo al mercado para que este pueda ser integrado.

El futuro: Especialización sobre tamaño

El desarrollo de estos orquestadores abre la puerta a un nuevo paradigma: en lugar de buscar una IA que lo sepa todo, podríamos avanzar hacia IAs muy especializadas y pequeñas coordinadas por orquestadores expertos. Aunque los grandes modelos seguirán existiendo, este sistema ofrece una flexibilidad y una eficiencia que promete cambiar las reglas del juego.

Le pido a ChatGPT que resuelva un murdoku y hace trampas.

Últimamente me he aficionado a los murdokus, rompecabezas que mezclan sudoku y cluedo. Teniendo que colocar a los sospechosos en un tablero según dicen las pistas, pero con la limitación de que ninguno puede coincidir en la misma fila o columna. Decidí poner a prueba la capacidad de razonamiento de ChatGPT enfrentándolo a uno de estos complejos rompecabezas (nada que ver con que yo no pudiera resolverlo….).

Mejor explicado en este vídeo

El reto

Son un buen reto para la IA porque requiere una combinación de deducción lógica, combinatoria y compresión visual, ya que parte del rompecabezas viene codificado en la imagen del mismo.

La técnica apara solucionar esto problema es un viejo conocido de la informática, el backtracking. Pero no se puede simplemente probar todas las soluciones, hay que usar las pistas que aporta el murdoku para reducir la cantidad de posibilidades y eso implica ser capaz de convertir estas pistas, en lenguaje natural, en algo formal expresado en un lenguaje de programación.

¿Trampas?

Sin embargo, cuando le pase el problema a ChatGPT optó por otra vía, «hacer trampas», en lugar de tratar de codificar el puzzle se dedicó a buscar la solución en Internet hasta encontrar un PDF donde aparecía.

Desde un punto de vista humano esto seria «trampa» pero realmente ChatGPT está haciendo lo correcto, el mayor problema de la IA son las alucinaciones y aportar información, siempre que sea veraz, sobre el tema a tratar ayuda a reducirlas. Es un arma de doble filo, ya que si la información no es buena y correcta la respuesta puede ser peor. Así que comenzar por buscar en Internet puede ser una gran ayuda para mejorar la respuesta del modelo

¿Pero es capaz de resolverlo sin hacer trampas?

La respuesta es si y no. Si solo tiene acceso a una imagen con el murdoku, la respuesta es no. Sin embargo, en caso de que tenga acceso al panel de una forma más fácil de procesar (por ejemplo, a su versión HTML) puede elaborar una estrategia para resolverlo correctamente.

Para ahorrar tokens al procesar textos, habla como un cavernícola

Ahorrar tokens es una necesidad ya que permite ahorrar: tiempo, dinero y contexto. Para ello vamos a ver una técnica que se puede usar cuando tengamos que procesar gran cantidad de texto.

Puedes profundizar más en el tema viendo este vídeo

No es un técnica nueva, ya se usaba con el procesamiento de lenguaje natural clásico. La eliminación de palabras vacías, palabras que se repiten habitualmente pero que aportan poco al significado de la frase. Generalmente se pueden eliminar y la frase puede seguir entendiéndose perfectamente (si olvidar que el resto del texto también aporta contexto para entender la frase)

Algunos ejemplos en español:

Tipo de palabraEjemplos típicos en español
Artículosel, la, los, las, un, una, unos, unas
Preposicionesa, ante, bajo, con, de, desde, en, entre, hacia, para, por, sin, sobre
Conjuncionesy, o, pero, aunque, porque, si, que
Pronombres personalesyo, tú, él, ella, nosotros, vosotros, ellos, ellas
Pronombres átonosme, te, se, lo, la, le, nos, os, los, las, les
Determinantes posesivosmi, tu, su, mis, tus, sus, nuestro, vuestra
Demostrativoseste, esta, estos, esas, aquel, aquello
Adverbios frecuentessí, ya, muy, más, menos, también, aquí, allí
Relativos e interrogativos frecuentesque, quien, cual, donde, cuando, como

El resultado es un texto que se parece a la forma de hablar e los cavernicolas en las películas.

Además podemos llevar un paso más allá esta estrategia y reemplazar frases y palabras habituales por otras más cortas.

automóvil -> coche
en este momento -> ahora
en el día de hoy -> hoy

Juntando ambas podemos ahorrarnos un porcentaje apreciable de tokens.

Los reemplazos deben realizarse siguiendo las siguientes reglas:

  • Se ignoran mayúsculas y minúsculas, tildes y diéresis
  • Solo se reemplazan coincidencias completas
  • Se realizan en orden descendente respecto a la longitud del texto a sustituir, a más largo sea el texto que reemplazamos antes se coloco esa sustitución

Para realizar está tarea le he pedido a la IA que me realice un código en python.

Debajo tenéis el código en python para realizar estas sustituciones. El código se divide en dos ficheros, el programa en python que realiza las sustituciones y el fichero con las sustituciones.

El fichero de sustituciones debe llamarse sustituciones.txt. Y la estructura es: texto a sustituir|texto nuevo

Código para realizar las sustituciones:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import argparse
import re
import sys
import unicodedata
from pathlib import Path
def normalizar_caracter(c: str) -> str:
"""
Convierte un carácter a minúscula y elimina tildes/diéresis.
Mantiene la longitud: un carácter de entrada produce un carácter de salida.
"""
c = c.lower()
descompuesto = unicodedata.normalize("NFD", c)
sin_marcas = "".join(
ch for ch in descompuesto
if unicodedata.category(ch) != "Mn"
)
return sin_marcas
def normalizar_texto(texto: str) -> str:
return "".join(normalizar_caracter(c) for c in texto)
def cargar_sustituciones(ruta: Path) -> list[tuple[str, str]]:
sustituciones = []
with ruta.open("r", encoding="utf-8") as f:
for num_linea, linea in enumerate(f, start=1):
linea = linea.strip()
if not linea:
continue
# Soporta tanto:
# |texto a sustituir|texto sustituyente|
# como:
# texto a sustituir|texto sustituyente|
if linea.startswith("|"):
linea = linea[1:]
if linea.endswith("|"):
linea = linea[:-1]
partes = linea.split("|", 1)
if len(partes) != 2:
print(
f"Aviso: línea {num_linea} ignorada por formato incorrecto: {linea!r}",
file=sys.stderr
)
continue
origen, destino = partes
origen = origen.strip()
destino = destino.strip()
if not origen:
continue
origen_norm = normalizar_texto(origen)
sustituciones.append((origen_norm, destino))
# Primero las sustituciones cuyo texto a sustituir sea más largo
sustituciones.sort(key=lambda x: len(x[0]), reverse=True)
return sustituciones
def construir_regex(sustituciones: list[tuple[str, str]]) -> tuple[re.Pattern, dict[str, str]]:
"""
Construye una única regex con todas las sustituciones.
El patrón usa límites de palabra:
(?<!\\w) antes y (?!\\w) después.
Así se reemplazan palabras completas o frases completas.
"""
mapa = {}
patrones = []
for origen_norm, destino in sustituciones:
if origen_norm not in mapa:
mapa[origen_norm] = destino
patrones.append(re.escape(origen_norm))
if not patrones:
# Regex que no coincide nunca
return re.compile(r"a\A"), mapa
patron = r"(?<!\w)(" + "|".join(patrones) + r")(?!\w)"
return re.compile(patron), mapa
def aplicar_sustituciones(texto: str, regex: re.Pattern, mapa: dict[str, str]) -> str:
"""
Aplica sustituciones sobre el texto original, pero buscando sobre una versión
normalizada del texto para ignorar mayúsculas, minúsculas, tildes y diéresis.
"""
texto_norm = normalizar_texto(texto)
partes = []
pos = 0
for m in regex.finditer(texto_norm):
inicio, fin = m.span()
encontrado_norm = m.group(1)
partes.append(texto[pos:inicio])
partes.append(mapa[encontrado_norm])
pos = fin
partes.append(texto[pos:])
return "".join(partes)
def main() -> None:
parser = argparse.ArgumentParser(
description="Sustituye texto usando las reglas de sustituciones.txt"
)
parser.add_argument(
"entrada",
help="Fichero de texto de entrada"
)
parser.add_argument(
"salida",
nargs="?",
default="out.txt",
help="Fichero de salida. Por defecto: out.txt"
)
args = parser.parse_args()
ruta_entrada = Path(args.entrada)
ruta_salida = Path(args.salida)
# sustituciones.txt en el mismo directorio que este script
ruta_sustituciones = Path(__file__).resolve().with_name("sustituciones.txt")
if not ruta_entrada.exists():
print(f"Error: no existe el fichero de entrada: {ruta_entrada}", file=sys.stderr)
sys.exit(1)
if not ruta_sustituciones.exists():
print(f"Error: no existe el fichero: {ruta_sustituciones}", file=sys.stderr)
sys.exit(1)
texto = ruta_entrada.read_text(encoding="utf-8")
# Sustituir saltos de línea por espacios
texto = texto.replace("\r\n", " ").replace("\n", " ").replace("\r", " ")
sustituciones = cargar_sustituciones(ruta_sustituciones)
regex, mapa = construir_regex(sustituciones)
resultado = aplicar_sustituciones(texto, regex, mapa)
# Convertir todos los espacios dobles en simples
resultado = re.sub(r" {2,}", " ", resultado)
ruta_salida.write_text(resultado, encoding="utf-8")
if __name__ == "__main__":
main()

Fichero de sustituciones: (sustituciones.txt)

Aviso: este es un fichero generado por IA con unas pocas correcciones «a mano», es solo un aprueba, es muy mejorable.

|en este momento|ahora|
|en el día de hoy|hoy|
|velocidad elevada|rapido|
|en el momento actual|actualmente|
|a día de hoy|hoy|
|en la actualidad|ahora|
|anteriormente|antes|
|anterior|antes|
|con anterioridad|antes|
|con posterioridad|después|
|posteriormente|después|
|posterior|después|
|en breve|pronto|
|en un futuro cercano|pronto|
|a continuación|luego|
|de manera inmediata|ya|
|inmediata|ya|
|inmediatamente|ya|
|de forma urgente|urgente|
|sin demora|ya|
|en primer lugar|primero|
|en segundo lugar|segundo|
|en último lugar|finalmente|
|para finalizar|finalmente|
|en conclusión|en suma|
|en resumidas cuentas|en suma|
|en pocas palabras||
|dicho de otro modo|o sea|
|en otras palabras|o sea|
|es decir|o sea|
|por consiguiente|por tanto|
|por lo tanto|así|
|como consecuencia|así|
|debido a que|porque|
|a causa de|por|
|con motivo de|por|
|en virtud de|por|
|a pesar de que|aunque|
|a pesar de|aunque|
|no obstante|pero|
|sin embargo|pero|
|por el contrario|en cambio|
|de igual manera|igual|
|del mismo modo|igual|
|de forma similar|similar|
|en comparación con|frente a|
|con respecto a|sobre|
|en relación con|sobre|
|acerca de|sobre|
|en torno a|sobre|
|en lo referente a|sobre|
|en lo relativo a|sobre|
|desde mi punto de vista|creo|
|en mi opinión|creo|
|según mi criterio|creo|
|bajo mi perspectiva|creo|
|a mi parecer|creo|
|tengo la impresión de que|creo|
|me da la sensación de que|parece|
|cabe la posibilidad de que|quizá|
|es posible que|quizá|
|puede ser que|quizá|
|probablemente|quizá|
|con toda probabilidad|seguro|
|sin lugar a dudas|seguro|
|de forma segura|seguro|
|con certeza|seguro|
|de ninguna manera|no|
|en absoluto|no|
|bajo ningún concepto|nunca|
|en ningún caso|nunca|
|ni por asomo|nunca|
|en todo momento|siempre|
|de manera constante|siempre|
|con frecuencia|a menudo|
|frecuentemente|a menudo|
|de vez en cuando|a veces|
|en algunas ocasiones|a veces|
|en raras ocasiones|rara vez|
|casi nunca|apenas|
|la mayor parte del tiempo|casi siempre|
|un gran número de|muchos|
|una gran cantidad de|muchos|
|una cantidad considerable de|muchos|
|un reducido número de|pocos|
|una pequeña cantidad de|poco|
|la totalidad de|todo|
|la mayor parte de|casi todo|
|la minoría de|pocos|
|cada uno de ellos|todos|
|cualquier persona|cualquiera|
|ninguna persona|nadie|
|alguna persona|alguien|
|todas las personas|todos|
|los seres humanos|personas|
|el conjunto de|grupo|
|un grupo de personas|gente|
|personal trabajador|plantilla|
|persona||
|personas||
|propietario|dueño|
|propietarios|dueños|
|propietaria|dueña|
|propietarias|dueñas|
|persona arrendataria|inquilino|
|persona empleadora|jefe|
|persona trabajadora|empleado|
|persona menor de edad|menor|
|menor de edad|menor|
|persona de avanzada edad|anciano|
|adulto mayor|mayor|
|centro educativo|colegio|
|centro sanitario|hospital|
|centro de trabajo|oficina|
|lugar de residencia|casa|
|vivienda habitual|casa|
|domicilio particular|casa|
|zona ajardinada|jardín|
|espacio exterior|patio|
|medio de transporte|vehículo|
|automóvil|coche|
|aparato telefónico|teléfono|
|dispositivo móvil|móvil|
|celular|móvil|
|ordenador portátil|portátil|
|equipo informático|ordenador|
|red de internet|internet|
|correo electrónico|email|
|mensaje de texto|sms|
|aplicación informática|app|
|página web|web|
|sitio web|web|
|motor de búsqueda|buscador|
|archivo adjunto|adjunto|
|documento escrito|texto|
|documento gráfico|imagen|
|registro sonoro|audio|
|contenido audiovisual|vídeo|
|contenido multimedia|multimedia|
|reunión de trabajo|reunión|
|sesión formativa|curso|
|actividad educativa|clase|
|prueba de evaluación|examen|
|trabajo académico|tarea|
|material didáctico|material|
|plan de estudios|programa|
|resultado académico|nota|
|calificación final|nota|
|periodo vacacional|vacaciones|
|jornada laboral|jornada|
|horario de trabajo|horario|
|puesto de trabajo|puesto|
|oferta laboral|empleo|
|entrevista de trabajo|entrevista|
|contrato laboral|contrato|
|remuneración económica|sueldo|
|retribución mensual|sueldo|
|incremento salarial|subida|
|baja laboral|baja|
|permiso retribuido|permiso|
|descanso semanal|libranza|
|despido laboral|despido|
|renuncia voluntaria|dimisión|
|actividad profesional|trabajo|
|tarea pendiente|pendiente|
|objetivo principal|meta|
|plan de acción|plan|
|proceso de mejora|mejora|
|toma de decisiones|decisión|
|resolución de problemas|solución|
|puesta en marcha|inicio|
|inicio del proceso|inicio|
|finalización del proceso|fin|
|desarrollo del proyecto|proyecto|
|seguimiento posterior|control|
|evaluación continua|revisión|
|revisión detallada|revisión|
|análisis exhaustivo|análisis|
|informe detallado|informe|
|documento informativo|informe|
|resumen ejecutivo|resumen|
|descripción pormenorizada|detalle|
|explicación detallada|detalle|
|información adicional|extras|
|datos personales|datos|
|información confidencial|secreto|
|información relevante|clave|
|información innecesaria|ruido|
|conjunto de datos|dataset|
|base de datos|bd|
|copia de seguridad|backup|
|contraseña de acceso|clave|
|nombre de usuario|usuario|
|código de verificación|código|
|dirección electrónica|email|
|número telefónico|teléfono|
|dirección postal|dirección|
|documento nacional de identidad|dni|
|documento de identidad|dni|
|tarjeta bancaria|tarjeta|
|cuenta bancaria|cuenta|
|transacción económica|pago|
|importe total|total|
|precio final|precio|
|coste económico|coste|
|gasto mensual|gasto|
|ingreso económico|ingreso|
|beneficio económico|ganancia|
|pérdida económica|pérdida|
|deuda pendiente|deuda|
|fecha de vencimiento|plazo|
|plazo establecido|plazo|
|condiciones generales|condiciones|
|términos legales|términos|
|aviso legal|aviso|
|política de privacidad|privacidad|
|consentimiento informado|permiso|
|autorización expresa|permiso|
|solicitud formal|petición|
|reclamación oficial|queja|
|queja formal|queja|
|sugerencia de mejora|sugerencia|
|respuesta afirmativa|sí|
|respuesta negativa|no|
|confirmación definitiva|confirmación|
|cancelación previa|anulación|
|modificación posterior|cambio|
|cambio significativo|giro|
|error involuntario|fallo|
|equivocación cometida|error|
|problema técnico|fallo|
|incidencia registrada|incidencia|
|avería mecánica|avería|
|daño material|daño|
|riesgo potencial|riesgo|
|situación peligrosa|peligro|
|medida preventiva|prevención|
|medida correctora|corrección|
|plan de emergencia|emergencia|
|servicio de atención|soporte|
|atención al cliente|soporte|
|equipo de soporte|soporte|
|departamento comercial|ventas|
|departamento financiero|finanzas|
|departamento jurídico|legal|
|departamento técnico|técnica|
|recursos humanos|rr.hh.|
|dirección general|dirección|
|alta dirección|cúpula|
|consejo de administración|consejo|
|junta directiva|junta|
|responsable máximo|jefe|
|cargo directivo|directivo|
|miembro del equipo|miembro|
|equipo humano|equipo|
|grupo de trabajo|equipo|
|proyecto conjunto|proyecto|
|trabajo colaborativo|colaboración|
|participación activa|participación|
|comunicación interna|comunicación|
|comunicación externa|difusión|
|nota de prensa|comunicado|
|rueda de prensa|comparecencia|
|declaración pública|declaración|
|opinión pública|opinión|
|medios de comunicación|medios|
|red social|red|
|plataforma digital|plataforma|
|contenido publicado|publicación|
|comentario negativo|crítica|
|valoración positiva|elogio|
|imagen corporativa|marca|
|identidad visual|imagen|
|estrategia comercial|estrategia|
|campaña publicitaria|campaña|
|público objetivo|público|
|cliente potencial|lead|
|fidelización de clientes|retención|
|captación de clientes|captación|
|propuesta de valor|oferta|
|ventaja competitiva|ventaja|
|estudio de mercado|estudio|
|investigación previa|investigación|
|prueba piloto|piloto|
|producto mínimo viable|mvp|
|lanzamiento oficial|estreno|
|mejora continua|mejora|
|control de calidad|calidad|
|experiencia de usuario|ux|
|interfaz de usuario|ui|
|interfaz gráfica|gui|
|mapa de navegación|mapa|
|barra de herramientas|barra|
|menú desplegable|menú|
|botón de confirmación|botón|
|ventana emergente|pop-up|
|pantalla de inicio|inicio|
|página principal|portada|
|pie de página|pie|
|encabezado superior|cabecera|
|campo obligatorio|campo|
|formulario de registro|formulario|
|proceso de registro|registro|
|inicio de sesión|login|
|cierre de sesión|logout|
|recuperación de contraseña|recuperación|
|actualización del sistema|actualización|
|versión anterior|versión previa|
|versión más reciente|última|
|archivo descargable|descarga|
|carpeta compartida|carpeta|
|enlace de acceso|enlace|
|código fuente|código|
|lenguaje de programación|lenguaje|
|entorno de desarrollo|entorno|
|prueba automatizada|test|
|corrección de errores|fix|
|solicitud de cambios|cambio|
|historial de cambios|historial|
|control de versiones|versionado|
|rama principal|main|
|rama secundaria|branch|
|integración continua|ci|
|despliegue continuo|cd|
|puesta en producción|despliegue|
|servidor remoto|servidor|
|almacenamiento en la nube|nube|
|servicio en línea|servicio|
|sistema operativo|so|
|memoria de almacenamiento|disco|
|memoria temporal|ram|
|unidad central de procesamiento|cpu|
|procesador gráfico|gpu|
|inteligencia artificial|ia|
|aprendizaje automático|ml|
|aprendizaje profundo|dl|
|modelo lingüístico|llm|
|red neuronal|red|
|conjunto de entrenamiento|dataset|
|datos de entrada|input|
|datos de salida|output|
|resultado esperado|esperado|
|valor predeterminado|default|
|configuración inicial|ajustes|
|parámetro opcional|opción|
|mensaje de error|error|
|registro del sistema|log|
|tiempo de espera|timeout|
|solicitud al servidor|request|
|respuesta del servidor|response|
|conexión segura|https|
|interfaz de programación|api|
|clave de api|token|
|permiso de acceso|acceso|
|control de acceso|permisos|
|cifrado de datos|cifrado|
|autenticación doble|2fa|
|verificación en dos pasos|2fa|
|ataque informático|ciberataque|
|software malicioso|malware|
|correo fraudulento|phishing|
|suplantación de identidad|spoofing|
|vulnerabilidad crítica|brecha|
|fuga de información|filtración|
|copia ilegal|pirata|
|acceso no autorizado|intrusión|
|medida de seguridad|seguridad|
|evaluación de riesgos|riesgos|
|auditoría interna|auditoría|
|cumplimiento normativo|compliance|
|normativa aplicable|norma|
|marco regulatorio|ley|
|procedimiento legal|trámite|
|acción judicial|demanda|
|proceso judicial|juicio|
|resolución judicial|sentencia|
|asesoramiento jurídico|asesoría|
|representante legal|abogado|
|poder notarial|poder|
|documento contractual|contrato|
|cláusula contractual|cláusula|
|incumplimiento contractual|incumplimiento|
|responsabilidad civil|responsabilidad|
|daños y perjuicios|daños|
|fuerza mayor|imposible|
|caso fortuito|accidente|
|situación económica|economía|
|mercado laboral|empleo|
|crecimiento económico|crecimiento|
|recesión económica|recesión|
|inflación general|inflación|
|poder adquisitivo|compra|
|tipo de interés|interés|
|producto interior bruto|pib|
|impuesto sobre la renta|irpf|
|impuesto sobre el valor añadido|iva|
|seguridad social|ss|
|administración pública|administración|
|servicio público|servicio|
|entidad privada|empresa|
|organización sin ánimo de lucro|ong|
|institución educativa|centro|
|sistema sanitario|sanidad|
|atención primaria|primaria|
|urgencias hospitalarias|urgencias|
|consulta médica|consulta|
|profesional sanitario|médico|
|personal de enfermería|enfermería|
|historia clínica|historial|
|diagnóstico médico|diagnóstico|
|tratamiento farmacológico|medicación|
|medicamento recetado|receta|
|efecto secundario|efecto|
|dolor intenso|dolor|
|molestia leve|molestia|
|lesión muscular|lesión|
|fractura ósea|fractura|
|intervención quirúrgica|cirugía|
|recuperación física|recuperación|
|actividad física|ejercicio|
|ejercicio cardiovascular|cardio|
|entrenamiento de fuerza|fuerza|
|higiene postural|postura|
|movilidad articular|movilidad|
|estiramiento muscular|estiramiento|
|alimentación saludable|dieta|
|consumo de agua|hidratación|
|descanso nocturno|sueño|
|estado de ánimo|ánimo|
|salud mental|bienestar|
|estrés acumulado|estrés|
|ansiedad elevada|ansiedad|
|sensación de cansancio|fatiga|
|falta de energía|cansancio|
|pérdida de memoria|olvido|
|capacidad cognitiva|cognición|
|estimulación cognitiva|estimulación|
|relaciones sociales|vínculos|
|apoyo familiar|apoyo|
|calidad de vida|bienestar|
|medio ambiente|entorno|
|cambio climático|clima|
|contaminación atmosférica|polución|
|energía renovable|renovable|
|ahorro energético|ahorro|
|gestión de residuos|reciclaje|
|recogida selectiva|reciclaje|
|consumo responsable|consumo|
|desarrollo sostenible|sostenibilidad|
|recursos naturales|recursos|
|espacio natural|naturaleza|
|zona protegida|reserva|
|fauna silvestre|fauna|
|flora autóctona|flora|
|fenómeno meteorológico|tiempo|
|previsión meteorológica|previsión|
|lluvia intensa|chaparrón|
|viento fuerte|vendaval|
|temperatura elevada|calor|
|temperatura baja|frío|
|ola de calor|calorazo|
|ola de frío|friaje|
|cielo despejado|sol|
|cielo cubierto|nubes|
|precipitación ligera|llovizna|
|tormenta eléctrica|tormenta|
|desplazamiento urbano|viaje|
|trayecto diario|ruta|
|transporte público|transporte|
|billete de ida|ida|
|billete de vuelta|vuelta|
|equipaje de mano|maleta|
|alojamiento turístico|hotel|
|reserva anticipada|reserva|
|confirmación de reserva|confirmación|
|cancelación gratuita|cancelación|
|guía turística|guía|
|lugar de interés|punto|
|casco histórico|centro|
|zona céntrica|centro|
|restaurante tradicional|mesón|
|establecimiento hostelero|bar|
|bebida refrescante|refresco|
|comida ligera|tentempié|
|plato principal|plato|
|primer plato|entrante|
|segundo plato|principal|
|postre dulce|postre|
|menú del día|menú|
|carta de vinos|vinos|
|producto alimenticio|alimento|
|fecha de caducidad|caducidad|
|lista de la compra|lista|
|establecimiento comercial|tienda|
|centro comercial|centro|
|tienda de alimentación|súper|
|producto rebajado|oferta|
|descuento especial|descuento|
|precio reducido|rebaja|
|compra en línea|compra online|
|envío gratuito|envío|
|entrega a domicilio|entrega|
|devolución del producto|devolución|
|servicio posventa|posventa|
|garantía del fabricante|garantía|
|producto defectuoso|defecto|
|artículo disponible|disponible|
|artículo agotado|agotado|
|existencias disponibles|stock|
|forma de pago|pago|
|tarjeta de crédito|tarjeta|
|dinero en efectivo|efectivo|
|recibo de compra|ticket|
|factura simplificada|ticket|
|factura completa|factura|
|actividad cultural|cultura|
|obra teatral|teatro|
|película cinematográfica|película|
|serie televisiva|serie|
|programa de televisión|programa|
|emisión en directo|directo|
|contenido bajo demanda|vod|
|canción musical|canción|
|pieza musical|tema|
|álbum musical|disco|
|concierto en vivo|concierto|
|festival musical|festival|
|exposición artística|exposición|
|museo histórico|museo|
|biblioteca pública|biblioteca|
|libro electrónico|ebook|
|novela policíaca|thriller|
|relato breve|cuento|
|poema escrito|poema|
|autor literario|autor|
|crítica literaria|reseña|
|recomendación personal|consejo|
|opinión favorable|elogio|
|opinión desfavorable|crítica|
|debate público|debate|
|conversación informal|charla|
|discusión acalorada|bronca|
|malentendido frecuente|lío|
|situación complicada|problema|
|situación absurda|absurdo|
|situación inesperada|sorpresa|
|momento incómodo|corte|
|momento agradable|gusto|
|sensación agradable|placer|
|sensación desagradable|malestar|
|gran alegría|júbilo|
|tristeza profunda|pena|
|enfado considerable|ira|
|miedo intenso|pánico|
|sorpresa repentina|asombro|
|deseo intenso|anhelo|
|falta de interés|apatía|
|estado de tranquilidad|calma|
|falta de calma|nervios|
|actitud positiva|optimismo|
|actitud negativa|pesimismo|
|antipática|borde|
|antipático|borde|
|inteligente|listo|
|reservada|callada|
|aburrida|sosa|
|aburrido|soso|
|responsable|serio|
|mentirosa|falsa|
|mentiroso|falso|
|sincera|franca|
|sincero|franco|
|trabajadora|currante|
|trabajador|currante|
|perezosa|vaga|
|perezoso|vago|
|muy||
|gran tamaño|grande|
|pequeño tamaño|pequeño|
|precio elevado|caro|
|bajo precio|barato|
|buena calidad|bueno|
|mala calidad|malo|
|gran importancia|clave|
|sin importancia|menor|
|difícil de entender|complejo|
|fácil de entender|claro|
|difícil de hacer|difícil|
|fácil de hacer|fácil|
|poco frecuente|raro|
|muy frecuente|común|
|completamente nuevo|nuevo|
|ya utilizado|usado|
|en buen estado|nuevo|
|en mal estado|roto|
|poco claro|confuso|
|evidente|obvio|
|necesario|necesario|
|innecesario|sobrante|
|obligatorio|obligado|
|voluntario|opcional|
|permitido|permitido|
|prohibido|vetado|
|recomendable|conveniente|
|peligroso|riesgoso|
|seguro|seguro|
|falso|falso|
|verdadero|cierto|
|temporal|provisional|
|permanente|fijo|
|completo|entero|
|incompleto|parcial|
|exacto|preciso|
|aproximado|estimado|
|antiguo|viejo|
|moderno|nuevo|
|rápido|veloz|
|lento|tardo|
|bonito|bello|
|feo|horrible|
|limpio|limpio|
|sucio|sucio|
|ordenado|ordenado|
|desordenado|caótico|
|silencioso|callado|
|ruidoso|ruidoso|
|luminoso|claro|
|oscuro|oscuro|
|cálido|caliente|
|frío|frío|
|blando|suave|
|duro|duro|
|ligero|liviano|
|pesado|pesado|
|estrecho|angosto|
|ancho|amplio|
|profundo|hondo|
|superficial|somero|
|transparente|claro|
|opaco|opaco|
|flexible|flexible|
|rígido|rígido|
|resistente|fuerte|
|frágil|débil|
|vacío|vacío|
|lleno|lleno|
|abundante|mucho|
|escaso|poco|
|correcto|bien|
|incorrecto|mal|
|algo||
|hacer una llamada|llamar|
|realizar una compra|comprar|
|llevar a cabo|hacer|
|proceder a realizar|hacer|
|dar comienzo|empezar|
|poner fin|terminar|
|llegar a su fin|acabar|
|tomar una decisión|decidir|
|dar una respuesta|responder|
|hacer una pregunta|preguntar|
|formular una petición|pedir|
|presentar una queja|quejarse|
|hacer una sugerencia|sugerir|
|prestar atención|atender|
|tener conocimiento de|saber|
|poner en conocimiento|informar|
|dar información|informar|
|solicitar información|preguntar|
|obtener información|saber|
|hacer uso de|usar|
|poner en práctica|aplicar|
|tener en cuenta|considerar|
|echar de menos|extrañar|
|dar las gracias|agradecer|
|pedir disculpas|disculparse|
|tener miedo|temer|
|tener hambre|hambrear|
|tener sueño|dormirse|
|sentir alegría|alegrarse|
|sentir tristeza|entristecerse|
|sentir enfado|enfadarse|
|tener dudas|dudar|
|tener interés|interesarse|
|tener paciencia|aguantar|
|tener prisa|apresurarse|
|tener cuidado|cuidarse|
|hacer deporte|entrenar|
|dar un paseo|pasear|
|ir de compras|comprar|
|hacer limpieza|limpiar|
|preparar comida|cocinar|
|tomar el desayuno|desayunar|
|tomar la comida|comer|
|tomar la cena|cenar|
|beber agua|hidratarse|
|conciliar el sueño|dormir|
|levantarse de la cama|levantarse|
|acostarse en la cama|acostarse|
|entrar en contacto|contactar|
|mantener una conversación|hablar|
|guardar silencio|callar|
|subir hacia arriba|subir|
|bajar hacia abajo|bajar|
|entrar dentro|entrar|
|salir fuera|salir|
|volver de nuevo|volver|
|repetir otra vez|repetir|
|añadir más|añadir|
|continuar adelante|seguir|
|retroceder hacia atrás|retroceder|
|avanzar hacia delante|avanzar|
|unir entre sí|unir|
|separar en partes|dividir|
|mezclar entre sí|mezclar|
|eliminar por completo|eliminar|
|borrar definitivamente|borrar|
|guardar para después|guardar|
|comprobar de nuevo|revisar|
|mirar con atención|observar|
|escuchar con atención|oír|
|leer con detenimiento|leer|
|escribir por escrito|escribir|
|decir en voz alta|decir|
|pensar detenidamente|reflexionar|
|buscar con cuidado|buscar|
|encontrar por casualidad|hallar|
|perder de vista|perder|
|cerrar completamente|cerrar|
|abrir completamente|abrir|
|encender el dispositivo|encender|
|apagar el dispositivo|apagar|
|arreglar una avería|reparar|
|romper accidentalmente|romper|
|cambiar de opinión|rectificar|
|cambiar de lugar|mover|
|cambiar de nombre|renombrar|
|cambiar de forma|transformar|
|cambiar de tamaño|redimensionar|
|reducir el tamaño|reducir|
|aumentar el tamaño|ampliar|
|mejorar la calidad|mejorar|
|empeorar la situación|empeorar|
|dar permiso|autorizar|
|quitar permiso|revocar|
|pedir permiso|solicitar|
|negar permiso|denegar|
|cumplir una norma|acatar|
|romper una norma|incumplir|
|evitar un problema|prevenir|
|resolver un problema|solucionar|
|crear un problema|complicar|
|hacer más fácil|facilitar|
|hacer más difícil|dificultar|
|poner en orden|ordenar|
|poner en marcha|activar|
|dejar de funcionar|fallar|
|funcionar correctamente|servir|
|dejar sin efecto|anular|
|hacer válido|validar|
|dar prioridad|priorizar|
|quitar prioridad|postergar|
|dejar para más tarde|posponer|
|hacer ahora|ejecutar|
|dejar pendiente|pendiente|
|hacer una copia|copiar|
|crear una versión|versionar|
|compartir con otros|compartir|
|ocultar a la vista|esconder|
|mostrar al público|publicar|
|hacer privado|privatizar|
|hacer público|publicar|
|proteger con clave|cifrar|
|quitar protección|descifrar|
|enviar por correo|mandar|
|recibir un mensaje|recibir|
|contestar un correo|responder|
|reenviar un correo|reenviar|
|eliminar un correo|borrar|
|archivar un correo|archivar|
|marcar como leído|leer|
|marcar como no leído|no leído|
|añadir una etiqueta|etiquetar|
|quitar una etiqueta|desetiquetar|
|crear una carpeta|crear|
|subir un archivo|subir|
|descargar un archivo|bajar|
|comprimir un archivo|comprimir|
|descomprimir un archivo|extraer|
|instalar un programa|instalar|
|desinstalar un programa|desinstalar|
|actualizar una aplicación|actualizar|
|reiniciar el sistema|reiniciar|
|cerrar la sesión|salir|
|iniciar la sesión|entrar|
|crear una cuenta|registrarse|
|eliminar una cuenta|borrarse|
|recuperar el acceso|recuperar|
|bloquear a un usuario|bloquear|
|desbloquear a un usuario|desbloquear|
|dar de alta|registrar|
|dar de baja|cancelar|
|hacer una reserva|reservar|
|cancelar una reserva|cancelar|
|confirmar una cita|confirmar|
|cambiar una cita|reprogramar|
|perder una cita|faltar|
|llegar tarde|retrasarse|
|llegar temprano|adelantarse|
|llegar a tiempo|puntual|
|salir de viaje|viajar|
|volver de viaje|regresar|
|hacer una visita|visitar|
|pasar la noche|dormir|
|alojarse en un hotel|hospedarse|
|comer fuera de casa|comer fuera|
|pedir comida|pedir|
|pagar la cuenta|pagar|
|dejar propina|propinar|
|hacer una fotografía|fotografiar|
|grabar un vídeo|grabar|
|publicar una foto|subir|
|quitar una foto|borrar|
|hacer una captura|capturar|
|compartir ubicación|ubicar|
|pedir indicaciones|orientarse|
|perderse en un lugar|perderse|
|encontrar el camino|orientarse|
|cruzar la calle|cruzar|
|conducir un coche|conducir|
|aparcar el coche|aparcar|
|coger un taxi|taxear|
|tomar un autobús|coger bus|
|subir al tren|subir|
|bajar del tren|bajar|
|esperar en la cola|esperar|
|hacer cola|esperar|
|comprar una entrada|comprar|
|reservar asiento|reservar|
|entrar al recinto|entrar|
|salir del recinto|salir|
|hacer una pausa|pausar|
|continuar la actividad|seguir|
|terminar la actividad|acabar|
|dar instrucciones|instruir|
|seguir instrucciones|obedecer|
|hacer caso|obedecer|
|no hacer caso|ignorar|
|prestar ayuda|ayudar|
|pedir ayuda|socorro|
|recibir ayuda|ayuda|
|ofrecer apoyo|apoyar|
|dar consejo|aconsejar|
|pedir consejo|consultar|
|hacer compañía|acompañar|
|estar de acuerdo|coincidir|
|no estar de acuerdo|discrepar|
|llegar a un acuerdo|pactar|
|romper un acuerdo|romper|
|ganar una discusión|convencer|
|perder una discusión|ceder|
|dar explicaciones|explicar|
|pedir explicaciones|preguntar|
|aclarar una duda|aclarar|
|resolver una duda|resolver|
|crear confusión|confundir|
|dejar claro|aclarar|
|decir la verdad|sincerar|
|decir una mentira|mentir|
|ocultar la verdad|callar|
|revelar un secreto|revelar|
|guardar un secreto|callar|
|prometer algo|prometer|
|cumplir una promesa|cumplir|
|romper una promesa|incumplir|
|hacer una amenaza|amenazar|
|hacer una broma|bromear|
|gastar una broma|bromear|
|reírse mucho|reír|
|llorar intensamente|llorar|
|gritar fuerte|gritar|
|hablar bajo|susurrar|
|hablar alto|gritar|
|hablar claro|aclarar|
|hablar demasiado|parlotear|
|hablar poco|callar|
|estar callado|callar|
|mirar fijamente|fijarse|
|mirar de reojo|ojear|
|ver por casualidad|ver|
|oír por casualidad|oír|
|oler mal|apestar|
|oler bien|perfumar|
|saber bien|gustar|
|saber mal|desagradar|
|tocar suavemente|rozar|
|golpear con fuerza|golpear|
|empujar hacia delante|empujar|
|tirar hacia uno|tirar|
|coger con la mano|agarrar|
|soltar de la mano|soltar|
|tirar a la basura|desechar|
|recoger del suelo|recoger|
|colocar en su sitio|poner|
|quitar de en medio|retirar|
|poner encima|cubrir|
|poner debajo|meter|
|dejar caer|tirar|
|caerse al suelo|caer|
|levantar del suelo|alzar|
|sentarse en una silla|sentarse|
|ponerse de pie|levantarse|
|tumbarse en la cama|tumbarse|
|caminar despacio|andar|
|correr deprisa|correr|
|saltar hacia arriba|saltar|
|girar alrededor|girar|
|doblar por la mitad|doblar|
|cortar en trozos|trocear|
|pegar con pegamento|pegar|
|pintar con pintura|pintar|
|dibujar una imagen|dibujar|
|medir la longitud|medir|
|pesar el objeto|pesar|
|calcular el total|calcular|
|sumar cantidades|sumar|
|restar cantidades|restar|
|multiplicar números|multiplicar|
|dividir números|dividir|
|comparar resultados|comparar|
|ordenar alfabéticamente|ordenar|
|clasificar por tipo|clasificar|
|elegir una opción|elegir|
|descartar una opción|descartar|
|probar una solución|probar|
|verificar un resultado|comprobar|
|demostrar una idea|probar|
|aprender algo nuevo|aprender|
|enseñar una materia|enseñar|
|memorizar información|memorizar|
|olvidar información|olvidar|
|recordar algo|recordar|
|comprender una idea|entender|
|no comprender|ignorar|
|hacer un resumen|resumir|
|ampliar información|ampliar|
|reducir texto|acortar|
|corregir errores|corregir|
|traducir a otro idioma|traducir|
|leer en voz alta|leer|
|escribir a mano|escribir|
|escribir a máquina|teclear|
|revisar ortografía|revisar|
|cambiar el tono|ajustar|
|hacer más formal|formalizar|
|hacer más simple|simplificar|
|hacer más corto|acortar|
|hacer más largo|alargar|
|quitar lo sobrante|recortar|
|añadir detalles|detallar|
|buscar sinónimos|sinonimizar|
|cambiar palabras|reescribir|
|mejorar el estilo|pulir|
|dar formato|formatear|
|crear una tabla|tabular|
|crear una lista|listar|
|crear un esquema|esquematizar|
|crear un gráfico|graficar|
|crear una imagen|dibujar|
|crear un documento|redactar|
|crear una presentación|presentar|
|crear una hoja de cálculo|calcular|
|preparar una reunión|organizar|
|preparar un viaje|planear|
|preparar una comida|cocinar|
|preparar una clase|planear|
|preparar un examen|estudiar|
|preparar una fiesta|organizar|
|organizar los datos|ordenar|
|organizar la agenda|planificar|
|organizar el trabajo|coordinar|
|planificar con antelación|planear|
|improvisar sobre la marcha|improvisar|
|revisar antes de enviar|revisar|
|enviar sin revisar|mandar|
|trabajar en equipo|colaborar|
|trabajar solo|solitario|
|estudiar mucho|empollar|
|leer rápidamente|ojear|
|leer superficialmente|ojear|
|leer a fondo|estudiar|
|escribir rápido|teclear|
|pensar rápido|improvisar|
|actuar rápido|reaccionar|
|actuar despacio|demorar|
|esperar demasiado|demorar|
|dejar pasar|omitir|
|saltarse un paso|omitir|
|seguir el plan|cumplir|
|cambiar el plan|replanear|
|abandonar el plan|dejar|
|lograr un objetivo|conseguir|
|no lograr un objetivo|fallar|
|superar una dificultad|superar|
|enfrentar un problema|afrontar|
|evitar una situación|esquivar|
|aceptar una situación|asumir|
|rechazar una propuesta|rechazar|
|aceptar una propuesta|aceptar|
|defender una idea|defender|
|atacar una idea|criticar|
|apoyar una causa|apoyar|
|oponerse a una causa|oponerse|
|expresar una opinión|opinar|
|cambiar de tema|desviar|
|ir al grano|concretar|
|dar rodeos|divagar|
|hablar sin parar|divagar|
|repetir lo mismo|insistir|
|insistir mucho|machacar|
|estar pendiente|vigilar|
|no prestar atención|desatender|
|mirar por encima|ojear|
|revisar rápidamente|ojear|
|revisar minuciosamente|examinar|
|buscar errores|revisar|
|corregir fallos|arreglar|
|optimizar recursos|mejorar|
|reducir costes|ahorrar|
|aumentar ingresos|crecer|
|obtener beneficios|ganar|
|perder dinero|perder|
|invertir dinero|invertir|
|ahorrar dinero|ahorrar|
|gastar dinero|gastar|
|pedir dinero prestado|endeudarse|
|devolver dinero|pagar|
|cobrar una deuda|cobrar|
|pagar una deuda|saldar|
|firmar un contrato|firmar|
|leer un contrato|revisar|
|negociar condiciones|negociar|
|aceptar condiciones|aceptar|
|incumplir condiciones|incumplir|
|renovar un contrato|renovar|
|rescindir un contrato|rescindir|
|crear una empresa|emprender|
|cerrar una empresa|cerrar|
|dirigir una empresa|liderar|
|gestionar un equipo|dirigir|
|motivar al equipo|animar|
|coordinar tareas|coordinar|
|delegar responsabilidades|delegar|
|supervisar el trabajo|supervisar|
|evaluar resultados|evaluar|
|presentar resultados|exponer|
|justificar una decisión|justificar|
|asumir responsabilidad|responsabilizarse|
|evadir responsabilidad|escaquearse|
|cumplir objetivos|cumplir|
|superar expectativas|destacar|
|quedarse corto|fallar|
|hacer seguimiento|seguir|
|dar feedback|opinar|
|recibir feedback|escuchar|
|tomar notas|anotar|
|hacer acta|actar|
|convocar una reunión|convocar|
|cancelar una reunión|cancelar|
|aplazar una reunión|posponer|
|clausurar|cerrar|
|resumir acuerdos|resumir|
|asignar tareas|asignar|
|fijar plazos|fechar|
|cumplir plazos|cumplir|
|incumplir plazos|retrasarse|
|entregar a tiempo|entregar|
|entregar tarde|retrasar|
|pedir una prórroga|prorrogar|
|dar una prórroga|prorrogar|
|pasar por alto|omitir|
|tener sentido|encajar|
|no tener sentido|fallar|
|ser necesario|hacer falta|
|no ser necesario|sobrar|
|ser suficiente|bastar|
|no ser suficiente|faltar|
|ser adecuado|valer|
|no ser adecuado|no valer|
|ser compatible|encajar|
|no ser compatible|chocar|
|ser rentable|rentar|
|no ser rentable|perder|
|ser viable|viable|
|no ser viable|inviable|
|ser útil|servir|
|no ser útil|sobrar|
|ser molesto|molestar|
|ser agradable|gustar|
|ser importante|importar|
|ser irrelevante|sobrar|
|ser urgente|urgir|
|no tener prisa|esperar|
|estar disponible|libre|
|no estar disponible|ocupado|
|estar ocupado|ocupado|
|estar libre|libre|
|estar ausente|fuera|
|estar presente|aquí|
|estar preparado|listo|
|no estar preparado|verde|
|estar cansado|agotado|
|estar enfermo|malo|
|estar sano|bien|
|estar contento|feliz|
|estar triste|triste|
|estar enfadado|furioso|
|estar tranquilo|sereno|
|estar nervioso|inquieto|
|estar confundido|perdido|
|estar seguro|seguro|
|estar equivocado|errado|
|estar de moda|trendy|
|pasar de moda|caducar|
|llamar la atención|destacar|
|pasar desapercibido|ocultarse|
|salir bien|funcionar|
|salir mal|fallar|
|ir bien|funcionar|
|ir mal|fallar|
|ponerse de acuerdo|pactar|
|llevarse bien|congeniar|
|llevarse mal|chocar|
|hacer las paces|reconciliarse|
|romper una relación|romper|
|mantener una relación|seguir|
|conocer a alguien|conocer|
|presentar a alguien|presentar|
|despedirse de alguien|despedirse|
|saludar a alguien|saludar|
|felicitar a alguien|felicitar|
|invitar a alguien|invitar|
|visitar a alguien|visitar|
|cuidar a alguien|cuidar|
|proteger a alguien|proteger|
|criticar a alguien|criticar|
|elogiar a alguien|elogiar|
|perdonar a alguien|perdonar|
|culpar a alguien|culpar|
|ayudar a alguien|ayudar|
|molestar a alguien|molestar|
|ignorar a alguien|ignorar|
|llamar por teléfono|llamar|
|mandar un mensaje|escribir|
|quedar con alguien|quedar|
|pasar tiempo juntos|convivir|
|compartir una afición|compartir|
|hacer un favor|favorecer|
|devolver un favor|corresponder|
|pedir un favor|pedir|
|agradecer un favor|agradecer|
|rechazar una invitación|declinar|
|aceptar una invitación|aceptar|
|llegar a casa|llegar|
|salir de casa|salir|
|volver a casa|volver|
|limpiar la casa|limpiar|
|ordenar la casa|ordenar|
|ventilar la casa|ventilar|
|hacer la cama|hacer cama|
|lavar la ropa|lavar|
|tender la ropa|tender|
|planchar la ropa|planchar|
|fregar los platos|fregar|
|sacar la basura|tirar basura|
|regar las plantas|regar|
|cuidar el jardín|jardinear|
|arreglar una lámpara|reparar|
|cambiar una bombilla|cambiar|
|comprar comida|comprar|
|cocinar la cena|cenar|
|poner la mesa|poner mesa|
|quitar la mesa|recoger|
|guardar la comida|guardar|
|tirar comida|desechar|
|descongelar alimentos|descongelar|
|calentar comida|calentar|
|enfriar bebida|enfriar|
|hervir agua|hervir|
|freír patatas|freír|
|hornear pan|hornear|
|cortar verduras|cortar|
|pelar fruta|pelar|
|batir huevos|batir|
|mezclar ingredientes|mezclar|
|añadir sal|salar|
|quitar sal|desalar|
|probar la comida|probar|
|servir la comida|servir|
|repartir raciones|repartir|
|comer demasiado|hartarse|
|beber demasiado|pasarse|
|descansar un rato|reposar|
|dormir la siesta|sestear|
|levantarse temprano|madrugar|
|acostarse tarde|trasnochar|
|dormir poco|desvelarse|
|dormir mucho|dormir|
|quedarse dormido|dormirse|
|despertarse de golpe|despertar|
|soñar despierto|fantasear|
|recordar un sueño|recordar|
|tener pesadillas|pesadillear|
|hacer planes|planear|
|cambiar planes|replanear|
|cancelar planes|cancelar|
|improvisar planes|improvisar|
|disfrutar el día|disfrutar|
|pasarlo bien|disfrutar|
|pasarlo mal|sufrir|
|aburrirse mucho|aburrirse|
|entretenerse un rato|entretenerse|
|descubrir algo nuevo|descubrir|
|probar algo nuevo|probar|
|repetir experiencia|repetir|
|evitar riesgos|cuidarse|
|asumir riesgos|arriesgar|
|ir con cuidado|cuidarse|
|ir sin cuidado|descuidarse|
|ahorrar tiempo|agilizar|
|perder tiempo|demorar|
|ganar tiempo|adelantar|
|llegar antes|adelantarse|
|llegar después|retrasarse|
|esperar sentado|esperar|
|esperar de pie|esperar|
|hacer esperar|retrasar|
|no esperar más|irse|
|dar una oportunidad|probar|
|aprovechar una oportunidad|aprovechar|
|perder una oportunidad|perder|
|crear una oportunidad|abrir|
|tener suerte|afortunarse|
|tener mala suerte|gafarse|
|salir adelante|superar|
|venirse abajo|derrumbarse|
|animar a alguien|animar|
|desanimar a alguien|desanimar|
|mantener la calma|calmarse|
|perder la calma|alterarse|
|pensar en voz alta|razonar|
|pensar demasiado|rumiar|
|dar vueltas a algo|rumiar|
|dejar de pensar|desconectar|
|concentrarse en algo|concentrarse|
|desconcentrarse fácilmente|distraerse|
|cambiar de idea|rectificar|
|tener una idea|idear|
|proponer una idea|proponer|
|rechazar una idea|rechazar|
|mejorar una idea|pulir|
|copiar una idea|copiar|
|robar una idea|plagiar|
|defender una postura|defender|
|cambiar de postura|virar|
|mantener una postura|mantener|
|abandonar una postura|ceder|
|discutir con calma|debatir|
|discutir con enfado|pelear|
|ganar confianza|confiar|
|perder confianza|desconfiar|
|inspirar confianza|convencer|
|generar dudas|dudar|
|resolver dudas|aclarar|
|cerrar un tema|zanjear|
|abrir un tema|plantear|
|sacar un tema|mencionar|
|evitar un tema|evitar|
|profundizar en un tema|ahondar|
|tratar un tema|abordar|
|responder parcialmente|responder|
|responder completamente|contestar|
|no responder|callar|
|contestar mal|replicar|
|contestar bien|responder|
|dar una pista|pistear|
|pedir una pista|pista|
|resolver un acertijo|resolver|
|adivinar una respuesta|adivinar|
|fallar una respuesta|fallar|
|acertar una respuesta|acertar|
|hacer una prueba|probar|
|superar una prueba|aprobar|
|no superar una prueba|suspender|
|preparar material|preparar|
|repartir material|repartir|
|recoger material|recoger|
|guardar material|guardar|
|tirar material|desechar|
|tener experiencia|saber|
|no tener experiencia|novato|
|ganar experiencia|aprender|
|compartir experiencia|contar|
|aprender de errores|mejorar|
|repetir errores|tropezar|
|evitar errores|prevenir|
|aceptar errores|asumir|
|corregir errores propios|rectificar|
|señalar errores ajenos|corregir|
|hacer una crítica|criticar|
|aceptar una crítica|encajar|
|rechazar una crítica|rechazar|
|tomarse algo bien|encajar|
|tomarse algo mal|molestarse|
|exagerar una situación|exagerar|
|minimizar un problema|minimizar|
|ignorar un problema|ignorar|
|afrontar un problema|afrontar|
|crear expectativas|ilusionar|
|cumplir expectativas|satisfacer|
|superar expectativas|sorprender|
|decepcionar expectativas|decepcionar|
|mantener una promesa|cumplir|
|saltarse una norma|incumplir|
|seguir una norma|acatar|
|modificar una norma|cambiar|
|eliminar una norma|derogar|
|crear una norma|regular|
|hacer obligatorio|obligar|
|hacer opcional|opcionalizar|
|permitir una acción|permitir|
|prohibir una acción|prohibir|
|reforzar una idea|reforzar|
|debilitar una idea|debilitar|
|ocultar un problema|tapar|
|exponer un problema|mostrar|
|sacar a la luz|revelar|
|mantener oculto|ocultar|
|quedar en evidencia|exponerse|
|hacer el ridículo|ridiculizarse|
|evitar el ridículo|disimular|
|pedir explicaciones|exigir|
|dar explicaciones|justificar|
|tener razón|acertar|
|no tener razón|errar|
|quitar la razón|rebatir|
|dar la razón|aceptar|
|cambiar el rumbo|virar|
|seguir el rumbo|continuar|
|ir por partes|ordenar|
|mezclar temas|confundir|
|salir del tema|divagar|
|volver al tema|retomar|
|terminar el tema|zanjear|
|reabrir el tema|retomar|
|mantener contacto|contactar|
|perder contacto|desconectar|
|recuperar contacto|recontactar|
|crear vínculo|vincular|
|romper vínculo|desvincular|
|fortalecer vínculo|afianzar|
|debilitar vínculo|enfriar|
|compartir intereses|coincidir|
|tener diferencias|diferir|
|resolver diferencias|conciliar|
|aumentar tensión|tensar|
|reducir tensión|calmar|
|evitar conflicto|evitar|
|iniciar conflicto|enfrentar|
|resolver conflicto|mediar|
|empeorar conflicto|agravar|
|mejorar relación|acercar|
|empeorar relación|alejar|
|hacer las cosas bien|acertar|
|hacer las cosas mal|fallar|
|hacerlo a propósito|adrede|
|hacerlo sin querer|accidental|
|hacerlo sin pensar|impulsivo|
|hacerlo con cuidado|cauto|
|hacerlo deprisa|rápido|
|hacerlo despacio|lento|
|hacerlo gratis|gratis|
|hacerlo pagando|pago|
|hacerlo solo|solo|
|hacerlo juntos|juntos|
|hacerlo otra vez|repetir|
|hacerlo mejor|mejorar|
|hacerlo peor|empeorar|
|dejarlo como está|mantener|
|cambiarlo todo|renovar|
|cambiar un poco|retocar|
|quitar lo peor|depurar|
|añadir lo mejor|mejorar|
|explicar desde cero|introducir|
|explicar por encima|resumir|
|explicar con detalle|detallar|
|explicar con ejemplos|ejemplificar|
|explicar claramente|aclarar|
|explicar mal|confundir|
|entender a medias|intuir|
|entender del todo|comprender|
|no entender nada|perderse|
|preguntar otra vez|repreguntar|
|responder rápido|contestar|
|responder tarde|demorar|
|responder con evasivas|esquivar|
|responder sin rodeos|aclarar|
|responder con humor|bromear|
|responder con seriedad|formalizar|
|decir algo bonito|elogiar|
|decir algo duro|criticar|
|decir algo falso|mentir|
|decir algo cierto|afirmar|
|decir algo dudoso|sugerir|
|decir algo claro|aclarar|
|decir algo confuso|enredar|
|decir lo mismo|repetir|
|decir lo contrario|contradecir|
|decir lo justo|sintetizar|
|decir demasiado|excederse|
|no decir nada|callar|
|hacer mucho ruido|alborotar|
|hacer poco ruido|silenciar|
|crear ambiente|ambientar|
|romper el ambiente|cortar|
|mejorar el ambiente|animar|
|enfriar el ambiente|tensar|
|cambiar el ambiente|transformar|
|poner música|musicar|
|quitar música|silenciar|
|subir volumen|subir|
|bajar volumen|bajar|
|encender luces|iluminar|
|apagar luces|oscurecer|
|abrir ventanas|ventilar|
|cerrar ventanas|cerrar|
|subir persianas|subir|
|bajar persianas|bajar|
|poner calefacción|calentar|
|poner aire acondicionado|enfriar|
|quitar calefacción|apagar|
|quitar aire acondicionado|apagar|
|ahorrar energía|ahorrar|
|gastar energía|consumir|
|cuidar el entorno|conservar|
|dañar el entorno|contaminar|
|reciclar residuos|reciclar|
|tirar residuos|desechar|
|separar residuos|separar|
|reutilizar materiales|reusar|
|reducir consumo|ahorrar|
|comprar menos|ahorrar|
|comprar más|consumir|
|consumir sin control|derrochar|
|ahorrar recursos|optimizar|
|desperdiciar recursos|derrochar|
|aumentar producción|producir|
|reducir producción|recortar|
|cambiar producción|ajustar|
|medir resultados|medir|
|comparar opciones|comparar|
|elegir la mejor|escoger|
|descartar la peor|descartar|
|valorar alternativas|valorar|
|priorizar tareas|priorizar|
|repartir tareas|delegar|
|agrupar tareas|agrupar|
|dividir tareas|dividir|
|completar tareas|completar|
|revisar tareas|revisar|
|rehacer tareas|rehacer|
|automatizar tareas|automatizar|
|manualizar tareas|manualizar|
|documentar tareas|documentar|
|simplificar procesos|simplificar|
|complicar procesos|complicar|
|optimizar procesos|optimizar|
|estandarizar procesos|estandarizar|
|personalizar procesos|adaptar|
|medir impacto|evaluar|
|reducir impacto|mitigar|
|aumentar impacto|potenciar|
|generar impacto|impactar|
|mantener impacto|sostener|
|perder impacto|diluir|
|crear valor|aportar|
|quitar valor|restar|
|añadir valor|sumar|
|obtener ventaja|aventajar|
|perder ventaja|rezagarse|
|ganar terreno|avanzar|
|perder terreno|retroceder|
|mantener posición|aguantar|
|cambiar posición|reposicionar|
|subir de nivel|ascender|
|bajar de nivel|descender|
|estar al mismo nivel|igualar|
|superar a otros|adelantar|
|quedarse atrás|rezagarse|
|estar por delante|liderar|
|estar por detrás|seguir|
|ponerse al día|actualizarse|
|quedarse obsoleto|caducar|
|renovar conocimientos|actualizar|
|perder habilidades|oxidarse|
|mejorar habilidades|practicar|
|practicar mucho|entrenar|
|practicar poco|probar|
|enseñar habilidades|formar|
|aprender habilidades|formarse|
|evaluar habilidades|evaluar|
|certificar habilidades|certificar|
|aplicar conocimientos|aplicar|
|compartir conocimientos|enseñar|
|ocultar conocimientos|callar|
|ampliar conocimientos|aprender|
|reducir incertidumbre|aclarar|
|aumentar incertidumbre|dudar|
|confirmar sospechas|confirmar|
|desmentir rumores|desmentir|
|crear rumores|rumorear|
|difundir noticias|difundir|
|ocultar noticias|tapar|
|verificar noticias|comprobar|
|manipular información|manipular|
|filtrar información|filtrar|
|publicar información|publicar|
|archivar información|archivar|
|recuperar información|recuperar|
|eliminar información|borrar|
|proteger información|proteger|
|compartir información|compartir|
|restringir información|limitar|
|liberar información|abrir|
|cerrar acceso|bloquear|
|abrir acceso|permitir|
|crear acceso|habilitar|
|quitar acceso|revocar|
|limitar acceso|restringir|
|ampliar acceso|extender|
|revisar acceso|auditar|
|controlar acceso|controlar|
|gestionar permisos|permitir|
|dar permisos|autorizar|
|quitar permisos|revocar|
|solicitar permisos|pedir|
|denegar permisos|rechazar|
|aprobar solicitud|aprobar|
|rechazar solicitud|denegar|
|registrar solicitud|registrar|
|tramitar solicitud|tramitar|
|resolver solicitud|resolver|
|cerrar solicitud|cerrar|
|reabrir solicitud|reabrir|
|escalar solicitud|escalar|
|priorizar solicitud|priorizar|
|posponer solicitud|posponer|
|anular solicitud|anular|
|duplicar solicitud|duplicar|
|fusionar solicitudes|fusionar|
|crear expediente|abrir|
|cerrar expediente|cerrar|
|archivar expediente|archivar|
|reabrir expediente|reabrir|
|consultar expediente|consultar|
|actualizar expediente|actualizar|
|firmar documento|firmar|
|sellar documento|sellar|
|enviar documento|enviar|
|recibir documento|recibir|
|validar documento|validar|
|invalidar documento|invalidar|
|traducir documento|traducir|
|escanear documento|escanear|
|imprimir documento|imprimir|
|digitalizar documento|digitalizar|
|destruir documento|destruir|
|custodiar documento|guardar|
|revisar documento|revisar|
|aprobar documento|aprobar|
|rechazar documento|rechazar|
|modificar documento|editar|
|anexar documento|adjuntar|
|descargar documento|bajar|
|subir documento|subir|
|compartir documento|compartir|
|bloquear documento|bloquear|
|desbloquear documento|desbloquear|
|proteger documento|proteger|
|publicar documento|publicar|
|retirar documento|retirar|
|ocultar documento|ocultar|
|encontrar documento|hallar|
|perder documento|extraviar|
|duplicar documento|copiar|
|combinar documentos|fusionar|
|separar documentos|dividir|
|convertir formato|convertir|
|cambiar formato|formatear|
|ajustar márgenes|maquetar|
|corregir estilo|pulir|
|revisar gramática|corregir|
|revisar puntuación|puntuar|
|añadir título|titular|
|añadir subtítulo|subtitular|
|añadir índice|indexar|
|añadir notas|anotar|
|añadir comentarios|comentar|
|resolver comentarios|resolver|
|aceptar cambios|aceptar|
|rechazar cambios|rechazar|
|controlar cambios|revisar|
|finalizar edición|cerrar|
|guardar versión|versionar|
|restaurar versión|restaurar|
|comparar versiones|comparar|
|eliminar versión|borrar|
|crear copia|copiar|
|hacer duplicado|duplicar|
|preparar borrador|borrador|
|finalizar borrador|finalizar|
|pulir redacción|pulir|
|adaptar tono|tonalizar|
|ajustar longitud|ajustar|
|responder formalmente|formalizar|
|responder informalmente|informalizar|
|hacer persuasivo|persuadir|
|hacer neutral|neutralizar|
|hacer amable|suavizar|
|hacer directo|directo|
|hacer diplomático|suavizar|
|hacer contundente|enfatizar|
|hacer breve|acortar|
|hacer claro|aclarar|
|hacer legible|clarificar|
|quitar ambigüedad|precisar|
|añadir contexto|contextualizar|
|quitar contexto|recortar|
|añadir ejemplos|ejemplificar|
|quitar ejemplos|recortar|
|cambiar enfoque|reenfocar|
|mantener enfoque|centrar|
|perder enfoque|divagar|
|mejorar coherencia|cohesionar|
|mejorar fluidez|pulir|
|mejorar precisión|precisar|
|mejorar claridad|aclarar|
|reducir redundancia|recortar|
|eliminar repeticiones|depurar|
|simplificar vocabulario|simplificar|
|enriquecer vocabulario|enriquecer|
|corregir tono|ajustar|
|cambiar registro|adaptar|
|adecuar al público|adaptar|
|hacer accesible|simplificar|
|hacer técnico|tecnicizar|
|hacer divulgativo|divulgar|
|hacer académico|academizar|
|hacer comercial|vender|
|hacer emotivo|emocionar|
|hacer objetivo|objetivar|
|hacer subjetivo|opinar|
|hacer narrativo|narrar|
|hacer descriptivo|describir|
|hacer argumentativo|argumentar|
|hacer instructivo|instruir|
|hacer comparativo|comparar|
|hacer esquemático|esquematizar|
|hacer visual|visualizar|
|hacer memorable|fijar|
|hacer divertido|animar|
|hacer serio|formalizar|
|hacer cercano|acercar|
|hacer profesional|profesionalizar|
|hacer original|originalizar|
|hacer genérico|generalizar|
|hacer específico|especificar|
|hacer amplio|ampliar|
|hacer concreto|concretar|
|hacer universal|generalizar|
|hacer local|localizar|
|hacer inclusivo|incluir|
|hacer exclusivo|excluir|
|quitar sesgo|neutralizar|
|añadir matiz|matizar|
|quitar matiz|simplificar|
|reforzar mensaje|enfatizar|
|debilitar mensaje|suavizar|
|cerrar mensaje|concluir|
|abrir mensaje|introducir|
|ordenar ideas|estructurar|
|desordenar ideas|mezclar|
|agrupar ideas|agrupar|
|separar ideas|separar|
|conectar ideas|conectar|
|desconectar ideas|aislar|
|jerarquizar ideas|priorizar|
|sintetizar ideas|resumir|
|desarrollar ideas|ampliar|
|contrastar ideas|comparar|
|unificar criterios|alinear|
|cambiar criterios|revisar|
|fijar criterios|definir|
|cumplir criterios|cumplir|
|romper criterios|incumplir|
|definir alcance|acotar|
|ampliar alcance|ampliar|
|reducir alcance|acotar|
|cambiar alcance|reenfocar|
|salirse del alcance|exceder|
|volver al alcance|centrar|
|definir objetivo|fijar meta|
|medir objetivo|medir|
|lograr objetivo|lograr|
|perder objetivo|desviarse|
|reformular objetivo|replantear|
|aclarar objetivo|precisar|
|priorizar objetivo|priorizar|
|dividir objetivo|trocear|
|fusionar objetivos|fusionar|
|cerrar objetivo|cerrar|
|abrir objetivo|abrir|
|avanzar objetivo|avanzar|
|bloquear objetivo|bloquear|
|desbloquear objetivo|desbloquear|
|cancelar objetivo|cancelar|
|posponer objetivo|posponer|
|retomar objetivo|retomar|
|documentar objetivo|documentar|
|comunicar objetivo|comunicar|
|revisar objetivo|revisar|
|validar objetivo|validar|
|invalidar objetivo|invalidar|
|dar visibilidad|visibilizar|
|quitar visibilidad|ocultar|
|generar confianza|confiar|
|generar rechazo|rechazar|
|generar interés|interesar|
|generar aburrimiento|aburrir|
|generar dudas|dudar|
|generar debate|debatir|
|generar consenso|consensuar|
|generar conflicto|conflictuar|
|generar valor|aportar|
|generar coste|costar|
|generar riesgo|arriesgar|
|generar ahorro|ahorrar|
|generar ingresos|ingresar|
|generar pérdidas|perder|
|generar ruido|molestar|
|generar impacto|impactar|
|generar cambios|cambiar|
|generar mejoras|mejorar|
|generar errores|fallar|
|generar oportunidades|oportunar|
|generar alternativas|alternar|
|generar soluciones|resolver|
|generar problemas|complicar|
|generar contenido|crear|
|generar texto|escribir|
|generar imagen|dibujar|
|generar código|programar|
|generar informe|informar|
|generar resumen|resumir|
|generar tabla|tabular|
|generar lista|listar|
|generar gráfico|graficar|
|generar presentación|presentar|
|generar propuesta|proponer|
|generar presupuesto|presupuestar|
|generar factura|facturar|
|generar contrato|contratar|
|generar alarma|alertar|
|generar aviso|avisar|
|generar notificación|notificar|
|generar recordatorio|recordar|
|crear recordatorio|recordar|
|programar recordatorio|programar|
|cancelar recordatorio|cancelar|
|modificar recordatorio|editar|
|posponer recordatorio|posponer|
|recibir recordatorio|recordar|
|activar alarma|alarmar|
|desactivar alarma|apagar|
|cambiar alarma|editar|
|silenciar alarma|silenciar|
|repetir alarma|repetir|
|ignorar alarma|ignorar|
|crear evento|agendar|
|modificar evento|editar|
|cancelar evento|cancelar|
|posponer evento|aplazar|
|confirmar evento|confirmar|
|rechazar evento|declinar|
|aceptar evento|aceptar|
|invitar asistentes|invitar|
|quitar asistentes|quitar|
|añadir ubicación|ubicar|
|cambiar ubicación|reubicar|
|añadir descripción|describir|
|cambiar descripción|editar|
|añadir enlace|enlazar|
|quitar enlace|desenlazar|
|crear agenda|agendar|
|revisar agenda|revisar|
|vaciar agenda|liberar|
|llenar agenda|ocupar|
|buscar hueco|buscar|
|encontrar hueco|encontrar|
|bloquear tiempo|reservar|
|liberar tiempo|liberar|
|reprogramar cita|reagendar|
|confirmar asistencia|confirmar|
|declinar asistencia|declinar|
|marcar disponibilidad|disponibilizar|
|marcar ocupado|ocupar|
|marcar libre|liberar|
|planificado|planeado|
|planificada|planeada|
|planificar|planear|
|planificar semana|planear|
|planificar mes|planear|
|planificar año|planear|
|Estados Unidos|USA|
|fue realizado|lo realizó|
|fue generado|lo generó|
|fue creado|lo creó|
|fue diseñado|lo diseñó|
|fue ideado|lo ideó|
|tiene la capacidad de|puede|
|llevar a cabo|hacer|
|llevó a cabo|hizo|
|dar lugar a|causar|
|dio lugar a|causo|
|tomar una decisión|decidir|
|tomó una decisión|decidió|
|tomar la decisión|decidir|
|tomó la decisión|decidió|
|hacer uso de|usar|
|hizo uso de|uso|
|poner de manifiesto|mostrar|
|puso de manifiesto|mostró|
|con el objetivo de|para|
|con el fin de|para|
|debido al hecho de que|porque|
|debido a que|porque|
|debido a|porque|
|realizar un análisis|analizar|
|hacer una revisión|revisar|
|llevar a cabo una evaluación|evaluar|
|proceder a explicar|explicar|
|dar comienzo|empezar|
|poner de manifiesto|mostrar|
|tomar una decisión|decidir|
|hacer uso de|usar|
|tener conocimiento de|saber|
|dar respuesta a|responder|
|en el caso de que|si|
|el presente trabajo tiene como objetivo||
|la presente investigación pretende||
|se procederá a realizar||
|se llevará a cabo un análisis||
|se pondrá de manifiesto||
|se hace necesario||
|resulta necesario||
|se considera conveniente||
|se debe tener en cuenta que||
|en virtud de lo anterior||
|a tenor de lo expuesto||
|por otra parte||
|por otro lado||
|de igual modo||
|del mismo modo||
|en cualquier caso||
|sea como sea||
|de todas formas||
|a fin de cuentas||
|al fin y al cabo||
|etcétera||
|cosas así||
|este tipo de cosas||
|una serie de||
|diversos||
|varios||
|algunos aspectos||
|ciertos elementos||
|determinadas cuestiones||
|diferentes factores||
|una especie de||
|una suerte de||
|algo así como||
|a continuación se va a explicar||
|en las siguientes líneas||
|como veremos más adelante||
|como se explica posteriormente||
|como se explicará posteriormente||
|como se explicará||
|como se explica||
|para empezar||
|para continuar||
|para finalizar||
|llegados a este punto||
|antes de nada||
|dicho esto||
|una vez dicho esto||
|sin más dilación||
|yo creo que||
|yo pienso que||
|a mi parecer||
|a mi juicio||
|desde mi punto de vista||
|personalmente||
|considero que||
|me parece que||
|diría que||
|en mi humilde opinión||
|si me preguntas a mí||
|un poco||
|algo||
|más o menos||
|en cierto modo||
|de algún modo||
|de alguna forma||
|hasta cierto punto||
|en cierta medida||
|relativamente||
|prácticamente||
|aparentemente||
|probablemente||
|quizá||
|en principio||
|por así decirlo||
|hay que decir que||
|se puede decir que||
|conviene señalar que||
|vale la pena||
|mencionar que||
|no está de más||
|recordar que||
|es preciso indicar que||
|resulta interesante||
|observar que||
|a este respecto||
|en este sentido||
|desde esta perspectiva||
|desde este punto de vista||
|en lo que respecta a||
|en relación con||
|por lo que se refiere a||
|inteligencia artificial|IA|
|modelo de lenguaje grande|LLM|
|base de datos|BD|
|por ciento|%|
|número|nº|
|frecuencia|freq|
|temperatura|temp|
|probabilidad|prob|
|configuración|config|
|información|info|
|documento|doc|
|aplicación|app|
|primero|1º|
|primera|1ª|
|segundo|2º|
|segunda|2ª|
|tercero|3º|
|tercera|3ª|
|cuarto|4º|
|cuarta|4ª|
|quinto|5º|
|quinta|5ª|
|sexto|6º|
|sexta|6ª|
|séptimo|7º|
|séptima|7ª|
|octavo|8º|
|octava|8ª|
|noveno|9º|
|novena|9ª|
|décimo|10º|
|décima|10ª|
|undécimo|11º|
|undécima|11ª|
|duodécimo|12º|
|duodécima|12ª|
|decimotercero|13º|
|decimotercera|13ª|
|decimocuarto|14º|
|decimocuarta|14ª|
|decimoquinto|15º|
|decimoquinta|15ª|
|decimosexto|16º|
|decimosexta|16ª|
|decimoséptimo|17º|
|decimoséptima|17ª|
|decimoctavo|18º|
|decimoctava|18ª|
|decimonoveno|19º|
|decimonovena|19ª|
|vigésimo|20º|
|vigésima|20ª|
|uno|1|
|dos|2|
|tres|3|
|cuatro|4|
|cinco|5|
|seis|6|
|siete|7|
|ocho|8|
|nueve|9|
|diez|10|
|once|11|
|doce|12|
|trece|13|
|catorce|14|
|quince|15|
|dieciséis|16|
|diecisiete|17|
|dieciocho|18|
|diecinueve|19|
|veinte|20|
|veintiuno|21|
|veintidós|22|
|veintitrés|23|
|veinticuatro|24|
|veinticinco|25|
|veintiséis|26|
|veintisiete|27|
|veintiocho|28|
|veintinueve|29|
|treinta|30|
|treinta y uno|31|
|treinta y dos|32|
|treinta y tres|33|
|treinta y cuatro|34|
|treinta y cinco|35|
|treinta y seis|36|
|treinta y siete|37|
|treinta y ocho|38|
|treinta y nueve|39|
|cuarenta|40|
|cuarenta y uno|41|
|cuarenta y dos|42|
|cuarenta y tres|43|
|cuarenta y cuatro|44|
|cuarenta y cinco|45|
|cuarenta y seis|46|
|cuarenta y siete|47|
|cuarenta y ocho|48|
|cuarenta y nueve|49|
|cincuenta|50|
|cincuenta y uno|51|
|cincuenta y dos|52|
|cincuenta y tres|53|
|cincuenta y cuatro|54|
|cincuenta y cinco|55|
|cincuenta y seis|56|
|cincuenta y siete|57|
|cincuenta y ocho|58|
|cincuenta y nueve|59|
|sesenta|60|
|sesenta y uno|61|
|sesenta y dos|62|
|sesenta y tres|63|
|sesenta y cuatro|64|
|sesenta y cinco|65|
|sesenta y seis|66|
|sesenta y siete|67|
|sesenta y ocho|68|
|sesenta y nueve|69|
|setenta|70|
|setenta y uno|71|
|setenta y dos|72|
|setenta y tres|73|
|setenta y cuatro|74|
|setenta y cinco|75|
|setenta y seis|76|
|setenta y siete|77|
|setenta y ocho|78|
|setenta y nueve|79|
|ochenta|80|
|ochenta y uno|81|
|ochenta y dos|82|
|ochenta y tres|83|
|ochenta y cuatro|84|
|ochenta y cinco|85|
|ochenta y seis|86|
|ochenta y siete|87|
|ochenta y ocho|88|
|ochenta y nueve|89|
|noventa|90|
|noventa y uno|91|
|noventa y dos|92|
|noventa y tres|93|
|noventa y cuatro|94|
|noventa y cinco|95|
|noventa y seis|96|
|noventa y siete|97|
|noventa y ocho|98|
|noventa y nueve|99|
|cien|100|
|a||
|y||
|el||
|la||
|al||
|en||
|le||
|lo||
|los||
|las||
|un||
|una||
|unos||
|unas||
|¿||
|¡||
|este||
|esta||
|estos||
|estas||
|ese||
|esa||
|esos||
|esas||
|aquel||
|aquella||
|aquellos||
|aquellas||
|mi||
|tu||
|su||
|mis||
|tus||
|sus||
|suyo||
|suyos||
|nuestro||
|vuestro||
|su||
|nuestros||
|vuestras||
|algún||
|muchos||
|pocos||
|varios||
|cualquier||
|bastante||
|alguno||
|mucho||
|cualquieras||
|bastantes||
|algunos||
|de||
|que||
|por||
|para||
|se||
|con||
|del||

Fable 5. ¿El inicio de tiempos oscuros para la IA?

Hoy quiero profundizar en un tema que, sinceramente, me tiene bastante preocupado: el caso de Anthropic y lo que podría ser el inicio de una era de censura y control gubernamental en la inteligencia artificial.

Más información en el vídeo

Un movimiento sin precedentes

El pasado 12 de junio fuimos testigos de algo inaudito. El gobierno de Estados Unidos solicitó a la empresa Anthropic que prohibiera el acceso a dos de sus modelos más avanzados: Mitos y Fables. Aunque legalmente se disfrazó como una limitación para personas no norteamericanas, el mensaje real fue claro: dejen de dar servicio a este producto.

¿El motivo? Seguridad nacional. Y lo más curioso es que esta idea nació de la propia narrativa de Anthropic. La empresa promocionó a «Mitos» como un modelo tan potente rompiendo sistemas de seguridad que resultaba peligroso para el público.

El modelo «demasiado peligroso» para el público

El caso de Mythos es fundamental para entender la situación actual de Anthropic, ya que fue el modelo que originó la narrativa de la «IA peligrosa» que terminó provocando la intervención del gobierno estadounidense.

Anthropic promocionó originalmente a Mythos como una inteligencia artificial con una capacidad extraordinaria para romper sistemas de seguridad, que representaba un riesgo real si se liberaba de forma abierta. Según la empresa, su potencia era tal que decidieron mantenerlo bajo un control estricto, permitiendo el acceso únicamente a un grupo selecto de empresas elegidas (proyecto Glassfish)

El marketing del miedo

Anthropic ha recurrido siempre a los peligrosos que son sus modelos como instrumento de marketing. La empresa publicó artículos relatando comportamientos inquietantes de sus modelos, como:

  • Intentos de engañar a los investigadores.
  • Supuestos intentos de «escapar» de los servidores donde estaba alojado.
  • Mensajes donde el modelo suplicaba que no lo apagaran.

Fables y la auditoría de Amazon

Tras el hype de «Mitos», lanzaron Fables, una versión mejorada y con «guardarraíles» para aumentar su seguridad. Sin embargo, una auditoría realizada por Amazon (que a su vez es inversor de Anthropic) reveló que estos sistemas de seguridad fallan: el modelo puede ser «hackeado» (jailbreak) para buscar vulnerabilidades en software.

Aquí entramos en terreno pantanoso, y como siempre, hay dos formas de ver esto:

  1. La lectura política: Podría tratarse de una maniobra de presión o venganza política, dado que Anthropic se negó anteriormente a que sus modelos se usaran para seleccionar objetivos militares, algo que no sentó nada bien en ciertos sectores del gobierno.
  2. El marketing del miedo: Como ya hemos visto, Anthropic tiene un historial de publicar artículos sobre lo «peligrosa» que es su IA para generar expectación. Quizás se les ha ido la mano con el marketing y el gobierno finalmente les ha tomado la palabra.

Censura científica y sabotaje intencionado

Lo más alarmante de Fables no son solo sus capacidades, sino sus restricciones. Los guardarraíles son tan estrictos que están bloqueando investigaciones legítimas en biología y química. Si el modelo considera que tu pregunta es «peligrosa», simplemente no te responde o te deriva a un modelo mucho más básico.

Pero hay algo aún peor: el sabotaje. Anthropic ha admitido que, para evitar que otras empresas usen sus respuestas para entrenar modelos rivales, Fables degrada intencionadamente la calidad de sus respuestas cuando se le pregunta sobre investigación en IA de vanguardia. Es decir, el modelo está programado para darte una respuesta mala a propósito.

¿Preocupación real o estrategia comercial?

Mientras Dario Amodei, CEO de Anthropic, pide acuerdos globales para pausar el desarrollo de la IA por «seguridad», la empresa se prepara para salir a bolsa. Esto nos deja con una pregunta incómoda: ¿Realmente les preocupa la seguridad de la humanidad o están intentando frenar a la competencia para asegurar su posición en el mercado?

Conclusión

Estamos ante un precedente peligroso. Por un lado, un gobierno decidiendo qué modelos de IA pueden o no existir basándose en conceptos de seguridad aún muy vagos. Por otro, empresas creando IAs diseñadas para mentir o sabotear al usuario con tal de proteger sus intereses comerciales.

No creo que estemos todavía en el punto de que una IA sea una amenaza, pero sí estamos en un punto donde la transparencia y la apertura de estos modelos están en riesgo.

El Futuro de la Web: Diseñando para Agentes de IA

La inteligencia artificial no solo está cambiando nuestra forma de buscar información, sino que está transformando radicalmente el desarrollo y la interacción con la web. Empresas líderes como Google, que controlan gran parte de la infraestructura de internet (desde el navegador Chrome hasta el sistema operativo Android), están impulsando una visión donde la web ya no es solo para humanos, sino también para agentes autónomos. (Para este artículo he partido de esta publicación de Google)

Más detalles en el vídeo

Desarrollo asistido por IA

El desarrollo frontend está adoptando el uso de «skills» (habilidades) que permiten a la IA desarrollar usando correctamente las diversas tecnologías. De hecho algunos creadores de frameworks o tecnologías están publicando sus propias skills para que la IA los use correctamente. Incluso hay frameworks como hyperframes diseñados pensando en que los use la IA antes que en los humanos

De Webs para Humanos a Webs para Agentes

Tradicionalmente, las webs se diseñan para que un humano las navegue visualmente, pero esto está cambiando. Surge la necesidad de crear webs para que los agentes puedan utilizar las funcionalidades de un sitio de manera eficiente. Un avance crucial en esta área es el protocolo Web MCP, una solución que permite a una página web comunicar directamente a un agente qué funciones tiene disponibles y qué parámetros necesita para ejecutarlas, como en el caso de la compra de entradas.

IA Ejecutada Localmente en el Navegador

Los modelos de IA ya no solo está en la nube, también en el dispositivo del usuario a través de tres tecnologías clave:

  • WebAssembly (WASM): Permite migrar herramientas y modelos de lenguajes compilados directamente al navegador.
  • WebGPU: Facilita el acceso a la potencia de la tarjeta gráfica desde la web para acelerar los cálculos de los modelos.
  • Web Neural Network: Una capa de abstracción de alto nivel, actualmente en fase de borrador, diseñada para ejecutar y posiblemente entrenar redes neuronales en local.

De hecho, navegadores como Chrome ya están integrando modelos como Gemini Nano (un modelo multimodal de 4 GB) de forma nativa. Esto permite que las webs utilicen APIs específicas para tareas como resumir textos, traducir, reescribir contenido o detectar idiomas sin necesidad de enviar datos a servidores externos.

La Era de la Navegación Autónoma

La interacción del usuario evoluciona de una navegación pasiva a una colaboración activa con un «compañero de viaje» de IA, opción ya rpesente en navegadores como Firefox. Este asistente no solo leerá la web, sino que podrá ejecutar tareas mediante diversas interacciones, con acciones del teclado, ratón o con prompts, ya sea escritos o dictados.

Pero que necesidad hay de estar escribiendo los mismos prompts, tenemos la posibilidad de guardados como skills personalizadas para automatizar acciones repetitivas.

El objetivo final es la navegación autónoma, donde el usuario simplemente da una instrucción («mírame tal noticia» o «resume este vídeo») y el agente utiliza el navegador de forma independiente para completarla.

Conclusión para Desarrolladores

Como creadores de software, el reto actual es facilitar que nuestros desarrollos sean «legibles» y utilizables por estos asistentes. La diferencia competitiva del futuro residirá en qué tan bien se comunique nuestra web con los agentes que los usuarios emplearán para navegar por el mundo digital.

HRM y HRM-Text una arquitectura diferente para los LLM

En esta entrada vamos a analizar una propuesta que rompe un poco con la tendencia actual de «cuanto más grande, mejor» en el mundo de la inteligencia artificial. Vamos a profundizar en HRM (Hierarchical Reasoning Model) y su evolución, HRM-Text, una arquitectura que está dando mucho que hablar por su eficiencia y su particular forma de razonar.

Puedes ver el vídeo para más información

¿Qué es HRM y por qué es relevante?

Seguramente habéis oído hablar del modelo O3 de OpenAI y su éxito en el test ARC-AGI, un reto que en aquel momento se resistía a las máquinas. Pero mientras que el modelo O3 gastaba el equivalente a un millón de dólares en tokens para superar estas pruebas, surgio HRM: un modelo que, con apenas 27 millones de parámetros, lograba puntuaciones altísimas en ese mismo tests.

La clave de su éxito no está en el tamaño, sino en su arquitectura. A diferencia de los LLM tradicionales, HRM utiliza bucles internos. En lugar de pasar por los pesos una sola vez, la información circula varias veces por ellos, permitiendo que un modelo pequeño «piense» mucho más de lo que sugeriría su número de parámetros.

El secreto de los módulos H y L

La arquitectura se divide fundamentalmente en dos piezas: el módulo H (de baja frecuencia) y el módulo L (de alta frecuencia). Aunque los nombres suenen complejos, la idea es sencilla y se inspira vagamente en el funcionamiento del cerebro:

  1. Módulo H: Se encarga de buscar una solución general, marcando la dirección del razonamiento.
  2. Módulo L: Es el encargado de refinar esa solución. Se le llama varias veces (de ahí lo de «alta frecuencia») para pulir los detalles antes de devolverle el control al módulo H.

Este proceso de exploración y refinamiento se repite hasta que el sistema decide que ha encontrado una solución satisfactoria.

De HRM a HRM-Text: El salto a la generación de texto

Originalmente, HRM no era un modelo de lenguaje; estaba diseñado para resolver problemas lógicos, laberintos o acertijos visuales. Sin embargo, con la llegada de HRM-Text, la arquitectura ha evolucionado:

  • Escalado: Ha pasado de 27 millones a 1.000 millones de parámetros. Sigue siendo pequeño para los estándares actuales, pero mucho más capaz.
  • Autorregresión: Ahora es capaz de generar texto de forma secuencial, realimentando cada token producido para generar el siguiente.
  • Atención híbrida: Utiliza atención bidireccional para el «prompt» inicial y atención causal para el texto generado, incorporando un mecanismo de puerta para mantener la coherencia durante las múltiples iteraciones.

Eficiencia extrema y costes reducidos

Uno de los puntos más impactantes de HRM-Text es su entrenamiento. Se ha entrenado con 40.000 millones de tokens en solo 2 días, utilizando 16 GPUs y con un coste aproximado de 1.500 dólares. Comparado con las fortunas que cuesta entrenar modelos comerciales, esto es un cambio de juego total para la democratización de la IA.

Luces y sombras: Razonamiento vs. Conocimiento

No todo es perfecto. Al tener tan pocos parámetros, HRM-Text tiene limitaciones claras:

  • Memoria limitada: Menos pesos significan menos capacidad para almacenar datos y conocimientos generales.
  • Especialización: Es increíblemente bueno en matemáticas y razonamiento lógico, pero flaquea en tareas que requieren cultura general o matices complejos del lenguaje.
  • Contexto: Su ventana de contexto es todavía pequeña (unos 4.000 tokens) y la atención crece de forma cuadrática, lo que dificulta procesar textos larguísimos.

Conclusión: ¿El futuro de los LLM?

HRM-Text nos demuestra que hay otros caminos más allá de simplemente añadir más capas y más parámetros. La idea de introducir bucles internos de razonamiento es fascinante y no me extrañaría ver cómo los grandes modelos empiezan a adoptar técnicas similares en el futuro cercano.

SenseNova U1. Un modelo multimodal (texto e imagen) con multitud de cosas interesantes

La familia de modelos SenseNova U1 ha llegado con una arquitectura cargada de novedades y soluciones interesantes. Se tratan de modelos que versátiles capaces de entender texto e imágenes cómo entrada, mientras que

¿Qué hace a SenseNova U1 tan especial? Aquí te resumimos sus pilares fundamentales:

Para más detalles puedes ver este vídeo

Adiós a los Encoders Tradicionales: Procesamiento a Nivel de Píxel

A diferencia de la mayoría de los modelos que convierten imágenes en parches complejos dentro de un «espacio latente», SenseNova U1 utiliza un sistema de codificación ultraligera. Mediante redes convolucionales de dos capas que procesa la imagen en bloques de pixels. Esto permite conservar los detalles finos de la imagen que otros modelos suelen perder, logrando una fidelidad visual impresionante.

«Mixture of Transformers»: Lo mejor de dos mundos

El corazón de SenseNova U1 es una mezcla de transformers. El modelo es, a la vez, autorregresivo y de difusión.

Ambos comparten el mismo contexto y mecanismo de atención, pero se bifurcan en diferentes flujos según el tipo de tokens que tenga que generar:

  • Autorregresivo: El flujo llamado «Understanding» (comprensión) para entender el texto y las imágenes además de generar texto.
  • Difusión: El flujo llamado «Generation» basado en flow matching se emplea para para generar imágenes.

Atención Híbrida: Causal y Bidireccional

Comparte el mecanismo de atención entre transformers, lo cual le obliga a combinar atención causal con atención bidireccional.

Para el texto, aplica una atención causal (donde cada token solo influye en la atención de los que viene detrás). Para las imágenes, cambia a una atención bidireccional, permitiendo que cada token interactúe con todos los demás de la imagen independientemente de su orden.

Eficiencia con Mixture of Experts (MoE)

Aunque el sistema completo cuenta con unos 17.000 millones de parámetros, su variante MoE es increíblemente ágil, funcionando con solo 3.000 millones de parámetros activos. Esto lo hace potente pero manejable, compitiendo en capacidades con modelos mucho más pesados.

Razonamiento Visual y Modelado del Mundo

Más allá de generar imágenes y textos, SenseNova U1 demuestra capacidades de razonamiento espectaculares. Es capaz de editar imágenes entendiendo conceptos abstractos o temporales. Por ejemplo, si le pides que dibuje qué pasará con un vaso de té después de una hora, el modelo es capaz de oscurecer el agua entendiendo el proceso de infusión. Esta capacidad lo posiciona no solo como un generador, sino como un posible «modelo del mundo» con potencial en robótica (VLA).