LaravelへのAI統合
ほとんどのAIチュートリアルは、Pythonを使用することを前提としています。
12年間PHPアプリを構築してきた経験から、最近、本番環境のLaravelダッシュボードにAI機能を実装しました。生のデータを人間が理解しやすいレポートに変換するために使用しました。
難しかったのはコードではありません。難しかったのは、このトピックに関する優れたPHPのコンテンツを見つけることでした。
以下に、Laravelでクリーンかつ本番環境に適したAI統合を構築する方法を紹介します。
アーキテクチャ
コントローラー内にAPIコールを散らさないでください。代わりに、ドライバーパターンを使用します。これにより、.env ファイルを1箇所変更するだけで、ClaudeとOpenAIを切り替えることができます。
コントラクト(規約)を定義する
AiClientInterfaceを作成します。これにより、ClaudeとOpenAIの両方が同じルールに従うことが保証されます。ドライバーを構築する
ClaudeClientとOpenAiClientを作成します。リクエストの処理にはLaravelのHTTPクライアントを使用してください。これにより、タイムアウトやリトライの処理が容易になります。サービスコンテナを使用する
AppServiceProviderでインターフェースを特定のクライアントにバインドします。match文を使用して、設定に基づいてプロバイダーを選択します。
相違点
エラーを避けるために、以下の5つの詳細を知っておく必要があります。
• Claudeはヘッダーに x-api-key を使用します。OpenAIは Authorization: Bearer を使用します。
• Claudeは anthropic-version ヘッダーを必要とします。
• Claudeは max_tokens を必要とします。OpenAIではオプションです。
• Claudeはトップレベルの system フィールドを使用します。OpenAIは role: system を持つメッセージを使用します。
• JSONレスポンスのパスが異なります。Claudeは content[0].text を使用し、OpenAIは choices[0].message.content を使用します。
本番環境でのヒント
• キャッシングを活用する: AIの呼び出しは時間がかかり、コストも発生します。データが同じであれば、キャッシュから結果を返してください。これにより、コストを70%削減できる可能性があります。
• キューを使用する: APIのレスポンスのために、ユーザーを10秒も待たせてはいけません。バックグラウンドジョブをディスパッチし、準備ができたら通知するようにします。
• 失敗を処理する: APIは失敗することがあります。呼び出しは try-catch ブロックで囲んでください。AIが失敗した場合は、エラーページを表示するのではなく、生のデータを表示するようにします。
• 制限を設定する: 支出を管理するために、常に max_tokens を設定してください。要約のような単純なタスクには、より小さく安価なモデルを使用してください。
AI機能を構築するためにPythonを学ぶ必要はありません。あなたのPHPスキルは、ここでも完璧に機能します。
