Es ist eine Weile her, seit ich einen Artikel geschrieben habe. Ich meine, warum würde ich? Sie bitten AI über ein Thema, und es spuckt alles heraus, was Sie brauchen. Das Kind tötete die Freude für mich, ich endete mit der Erstellung wie 10 Artikel, aber niemals veröffentlichte sie. Dennoch glaubt ein Teil von mir, dass Menschen etwas lesen, das von Menschen gemacht wurde. Wie, eine AI würde Sie nicht durch diese langweilige Einführung sitzen lassen, aber hey, es ist menschlich, verrückt, aber menschlich. Jedenfalls schreibe ich heute über AI (die Ironie ha). Sie haben gerade ein neues Paket, Laravel Boost, fallen gelassen, das im Grunde weniger KI saugt. Es macht es deterministischer, indem es Regeln und zusätzlichen Kontext gibt, dem man folgen kann. Weil ja, die Haupthindernisse von LLMs (zumindest aus meinem täglichen Gebrauch) sind die schnellen und . Laravel Der Kontext WTF sind MCPs Ich werde Sie nicht über schnelles Engineering unterrichten; Es gibt bereits Tonnen von Ressourcen. . context LLMs werden auf massive Datensätze geschult, und diese Datensätze sind ihr Bezugspunkt. Zum Beispiel, wenn die Trainingsdaten nur bis 2023 gehen und Sie nach dem heutigen Wetter fragen, wird es keinen Hinweis haben. Wir ermächtigen LLMs, geben ihnen aktuelle Kontexte, durch Tools. Sie haben dies wahrscheinlich verwendet, ohne es zu merken. Fragen Sie einen LLM über die neuesten Nachrichten, und Sie werden "Websuchung" sehen. Das ist ein Werkzeug in Aktion, das die KI mit frischen Daten versorgt, damit es Ihnen antworten kann. Aber "Searching Web" ist nur ein eingebautes Tool. Wenn Sie es nach Ihrem neuesten Jira-Ticket gefragt haben, würde es nicht wissen. Und denken Sie darüber nach, Anbieter wie OpenAI oder Anthropic können keine Tools für jeden möglichen Bedarf erstellen. Zum Beispiel möchten Sie vielleicht, dass Ihr LLM interne Unternehmensdaten abfragt. Das ist, wo die Idee, Ihr eigenes Tool zu bringen, kommt. Der LLM kann Ihr Tool anrufen, die benötigten Daten abholen und dann antworten. So sauber, dass Anthropic das Modellkontextprotokoll (MCP) eingeführt hat, um dies zu dokumentieren. Es standardisiert, wie LLMs Tools anrufen, wie Sie Tools in sie einfügen und wie sie mehr Kontext holen. Also, wenn Sie noch nie von MCPs gehört haben, nun, wir haben sie nur abgedeckt. Im Kern sind sie nur eine dünne Schicht, die LLMs die Verwendung von Tools (wie dem "Searching Web"-Tool) ermöglicht, um mehr Kontext zu erfassen. MCPs machen auch ein bisschen mehr. MCPs machen auch ein bisschen mehr. Und diese Tools können alles sein: API-Anrufe, Systemanrufe, Methodenanrufe, was auch immer. Cool. Jetzt wissen Sie über MCPs. Sie können mehr über sie lesen . hier Oder Laravel Boost? Laravel Boost ist also im Grunde ein MCP-Server, der eine Reihe von Tools enthüllt.Diese Tools drehen sich um das Laravel-Ökosystem, Dinge wie das Lesen von Routen, das Überprüfen von Protokollen oder das Durchsuchen der Laravel-Dokumente. Wenn Sie also einen LLM auffordern, Ihren vibe-codierten SaaS zu beheben, kann er entscheiden, welches Werkzeug zu verwenden ist. obwohl nichts garantiert ist, kann ein LLM eine Schlampe sein und einfach die Werkzeuge ignorieren und eine Methode bilden, die nie existierte 🏽. Und dann widerrufen Sie die Veränderung, werden verärgert, drängen sich wieder und beschäftigen sich mit einem "Entschuldigung, Sie haben absolut Recht"... Und dann widerrufen Sie die Veränderung, werden verärgert, drängen sich wieder und beschäftigen sich mit einem "Entschuldigung, Sie haben absolut Recht"... Ich werde nicht abdecken, wie man es installiert; es gibt bereits einen offiziellen , a , und eine Reihe von Community-Guides.Außerdem bin ich ein wenig zu spät für die Party. Youtube Videos Laracasts Episoden Trotzdem möchte ich Ihnen zeigen, wie Laravel im Boost. Boost Warum Das Laravel Boost? Boost Boost Boost ermöglicht es Ihnen, Ihrer Anwendung einen „Zweck“ zu geben, im Grunde eine Beschreibung Ihres Produkts, damit die KI den Kontext kennt. Diese Anwendung ist ein SaaS, das X-Dienste usw. bereitstellt. Diese Anwendung ist ein SaaS, das X-Dienste usw. bereitstellt. Sie kennen Ihr Produkt best buddy. Stellen Sie zunächst sicher, dass Sie die Boost-Konfiguration veröffentlicht haben: php artisan vendor:publish --tag=boost-config Zum Zeitpunkt des Schreibens sieht die Config-Datei so aus: <?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), ]; Um den Zweck der Anwendung hinzuzufügen, über den wir gerade gesprochen haben, fallen Sie einen neuen Eintrag in die Konfiguration: // omitted for breivety 'purpose' => 'Describe your application purpose' Damit dies wirksam wird, müssen Sie die Richtlinien neu generieren: php artisan boost:install In den veröffentlichten Richtlinien, zum Beispiel, wenn Sie Cursor verwenden, finden Sie Ihren Zweck (ich hoffe, wir alle tun lol) in im Abschnitt „Grundkontext“. .cursor/rules/laravel-boost.mdc Weniger ist mehr Steigern Sie Schiffe mit über 15 Tools, aber je nach App benötigen Sie sie möglicherweise nicht alle. tool, du bist vor der Frontend-Hölle gerettet. persönlich habe ich auch gefunden und Das LLM kann Konfigurationen einfach direkt lesen, ohne durch diese Hoops zu springen. BrowserLogs GetConfig ListAvailableConfigKeys Tweak das Die Konfiguration: 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 Tools sind weg. Und genau wie das Ausschließen von Tools können Sie Ihre eigenen hinzufügen. Zum Beispiel mag ich ein Tool, das alle registrierten Ereignisse in der App auflistet. Unter dem Hut verwendet Boost ein neues First-Party-Paket, , die die Erstellung von Werkzeugen und alle lustigen Dinge bewältigt. Sie können ein neues Werkzeug mit erstellen: laravel/mcp php artisan make:mcp-tool ListEvents Der Toolcode für das Listing-Ereignis ist so etwas wie: <?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()); } } Dann registrieren Sie es, Sie haben es erraten, die Config-Datei: <?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 ], ], Und genau so, Sie haben ein Custom-Tool hinzugefügt. Bonus-Tipp: Der MCP-Server-Boost kommt mit einem Inspektor, sodass Sie neue Tools sofort testen können. Bonus-Tipp: Der MCP-Server-Boost kommt mit einem Inspektor, sodass Sie neue Tools sofort testen können. php artisan mcp:inspector laravel-boost Sie sehen alle verfügbaren Tools, testen sie usw. Ruf mich nicht an, komm nicht durch mein Haus Wenn Sie eine modulare Monolitharchitektur mit einer Verzeichnis... schlechte Nachrichten: Boost überprüft nur Enums, Modelle und Controller im Inneren . modules/ app/ Es wäre schön, wenn es einen nativen Weg gäbe, dies anzupassen, aber bis dahin tun wir es selbst. Alles, was Sie tun müssen, ist rebind Zu deiner eigenen Gewohnheit Welche Scan (oder wo auch immer) Laravel\Boost\Install\GuidelineAssist GuidelineAssist modules/ Ihre Custom Guideline könnte aussehen wie: <?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 ist hauptsächlich die elterliche entdecken() mit kleineren tweaks. Es ist meist der Elternteil Mit kleinen Tweaks. discover() Vergessen Sie nicht, es bei einem Dienstleister neu zu binden.Nachdem Sie es getestet haben, sollte das "application-info" -Tool vom Inspektor alle Ihre Modelle richtig aufgeführt zeigen. Das ist es Aber es saugt viel weniger mit dem richtigen Tool, etwas wie Boost. Es gibt MCPs für alles: GitHub, Sentry und Linear. Sie fügen Tonnen von Wert hinzu. Sie können sogar Ihr eigenes MCP zum Spaß erstellen. (Ja, es kochte Kartoffeln), und ein anderer, der eine Spotify-Playlist spielte, basierend auf der Art und Weise, wie verdammt der Code war. Zurück zu My Air Fryer https://x.com/OussamaMater/status/1954648925320655213?embedable=true Lustige Tatsache: Obwohl ich hier ein wenig auf AI schieße, habe ich AI verwendet, um meine schlechte Grammatik zu korrigieren. Grammatik zu korrigieren, während ich beleidigt werde, cool lol. Lustige Tatsache: Obwohl ich hier ein wenig auf AI schieße, habe ich AI verwendet, um meine schlechte Grammatik zu korrigieren. Grammatik zu korrigieren, während ich beleidigt werde, cool lol.