新規プロジェクトでのBoostの利用
前節で紹介したBoostは、新規プロジェクトでももちろん利用できます。
新しいスタータキットでは標準装備
早速新しいプロジェクトにBoostを組み込んで、AIエージェントにひとつ機能を実装させてみようと思います。新規に作成したプロジェクトに対してBoostを組み込む方法は、前節で紹介した手順と同じです、と言いたいところなのですが、実は、より簡単です。
拙記事で紹介したように、Laravelのバージョン12で新しいスタータキットが導入されました。
このスタータキットも進化を続けており、現在では図5のように、プロジェクト作成ウィザードの質問項目でBoostを含めるかどうかを聞かれます。この質問でYesを選択すると、自動的にBoostが含まれたプロジェクトが作成されます。その後は、先述の通りに、Boost利用の設定を行います。
作業はAIエージェントへの指示のみ
プロジェクトの準備が整えば、あとは、AIエージェントに対して指示を出すだけです。
例えば、図5で作成したfirst-boostプロジェクトに対して、Gemini CLIを利用して、「カクテルをリスト表示する画面を追加してください。」と指示したとします。すると、作業を始め、途中ファイルの追加や変更をしてよいかをたずねるプロンプトが表示されるので許可します。最終的に図6の結果が表示されます。
図6のとおり、追加されたコードは、単にカクテルをリスト表示する画面だけではなく、そのもとデータを管理するデータベーススキーマ(cocktailsテーブル)、作成したテーブルへのダミーデータを挿入するシーダーとファクトリーも作成されています。もちろん、モデルクラスやコントローラークラス、Bladeのビューファイルも作成され、ルーティング登録されています。さらには、テストも作成されており、至れり尽くせりです。
表示された画面を確認しておきます。図6のメッセージの最後にあるURLにアクセスすると、図7の画面が表示されます。
このように、BoostとAIエージェントを組み合わせると、Laravelのコーディングルールに従ったコードを自動生成してくれます。ある程度の機能を自動生成させ、そこから生成されたコードを、アプリケーションの仕様に合わせて改変していく方法でのアプリケーション作成も可能です。
AIプロンプト利用を自動化できるLaravel AI SDK
Laravelのバージョン13で新たに導入されたAI関連機能が、Laravel AI SDKです。本稿の最後に、このLaravel AI SDKを紹介します。
Laravel AI SDKとは
前節までで紹介してきたBoostは、プログラマーがAIエージェントを利用して、Laravelプロジェクトに対して適用するものでした。一方、Laravel AI SDKは、Laravelアプリケーションを通してユーザーがAIプロバイダーを利用する機能を、プログラマーが効率よく作成するためのツールです。
例えば、図8の画面があります。
テキストエリアとボタンがそれぞれひとつだけです。このテキストエリアに何かを入力し、ボタンをクリックすると、その内容をAIプロバイダー(この場合Gemini)に送信し、その結果を図9のように下に表示させるような簡単なアプリケーションを考えます。
これは、非常にシンプルな例ですが、Laravelアプリケーションの随所に、AIプロバイダーにその内容を送信し、返ってきた結果をアプリケーション上で利用する機能を組み込みたいとします。そういったAIプロバイダーとのやりとりを、ほぼ自動的に行ってくれるのがLaravel AI SDKです。
なお、上記サンプルもBoost+Geminiに生成してもらったものです。新たに作成したfirst-aisdkプロジェクトに対してBoostを組み込み、Geminiに「簡単なテキストエリアがある入力画面を作成し、その入力内容をLaravel AI SDKを使ってGeminiにアクセスし、その返答を画面に表示する機能を追加してください。」と指示することで、生成してもらった機能です。
Laravel AI SDK利用準備
このように、Laravel AI SDKを利用する際もBoost+AIエージェントを利用できます。ただし、事前にLaravel AI SDKの利用準備を行う必要があります。
まず、作成したプロジェクトに対して、次のコマンドを実行してLaravel AI SDKを追加します。
composer require laravel/ai
次に、Laravel AI SDKの設定ファイルとマイグレーションファイルを生成します。これは、次のコマンドの実行です。
php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider"
最後に、マイグレーションを行います。
php artisan migrate
このマイグレーションにより、Laravel AI SDKが利用するagent_conversationsテーブルとagent_conversation_messagesテーブルが生成されます。これらのテーブルに、ユーザーとAIプロバイダーとのやりとりが記録されます。
これで、Laravel AI SDKを利用したコーディング準備が整いましたが、実際にAIプロバイダーをやりとりするためには、AIプロバイダーを利用する許可をアプリケーションに与えないといけません。つまり、APIキーの設定です。
これは、プロジェクト内の.envファイルへの追記です。追記する環境変数キーは、利用するAIプロバイダーによって変わります。公式サイトのページにキーが掲載されているので、適切なものを追加してください。
なお、first-aisdkプロジェクトではGeminiを利用するので、.envファイルに追加するのは、リスト1のコードとなります。この「XXXXXXXXXXXX」の部分に各自が取得したAPIキーを記述します。
GEMINI_API_KEY=XXXXXXXXXXXX
Agentsの作成
Laravel AI SDKを利用する場合、まず、Agentsクラスを作成する必要があります。Agentsクラスは、AIプロバイダーとやりとりする中心的なクラスであり、AIプロバイダーとのやり取りの手段が全てクラス内に含まれることになります。そのため、やりとりする内容や機能ごとにクラスを作成します。たとえば、first-aisdkプロジェクトでは、AIプロバイダーとのチャット機能ですので、ChatAgentクラスであり、app/Ai/Agents/フォルダーに作成することになっています。
このAgentクラスを手動で作成する場合は、次のコマンドが便利です。このコマンドによって、自動的にAgent名のファイルがapp/Ai/Agents/フォルダー内に作成されます。
php artisan make:agent Agent名
ここでChatAgentクラスのコードを見てみると、リスト2のようになっています。
<?php
:
#[Provider(Lab::Gemini)] // (1)
class ChatAgent implements Agent // (2)
{
use Promptable; // (3)
public function instructions(): Stringable|string // (4)
{
return 'You are a helpful assistant.';
}
}
Agentクラスは、リスト2の(2)のように、Agentインターフェースを実装して作成します。さらに(3)のように、Promptableトレイトを読み込んでおきます。ここまでがお約束コードといえます。
その上で(4)のように、instructions()メソッドを実装します。メソッドシグネチャは(4)の通りであり、引数なしで、戻り値は文字列、または、Stringableインスタンスです。
このメソッドは、やりとりするAIプロバイダー(のLLM)に対して、その役割や性格を定義するためのものです。このメソッドを利用することで、AIに対してどのように振る舞ってほしいかをあらかじめ伝えることができます。リスト2では「優秀なアシスタント」として振る舞う文字列が定義されています(これもBoost+Geminiによる自動生成です)。
Agentには、最低限(4)のinstructions()メソッドが定義されていれば、機能します。その他に、表1のようなメソッドも定義できます(ここでは紙面の都合上、簡単な紹介に留めておくことをご了承ください)。
| メソッド | 内容 |
|---|---|
| messages(): iterable | 会話コンテキスト(履歴)をAIに伝えるメソッド |
| tools(): iterable | AIが外部機能を呼び出すための機能を提供するメソッド |
| schema(スキーマを定義したクラス $schema): array | AIからの回答の形式を指定するメソッド |
なお、リスト2の(1)に関して補足しておきます。これは、PHPのアトリビュートを利用した記述です。PHPのアトリビュートを利用した記述は、Laravelのバージョン13で導入されたものであり、次回詳しく紹介します。(1)では、その仕組みを利用して、AIプロバイダーとして何を利用するかをProvider()の引数にenum Labで指定しています。(1)の記述の通り、Geminiを利用するようになっています。
Agentとの利用方法
このように作成したAgentクラスをどのように利用しているかを、ChatControllerクラスのコードから見ていきましょう。必要部分を抜粋すると、リスト3のようになります。
<?php
:
class ChatController extends Controller
{
public function store(Request $request)
{
:
$response = (new ChatAgent)->prompt($validated['prompt']); // (1)
return back()->with([
:
'response' => $response->text, // (2)
]);
}
}
リスト3の(1)のコードのように、リスト2で作成したAgentクラスをnewします。そのインスタンスに対して、prompt()メソッドを実行します。メソッドの引数として、AIプロバイダーに渡したいメッセージを指定するだけの非常にシンプルなコードです。たったこれだけで、AIプロバイダーと通信を行い、その結果を取得し、戻り値として返してくれます。あとは(2)のように、この$responseのtextプロパティで取得したデータ本体テキストをビューに送信し、表示するだけです。
このように、Laravel AI SDKを利用することで、非常に簡単にAIプロバイダーを利用することが可能となります。
なお、今回は、AIプロバイダーとのやりとりがテキストのみでしたが、他にも画像やファイルなどの生成を指示することも可能です。ただし、全てのプロバイダーがサポートしているわけではありません。公式ドキュメントのページに、どのプロバイダーがどの形式をサポートしているかのデータがあるので、参考にしてください。
まとめ
Laravelでの変更点を紹介する本連載の第1回は、いかがでしたでしょうか。今回は、バージョン13で導入された新機能として、非常にインパクトのあるAI関連の機能であるLaravel BoostとLaravel AI SDKを紹介しました。
次回は、Laravelバージョン13で導入されたAI以外の機能を紹介します。
