私が記事を書いた時からしばらく経ちました。私は、なぜ私は?あなたはテーマについてAIを呼びかけ、あなたが必要とするすべてを吐き出します。そのキンダは私にとって喜びを殺したので、私は10記事のように編集したが、それらのいずれかを公表したことはありません。それでも、私の一部は人々が人間の作ったものを読むのが好きだと信じています。 いずれにせよ、私は今日AIについて書いています(皮肉ハ)。 ちょうど新しいパッケージ、Laravel Boostを落とし、基本的にAIを吸うことが少なくなります。それはルールと従うための追加の文脈を与えてより決定的なものにします。 なぜなら、Yes、LLMの主なボトルネック(少なくとも私の日常的な使用から)は、迅速かつ . ララベル 文脈 WTFはMCP 私は迅速なエンジニアリングについてあなたに講義するつもりはありません; すでにそこに多くのリソースがあります。 . context LLMsは巨大なデータセットで訓練され、これらのデータセットは彼らの参照点です. たとえば、トレーニングデータが2023年までしか進んでいない場合、あなたが今日の天気について尋ねる場合、それはヒントを持っていません。 私たちはLLMを強化し、ツールを通じて最新の文脈を提供します。あなたはおそらくそれを知らずに使用してきました。最新のニュースについてLLMを尋ねて、あなたは「Webを検索する」と見るでしょう。 しかし、「検索ウェブ」は組み込まれたツールに過ぎません。あなたが最新のJiraチケットについて尋ねた場合、それは知らないでしょう。そしてそれについて考えてみると、OpenAIやAnthropicのようなプロバイダーは、あらゆる可能なニーズのためにツールを構築することはできません。例えば、あなたはあなたのLLMが企業内部のデータをクエリすることを望むかもしれません。そこに自分のツールを持ち込むアイデアが登場します。 それは、LLMsがツールをどのように呼び出すか、ツールをどのように接続するか、そしてそれらがより多くの文脈をどのように取得するかを標準化します。それで、あなたがMCPについて聞いたことがない場合は、私たちはそれらをカバーしました。 コアでは、LLMsがより多くの文脈を把握するためにツール(「検索ウェブ」ツールのように)を使用することを可能にする薄い層です。 MCPも少しずつやります。 MCPも少しずつやります。 そして、これらのツールは何であれ、API呼び出し、システム呼び出し、方法呼び出し、何であれ、LLMに返答することができる限り、モデルはそれをタスクを完了するために使用することができます。 クール!今あなたはMCPについて知っています. あなたはそれらについてもっと読むことができます . ここ 「Laravel Boost」 したがって、Laravel Boostは基本的に、ツールのセットを暴露するMCPサーバーです。これらのツールは、ルートを読み、ログをチェックしたり、Laravelドキュメントを検索したりするなどのLaravelエコシステムの周りを回ります。 したがって、あなたがあなたのVibeコードのSaaSを修正するためにLLMを求めるとき、それは使用するツールを決定することができます. 何が保証されていないにもかかわらず、LLMはクズであり、ツールを無視し、決して存在しなかった方法を作成することができます 🏽. そしてその後、あなたは変更をキャンセルし、怒り、再び急いで、そして「ごめんなさい、あなたは絶対に正しい」と対処します。 そしてその後、あなたは変更をキャンセルし、怒り、再び急いで、そして「ごめんなさい、あなたは絶対に正しい」と対処します。 私はそれをインストールする方法をカバーするつもりはありません; There is already an official 「A」 参加者も多いので、ちょっと遅れてパーティーに。 YouTube ビデオ Laracasts エピソード しかし、私はあなたに、どのように ララヴェルブース ブース なぜ ララヴェルブース? ブース ブース Boost は、アプリケーションに「目的」を与えることを可能にし、基本的には製品の説明で、AI がその文脈を知るようにします。 このアプリケーションは、X サービスを提供する SaaS です。 このアプリケーションは、X サービスを提供する SaaS です。 あなたはあなたの製品のベストバンドを知っています。 まず、Boost config を公開したことを確認します。 php artisan vendor:publish --tag=boost-config 書く時点で、config ファイルは以下のようになります。 <?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), ]; 先ほど話したアプリケーションの目的を追加するには、config に新しいエントリを落とします。 // omitted for breivety 'purpose' => 'Describe your application purpose' これを実行するには、ガイドラインを再生する必要があります: php artisan boost:install たとえば、公開されたガイドラインでは、あなたがCursorを使用している場合、あなたはあなたの目的を見つけるでしょう(私は私たちがすべてすることを望む) 「基礎文脈」のセクションで .cursor/rules/laravel-boost.mdc LESS IS MORE 15 以上のツールで船を増やすことができますが、アプリケーションによってはそれらをすべて必要としません。 ツール、あなたはフロントエンドの地獄から救われています。個人的には、私も見つけました そして 役に立たないように、LLMはそれらのホップをジャンプすることなく直接コンフィグを読み取ることができますので、それらを排除しましょう。 BrowserLogs GetConfig ListAvailableConfigKeys Tweak the config : 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], ], ], 3 ツールがなくなった。 そして、ツールを除外するのと同様に、独自のツールを追加することができます。例えば、私はアプリ内で登録されたすべてのイベントをリストするツールを持っているのが好きです。 キャップの下で、Boostは新しいファーストパーティーパッケージを使用し、 ツールの作成とすべての面白いものを扱う、あなたは次のツールで新しいツールを作成することができます: laravel/mcp php artisan make:mcp-tool ListEvents リストアップイベントのツールコードは、以下のようなものです。 <?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()); } } それから、それを登録して、あなたはそれを推測した、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 ], ], そして、そのように、あなたはカスタムツールを追加しました。 ボーナス ヒント: MCP サーバーの Boost を使用すると、インスペクターが付属し、すぐに新しいツールをテストできます。 ボーナス ヒント: MCP サーバーの Boost を使用すると、インスペクターが付属し、すぐに新しいツールをテストできます。 php artisan mcp:inspector laravel-boost 利用可能なツールをすべて見て、テストするなど、 Don't call me, don't come by my house. 私を呼ばないで、私の家に来ないで。 モノリイトアーキテクチャを使用している場合は、A ディレクトリ...悪いニュース: Boost only checks enums, models, and controllers inside . modules/ app/ これをカスタマイズするネイティブな方法があったらいいでしょうが、その時まで、私たちは自分でやります。 All you need to do is rebind 自分の習慣に どのスキャン (どこでも) Laravel\Boost\Install\GuidelineAssist GuidelineAssist modules/ あなたのカスタムガイドラインは、次のように見えるかもしれません: <?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; } } それは主に親の発見() で、マイナーな改変です。 ほとんどが親です。 小さなツイートで discover() サービスプロバイダーに再接続することを忘れないでください. 一度やった後、検査官からの「アプリケーション情報」ツールのテストは、すべてのモデルが正しくリストされていることを示すべきです。 それがこれ AIは吸いますか? もしかしたら? しかし、正しいツールで吸いますが、Boostのようなものがあります。 しかしそこに止まらないでください. すべてのためのMCPがあります:GitHub、Sentry、Linear. They add tons of value. You can even build your own MCP for fun. I had one that (はい、それはフライスを調理しました)、そしてコードがどれほどクソだったかに基づいてSpotifyのプレイリストを再生したもう一つです。 turned on my air fryer(エアフリーヤー) https://x.com/OussamaMater/status/1954648925320655213?embedable=true 面白い事実:私はここで少しAIをシャッティングしているにもかかわらず、私は私の悪い文法を修正するためにAIを使用しました。 面白い事実:私はここで少しAIをシャッティングしているにもかかわらず、私は私の悪い文法を修正するためにAIを使用しました。