Ha pasado un tiempo desde que escribí un artículo. Quiero decir, ¿por qué lo haría yo? Usted llama a la IA sobre un tema, y esparce todo lo que necesita. Que el chico mató la alegría para mí, acabo redactando como 10 artículos pero nunca publicando ninguno de ellos. Aún así, parte de mí cree que a la gente le gusta leer algo hecho por el hombre. Como, una IA no le haría sentarse a través de esta intro aburrida, pero he aquí, es humano, loco, pero humano. Gracias, por cierto. De todos modos, estoy escribiendo sobre AI hoy (la ironía ha). Acabo de bajar un nuevo paquete, Laravel Boost, que básicamente hace que la IA succione menos. hace que sea más determinista al darle reglas y contexto adicional a seguir. Porque sí, las principales barreras de los LLM (al menos de mi uso diario) son la promptitud y . Laravel El contexto Los WTF son MCPs No voy a darle una conferencia sobre ingeniería rápida; ya hay toneladas de recursos allí. . context Los LLM son entrenados en conjuntos de datos masivos, y esos conjuntos de datos son su punto de referencia. Por ejemplo, si los datos de formación solo van hasta el 2023 y usted pregunta sobre el clima de hoy, no tendrá una pista. Empoderamos los LLM, les damos un contexto actualizado, a través de herramientas. Probablemente hayas utilizado esto sin ni siquiera darte cuenta. Pregunta a un LLM sobre las últimas noticias, y verás "buscar en la web". Pero "searching web" es sólo una herramienta integrada. Si lo preguntaste sobre tu último billete de Jira, no lo sabría. Y piense en ello, proveedores como OpenAI o Anthropic no pueden construir herramientas para cada necesidad posible. Por ejemplo, puede querer que tu LLM consulta datos internos de la empresa. Eso es donde viene la idea de traer tu propia herramienta. El LLM puede llamar tu herramienta, recoger los datos que necesita y luego responder. Tan elegante que Anthropic introdujo el Protocolo de Contexto Modelo (MCP) para documentar esto. Estandariza cómo los LLM llaman herramientas, cómo se conectan herramientas a ellas, y cómo recogen más contexto. Por lo tanto, si nunca ha oído hablar de los MCP, bueno, simplemente los hemos cubierto. En el núcleo, son sólo una capa delgada que permite a los LLM usar herramientas (como la herramienta de "buscar web") para captar más contexto. Los MCPs también hacen un poco más. Los MCPs también hacen un poco más. Y estas herramientas pueden ser cualquier cosa: llamadas de API, llamadas de sistema, llamadas de método, cualquier cosa. Mientras puedan proporcionar una respuesta de vuelta al LLM, el modelo puede usarlo para terminar la tarea. Ahora ya sabes de los MCPs. Puedes leer más sobre ellos . Aquí ¿Laravel Boost? Así que Laravel Boost es básicamente un servidor MCP que expone un conjunto de herramientas.Estas herramientas giran alrededor del ecosistema de Laravel, cosas como leer rutas, comprobar registros o buscar los documentos de Laravel. Así que cuando usted pide a un LLM para corregir su SaaS codificado por vibe, puede decidir qué herramienta usar.Aunque, nada está garantizado, un LLM puede ser una puta y simplemente ignorar las herramientas, haciendo un método que nunca existió 🏽. Y entonces anula el cambio, se enfada, se apresura de nuevo, y se enfrenta a un "disculpa, tienes absolutamente razón"... Y entonces anula el cambio, se enfada, se apresura de nuevo, y se enfrenta a un "disculpa, tienes absolutamente razón"... No voy a cubrir cómo instalarlo; ya hay un oficial , a , y un montón de guías comunitarios. Además, estoy un poco tarde para la fiesta. Vídeo YouTube Episodios de Laracas Sin embargo, quiero mostrarle cómo Laravel impulsó. El impulso por qué ¿Laravel Boost? El impulso El impulso Boost le permite dar a su aplicación una " finalidad", básicamente una descripción de su producto para que la IA conozca el contexto. Esta aplicación es un SaaS que proporciona servicios X, etc. Esta aplicación es un SaaS que proporciona servicios X, etc. Conoce tu producto mejor amigo. Primero, asegúrese de publicar la configuración de Boost: php artisan vendor:publish --tag=boost-config En el momento de escribir, el archivo config se ve así: <?php declare(strict_types=1); return [ /* |-------------------------------------------------------------------------- | Boost Master Switch |-------------------------------------------------------------------------- | | This option may be used to disable all Boost functionality, which | simply provides a single and convenient way to enable or disable | Boost's AI development tools. | */ 'enabled' => env('BOOST_ENABLED', true), /* |-------------------------------------------------------------------------- | Boost Browser Logs Watcher |-------------------------------------------------------------------------- | | The following option may be used to enable or disable the browser logs | watcher feature within Laravel Boost. The log watcher will read any | errors within the browser's console to give Boost better context. */ 'browser_logs_watcher' => env('BOOST_BROWSER_LOGS_WATCHER', true), ]; Para añadir el propósito de la aplicación que acabamos de hablar, descargue una nueva entrada en la configuración: // omitted for breivety 'purpose' => 'Describe your application purpose' Para que esto entre en vigor, tendrá que re-generar las directrices: php artisan boost:install En las directrices publicadas, por ejemplo, si está utilizando Cursor, encontrará su propósito (espero que todos lo hagamos) en , en la sección “Contexto Fundamental”. .cursor/rules/laravel-boost.mdc Menos es más Aumenta las naves con más de 15 herramientas, pero dependiendo de tu aplicación, es posible que no las necesites todas. instrumental, te salvas del infierno frontal. Personalmente, también encontré y Al parecer inútil, el LLM puede simplemente leer las configuraciones directamente sin saltar a través de esos hoops. BrowserLogs GetConfig ListAvailableConfigKeys Tweak el Confianza : boost.php <?php use Laravel\Boost\Mcp\Tools\GetConfig; use Laravel\Boost\Mcp\Tools\BrowserLogs; use Laravel\Boost\Mcp\Tools\ListAvailableConfigKeys; // omitted for breivety 'mcp' => [ 'tools' => [ 'exclude' => [BrowserLogs::class, GetConfig::class, ListAvailableConfigKeys::class], ], ], Boom, 3 herramientas desaparecidas. Por ejemplo, me gusta tener una herramienta que enumere todos los eventos registrados en la aplicación.Si estás tirando en paquetes de terceros, esto hace que sea más fácil para el LLM localizar eventos en los que puede conectarse en lugar de construir lógica adicional o extender clases. Bajo el capó, Boost utiliza un nuevo paquete de primera parte, , que maneja la creación de herramientas y todas las cosas divertidas. Puedes crear una nueva herramienta con: laravel/mcp php artisan make:mcp-tool ListEvents El código de herramientas para el evento de lista es algo así: <?php namespace App\Mcp\Tools; use Illuminate\Support\Facades\Artisan; use Laravel\Mcp\Server\Tool; use Laravel\Mcp\Server\Tools\Annotations\IsReadOnly; use Laravel\Mcp\Server\Tools\ToolInputSchema; use Laravel\Mcp\Server\Tools\ToolResult; use Symfony\Component\Console\Command\Command as CommandAlias; use Symfony\Component\Console\Output\BufferedOutput; #[IsReadOnly] class ListEvents extends Tool { public function description(): string { return 'List all available events defined in the application'; } public function schema(ToolInputSchema $schema): ToolInputSchema { return $schema; } /** * @param array<string> $arguments */ public function handle(array $arguments): ToolResult { $eventsOutput = $this->artisan('event:list'); return ToolResult::text($eventsOutput); } /** * @param array<string|bool> $options */ private function artisan(string $command, array $options = []): string { $output = new BufferedOutput; $result = Artisan::call($command, $options, $output); if ($result !== CommandAlias::SUCCESS) { return 'Failed to list routes: '.$output->fetch(); } return trim($output->fetch()); } } Luego lo inscribe, lo adivina, en el archivo config: <?php use App\Mcp\Tools\ListEvents; use Laravel\Boost\Mcp\Tools\GetConfig; use Laravel\Boost\Mcp\Tools\BrowserLogs; use Laravel\Boost\Mcp\Tools\ListAvailableConfigKeys; // omitted for breivty 'mcp' => [ 'tools' => [ 'exclude' => [BrowserLogs::class, GetConfig::class, ListAvailableConfigKeys::class], 'include' => [ListEvents::class], // include the tool ], ], Y como tal, agregó una herramienta personalizada. Consejo de bonificación: El servidor MCP Boost utiliza un inspector, para que puedas probar nuevas herramientas de inmediato. Consejo de bonificación: El servidor MCP Boost utiliza un inspector, para que puedas probar nuevas herramientas de inmediato. php artisan mcp:inspector laravel-boost Verás todas las herramientas disponibles, las probarás, etc. No me llames, no venga por mi casa Si está utilizando una arquitectura monolítica modular con una Directorios... malas noticias: Boost solo controla enums, modelos y controladores dentro . modules/ app/ Sería bueno si hubiera una manera nativa de personalizar esto, pero hasta entonces, lo hacemos nosotros mismos. Todo lo que tienes que hacer es rebotear a tu propia costumbre ¿Cuáles son las escenas (o en cualquier lugar) Laravel\Boost\Install\GuidelineAssist GuidelineAssist modules/ Su guía personalizada podría parecer: <?php declare(strict_types=1); namespace App\Support; use Illuminate\Database\Eloquent\Model; use Laravel\Boost\Install\GuidelineAssist; use ReflectionClass; use Symfony\Component\Finder\Finder; class CustomGuidelineAssist extends GuidelineAssist { public function __construct() { $this->modelPaths = $this->discover(fn ($reflection) => ($reflection->isSubclassOf(Model::class) && ! $reflection->isAbstract())); $this->controllerPaths = $this->discover(fn (ReflectionClass $reflection) => (stripos($reflection->getName(), 'controller') !== false || stripos($reflection->getNamespaceName(), 'controller') !== false)); $this->enumPaths = $this->discover(fn ($reflection) => $reflection->isEnum()); } private function discover(callable $cb): array { $classes = []; if (empty(self::$classes)) { $finder = Finder::create() ->in([app_path(), base_path('modules')]) ->files() ->name('/[A-Z].*\.php$/'); foreach ($finder as $file) { $relativePath = $file->getRelativePathname(); $isModule = str_starts_with($file->getRealPath(), base_path('modules')); $className = $isModule ? 'Modules\\'.str_replace(['/', '.php'], ['\\', ''], $relativePath) : app()->getNamespace().str_replace(['/', '.php'], ['\\', ''], $relativePath); try { if ($this->fileHasClassLike($file->getRealPath()) && class_exists($className)) { self::$classes[$className] = $file->getRealPath(); } } catch (\Throwable) { // Ignore exceptions from class loading } } } foreach (self::$classes as $className => $path) { if ($cb(new ReflectionClass($className))) { $classes[$className] = $path; } } return $classes; } } Es principalmente el descubrimiento parental() con ajustes menores. Es principalmente el descubrimiento parental() con ajustes menores. No te olvides de reenlazarlo en un proveedor de servicios.Una vez que lo hagas, la prueba de la herramienta "application-info" del inspector debe mostrar todos sus modelos listados correctamente. Eso es lo Tal vez. pero succiona mucho menos con la herramienta correcta, algo como Boost. Hay MCPs para todo: GitHub, Sentry y Linear. Ellos añaden toneladas de valor. Usted puede incluso construir su propio MCP para divertirse. (Sí, cocinaba patatas fritas), y otro que jugaba una lista de reproducción de Spotify basada en lo malo que era el código. Volviendo a mi frigorífico https://x.com/OussamaMater/status/1954648925320655213?embedable=true Hecho divertido: aunque estoy arrojando un poco sobre la IA aquí, he usado la IA para corregir mi mala gramática. Corregir la gramática mientras se insulta, cool lol. Hecho divertido: aunque estoy arrojando un poco sobre la IA aquí, he usado la IA para corregir mi mala gramática. Corregir la gramática mientras se insulta, cool lol.