【Laravel】Laravel 13のAI SDKを徹底解説(テキスト・画像・音声生成)

laravelアイキャッチ Laravel

こんにちは、かつコーチです。
前回の記事でLaravel 13の全体像を紹介しましたが、今回はその中でも注目度が高いLaravel AI SDK(AIモデルをLaravelアプリから統一的に扱うための公式SDK)を深掘りします。
「AIをアプリに組み込みたいけど、プロバイダーごとにSDKが違って面倒」と感じている方にこそ読んでほしい内容です。
テキスト生成・画像生成・音声生成の3つを、実際に動くコード例つきで解説します。

Laravel AI SDKとは?

プロバイダー非依存API という考え方

Laravel AI SDKの最大の特徴は、プロバイダー非依存API(OpenAI・Anthropic・Gemini・Azure・Groq・DeepSeek・Ollamaなど、どのAIプロバイダーを使っても同じ書き方でコードを書けるAPI設計)です。
たとえば以下のように、make()でクラスを生成し、prompt()でプロンプトを渡すだけの共通インターフェースが用意されています。

use Illuminate\Support\Facades\Ai;

$response = Ai::make()->prompt('Laravelとは何か、初心者向けに説明してください');

echo $response->text;

プロバイダーを切り替えたいときは、設定ファイル側を変更するだけで済み、アプリケーションコードを書き換える必要がありません。
これまでOpenAI用SDKとAnthropic用SDKを別々に書いていたプロジェクトでは、この統一APIだけでもかなりのコード削減になります。

対応プロバイダー一覧

Laravel AI SDKが対応する主なプロバイダーは次のとおりです。

プロバイダー主な用途
OpenAIテキスト・画像・音声生成全般
Anthropicテキスト生成(長文の要約・分析に強い)
Geminiテキスト・画像生成
AzureOpenAIモデルをAzure経由で利用
Groq高速な推論が必要なテキスト生成
DeepSeekテキスト生成
Ollamaローカル環境でのモデル実行

どれを選ぶかは「クラウドで手軽に使いたいならOpenAI/Anthropic/Gemini」「コストを抑えつつ高速に動かしたいならGroq」「機密データを外部に出せないならOllamaでローカル実行」という軸で考えるとよいでしょう。

基本の書き方:テキスト・画像・音声生成

テキスト生成

もっとも基本的な使い方がテキスト生成です。
config/ai.phpでデフォルトプロバイダーを設定しておけば、あとはメソッドチェーンで完結します。

use Illuminate\Support\Facades\Ai;

