Crear Seeders con datos realistas usando la IA en Laravel

  • Publicado el 07 abril, 2025
  • Palabras: 320

Sí, también podemos usar la IA para añadir datos a nuestras tablas y es más sencillo de lo que crees.

Crear Seeders con datos realistas usando la IA en Laravel

En el artículo anterior vimos como conectarnos a diferentes proveedores de IA con una paquete de Laravel llamado Prism.

 

Ahora veamos como aplicar lo aprendido, para añadir datos realistas a nuestras tablas mediante seeders necesitamos datos estructurados. Por ejemplo, podríamos necesitar generar una tabla de cursos. Cada curso debe tener un título, un tema, un profesor y una duración en horas. Podemos describir esa estructura usando los esquemas de Prism.

 

$courseSchema = new ObjectSchema(
    name: 'course',
    description: 'Un curso de tecnología web',
    requiredFields: ['title', 'topic', 'teacher', 'duration'],
    properties: [
        new StringSchema('title', 'Título del curso'),
        new StringSchema('topic', 'Tema del curso'),
        new StringSchema('teacher', 'Nombre del profesor del curso'),
        new NumberSchema('duration', 'Duración del curso en horas'),
    ],
);

 

Podríamos usar este esquema para solicitar al proveedor de IA que cree nuestros cursos uno por uno. Sin embargo, eso implicaría muchas solicitudes individuales consecutivas. Para mayor velocidad y consistencia de los datos, sería mejor solicitar una lista de cursos. Para ello, podemos definir un esquema usando ArraySchema de Prism, que acepta un parámetro "items" que debe seguir un esquema específico. En nuestro caso, un esquema de curso.

 

$courseListSchema = new ArraySchema(
    name: 'cursos',
    description: 'Una lista de cursos de tecnología web',
    items: $courseSchema
);

 

¡Ya estamos listos para solicitar la IA! En lugar de usar Prism::text, usaremos Prism::structured para obtener datos estructurados. Pasaremos el esquema final (que siempre debe ser un objeto) usando withSchema. Finalmente, proporcionamos la solicitud y generamos.

 

$response = Prism::structured()
    ->using(Provider::OpenAI, 'gpt-4o')
    ->withSchema(new ObjectSchema(
        name: 'carrera',
        description: 'La trayectoria profesional de un desarrollador de tecnología web',
        properties: [$courseListSchema]
    ))
    ->withPrompt('Generar 10 cursos de tecnología web')
    ->generate();

 

La variable $response tendrá una propiedad estructurada que contiene el array de cursos. Podemos almacenarla en un archivo JSON para usarla en nuestros seeders:

 

$path = database_path('fixtures/courses.json');
File::put($path, json_encode($response->structured));

 

El archivo JSON se verá así:

 

{
  "cursos": [
    {
      "title": "Introducción a HTML y CSS",
      "topic": "Fundamentos del desarrollo web",
      "teacher": "Jane Doe",
      "duration": 15
    },
    {
      "title": "Fundamentos de JavaScript",
      "topic": "Programación",
      "teacher": "John Smith",
      "duration": 20
    },

 

Para usar esta generación de datos en nuestro seeder, podemos encapsular todos los fragmentos anteriores en un método generate. Luego, nuestro método run puede seguir esta lógica:

 

  • Si el archivo courses.json no existe, llama al método generate.
  • Lea el contenido del archivo.
  • Inserte los registros en la tabla courses.

 

public function run($users): void
{
    $path = database_path('fixtures/courses.json');
 
    if (File::missing($path)) {
        $this->generate();
    }
 
    $data = json_decode(File::get($path), true);
    Course::insert($data['courses']);
}

 

Para ver el código final, consulta código en Github. Puedes llamarlo desde el seeder principal o ejecutarlo por sí solo:

 

php artisan db:seed --class=CourseSeeder

 

¡Y listo! La tabla de cursos ahora contendrá datos realistas: en lugar de "Lorem Ipsum" y "Dolor Sit Amet", tus cursos tendrán títulos como "Creación de sitios web adaptables" e "Introducción a React". Esto hace que los datos sean mucho más relevantes para probar o mostrar la aplicación a tus clientes.

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Artículos relacionados

Seeders inversos: generar seeders a partir de datos de tablas existentes
120

Seeders inversos: generar seeders a partir de datos de tablas existentes

Cómo integrar modelos LLM en tu aplicación Laravel con Prism
92

Cómo integrar modelos LLM en tu aplicación Laravel con Prism

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión