【Laravel】Laravel AI SDKでテキスト生成を実装する基本

laravelアイキャッチ Laravel

こんにちは、かつコーチです。

前回はAPIキーの準備が終わりました。
いよいよここから、Laravel AI SDKを使って実際にテキスト生成を実装していきます。

この記事では、Ai::make()->prompt()の基本的な使い方から、プロバイダーの切り替え、レスポンスの表示方法までを一気に解説します。

Laravel AI SDKとは?

専門用語の整理

Laravel AI SDKとは、前回の記事で紹介した通り、Laravel公式が提供する高レベルのAI連携フレームワークです。
プロバイダーごとに違う「電源プラグの形」を統一してくれる変換アダプターの役割を果たすPrism PHPをベースに、Agentやメモリなどの機能を積み上げたものです。

プロバイダーとは、実際にLLMを提供する会社・サービスのことです。
OpenAI、Anthropic、Gemini、Groq、xAI、そしてローカル実行のOllamaなどが該当します。

なぜAi::make()という書き方なのか

Laravel AI SDKは、EloquentのModel::query()のようなメソッドチェーン形式を採用しています。
これにより、プロンプトの組み立て・プロバイダー指定・生成実行を、読みやすい一連の流れとして書けます。

実装手順

手順1:インストールとconfig/ai.phpの用意

まずcomposerでパッケージを導入し、設定ファイルを公開します。

composer require laravel/ai-sdk
php artisan vendor:publish --tag=ai-config

config/ai.phpでデフォルトプロバイダーを設定します。

// config/ai.php
return [
    'default' => env('AI_DEFAULT_PROVIDER', 'openai'),

    'providers' => [
        'openai' => [
            'model' => 'gpt-4o-mini',
        ],
        'anthropic' => [
            'model' => 'claude-3-5-haiku-latest',
        ],
    ],
];

手順2:基本のテキスト生成

もっともシンプルな形は、次の通りです。

// routes/web.php
use Illuminate\Support\Facades\Ai;

Route::get('/ai-test', function () {
    $response = Ai::make()
        ->prompt('Laravelの初心者に向けて、Eloquentの魅力を3行で説明してください')
        ->generate();

    return $response->text;
});

prompt()にユーザーからの指示文を渡し、generate()を呼ぶだけでLLMからの応答を取得できます。

手順3:プロバイダーを切り替える

config/ai.phpのデフォルトを使わず、その場でプロバイダーを指定することもできます。

$response = Ai::make()
    ->using('anthropic')
    ->prompt('同じ質問をAnthropicのモデルにも聞いてみます')
    ->generate();

コストや精度に応じて、リクエストごとに使い分けられるのがLaravel AI SDKの強みです。

手順4:レスポンスの取得と表示

レスポンスオブジェクトには、生成テキスト以外にも使用トークン数などの情報が含まれます。

$response = Ai::make()
    ->prompt('今日の日報を3行でまとめてください: ' . $reportText)
    ->generate();

echo $response->text;
echo $response->usage->totalTokens; // 使用したトークン数

Bladeテンプレートに渡す場合は、コントローラーで取得したテキストをそのままビューに渡せば十分です。

// app/Http/Controllers/ReportController.php
public function summarize(Request $request)
{
    $response = Ai::make()
        ->prompt('次の日報を3行で要約してください: ' . $request->input('body'))
        ->generate();

    return view('reports.summary', ['summary' => $response->text]);
}

つまずきやすい設定・注意点

config/ai.phpを公開せずにAi::make()を呼ぶと、デフォルトプロバイダーの設定が見つからずエラーになります。
必ずvendor:publishを実行してから、.envにプロバイダー用のAPIキーが設定済みか確認しましょう。

よくあるつまずきポイント・エラー対処

❌Before:モデル名を間違えて指定した

実際に検証していたとき、config/ai.phpのモデル名を古い記事からコピペしてしまい、次のエラーに遭遇しました。

Prism\Prism\Exceptions\PrismException: The model "gpt-4" is not supported by the configured provider adapter.

✅After:現行のモデル名に修正して解決

原因は、Laravel AI SDKが内部で利用するPrismのバージョンで、モデル名の指定方式が変わっていたことでした。
gpt-4のような簡略表記ではなく、gpt-4o-miniのような正式なモデルIDを指定する必要がありました。

// ❌Before
'openai' => [
    'model' => 'gpt-4',
],

// ✅After
'openai' => [
    'model' => 'gpt-4o-mini',
],

モデル名はプロバイダー側の仕様変更で頻繁に更新されるため、公式ドキュメントの最新のモデル一覧を都度確認するようにしています。

応用・一歩先の使い方

Ai::make()はチェーンの途中でtemperature(生成のランダム性を調整する値)なども指定できます。

$response = Ai::make()
    ->prompt('新商品のキャッチコピーを5案考えてください')
    ->temperature(0.9)
    ->generate();

創造性が欲しいコピー生成はtemperatureを高めに、事実に基づく要約は低めに設定するのがコツです。
次回はPrism PHPで同じ処理を実装し、書き味の違いを比較します。

まとめ

この記事のポイント

  • Ai::make()->prompt()->generate()が基本の呼び出しパターン
  • using()でリクエストごとにプロバイダーを切り替えられる
  • レスポンスにはテキストだけでなく使用トークン数も含まれる
  • モデル名はプロバイダー仕様の変更で古くなりやすいので、公式ドキュメントを確認する

次に読むべき記事

コメント

タイトルとURLをコピーしました