class ArticleSummaryController extends Controller
{
    public function summarize(Request $request)
    {
        $response = Ai::make()
            ->prompt("以下の記事を3行で要約してください。\n\n" . $request->input('body'));

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

画像生成

画像生成も同じAiファサードから呼び出せます。
image()メソッドでプロンプトを渡すと、生成された画像のURLまたはバイナリデータが返ります。

use Illuminate\Support\Facades\Ai;

$image = Ai::make()->image('青空の下で本を読む猫のイラスト、水彩画風');

Storage::disk('public')->put(
    'generated/cat.png',
    $image->binary
);

音声生成

音声生成(テキストを読み上げ音声に変換する処理)も同様の書き方です。

use Illuminate\Support\Facades\Ai;

$speech = Ai::make()->speech('こんにちは、かつコーチです。今日はLaravel 13のAI SDKを解説します。');

Storage::disk('public')->put(
    'generated/intro.mp3',
    $speech->binary
);

テキスト・画像・音声のすべてが、Ai::make()から始まる共通の書き方で扱えるのがLaravel AI SDKの強みです。

会話履歴を保存するRemembersConversations

チャットボットのように会話を継続させたい場合は、RemembersConversationsトレイトを使います。

use Illuminate\Support\Facades\Ai;
use Illuminate\Foundation\Ai\Concerns\RemembersConversations;

class SupportChatService
{
    use RemembersConversations;

    public function reply(string $userMessage, string $conversationId): string
    {
        $response = Ai::make()
            ->conversation($conversationId)
            ->prompt($userMessage);

        return $response->text;
    }
}

conversation()に会話IDを渡すことで、過去のやり取りを踏まえた応答が返ってくるようになります。
問い合わせフォームのチャットサポートなど、文脈を保持したいシーンで重宝します。

構造化出力とレスポンスの型を固定する

AIの回答を自由文ではなくJSON形式などで受け取りたい場合は、構造化出力(レスポンスの形式をあらかじめ指定してAIに出力させる機能)を使います。

$response = Ai::make()
    ->schema([
        'title' => 'string',
        'tags' => 'array',
    ])
    ->prompt('この記事にふさわしいタイトルとタグ候補を提案してください: ' . $body);

$data = $response->structured;
// $data['title'], $data['tags'] として扱える

自由文だと後続処理でパースが不安定になりがちですが、構造化出力を使えばアプリ側で扱いやすい形が保証されます。

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

つまずき1:デフォルトプロバイダーの設定漏れ

筆者が実際にAI SDKを試したとき、最初にAi::make()->prompt(...)を呼び出した瞬間に「プロバイダーが設定されていません」という趣旨のエラーが出ました。
config/ai.phpのデフォルトプロバイダー設定を確認せずにコードだけ書いてしまったのが原因でした。

// ❌ Before:APIキーだけ.envに書いてconfig側の設定を見落とす
AI_OPENAI_API_KEY=sk-xxxxx
// ✅ After:config/ai.php でデフォルトプロバイダーを明示する
return [
    'default' => env('AI_PROVIDER', 'openai'),
    // ...
];

.envにAPIキーを書いただけで満足せず、config/ai.php側のデフォルトプロバイダー指定まで必ず確認しましょう。

つまずき2:自動フェイルオーバーの設定不足によるタイムアウト

Laravel AI SDKには複数プロバイダー間の自動フェイルオーバー(あるプロバイダーへのリクエストが失敗したとき、自動で別プロバイダーに切り替える機能)がありますが、フォールバック先を設定しないと1プロバイダーの障害がそのままアプリ全体の障害になります。

// ❌ Before:フォールバック先を設定していない
$response = Ai::make()->prompt($userMessage);
// メインプロバイダーが落ちるとそのまま例外が発生する
// ✅ After:フォールバック先を明示しておく
$response = Ai::make()
    ->fallback(['anthropic', 'groq'])
    ->prompt($userMessage);

本番環境でAI機能を使う場合は、最低1つはフォールバック先を設定しておくことを強くおすすめします。

応用・一歩先の使い方

RAGアプリへの接続を見据える

Laravel AI SDKは単体でも便利ですが、真価を発揮するのは次回紹介するセマンティック検索whereVectorSimilarTo())と組み合わせたときです。
社内ドキュメントをベクトル検索で絞り込み、その結果をAI SDKのプロンプトに埋め込んで回答を生成する、いわゆるRAG(Retrieval-Augmented Generation)構成が組みやすくなります。

Queue RoutingでAI処理を専用キューに逃がす

画像生成や音声生成は処理時間が長くなりがちです。
Laravel 13で追加されたQueue Routingを使い、AI生成ジョブだけ専用のキューに振り分けておくと、通常のWebリクエスト処理をブロックせずに済みます。

use Illuminate\Support\Facades\Queue;

Queue::route(GenerateArticleImageJob::class, connection: 'redis', queue: 'ai-generation');

まとめ

この記事のポイント

  • Laravel AI SDKはOpenAI/Anthropic/Gemini/Azure/Groq/DeepSeek/Ollamaに対応するプロバイダー非依存API
  • Ai::make()->prompt()でテキスト、->image()で画像、->speech()で音声生成ができる
  • RemembersConversationsで会話履歴を保持、構造化出力でJSON形式のレスポンスを得られる
  • config/ai.phpのデフォルトプロバイダー設定と、自動フェイルオーバーの設定漏れに注意する

次に読むべき記事

  • 「Laravel 13とは?Laravel 12からの変更点まとめ」
  • 「Laravel 13のセマンティック検索(ベクトル検索)を試す」

タグ: #Laravel #Laravel13 #中級者向け #AI活用

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