First Commit
This commit is contained in:
Executable
+1
@@ -0,0 +1 @@
|
||||
*.sqlite*
|
||||
Executable
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* @extends Factory<User>
|
||||
*/
|
||||
class UserFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The current password being used by the factory.
|
||||
*/
|
||||
protected static ?string $password;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
'name' => fake()->name(),
|
||||
'email' => fake()->unique()->safeEmail(),
|
||||
'email_verified_at' => now(),
|
||||
'password' => static::$password ??= Hash::make('password'),
|
||||
'remember_token' => Str::random(10),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate that the model's email address should be unverified.
|
||||
*/
|
||||
public function unverified(): static
|
||||
{
|
||||
return $this->state(fn (array $attributes) => [
|
||||
'email_verified_at' => null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password');
|
||||
$table->rememberToken();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('password_reset_tokens', function (Blueprint $table) {
|
||||
$table->string('email')->primary();
|
||||
$table->string('token');
|
||||
$table->timestamp('created_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('sessions', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->foreignId('user_id')->nullable()->index();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->longText('payload');
|
||||
$table->integer('last_activity')->index();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('users');
|
||||
Schema::dropIfExists('password_reset_tokens');
|
||||
Schema::dropIfExists('sessions');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('cache', function (Blueprint $table) {
|
||||
$table->string('key')->primary();
|
||||
$table->mediumText('value');
|
||||
$table->bigInteger('expiration')->index();
|
||||
});
|
||||
|
||||
Schema::create('cache_locks', function (Blueprint $table) {
|
||||
$table->string('key')->primary();
|
||||
$table->string('owner');
|
||||
$table->bigInteger('expiration')->index();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('cache');
|
||||
Schema::dropIfExists('cache_locks');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedSmallInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
});
|
||||
|
||||
Schema::create('job_batches', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->string('name');
|
||||
$table->integer('total_jobs');
|
||||
$table->integer('pending_jobs');
|
||||
$table->integer('failed_jobs');
|
||||
$table->longText('failed_job_ids');
|
||||
$table->mediumText('options')->nullable();
|
||||
$table->integer('cancelled_at')->nullable();
|
||||
$table->integer('created_at');
|
||||
$table->integer('finished_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('failed_jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uuid')->unique();
|
||||
$table->string('connection');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
|
||||
$table->index(['connection', 'queue', 'failed_at']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('jobs');
|
||||
Schema::dropIfExists('job_batches');
|
||||
Schema::dropIfExists('failed_jobs');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->enum('role', ['superadmin', 'user', 'pending'])->default('pending')->after('password');
|
||||
$table->boolean('is_approved')->default(false)->after('role');
|
||||
$table->index('role');
|
||||
$table->index('is_approved');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropIndex(['role']);
|
||||
$table->dropIndex(['is_approved']);
|
||||
$table->dropColumn(['role', 'is_approved']);
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('ai_providers', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('slug')->unique();
|
||||
$table->text('description')->nullable();
|
||||
$table->string('api_key')->nullable();
|
||||
$table->string('base_url');
|
||||
$table->boolean('is_active')->default(true);
|
||||
$table->json('config')->nullable();
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('ai_providers');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('ai_models', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('provider_id')->index();
|
||||
$table->string('name');
|
||||
$table->string('slug');
|
||||
$table->integer('max_tokens')->nullable();
|
||||
$table->boolean('temperature_support')->default(true);
|
||||
$table->boolean('is_active')->default(true);
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->unique(['provider_id', 'slug']);
|
||||
$table->index(['provider_id', 'is_active']);
|
||||
|
||||
$table->foreign('provider_id')->references('id')->on('ai_providers')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('ai_models', function (Blueprint $table) {
|
||||
$table->dropForeign(['provider_id']);
|
||||
});
|
||||
|
||||
Schema::dropIfExists('ai_models');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('prompt_projects', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('user_id')->nullable()->index();
|
||||
$table->string('title');
|
||||
$table->text('objective')->nullable();
|
||||
$table->text('context')->nullable();
|
||||
$table->text('persona')->nullable();
|
||||
$table->text('tone')->nullable();
|
||||
$table->text('constraints')->nullable();
|
||||
$table->text('output_format')->nullable();
|
||||
$table->json('examples')->nullable();
|
||||
$table->json('variables')->nullable();
|
||||
$table->decimal('temperature', 3, 2)->nullable();
|
||||
$table->integer('max_tokens')->nullable();
|
||||
$table->unsignedBigInteger('provider_id')->nullable()->index();
|
||||
$table->unsignedBigInteger('model_id')->nullable()->index();
|
||||
$table->text('generated_prompt')->nullable();
|
||||
$table->string('status')->nullable();
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index(['user_id', 'created_at']);
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('provider_id')->references('id')->on('ai_providers')->onDelete('set null');
|
||||
$table->foreign('model_id')->references('id')->on('ai_models')->onDelete('set null');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('prompt_projects', function (Blueprint $table) {
|
||||
$table->dropForeign(['model_id']);
|
||||
$table->dropForeign(['provider_id']);
|
||||
$table->dropForeign(['user_id']);
|
||||
});
|
||||
|
||||
Schema::dropIfExists('prompt_projects');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('prompt_generations', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('project_id')->index();
|
||||
$table->unsignedBigInteger('user_id')->index();
|
||||
$table->unsignedBigInteger('provider_id')->index();
|
||||
$table->unsignedBigInteger('model_id')->index();
|
||||
$table->text('generated_prompt');
|
||||
$table->json('input_data')->nullable();
|
||||
$table->json('output_data')->nullable();
|
||||
$table->integer('tokens_used')->nullable();
|
||||
$table->decimal('generation_time', 8, 3)->nullable();
|
||||
$table->string('status')->nullable();
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index(['project_id', 'created_at']);
|
||||
$table->index(['user_id', 'created_at']);
|
||||
|
||||
$table->foreign('project_id')->references('id')->on('prompt_projects')->onDelete('cascade');
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('provider_id')->references('id')->on('ai_providers')->onDelete('cascade');
|
||||
$table->foreign('model_id')->references('id')->on('ai_models')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('prompt_generations', function (Blueprint $table) {
|
||||
$table->dropForeign(['model_id']);
|
||||
$table->dropForeign(['provider_id']);
|
||||
$table->dropForeign(['user_id']);
|
||||
$table->dropForeign(['project_id']);
|
||||
});
|
||||
|
||||
Schema::dropIfExists('prompt_generations');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('prompt_templates', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->text('description')->nullable();
|
||||
$table->string('category')->nullable();
|
||||
$table->json('template_data');
|
||||
$table->boolean('is_public')->default(false);
|
||||
$table->foreignId('user_id')->nullable()->constrained()->nullOnDelete()->index();
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index(['user_id', 'is_public']);
|
||||
$table->index(['category', 'is_public']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('prompt_templates');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('cookie_consents', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('user_id')->nullable()->constrained()->nullOnDelete();
|
||||
$table->string('session_id')->nullable()->index();
|
||||
$table->string('ip_address')->nullable();
|
||||
$table->string('user_agent')->nullable();
|
||||
$table->json('consents')->nullable();
|
||||
$table->timestamp('accepted_at')->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->index(['user_id', 'created_at']);
|
||||
});
|
||||
|
||||
Schema::create('legal_documents', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('type')->unique();
|
||||
$table->string('title');
|
||||
$table->text('content');
|
||||
$table->string('version');
|
||||
$table->timestamp('published_at')->nullable();
|
||||
$table->foreignId('published_by')->nullable()->constrained('users')->nullOnDelete();
|
||||
$table->timestamps();
|
||||
|
||||
$table->index(['type', 'version']);
|
||||
});
|
||||
|
||||
Schema::create('user_document_acceptances', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
|
||||
$table->foreignId('legal_document_id')->constrained()->cascadeOnDelete();
|
||||
$table->string('document_version');
|
||||
$table->string('ip_address')->nullable();
|
||||
$table->string('user_agent')->nullable();
|
||||
$table->timestamp('accepted_at');
|
||||
$table->timestamps();
|
||||
|
||||
$table->unique(['user_id', 'legal_document_id']);
|
||||
$table->index(['user_id', 'accepted_at']);
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('user_document_acceptances');
|
||||
Schema::dropIfExists('legal_documents');
|
||||
Schema::dropIfExists('cookie_consents');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('tutorial_lessons', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('title');
|
||||
$table->text('content');
|
||||
$table->text('example_bad')->nullable();
|
||||
$table->text('example_good')->nullable();
|
||||
$table->integer('order')->default(0);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('tutorial_lessons');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('tutorial_questions', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('question');
|
||||
$table->json('options');
|
||||
$table->string('correct_answer');
|
||||
$table->text('explanation')->nullable();
|
||||
$table->integer('order')->default(0);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('tutorial_questions');
|
||||
}
|
||||
};
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('tutorial_user_progress', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
|
||||
$table->json('completed_lessons')->nullable();
|
||||
$table->json('quiz_answers')->nullable();
|
||||
$table->integer('quiz_score')->nullable();
|
||||
$table->boolean('quiz_passed')->default(false);
|
||||
$table->timestamp('quiz_completed_at')->nullable();
|
||||
$table->timestamp('certificate_generated_at')->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->unique('user_id');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('tutorial_user_progress');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->string('avatar')->nullable()->after('email');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn('avatar');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('prompt_projects', function (Blueprint $table) {
|
||||
$table->string('company_name')->nullable()->after('title');
|
||||
$table->text('company_address')->nullable()->after('company_name');
|
||||
$table->string('company_whatsapp')->nullable()->after('company_address');
|
||||
$table->string('company_website')->nullable()->after('company_whatsapp');
|
||||
$table->text('company_social_media')->nullable()->after('company_website');
|
||||
$table->text('company_business_activities')->nullable()->after('company_social_media');
|
||||
$table->text('company_services_products')->nullable()->after('company_business_activities');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('prompt_projects', function (Blueprint $table) {
|
||||
$table->dropColumn([
|
||||
'company_name',
|
||||
'company_address',
|
||||
'company_whatsapp',
|
||||
'company_website',
|
||||
'company_social_media',
|
||||
'company_business_activities',
|
||||
'company_services_products',
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
Executable
+107
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\AiModel;
|
||||
use App\Models\AiProvider;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class AiProviderSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application AI providers.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$openrouter = AiProvider::withTrashed()->where('slug', 'openrouter')->first();
|
||||
if (!$openrouter) {
|
||||
$openrouter = AiProvider::create([
|
||||
'name' => 'OpenRouter',
|
||||
'slug' => 'openrouter',
|
||||
'description' => 'Provedor OpenRouter com múltiplos modelos de IA',
|
||||
'base_url' => env('OPENROUTER_BASE_URL', 'https://openrouter.ai/api/v1'),
|
||||
'api_key' => env('OPENROUTER_API_KEY', ''),
|
||||
'is_active' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
$stepfun = AiProvider::withTrashed()->where('slug', 'stepfun')->first();
|
||||
if (!$stepfun) {
|
||||
$stepfun = AiProvider::create([
|
||||
'name' => 'StepFun',
|
||||
'slug' => 'stepfun',
|
||||
'description' => 'Provedor StepFun com modelos avançados',
|
||||
'base_url' => env('STEPFUN_BASE_URL', 'https://api.stepfun.ai/v1'),
|
||||
'api_key' => env('STEPFUN_API_KEY', ''),
|
||||
'is_active' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
$llamacpp = AiProvider::withTrashed()->where('slug', 'llamacpp')->first();
|
||||
if (!$llamacpp) {
|
||||
$llamacpp = AiProvider::create([
|
||||
'name' => 'Llama.cpp Local',
|
||||
'slug' => 'llamacpp',
|
||||
'description' => 'Servidor local Llama.cpp',
|
||||
'base_url' => env('LLAMACPP_BASE_URL', 'http://localhost:8080'),
|
||||
'api_key' => null,
|
||||
'is_active' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
$this->seedModels($openrouter, 'openrouter');
|
||||
$this->seedModels($stepfun, 'stepfun');
|
||||
$this->seedModels($llamacpp, 'llamacpp');
|
||||
}
|
||||
|
||||
/**
|
||||
* Seed models for a given provider.
|
||||
*/
|
||||
private function seedModels(AiProvider $provider, string $providerSlug): void
|
||||
{
|
||||
$models = [
|
||||
'openrouter' => [
|
||||
['name' => 'inclusionai/ling-2.6-flash', 'slug' => 'inclusionai/ling-2.6-flash', 'max_tokens' => 4096],
|
||||
['name' => 'inclusionai/ling-3.0-tiny:free', 'slug' => 'inclusionai/ling-3.0-tiny:free', 'max_tokens' => 4096],
|
||||
['name' => 'poolside/laguna-s-2.1:free', 'slug' => 'poolside/laguna-s-2.1:free', 'max_tokens' => 4096],
|
||||
['name' => 'poolside/laguna-xs-2.1:free', 'slug' => 'poolside/laguna-xs-2.1:free', 'max_tokens' => 4096],
|
||||
['name' => 'cohere/north-mini-code:free', 'slug' => 'cohere/north-mini-code:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3.5-content-safety:free', 'slug' => 'nvidia/nemotron-3.5-content-safety:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-ultra-550b-a55b:free', 'slug' => 'nvidia/nemotron-3-ultra-550b-a55b:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', 'slug' => 'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', 'max_tokens' => 4096],
|
||||
['name' => 'google/gemma-4-26b-a4b-it:free', 'slug' => 'google/gemma-4-26b-a4b-it:free', 'max_tokens' => 4096],
|
||||
['name' => 'google/gemma-4-31b-it:free', 'slug' => 'google/gemma-4-31b-it:free', 'max_tokens' => 4096],
|
||||
['name' => 'google/lyria-3-pro-preview', 'slug' => 'google/lyria-3-pro-preview', 'max_tokens' => 4096],
|
||||
['name' => 'google/lyria-3-clip-preview', 'slug' => 'google/lyria-3-clip-preview', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-super-120b-a12b:free', 'slug' => 'nvidia/nemotron-3-super-120b-a12b:free', 'max_tokens' => 4096],
|
||||
['name' => 'openrouter/free', 'slug' => 'openrouter/free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-nano-30b-a3b:free', 'slug' => 'nvidia/nemotron-3-nano-30b-a3b:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-nano-12b-v2-vl:free', 'slug' => 'nvidia/nemotron-nano-12b-v2-vl:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-nano-9b-v2:free', 'slug' => 'nvidia/nemotron-nano-9b-v2:free', 'max_tokens' => 4096],
|
||||
['name' => 'openai/gpt-oss-20b:free', 'slug' => 'openai/gpt-oss-20b:free', 'max_tokens' => 4096],
|
||||
['name' => 'deepseek/deepseek-v4-flash', 'slug' => 'deepseek/deepseek-v4-flash', 'max_tokens' => 8192],
|
||||
],
|
||||
'stepfun' => [
|
||||
['name' => 'step-3.5-flash', 'slug' => 'step-3.5-flash', 'max_tokens' => 8192],
|
||||
['name' => 'step-3.7-flash', 'slug' => 'step-3.7-flash', 'max_tokens' => 8192],
|
||||
],
|
||||
'llamacpp' => [
|
||||
['name' => 'Qwen3-8B-Q4_K_M.gguf', 'slug' => 'Qwen3-8B-Q4_K_M.gguf', 'max_tokens' => 4096],
|
||||
['name' => 'Llama-3.2-3B-Instruct-uncensored-Q4_K_M.gguf', 'slug' => 'Llama-3.2-3B-Instruct-uncensored-Q4_K_M.gguf', 'max_tokens' => 2048],
|
||||
['name' => 'ibm-granite_granite-4.1-3b-Q4_K_M.gguf', 'slug' => 'ibm-granite_granite-4.1-3b-Q4_K_M.gguf', 'max_tokens' => 2048],
|
||||
['name' => 'qwen2.5-coder-3b-instruct-q4_k_m.gguf', 'slug' => 'qwen2.5-coder-3b-instruct-q4_k_m.gguf', 'max_tokens' => 2048],
|
||||
['name' => 'LiquidAI_LFM2.5-1.2B-Instruct-Q4_0.gguf', 'slug' => 'LiquidAI_LFM2.5-1.2B-Instruct-Q4_0.gguf', 'max_tokens' => 2048],
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($models[$providerSlug] as $modelData) {
|
||||
AiModel::firstOrCreate(
|
||||
[
|
||||
'provider_id' => $provider->id,
|
||||
'slug' => $modelData['slug'],
|
||||
],
|
||||
$modelData
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$this->call([
|
||||
UserSeeder::class,
|
||||
AiProviderSeeder::class,
|
||||
PromptTemplateSeeder::class,
|
||||
TutorialSeeder::class,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Executable
+107
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\LegalDocument;
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class LegalDocumentSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$superadmin = User::where('role', 'superadmin')->first();
|
||||
|
||||
$termsContent = <<<EOT
|
||||
TERMOS DE USO
|
||||
|
||||
1. Aceitação dos Termos
|
||||
Ao acessar e utilizar o sistema GPrompt, você concorda em cumprir estes Termos de Uso.
|
||||
|
||||
2. Descrição do Serviço
|
||||
O GPrompt é um sistema de geração de prompts para inteligência artificial.
|
||||
|
||||
3. Conta de Usuário
|
||||
Você é responsável por manter a confidencialidade de sua conta e senha.
|
||||
|
||||
4. Conduta do Usuário
|
||||
Você concorda em utilizar o sistema de acordo com as leis aplicáveis.
|
||||
|
||||
5. Propriedade Intelectual
|
||||
Todo o conteúdo e funcionalidades são de propriedade da Syspanel.
|
||||
|
||||
6. Limitação de Responsabilidade
|
||||
O sistema é fornecido "como está", sem garantias.
|
||||
|
||||
7. Modificações
|
||||
Estes termos podem ser alterados a qualquer momento.
|
||||
|
||||
8. Lei Aplicável
|
||||
Estes termos são regidos pelas leis brasileiras.
|
||||
EOT;
|
||||
|
||||
$privacyContent = <<<EOT
|
||||
POLÍTICA DE PRIVACIDADE
|
||||
|
||||
1. Informações Gerais
|
||||
Esta Política de Privacidade descreve como o GPrompt coleta e utiliza dados pessoais.
|
||||
|
||||
2. Dados Coletados
|
||||
- Nome e e-mail
|
||||
- Senha (armazenada de forma segura)
|
||||
- Dados de uso do sistema
|
||||
- Endereço IP
|
||||
|
||||
3. Finalidade da Coleta
|
||||
- Autenticação e acesso ao sistema
|
||||
- Geração de prompts com IA
|
||||
- Comunicações sobre o serviço
|
||||
- Segurança e prevenção de fraudes
|
||||
|
||||
4. Base Legal
|
||||
- Consentimento do usuário
|
||||
- Execução de contrato
|
||||
- Cumprimento de obrigação legal
|
||||
- Legítimo interesse
|
||||
|
||||
5. Compartilhamento
|
||||
Seus dados não são compartilhados com terceiros, exceto quando exigido por lei.
|
||||
|
||||
6. Armazenamento
|
||||
Os dados são armazenados em servidores seguros durante o tempo necessário.
|
||||
|
||||
7. Direitos do Titular
|
||||
- Acesso aos dados
|
||||
- Correção de informações
|
||||
- Exclusão da conta
|
||||
- Portabilidade
|
||||
- Revogação do consentimento
|
||||
|
||||
8. Contato
|
||||
Para exercer seus direitos, entre em contato: contato@syspanel.com.br
|
||||
EOT;
|
||||
|
||||
LegalDocument::create([
|
||||
'type' => 'terms-of-service',
|
||||
'title' => 'Termos de Uso',
|
||||
'content' => $termsContent,
|
||||
'version' => '1.0',
|
||||
'published_by' => $superadmin?->id,
|
||||
'published_at' => now(),
|
||||
]);
|
||||
|
||||
LegalDocument::create([
|
||||
'type' => 'privacy-policy',
|
||||
'title' => 'Política de Privacidade',
|
||||
'content' => $privacyContent,
|
||||
'version' => '1.0',
|
||||
'published_by' => $superadmin?->id,
|
||||
'published_at' => now(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,711 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PromptTemplateSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$templates = [
|
||||
[
|
||||
'name' => 'Landing Page Corporativa',
|
||||
'description' => 'Landing page moderna e profissional para empresa de tecnologia B2B.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Corporativa',
|
||||
'objective' => 'Gerar uma landing page moderna e profissional para uma empresa de tecnologia B2B, focada em soluções empresariais, com design clean,CTA forte e conteúdo persuasivo.',
|
||||
'context' => 'A empresa atende pequenas e médias empresas com soluções de tecnologia. A landing page deve transmitir confiança, inovação e credibilidade, com design moderno e responsivo.',
|
||||
'persona' => 'Você é um especialista em UI/UX e Frontend com foco em conversão. Domina HTML5, CSS3, JavaScript, Bootstrap 5 e práticas de SEO.',
|
||||
'tone' => 'Profissional, tecnológico, confiável e moderno. Linguagem acessível mas sofisticada.',
|
||||
'constraints' => "- HTML5 semântico e acessível.\n- CSS responsivo mobile-first.\n- Máximo de 800 linhas.\n- SEO otimizado.\n- Sem dependências externas além de Bootstrap 5 e Bootstrap Icons.\n- Animações suaves com CSS.",
|
||||
'output_format' => 'Código HTML completo em arquivo único com CSS embutido e JavaScript mínimo para interações.',
|
||||
'examples' => "Hero section com headline, subtítulo, CTA.\nCards de serviços.\nDepoimentos.\nFormulário de contato.\nFooter completo.",
|
||||
'variables' => 'nome_empresa, slogan, telefone, email, endereco, linkedin_url',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page SaaS',
|
||||
'description' => 'Landing page de alta conversão para produto SaaS.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page SaaS',
|
||||
'objective' => 'Gerar uma landing page de alta conversão para um produto SaaS, com foco em funcionalidades, planos de preço e captura de leads.',
|
||||
'context' => 'SaaS B2B ou B2C com modelo de assinatura. Precisa convencer visitantes a experimentar ou assinar o produto.',
|
||||
'persona' => 'Especialista em Growth-Driven Design e CRO (Conversion Rate Optimization) para SaaS.',
|
||||
'tone' => 'Moderno, direto, orientado a resultados. Linguagem clara e orientada a benefícios.',
|
||||
'constraints' => "- Foco em conversão e captura de leads.\n- Design moderno com animações.\n- Responsivo.\n- SEO otimizado.\n- Máximo de 900 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Features, Pricing, FAQ, CTA final, Footer.',
|
||||
'examples' => 'Hero com trial grátis, grid de funcionalidades, tabela de preços com destaque no plano recomendado.',
|
||||
'variables' => 'nome_produto, slogan, trial_dias, preco_inicial, url_signup',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Produto Digital',
|
||||
'description' => 'Landing page para lançamento ou venda de produto digital.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Produto Digital',
|
||||
'objective' => 'Gerar uma landing page para lançamento ou venda de um produto digital (curso, e-book, template, plugin).',
|
||||
'context' => 'Produto digital voltado para criadores de conteúdo, desenvolvedores ou profissionais de marketing.',
|
||||
'persona' => 'Especialista em lançamentos digitais e páginas de alta conversão.',
|
||||
'tone' => 'Persuasivo, entusiasta e confiável.',
|
||||
'constraints' => "- Foco em conversão.\n- Design moderno.\n- Responsivo.\n- Máximo de 800 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Problema/Solução, Benefícios, Prova social, Oferta, FAQ, CTA.',
|
||||
'examples' => 'Hero com vídeo ou imagem, seção de benefícios com ícones, depoimentos, contador de oferta.',
|
||||
'variables' => 'nome_produto, preco, desconto, url_checkout',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Evento',
|
||||
'description' => 'Landing page para evento online ou presencial.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Evento',
|
||||
'objective' => 'Gerar uma landing page para evento online ou presencial, com informações, programação e inscrição.',
|
||||
'context' => 'Evento corporativo, conferência, workshop ou webinar. Público de 100 a 5000 participantes.',
|
||||
'persona' => 'Especialista em eventos e experiência do usuário para inscrições.',
|
||||
'tone' => 'Animado, profissional, informativo.',
|
||||
'constraints' => "- Design impactante.\n- Informações claras.\n- Formulário de inscrição.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Sobre, Programação, Palestrantes, Inscrição, Local/Online, Footer.',
|
||||
'examples' => 'Hero com contador regressivo, cards de palestrantes, timeline do evento, mapa ou link de transmissão.',
|
||||
'variables' => 'nome_evento, data, local, url_inscricao, valor',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page E-book / Lead Magnet',
|
||||
'description' => 'Landing page para captura de leads com oferta de e-book.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page E-book / Lead Magnet',
|
||||
'objective' => 'Gerar uma landing page para captura de leads com oferta de e-book, guia ou material rico.',
|
||||
'context' => 'Marketing de conteúdo para nutrição de leads. O material é oferecido em troca de e-mail.',
|
||||
'persona' => 'Especialista em marketing de conteúdo e inbound marketing.',
|
||||
'tone' => 'Educativo, confiável, persuasivo.',
|
||||
'constraints' => "- Foco em captura de leads.\n- Design clean.\n- Responsivo.\n- Máximo de 600 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, O que você vai aprender, Sobre o autor, Formulário de captura, Footer.',
|
||||
'examples' => 'Hero com capa do e-book, bullets de benefícios, formulário simples (nome + email), CTA destacado.',
|
||||
'variables' => 'titulo_ebook, autor, numero_paginas, url_download',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Curso Online',
|
||||
'description' => 'Landing page para venda de curso online.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Curso Online',
|
||||
'objective' => 'Gerar uma landing page para venda de curso online, com módulos, depoimentos e garantia.',
|
||||
'context' => 'Curso online de desenvolvimento web, marketing digital, design ou área tech. Público iniciante a intermediário.',
|
||||
'persona' => 'Especialista em educação a distância e páginas de venda de cursos.',
|
||||
'tone' => 'Motivador, educativo, confiável.',
|
||||
'constraints' => "- Foco em conversão.\n- Design moderno.\n- Responsivo.\n- Máximo de 900 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Para quem é, Conteúdo programático, Instrutor, Depoimentos, Garantia, Preço, FAQ, CTA.',
|
||||
'examples' => 'Hero com vídeo de apresentação, accordion de módulos, selo de garantia, depoimentos em vídeo.',
|
||||
'variables' => 'nome_curso, instrutor, carga_horaria, preco, url_matricula',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page App Mobile',
|
||||
'description' => 'Landing page para aplicativo mobile.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page App Mobile',
|
||||
'objective' => 'Gerar uma landing page para aplicativo mobile, com telas, funcionalidades e links para download.',
|
||||
'context' => 'App de produtividade, finanças, saúde ou social. Disponível para iOS e Android.',
|
||||
'persona' => 'Especialista em mobile apps e ASO (App Store Optimization).',
|
||||
'tone' => 'Moderno, dinâmico, fresco.',
|
||||
'constraints' => "- Design moderno com mockups.\n- Responsivo.\n- Links para App Store e Google Play.\n- Máximo de 800 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Funcionalidades, Telas, Reviews, Download, FAQ, Footer.',
|
||||
'examples' => 'Hero com phone mockup, grid de funcionalidades com ícones, badges de avaliação, botões de download.',
|
||||
'variables' => 'nome_app, slogan, url_ios, url_android, categoria',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Agência',
|
||||
'description' => 'Landing page para agência de marketing ou desenvolvimento.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Agência',
|
||||
'objective' => 'Gerar uma landing page para agência de marketing, design ou desenvolvimento, com portfólio e formulário de contato.',
|
||||
'context' => 'Agência digital que oferece serviços de branding, design, desenvolvimento e marketing. Atende startups e PMEs.',
|
||||
'persona' => 'Especialista em branding e experiência digital para agências.',
|
||||
'tone' => 'Criativo, profissional, ousado.',
|
||||
'constraints' => "- Design impactante.\n- Portfólio em destaque.\n- Responsivo.\n- Máximo de 900 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Serviços, Portfólio, Processo, Clientes, Depoimentos, Contato, Footer.',
|
||||
'examples' => 'Hero com vídeo background, grid de projetos, logos de clientes, formulário de orçamento.',
|
||||
'variables' => 'nome_agencia, especialidades, url_portfolio, telefone, email',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Restaurante',
|
||||
'description' => 'Landing page para restaurante com cardápio e reservas.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Restaurante',
|
||||
'objective' => 'Gerar uma landing page para restaurante, com cardápio, reservas e informações.',
|
||||
'context' => 'Restaurante de culinária contemporânea, com ambiente acolhedor e delivery.',
|
||||
'persona' => 'Especialista em design para gastronomia e experiência do usuário.',
|
||||
'tone' => 'Acolhedor, sofisticado, saboroso.',
|
||||
'constraints' => "- Design elegante.\n- Cardápio visual.\n- Sistema de reservas.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Sobre, Cardápio, Reservas, Depoimentos, Localização, Footer.',
|
||||
'examples' => 'Hero com imagem do ambiente, cards de pratos com fotos, mapa integrado, botão de reserva.',
|
||||
'variables' => 'nome_restaurante, cozinha, telefone, endereco, url_reserva',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Imobiliária',
|
||||
'description' => 'Landing page para imobiliária ou lançamento imobiliário.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Imobiliária',
|
||||
'objective' => 'Gerar uma landing page para imobiliária ou lançamento imobiliário, com imóveis em destaque e contato.',
|
||||
'context' => 'Imobiliária que vende e aluga imóveis residenciais e comerciais. Atua em grandes cidades.',
|
||||
'persona' => 'Especialista em imóveis e experiência do usuário para vendas.',
|
||||
'tone' => 'Sofisticado, confiável, aspiracional.',
|
||||
'constraints' => "- Design premium.\n- Galeria de imagens.\n- Filtros de busca.\n- Responsivo.\n- Máximo de 800 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Busca, Destaques, Sobre, Contato, Footer.',
|
||||
'examples' => 'Hero com slider de imóveis, cards com fotos e preços, mapa de localização, formulário de contato.',
|
||||
'variables' => 'nome_imobiliaria, cidade, telefone, email, url_portfolio',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Saúde / Bem-estar',
|
||||
'description' => 'Landing page para clínica, academia ou spa.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Saúde / Bem-estar',
|
||||
'objective' => 'Gerar uma landing page para clínica, academia, spa ou serviço de saúde, com agendamento e informações.',
|
||||
'context' => 'Clínica de fisioterapia, academia boutique ou spa urbano. Público preocupado com saúde e bem-estar.',
|
||||
'persona' => 'Especialista em saúde digital e experiência do usuário para clínicas.',
|
||||
'tone' => 'Acolhedor, profissional, saudável.',
|
||||
'constraints' => "- Design clean e acolhedor.\n- Sistema de agendamento.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Serviços, Profissionais, Depoimentos, Agendamento, Localização, Footer.',
|
||||
'examples' => 'Hero com imagem relaxante, cards de serviços, equipe com fotos, botão de agendamento WhatsApp.',
|
||||
'variables' => 'nome_clinica, servicos, telefone, endereco, url_agendamento',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Educação',
|
||||
'description' => 'Landing page para instituição de ensino ou curso.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Educação',
|
||||
'objective' => 'Gerar uma landing page para instituição de ensino, curso ou escola, com informações sobre cursos e matrículas.',
|
||||
'context' => 'Faculdade, curso técnico ou escola de idiomas. Público jovem e adultos em busca de qualificação.',
|
||||
'persona' => 'Especialista em educação e experiência do usuário para instituições de ensino.',
|
||||
'tone' => 'Institucional, inspirador, educativo.',
|
||||
'constraints' => "- Design institucional.\n- Informações claras.\n- Responsivo.\n- Máximo de 800 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Cursos, Diferenciais, Infraestrutura, Depoimentos, Matrícula, Footer.',
|
||||
'examples' => 'Hero com campus, cards de cursos, galeria de fotos, formulário de matrícula.',
|
||||
'variables' => 'nome_escola, cursos, telefone, email, url_matricula',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Site Institucional',
|
||||
'description' => 'Site institucional completo para empresa.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Site Institucional',
|
||||
'objective' => 'Gerar um site institucional completo para uma empresa, com múltiplas páginas (sobre, serviços, contato).',
|
||||
'context' => 'Empresa consolidada que precisa de presença digital profissional. Pode ser indústria, comércio ou serviços.',
|
||||
'persona' => 'Especialista em sites institucionais e identidade digital.',
|
||||
'tone' => 'Institucional, profissional, confiável.',
|
||||
'constraints' => "- HTML5 semântico.\n- Múltiplas seções.\n- SEO otimizado.\n- Responsivo.\n- Máximo de 1000 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Header, Hero, Sobre, Serviços, Cases, Equipe, Contato, Footer.',
|
||||
'examples' => 'Header fixo, hero com imagem institucional, grid de serviços, timeline da empresa, formulário de contato.',
|
||||
'variables' => 'nome_empresa, slogan, missao, telefone, email, endereco',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Portfolio Profissional',
|
||||
'description' => 'Portfolio profissional para desenvolvedor ou designer.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Portfolio Profissional',
|
||||
'objective' => 'Gerar um portfolio profissional para desenvolvedor, designer ou profissional liberal.',
|
||||
'context' => 'Profissional de tecnologia ou design que quer showcase de projetos e experiência.',
|
||||
'persona' => 'Especialista em portfolios e experiência do usuário para profissionais.',
|
||||
'tone' => 'Minimalista, moderno, profissional.',
|
||||
'constraints' => "- Design clean.\n- Foco nos projetos.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Sobre, Experiência, Projetos, Skills, Contato, Footer.',
|
||||
'examples' => 'Hero com foto, timeline de experiência, grid de projetos com screenshots, lista de skills.',
|
||||
'variables' => 'nome, profissao, email, linkedin, github, url_portfolio',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Portfolio Criativo',
|
||||
'description' => 'Portfolio criativo e visual para designers e artistas.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Portfolio Criativo',
|
||||
'objective' => 'Gerar um portfolio criativo e visual para designer, fotógrafo, artista ou criativo.',
|
||||
'context' => 'Profissional criativo que precisa de um site impactante e visualmente marcante.',
|
||||
'persona' => 'Especialista em design criativo e experiência visual imersiva.',
|
||||
'tone' => 'Criativo, ousado, artístico.',
|
||||
'constraints' => "- Design criativo e impactante.\n- Galeria de imagens.\n- Animações suaves.\n- Responsivo.\n- Máximo de 800 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Galeria, Sobre, Processo, Contato, Footer.',
|
||||
'examples' => 'Hero com animação, grid masonry de trabalhos, lightbox de imagens, formulário de contato minimalista.',
|
||||
'variables' => 'nome, profissao, estilo, url_portfolio, instagram',
|
||||
'temperature' => 0.9,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Blog Pessoal',
|
||||
'description' => 'Blog pessoal completo com layout de posts e newsletter.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Blog Pessoal',
|
||||
'objective' => 'Gerar um blog pessoal completo, com layout de posts, categorias e newsletter.',
|
||||
'context' => 'Blog de tecnologia, lifestyle ou produtividade. Conteúdo em português.',
|
||||
'persona' => 'Especialista em UX para blogs e conteúdo.',
|
||||
'tone' => 'Acessível, envolvente, informativo.',
|
||||
'constraints' => "- Design legível.\n- Layout de blog.\n- Responsivo.\n- Máximo de 900 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Header, Hero, Lista de posts, Sidebar, Newsletter, Footer.',
|
||||
'examples' => 'Lista de posts com thumbnails, sidebar com categorias, formulário de newsletter, paginação.',
|
||||
'variables' => 'nome_autor, categoria_principal, url_newsletter',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'E-commerce',
|
||||
'description' => 'Loja virtual completa com catálogo e checkout.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'E-commerce',
|
||||
'objective' => 'Gerar uma loja virtual completa, com catálogo de produtos, carrinho e checkout.',
|
||||
'context' => 'Loja de roupas, eletrônicos ou produtos artesanais. Catálogo com até 20 produtos.',
|
||||
'persona' => 'Especialista em e-commerce e experiência de compra online.',
|
||||
'tone' => 'Comercial, confiável, envolvente.',
|
||||
'constraints' => "- Design moderno.\n- Catálogo de produtos.\n- Carrinho funcional.\n- Responsivo.\n- Máximo de 1200 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Header, Hero, Catálogo, Carrinho, Checkout, Footer.',
|
||||
'examples' => 'Grid de produtos, filtros, carrinho lateral, formulário de checkout, badges de desconto.',
|
||||
'variables' => 'nome_loja, categoria, moeda, url_checkout',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Sistema SaaS',
|
||||
'description' => 'Interface de sistema SaaS com dashboard e autenticação.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Sistema SaaS',
|
||||
'objective' => 'Gerar a interface de um sistema SaaS com dashboard, autenticação e gestão de dados.',
|
||||
'context' => 'Sistema de gestão de projetos, CRM ou ferramenta de produtividade para equipes.',
|
||||
'persona' => 'Especialista em UX para aplicativos web e dashboards.',
|
||||
'tone' => 'Profissional, limpo, eficiente.',
|
||||
'constraints' => "- Interface limpa.\n- Dashboard com gráficos.\n- Responsivo.\n- Máximo de 1000 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Login, Dashboard, Sidebar, Tabelas, Forms, Perfil.',
|
||||
'examples' => 'Sidebar de navegação, cards de métricas, tabela de dados, gráficos com Chart.js.',
|
||||
'variables' => 'nome_sistema, modulo_principal, url_app',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Dashboard Admin',
|
||||
'description' => 'Dashboard administrativo com métricas e gráficos.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Dashboard Admin',
|
||||
'objective' => 'Gerar um dashboard administrativo com métricas, gráficos e gestão de conteúdo.',
|
||||
'context' => 'Painel de administração para gerenciar usuários, conteúdo e configurações.',
|
||||
'persona' => 'Especialista em painéis administrativos e data visualization.',
|
||||
'tone' => 'Profissional, limpo, informativo.',
|
||||
'constraints' => "- Design clean.\n- Gráficos interativos.\n- Tabelas responsivas.\n- Máximo de 900 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Sidebar, Header, Cards de métricas, Gráficos, Tabela, Footer.',
|
||||
'examples' => 'Cards de KPIs, gráfico de linha com Chart.js, tabela de usuários, filtros de data.',
|
||||
'variables' => 'nome_sistema, metricas, periodo',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Landing Page Delivery',
|
||||
'description' => 'Landing page para serviço de delivery de comida.',
|
||||
'category' => 'Sites & Landing Pages',
|
||||
'template_data' => [
|
||||
'title' => 'Landing Page Delivery',
|
||||
'objective' => 'Gerar uma landing page para serviço de delivery de comida, com cardápio digital e pedido online.',
|
||||
'context' => 'Restaurante, lanchonete ou pizzaria que oferece delivery. Integração com WhatsApp ou iFood.',
|
||||
'persona' => 'Especialista em delivery e experiência de pedido online.',
|
||||
'tone' => 'Descontraído, saboroso, rápido.',
|
||||
'constraints' => "- Cardápio visual.\n- Botão de pedido.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Cardápio, Destaques, Avaliações, Pedido, Footer.',
|
||||
'examples' => 'Hero com imagem de comida, cards de categorias, botão de pedido WhatsApp, avaliações.',
|
||||
'variables' => 'nome_restaurante, categoria, telefone, url_cardapio',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Laravel 13 + Blade + Tailwind',
|
||||
'description' => 'Aplicação web completa com Laravel 13, Blade e Tailwind.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Laravel 13 + Blade + Tailwind',
|
||||
'objective' => 'Gerar uma aplicação web completa usando Laravel 13 com Blade, Tailwind CSS, banco de dados MySQL e autenticação. Estrutura MVC, validações, relacionamentos Eloquent, seeders e factories.',
|
||||
'context' => 'Projeto fullstack PHP com Laravel 13, seguindo PSR-12, strict types, policies e validações robustas. Banco MySQL/MariaDB.',
|
||||
'persona' => 'Você é um arquiteto de software especializado em Laravel, com profundo conhecimento de PHP 8.3, Eloquent ORM, Filament, Livewire e boas práticas.',
|
||||
'tone' => 'Técnico, estruturado, didático.',
|
||||
'constraints' => "- PHP 8.3 com strict_types.\n- PSR-12 compliance.\n- Migrations, seeders e factories.\n- Validações com Form Requests.\n- Policies e Gates para autorização.\n- Máximo de 2500 linhas de código.",
|
||||
'output_format' => 'Código completo: migration, model, controller, request, view Blade, routes, seeder e factory.',
|
||||
'examples' => 'CRUD completo de Produtos com relacionamentos e upload de imagem.',
|
||||
'variables' => 'nome_modulo, entidade, nome_tabela',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Slim Framework 4 + API REST',
|
||||
'description' => 'API RESTful com Slim Framework 4 e PHP 8.3.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Slim Framework 4 + API REST',
|
||||
'objective' => 'Gerar uma API RESTful usando Slim Framework 4 com PHP 8.3, PSR-7, PSR-15, Eloquent ORM e autenticação JWT.',
|
||||
'context' => 'Projeto de API REST estruturada com Slim 4, usando containers DI, middlewares, validação e documentação OpenAPI.',
|
||||
'persona' => 'Você é um backend specialist especializado em PHP, APIs REST e arquitetura hexagonal.',
|
||||
'tone' => 'Técnico, limpo, escalável.',
|
||||
'constraints' => "- PHP 8.3 com strict_types.\n- Slim 4 com rotas agrupadas.\n- Middlewares de autenticação, CORS e rate limiting.\n- Eloquent ORM para banco de dados.\n- Documentação Swagger/OpenAPI.\n- Máximo de 2000 linhas.",
|
||||
'output_format' => 'Código completo: index.php, rotas, controllers, middlewares, modelos Eloquent, migrations.',
|
||||
'examples' => 'CRUD de usuários com autenticação JWT e rate limiting.',
|
||||
'variables' => 'nome_recurso, nome_modelo, campos_customizados',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Laravel 13 + API RESTful',
|
||||
'description' => 'API RESTful completa com Laravel 13 e Sanctum.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Laravel 13 + API RESTful',
|
||||
'objective' => 'Gerar uma API RESTful completa com Laravel 13, Sanctum, Eloquent, validações, resources e testes.',
|
||||
'context' => 'Projeto Laravel 13 focado em API com autenticação via token, versionamento de rotas, rate limiting e documentação com Scribe.',
|
||||
'persona' => 'Especialista em Laravel APIs com foco em performance, segurança e boas práticas.',
|
||||
'tone' => 'Técnico, robusto, seguro.',
|
||||
'constraints' => "- Laravel 13 + Sanctum.\n- API Resources para transformação de dados.\n- Form Requests para validação.\n- Testes Feature e Unit.\n- Máximo de 2500 linhas.",
|
||||
'output_format' => 'Migration, Model, Controller, API Resource, Request, Routes, Testes.',
|
||||
'examples' => 'CRUD de Produtos com imagens, paginação e filtros.',
|
||||
'variables' => 'nome_modulo, entidade, campos_filtros',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Slim Framework 4 + Twig',
|
||||
'description' => 'Aplicação web MVC com Slim 4 e Twig.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Slim Framework 4 + Twig',
|
||||
'objective' => 'Gerar uma aplicação web MVC com Slim Framework 4, Twig templates, sessões e autenticação.',
|
||||
'context' => 'Projeto Slim 4 com estrutura MVC, templates Twig, Flash messages e CSRF protection.',
|
||||
'persona' => 'Especialista em micro-frameworks PHP e arquitetura limpa.',
|
||||
'tone' => 'Didático, organizado, prático.',
|
||||
'constraints' => "- PHP 8.3.\n- Slim 4 com DI container.\n- Twig para views.\n- Middlewares de sessão e CSRF.\n- Máximo de 2000 linhas.",
|
||||
'output_format' => 'Arquivos: index.php, rotas, controllers, views Twig, middlewares, migrations.',
|
||||
'examples' => 'Blog simples com autenticação e CRUD de posts.',
|
||||
'variables' => 'nome_projeto, tema, modulo_principal',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Vue.js 3 + Vite SPA',
|
||||
'description' => 'SPA com Vue.js 3, Vite, Pinia e Vue Router.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Vue.js 3 + Vite SPA',
|
||||
'objective' => 'Gerar uma Single Page Application com Vue.js 3, Vite, Pinia, Vue Router e Axios.',
|
||||
'context' => 'Projeto frontend moderno com Vue 3 Composition API, TypeScript opcional, estado global com Pinia e requisições HTTP.',
|
||||
'persona' => 'Especialista em Vue.js e arquitetura frontend moderna.',
|
||||
'tone' => 'Moderno, componentizado, reutilizável.',
|
||||
'constraints' => "- Vue 3 com Composition API.\n- Vite como bundler.\n- Pinia para estado global.\n- Vue Router para navegação.\n- Axios para HTTP.\n- Máximo de 2500 linhas.",
|
||||
'output_format' => 'Estrutura completa: src/components, src/views, src/stores, src/router, src/services.',
|
||||
'examples' => 'Dashboard com sidebar, gráficos, tabela de dados e formulários.',
|
||||
'variables' => 'nome_app, tema_cores, modulo_principal',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'React + Vite SPA',
|
||||
'description' => 'SPA com React 18+, Vite e Redux Toolkit.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'React + Vite SPA',
|
||||
'objective' => 'Gerar uma Single Page Application com React 18+, Vite, Redux Toolkit, React Router e Axios.',
|
||||
'context' => 'Projeto React moderno com hooks, componentização, estado global e integração com APIs.',
|
||||
'persona' => 'Especialista em React e ecossistema JavaScript moderno.',
|
||||
'tone' => 'Moderno, performático, escalável.',
|
||||
'constraints' => "- React 18+ com hooks.\n- Vite.\n- Redux Toolkit para estado.\n- React Router v6.\n- Axios para HTTP.\n- Máximo de 2500 linhas.",
|
||||
'output_format' => 'Estrutura completa: src/components, src/pages, src/store, src/router, src/services.',
|
||||
'examples' => 'Dashboard com gráficos, tabela paginada e formulários.',
|
||||
'variables' => 'nome_app, tema_cores, modulo_principal',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Next.js 14 App Router',
|
||||
'description' => 'Aplicação Next.js 14+ com App Router e Server Components.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Next.js 14 App Router',
|
||||
'objective' => 'Gerar uma aplicação Next.js 14+ com App Router, Server Components, Tailwind CSS e Prisma ORM.',
|
||||
'context' => 'Projeto fullstack React com Next.js 14, usando App Router, Server Actions, middleware de autenticação e Prisma com PostgreSQL.',
|
||||
'persona' => 'Especialista em Next.js, React Server Components e fullstack TypeScript.',
|
||||
'tone' => 'Moderno, performático, type-safe.',
|
||||
'constraints' => "- Next.js 14+.\n- App Router com Server Components.\n- Tailwind CSS.\n- Prisma ORM.\n- Autenticação com NextAuth.js.\n- Máximo de 3000 linhas.",
|
||||
'output_format' => 'Estrutura completa: app/, components/, lib/, prisma/, middleware.ts.',
|
||||
'examples' => 'Blog com CMS, autenticação e painel admin.',
|
||||
'variables' => 'nome_projeto, database_url, modulo_principal',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Node.js + Express + TypeScript',
|
||||
'description' => 'API backend com Node.js, Express e TypeScript.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Node.js + Express + TypeScript',
|
||||
'objective' => 'Gerar uma API backend com Node.js, Express, TypeScript, Prisma ORM e autenticação JWT.',
|
||||
'context' => 'Projeto backend Node.js com estrutura em camadas (controllers, services, repositories), validação com Zod e testes.',
|
||||
'persona' => 'Especialista em Node.js, TypeScript e arquitetura backend escalável.',
|
||||
'tone' => 'Técnico, estruturado, type-safe.',
|
||||
'constraints' => "- Node.js + TypeScript.\n- Express com middlewares.\n- Prisma ORM.\n- Zod para validação.\n- JWT para autenticação.\n- Máximo de 2500 linhas.",
|
||||
'output_format' => 'Estrutura completa: src/controllers, src/services, src/repositories, src/middlewares, prisma/schema.',
|
||||
'examples' => 'CRUD de usuários com validação, hash de senha e refresh token.',
|
||||
'variables' => 'nome_modulo, entidade, campos_customizados',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'FastAPI + Python',
|
||||
'description' => 'API RESTful com FastAPI, SQLAlchemy e Pydantic.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'FastAPI + Python',
|
||||
'objective' => 'Gerar uma API RESTful com FastAPI, SQLAlchemy, Pydantic e autenticação OAuth2.',
|
||||
'context' => 'Projeto Python com FastAPI, banco PostgreSQL, validação automática, documentação interativa e testes.',
|
||||
'persona' => 'Especialista em Python, FastAPI e arquitetura de microsserviços.',
|
||||
'tone' => 'Técnico, limpo, performático.',
|
||||
'constraints' => "- Python 3.11+.\n- FastAPI com Pydantic v2.\n- SQLAlchemy 2.0 ORM.\n- Autenticação OAuth2 com JWT.\n- Testes com pytest.\n- Máximo de 2500 linhas.",
|
||||
'output_format' => 'Estrutura completa: main.py, routers, models, schemas, dependencies, tests.',
|
||||
'examples' => 'CRUD de produtos com upload de imagens e cache com Redis.',
|
||||
'variables' => 'nome_modulo, entidade, campos_customizados',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Laravel 13 + Vue.js 3 Fullstack',
|
||||
'description' => 'Aplicação fullstack com Laravel 13 API e Vue.js 3 SPA.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Laravel 13 + Vue.js 3 Fullstack',
|
||||
'objective' => 'Gerar uma aplicação fullstack com Laravel 13 (API) e Vue.js 3 (SPA), com autenticação Sanctum.',
|
||||
'context' => 'Projeto fullstack separado: backend Laravel 13 com API REST e frontend Vue 3 consumindo a API. Comunicação via axios e Sanctum.',
|
||||
'persona' => 'Arquiteto fullstack especializado em Laravel e Vue.js.',
|
||||
'tone' => 'Integrado, moderno, seguro.',
|
||||
'constraints' => "- Laravel 13 + Sanctum.\n- Vue 3 com Composition API.\n- Axios para requisições.\n- CORS configurado.\n- Validações em ambos os lados.\n- Máximo de 3000 linhas.",
|
||||
'output_format' => 'Código completo backend (routes, controllers, models) + frontend (components, stores, router).',
|
||||
'examples' => 'Sistema de gestão de tarefas com autenticação e drag-and-drop.',
|
||||
'variables' => 'nome_projeto, modulo_principal, entidades',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Modelo Laravel Full Stack 2',
|
||||
'description' => 'Aplicação fullstack moderna com Laravel 13, Vue.js 3, ApexCharts e integração multi-provider de IA.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Modelo Laravel Full Stack 2',
|
||||
'objective' => 'Gerar uma aplicação fullstack moderna com Laravel 13, PHP 8.3, MariaDB, Tailwind CSS 4, Blade, Vue.js 3, ApexCharts, Laravel Reverb, Sanctum, Spatie Permission, Mews Captcha, Laravel Pint e integração multi-provider de IA (OpenRouter, StepFun, llama.cpp local, QwenCloud).',
|
||||
'context' => 'Projeto Laravel 13 com stack moderna: frontend com Tailwind CSS 4, Blade e Vue.js 3; backend com Laravel Reverb para tempo real, Sanctum para API auth, Spatie Permission para RBAC.',
|
||||
'persona' => 'Você é um arquiteto fullstack sênior especializado em Laravel 13, PHP 8.3, Tailwind CSS 4, Vue.js 3 e integrações de IA multi-provider.',
|
||||
'tone' => 'Técnico, estruturado, moderno e objetivo. Segue rigorosamente PSR-12 e strict_types.',
|
||||
'constraints' => "- PHP 8.3 com strict_types e declare(strict_types=1).\n- PSR-12 compliance com Laravel Pint.\n- Eloquent ORM com relacionamentos e mutators.\n- Policies e Gates para toda autorização.\n- Form Requests para validação.\n- Integração multi-provider de IA via service container.\n- Laravel Reverb para eventos em tempo real.\n- Sanctum para autenticação API.\n- Spatie Permission para RBAC.\n- Mews Captcha (math) para formulários públicos.\n- ApexCharts no frontend via Vue.js 3.\n- Máximo de 4000 linhas de código.",
|
||||
'output_format' => 'Código completo: migration, model, controller, request, policy, service, view Blade, Vue.js 3 component, routes, seeder, factory e testes Feature/Unit.',
|
||||
'examples' => 'Dashboard com ApexCharts mostrando métricas de gerações de prompt por provedor de IA, formulário de criação com Mews Captcha.',
|
||||
'variables' => 'nome_modulo, entidade, nome_tabela, provedores_ia, permissoes',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'API com Autenticação JWT',
|
||||
'description' => 'API segura com autenticação JWT, refresh tokens e roles.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'API com Autenticação JWT',
|
||||
'objective' => 'Gerar uma API segura com autenticação JWT, refresh tokens, roles e permissões.',
|
||||
'context' => 'API RESTful com sistema de autenticação robusto, múltiplos roles (admin, user, manager), proteção de rotas e refresh token automático.',
|
||||
'persona' => 'Especialista em segurança de APIs e autenticação stateless.',
|
||||
'tone' => 'Seguro, robusto, documentado.',
|
||||
'constraints' => "- JWT com access e refresh tokens.\n- Roles e permissões.\n- Middleware de autenticação.\n- Rate limiting.\n- Máximo de 2000 linhas.",
|
||||
'output_format' => 'Estrutura completa: auth controller, middleware, JWT service, rotas protegidas.',
|
||||
'examples' => 'Login, registro, refresh token, esqueci senha, verificação de email.',
|
||||
'variables' => 'nome_api, roles, provedor_ia',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Arquitetura de Microsserviços',
|
||||
'description' => 'Arquitetura de microsserviços com API Gateway e monitoramento.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Arquitetura de Microsserviços',
|
||||
'objective' => 'Gerar uma arquitetura de microsserviços com API Gateway, comunicação assíncrona e monitoramento.',
|
||||
'context' => 'Sistema distribuído com múltiplos serviços (usuários, pagamentos, notificações), API Gateway, message broker e observabilidade.',
|
||||
'persona' => 'Arquiteto de software especializado em microsserviços, DDD e cloud native.',
|
||||
'tone' => 'Arquitetural, escalável, resiliente.',
|
||||
'constraints' => "- Docker + Docker Compose.\n- Comunicação via HTTP/gRPC.\n- Message broker (RabbitMQ/Kafka).\n- Monitoramento (Prometheus/Grafana).\n- Máximo de 3500 linhas.",
|
||||
'output_format' => 'Dockerfiles, docker-compose, código dos serviços, gateway, migrations.',
|
||||
'examples' => 'E-commerce com serviços: usuários, produtos, pedidos, pagamentos, notificações.',
|
||||
'variables' => 'nome_sistema, servicos, broker_mensagens',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Chatbot com IA',
|
||||
'description' => 'Chatbot inteligente com integração a provedores de IA.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Chatbot com IA',
|
||||
'objective' => 'Gerar um chatbot inteligente com integração a provedores de IA (OpenAI, OpenRouter), histórico de conversas e RAG.',
|
||||
'context' => 'Chatbot web ou WhatsApp com backend em PHP/Node.js, integração com modelos de linguagem, embeddings e vector database.',
|
||||
'persona' => 'Especialista em IA generativa, LLMs e aplicações conversationais.',
|
||||
'tone' => 'Inovador, inteligente, conversacional.',
|
||||
'constraints' => "- Integração com pelo menos 1 provedor de IA.\n- Histórico de conversas.\n- Tratamento de contexto.\n- Interface web moderna.\n- Máximo de 2500 linhas.",
|
||||
'output_format' => 'Backend (API) + Frontend (chat interface) + integração IA.',
|
||||
'examples' => 'Chat de atendimento ao cliente com respostas contextuais.',
|
||||
'variables' => 'nome_bot, provedor_ia, modelo, contexto',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Automação de Workflow',
|
||||
'description' => 'Sistema de automação de workflows com triggers e integrações.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Automação de Workflow',
|
||||
'objective' => 'Gerar um sistema de automação de workflows com triggers, ações condicionais e integrações.',
|
||||
'context' => 'Plataforma de automação estilo Zapier/Make, onde usuários criam fluxos automáticos entre aplicativos.',
|
||||
'persona' => 'Especialista em automação, integrações e arquitetura event-driven.',
|
||||
'tone' => 'Prático, modular, escalável.',
|
||||
'constraints' => "- Interface visual de fluxos.\n- Triggers e actions.\n- Integrações webhook.\n- Logs e monitoramento.\n- Máximo de 3000 linhas.",
|
||||
'output_format' => 'Backend API + Frontend editor de fluxos + webhooks.',
|
||||
'examples' => 'Automação: quando chegar e-mail → extrair anexo → salvar no Drive → notificar Slack.',
|
||||
'variables' => 'nome_plataforma, integracoes, acoes',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
[
|
||||
'name' => 'Integração entre APIs',
|
||||
'description' => 'Middleware ou serviço de integração entre APIs externas.',
|
||||
'category' => 'Frameworks & APIs',
|
||||
'template_data' => [
|
||||
'title' => 'Integração entre APIs',
|
||||
'objective' => 'Gerar um middleware ou serviço de integração entre múltiplas APIs externas.',
|
||||
'context' => 'Serviço que consome múltiplas APIs (pagamentos, CRM, ERP) e centraliza dados em uma única interface.',
|
||||
'persona' => 'Especialista em integrações, webhooks e APIs externas.',
|
||||
'tone' => 'Técnico, robusto, manutenível.',
|
||||
'constraints' => "- Tratamento de erros e retries.\n- Logs estruturados.\n- Cache.\n- Monitoramento.\n- Máximo de 2500 linhas.",
|
||||
'output_format' => 'Serviço de integração + testes de integração + documentação.',
|
||||
'examples' => 'Syncronização entre ERP e plataforma de e-commerce.',
|
||||
'variables' => 'nome_servico, apis_origem, api_destino',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($templates as $template) {
|
||||
$template['template_data'] = json_encode($template['template_data'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
|
||||
DB::table('prompt_templates')->updateOrInsert(
|
||||
['name' => $template['name']],
|
||||
$template
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Executable
+304
@@ -0,0 +1,304 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\TutorialLesson;
|
||||
use App\Models\TutorialQuestion;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class TutorialSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
$lessons = [
|
||||
[
|
||||
'title' => 'O que é Engenharia de Prompt?',
|
||||
'content' => 'A engenharia de prompt é o processo de projetar, refinar e otimizar entradas (prompts) para obter respostas melhores e mais úteis de modelos de linguagem. Um prompt bem construído pode transformar um modelo genérico em um assistente especializado. Dominar essa habilidade é essencial para extrair o máximo potencial de IAs como GPT, Claude, Gemini e outras.',
|
||||
'example_bad' => 'Escreva sobre marketing.',
|
||||
'example_good' => 'Crie um guia de 500 palavras sobre estratégias de marketing digital para pequenas empresas de tecnologia, focando em SEO e redes sociais.',
|
||||
'order' => 1,
|
||||
],
|
||||
[
|
||||
'title' => 'Defina um Objetivo Claro',
|
||||
'content' => 'Comece sempre declarando o que deseja alcançar. Quanto mais específico, melhor. Evite comandos vagos. Um objetivo claro ajuda o modelo a entender exatamente o que você precisa.',
|
||||
'example_bad' => 'Escreva sobre marketing.',
|
||||
'example_good' => 'Crie um guia de 500 palavras sobre estratégias de marketing digital para pequenas empresas de tecnologia, focando em SEO e redes sociais.',
|
||||
'order' => 2,
|
||||
],
|
||||
[
|
||||
'title' => 'Forneça Contexto',
|
||||
'content' => 'Informe ao modelo o cenário, o público-alvo e as restrições. O contexto melhora drasticamente a qualidade da resposta. Quanto mais contexto relevante você fornecer, mais precisa será a resposta.',
|
||||
'example_bad' => 'Explique como funciona uma API REST.',
|
||||
'example_good' => 'Explique como funciona uma API REST para um grupo de estudantes de desenvolvimento web de 18 a 25 anos, que estão aprendendo backend com Node.js pela primeira vez. Use analogias simples e evite jargões excessivos.',
|
||||
'order' => 3,
|
||||
],
|
||||
[
|
||||
'title' => 'Estabeleça a Persona',
|
||||
'content' => 'Peça para o modelo assumir um papel específico: "Você é um professor de matemática", "Você é um revisor de código sênior". Isso direciona o estilo e a profundidade da resposta.',
|
||||
'example_bad' => 'Corrija este código.',
|
||||
'example_good' => 'Você é um revisor de código sênior especializado em PHP e Laravel. Analise o seguinte código, identifique problemas de performance, segurança e legibilidade, e sugira melhorias seguindo as melhores práticas do PSR-12.',
|
||||
'order' => 4,
|
||||
],
|
||||
[
|
||||
'title' => 'Defina o Tom e Estilo',
|
||||
'content' => 'Especifique se a resposta deve ser formal, informal, técnica, simples, persuasiva, etc. O tom adequado garante que a comunicação seja eficaz para o público-alvo.',
|
||||
'example_bad' => 'Escreva um e-mail para um cliente.',
|
||||
'example_good' => 'Escreva um e-mail profissional e cordial para um cliente que solicitou um reembolso. O tom deve ser empático, mas mantendo a formalidade. Explique o processo de reembolso em até 3 parágrafos e ofereça um cupom de 10% de desconto como compensação.',
|
||||
'order' => 5,
|
||||
],
|
||||
[
|
||||
'title' => 'Liste Restrições',
|
||||
'content' => 'Limite o modelo com regras: "Não use jargões", "Responda em até 3 parágrafos", "Não inclua opiniões pessoais". Restrições claras evitam respostas fora do esperado.',
|
||||
'example_bad' => 'Faça um resumo deste artigo.',
|
||||
'example_good' => 'Faça um resumo do artigo abaixo seguindo estas regras:
|
||||
- Máximo de 150 palavras
|
||||
- Apenas fatos presentes no texto
|
||||
- Não inclua opiniões pessoais
|
||||
- Use bullet points
|
||||
- Não use jargões técnicos',
|
||||
'order' => 6,
|
||||
],
|
||||
[
|
||||
'title' => 'Especifique o Formato de Saída',
|
||||
'content' => 'Peça a estrutura desejada: lista, tabela, JSON, markdown, código, etc. O formato correto facilita o uso da resposta em outros sistemas ou documentos.',
|
||||
'example_bad' => 'Liste os benefícios do exercício físico.',
|
||||
'example_good' => 'Liste os 5 principais benefícios do exercício físico no formato de tabela Markdown com duas colunas: "Benefício" e "Descrição".',
|
||||
'order' => 7,
|
||||
],
|
||||
[
|
||||
'title' => 'Use Exemplos (Few-Shot)',
|
||||
'content' => 'Mostre ao modelo exemplos do que espera. Isso reduz alucinações e aumenta a precisão. O aprendizado few-shot é uma das técnicas mais poderosas da engenharia de prompt.',
|
||||
'example_bad' => 'Classifique estas frases como positivas ou negativas.',
|
||||
'example_good' => 'Classifique as frases abaixo como "positiva" ou "negativa":
|
||||
|
||||
Exemplo 1: "Adorei o produto, chegou rápido e bem embalado." -> Positiva
|
||||
Exemplo 2: "Péssimo atendimento, demoraram 2 horas para me atender." -> Negativa
|
||||
Exemplo 3: "O produto é ok, nada de especial." -> Neutra
|
||||
|
||||
Agora classifique: "A entrega foi super rápida e o produto veio perfeito."',
|
||||
'order' => 8,
|
||||
],
|
||||
[
|
||||
'title' => 'Utilize Variáveis',
|
||||
'content' => 'Use placeholders como {{variavel}} para criar prompts reutilizáveis. Variáveis permitem criar templates que podem ser usados em diferentes situações sem reescrever todo o prompt.',
|
||||
'example_bad' => null,
|
||||
'example_good' => 'Você é um especialista em {{area}}.
|
||||
Crie um artigo de {{quantidade_palavras}} palavras sobre {{topico}}.
|
||||
Público-alvo: {{publico}}.
|
||||
Tom: {{tom}}.
|
||||
Formato: {{formato}}',
|
||||
'order' => 9,
|
||||
],
|
||||
[
|
||||
'title' => 'Ajuste a Temperatura',
|
||||
'content' => 'Temperatura baixa (0.0 - 0.3): respostas mais determinísticas e precisas. Temperatura alta (0.7 - 1.0): mais criativa e diversificada. A escolha da temperatura depende do tipo de tarefa.',
|
||||
'example_bad' => null,
|
||||
'example_good' => null,
|
||||
'order' => 10,
|
||||
],
|
||||
[
|
||||
'title' => 'Controle os Max Tokens',
|
||||
'content' => 'Defina o tamanho máximo da resposta. Evite respostas muito longas ou truncadas. O controle de tokens ajuda a gerenciar custos e garantir respostas no tamanho adequado.',
|
||||
'example_bad' => null,
|
||||
'example_good' => null,
|
||||
'order' => 11,
|
||||
],
|
||||
[
|
||||
'title' => 'Técnica Chain-of-Thought',
|
||||
'content' => 'Peça para o modelo pensar passo a passo antes de responder. Adicione frases como "Vamos pensar passo a passo" ou "Primeiro, identifique os elementos principais". Isso melhora significativamente respostas complexas.',
|
||||
'example_bad' => 'Resolva este problema de matemática: Se João tem 3 maçãs e dá 1 para Maria, quantas maçãs ele tem?',
|
||||
'example_good' => 'Resolva este problema de matemática passo a passo: Se João tem 3 maçãs e dá 1 para Maria, quantas maçãs ele tem? Mostre seu raciocínio antes de dar a resposta final.',
|
||||
'order' => 12,
|
||||
],
|
||||
[
|
||||
'title' => 'Técnica Zero-Shot',
|
||||
'content' => 'Peça diretamente sem exemplos. Funciona bem para tarefas simples e diretas. O zero-shot é a forma mais básica de interação com um modelo de linguagem.',
|
||||
'example_bad' => null,
|
||||
'example_good' => null,
|
||||
'order' => 13,
|
||||
],
|
||||
[
|
||||
'title' => 'Técnica Few-Shot',
|
||||
'content' => 'Forneça exemplos de entrada e saída. Ideal para tarefas de classificação, extração e formatação. Quanto mais exemplos relevantes, melhor o desempenho.',
|
||||
'example_bad' => null,
|
||||
'example_good' => null,
|
||||
'order' => 14,
|
||||
],
|
||||
[
|
||||
'title' => 'Técnica One-Shot',
|
||||
'content' => 'Forneça apenas um exemplo. Útil quando você tem um exemplo representativo mas não consegue fornecer múltiplos exemplos.',
|
||||
'example_bad' => null,
|
||||
'example_good' => null,
|
||||
'order' => 15,
|
||||
],
|
||||
[
|
||||
'title' => 'Prompt de Sistema (System Prompt)',
|
||||
'content' => 'Defina regras globais que se aplicam a toda a conversa. O prompt de sistema estabelece o comportamento base do modelo e deve ser usado para definir persona, regras e restrições permanentes.',
|
||||
'example_bad' => null,
|
||||
'example_good' => 'Você é um assistente especializado em atendimento ao cliente da empresa TechCorp. Sempre responda de forma profissional, empática e objetiva. Nunca forneça informações sobre concorrentes. Se não souber a resposta, diga "Vou verificar essa informação com nossa equipe especializada".',
|
||||
'order' => 16,
|
||||
],
|
||||
[
|
||||
'title' => 'Prompt de Usuário (User Prompt)',
|
||||
'content' => 'A entrada específica do usuário em cada interação. Deve ser clara, objetiva e conter todo o contexto necessário para a resposta.',
|
||||
'example_bad' => 'Me ajude com meu problema.',
|
||||
'example_good' => 'Estou tendo dificuldades para configurar o pagamento no meu aplicativo. O erro que aparece é "Transação não autorizada". Já verifiquei meus dados bancários e estão corretos. O que devo fazer?',
|
||||
'order' => 17,
|
||||
],
|
||||
[
|
||||
'title' => 'Iteração e Refinamento',
|
||||
'content' => 'A primeira resposta raramente é perfeita. Ajuste o prompt com base no resultado. Adicione detalhes, remova ambiguidades e teste variações até obter o resultado desejado.',
|
||||
'example_bad' => null,
|
||||
'example_good' => null,
|
||||
'order' => 18,
|
||||
],
|
||||
[
|
||||
'title' => 'Evite Alucinações',
|
||||
'content' => 'Peça para o modelo citar fontes, admitir incertezas e separar fatos de opiniões. Alucinações são respostas inventadas que parecem corretas mas não são.',
|
||||
'example_bad' => 'Quem inventou a internet?',
|
||||
'example_good' => 'Quem inventou a internet? Responda apenas com base em fatos históricos documentados. Se não tiver certeza, indique a incerteza e cite as fontes consultadas.',
|
||||
'order' => 19,
|
||||
],
|
||||
[
|
||||
'title' => 'Melhores Práticas e Conclusão',
|
||||
'content' => 'Resumo das melhores práticas: seja específico, forneça contexto, use exemplos, defina formato, ajuste parâmetros e sempre itere. A engenharia de prompt é uma habilidade que se desenvolve com prática contínua.',
|
||||
'example_bad' => null,
|
||||
'example_good' => null,
|
||||
'order' => 20,
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($lessons as $lessonData) {
|
||||
TutorialLesson::create($lessonData);
|
||||
}
|
||||
|
||||
$questions = [
|
||||
[
|
||||
'question' => 'O que é engenharia de prompt?',
|
||||
'options' => [
|
||||
'Um tipo de modelo de linguagem',
|
||||
'O processo de projetar e refinar entradas para obter melhores respostas de IAs',
|
||||
'Uma linguagem de programação',
|
||||
'Um framework de desenvolvimento',
|
||||
],
|
||||
'correct_answer' => 'O processo de projetar e refinar entradas para obter melhores respostas de IAs',
|
||||
'explanation' => 'Engenharia de prompt é a arte de criar instruções eficazes para modelos de linguagem.',
|
||||
'order' => 1,
|
||||
],
|
||||
[
|
||||
'question' => 'Qual elemento NÃO faz parte de um prompt eficaz?',
|
||||
'options' => [
|
||||
'Objetivo claro',
|
||||
'Contexto',
|
||||
'Informações aleatórias sem relação com a tarefa',
|
||||
'Formato de saída definido',
|
||||
],
|
||||
'correct_answer' => 'Informações aleatórias sem relação com a tarefa',
|
||||
'explanation' => 'Toda informação no prompt deve ser relevante para a tarefa desejada.',
|
||||
'order' => 2,
|
||||
],
|
||||
[
|
||||
'question' => 'Qual técnica consiste em fornecer exemplos de entrada e saída?',
|
||||
'options' => [
|
||||
'Zero-shot',
|
||||
'One-shot',
|
||||
'Few-shot',
|
||||
'Chain-of-thought',
|
||||
],
|
||||
'correct_answer' => 'Few-shot',
|
||||
'explanation' => 'Few-shot é a técnica de fornecer múltiplos exemplos para guiar o modelo.',
|
||||
'order' => 3,
|
||||
],
|
||||
[
|
||||
'question' => 'Para que serve a temperatura em um modelo de linguagem?',
|
||||
'options' => [
|
||||
'Controlar o tamanho da resposta',
|
||||
'Controlar a criatividade/determinismo da resposta',
|
||||
'Definir o idioma da resposta',
|
||||
'Aumentar a velocidade de processamento',
|
||||
],
|
||||
'correct_answer' => 'Controlar a criatividade/determinismo da resposta',
|
||||
'explanation' => 'Temperatura baixa = mais determinístico, temperatura alta = mais criativo.',
|
||||
'order' => 4,
|
||||
],
|
||||
[
|
||||
'question' => 'Qual temperatura é recomendada para tarefas factuais e extração de dados?',
|
||||
'options' => [
|
||||
'0.0 - 0.3',
|
||||
'0.4 - 0.6',
|
||||
'0.7 - 1.0',
|
||||
'Qualquer valor funciona igual',
|
||||
],
|
||||
'correct_answer' => '0.0 - 0.3',
|
||||
'explanation' => 'Tarefas factuais precisam de respostas determinísticas e precisas.',
|
||||
'order' => 5,
|
||||
],
|
||||
[
|
||||
'question' => 'O que é um prompt de sistema (system prompt)?',
|
||||
'options' => [
|
||||
'Um comando para reiniciar o sistema',
|
||||
'Um prompt que define regras globais e comportamento do modelo',
|
||||
'Um erro do sistema',
|
||||
'Uma configuração de hardware',
|
||||
],
|
||||
'correct_answer' => 'Um prompt que define regras globais e comportamento do modelo',
|
||||
'explanation' => 'O system prompt estabelece o comportamento base do modelo em toda a conversa.',
|
||||
'order' => 6,
|
||||
],
|
||||
[
|
||||
'question' => 'Qual a função das variáveis em prompts?',
|
||||
'options' => [
|
||||
'Aumentar o tamanho do prompt',
|
||||
'Tornar o prompt reutilizável e dinâmico',
|
||||
'Diminuir a qualidade da resposta',
|
||||
'Apenas decorar o texto',
|
||||
],
|
||||
'correct_answer' => 'Tornar o prompt reutilizável e dinâmico',
|
||||
'explanation' => 'Variáveis permitem criar templates reutilizáveis para diferentes cenários.',
|
||||
'order' => 7,
|
||||
],
|
||||
[
|
||||
'question' => 'O que é a técnica Chain-of-Thought?',
|
||||
'options' => [
|
||||
'Uma técnica de encadeamento de prompts',
|
||||
'Pedir para o modelo pensar passo a passo antes de responder',
|
||||
'Conectar vários modelos de IA',
|
||||
'Uma forma de programação em cadeia',
|
||||
],
|
||||
'correct_answer' => 'Pedir para o modelo pensar passo a passo antes de responder',
|
||||
'explanation' => 'Chain-of-Thought melhora respostas complexas solicitando raciocínio passo a passo.',
|
||||
'order' => 8,
|
||||
],
|
||||
[
|
||||
'question' => 'Por que é importante iterar e refinar prompts?',
|
||||
'options' => [
|
||||
'Porque a primeira resposta sempre é perfeita',
|
||||
'Porque ajustes baseados no resultado melhoram a qualidade',
|
||||
'Porque é uma regra da linguagem Python',
|
||||
'Porque modelos não entendem prompts longos',
|
||||
],
|
||||
'correct_answer' => 'Porque ajustes baseados no resultado melhoram a qualidade',
|
||||
'explanation' => 'A engenharia de prompt é um processo iterativo de melhoria contínua.',
|
||||
'order' => 9,
|
||||
],
|
||||
[
|
||||
'question' => 'O que são alucinações em modelos de linguagem?',
|
||||
'options' => [
|
||||
'Respostas corretas e precisas',
|
||||
'Respostas inventadas que parecem corretas mas não são',
|
||||
'Um tipo de erro de sistema',
|
||||
'Respostas muito curtas',
|
||||
],
|
||||
'correct_answer' => 'Respostas inventadas que parecem corretas mas não são',
|
||||
'explanation' => 'Alucinações são informações falsas geradas pelo modelo que parecem plausíveis.',
|
||||
'order' => 10,
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($questions as $questionData) {
|
||||
TutorialQuestion::create($questionData);
|
||||
}
|
||||
}
|
||||
}
|
||||
Executable
+38
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class UserSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Seed the application users.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// SuperAdmin
|
||||
User::firstOrCreate(
|
||||
['email' => 'superadmin@sistema.com'],
|
||||
[
|
||||
'name' => 'Super Admin',
|
||||
'password' => Hash::make('superadmin123'),
|
||||
'role' => 'superadmin',
|
||||
'is_approved' => true,
|
||||
]
|
||||
);
|
||||
|
||||
// Regular User
|
||||
User::firstOrCreate(
|
||||
['email' => 'user@sistema.com'],
|
||||
[
|
||||
'name' => 'User Test',
|
||||
'password' => Hash::make('user123'),
|
||||
'role' => 'user',
|
||||
'is_approved' => true,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user