LaravelでGoogleのGemini AIを利用する方法

目次

スポンサードリンク

アカウントの作成とAPIキーの用意

まずは Gemini のサイトにアクセスして APIキーを取得しましょう。
https://aistudio.google.com/app/apikey

画面左側のメニューから、Get API Key ⇒ Create API Key の順にクリックします。APIキーが発行されたら、.env ファイルに設定しておきます。

GEMINI_API_KEY=your_api_key_here

Laravelアプリの作成

Windows上に構築したLaravel開発環境で試していきます。開発環境の構築がまだの場合はこちらの記事を参考にしてください。

コマンドプロンプトで以下コマンドを実行してLaravelのアプリを作成しましょう。

C:\apps>composer create-project laravel/laravel gemini-client
C:\apps>cd gemini-client
C:\apps\gemini-client> npm install

コントローラーの用意

画面からの質問を受け付け、GeminiのAPIを呼び出す処理を用意します。処理を書くコントローラーを用意します。

C:\apps\gemini-client> php artisan make:controller GeminiController
INFO  Controller [C:\apps\gemini-client\app/Http/Controllers/GeminiController.php] created successfully.  

コントローラーは以下の様にしておきます。画面を初期表示する際と質問を する際のそれぞれの処理を記述する関数を用意しておきます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class GeminiController extends Controller
{
    /**
    * index
    *
    * @param  Request  $request
    */
    public function index(Request $request)
    {
        return view('index');
    }

    /**
    * post
    *
    * @param  Request  $request
    */
    public function post(Request $request)
    {
    }
}

routes/web.php に以下を追記します。

use App\Http\Controllers\GeminiController;

Route::get('/', [GeminiController::class, 'index']);
Route::post('/', [GeminiController::class, 'post']);

画面の用意

resources/views/index.blade.php にファイルを用意します。

<html>
<head>
    <meta charset='utf-8' />
</head>
<body>
    <form method="POST">
        @csrf
        <input type="text" name="sentence" value="{{ isset($sentence) ? $sentence : '' }}">
        <button type="submit">質問する</button>
    </form>
    {{-- 結果 --}}
    {{ isset($response_text) ? $response_text : '' }}
</body>
</html>

ライブラリのインストール

今回は、https://github.com/aydinfatih が公開しているライブラリ、Gemini PHP を利用します。composer でライブラリをインストールしておきます。

C:\apps\gemini-client> composer require google-gemini-php/client

テキストで質問する方法

テキストでGeminiと対話する方法はシンプルです。APIキーを元にクライアントを作成し、以下の様にgeminiProモデルのgenerateContentメソッドにテキストを渡して実行します。

$yourApiKey = getenv('YOUR_API_KEY');
$client = Gemini::client($yourApiKey);

$result = $client->geminiPro()->generateContent('Hello');
$result->text(); 

コントローラーの処理を以下のように書き換えます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

use Gemini\Laravel\Facades\Gemini;

class GeminiController extends Controller
{
    /**
    * index
    *
    * @param  Request  $request
    */
    public function index(Request $request)
    {
        return view('index');
    }

    /**
    * chat
    *
    * @param  Request  $request
    */
    public function post(Request $request)
    {
        // バリデーション
        $request->validate([
            'sentence' => 'required',
        ]);

        // 画面で入力した質問
        $sentence = $request->input('sentence');

        // .env に設定したAPIキー
        // .env には GEMINI_API_KEY='' の形式でAPIキーを追加しておきます。
        $yourApiKey = getenv('GEMINI_API_KEY');
        $client = Gemini::client($yourApiKey);

        $result = $client->geminiPro()->generateContent($sentence);        
        $response_text = $result->text(); // Gemini からの応答を取得

        return view('index', compact('sentence', 'response_text'));
    }

}

開発サーバーを起動して質問してみる

開発サーバーを実行してブラウザでアクセスしてみます。

C:\apps\geminigpt-client> php artisan serve

画像を渡して質問する方法

Geminiへの入力にテキストと画像の両方が含まれる場合は、gemini-pro-visionモデルを使用すると、配列でテキストとBlobオブジェクトを渡すことができます。

$result = Gemini::geminiProVision()
->generateContent([
'What is this picture?',
new Blob(
mimeType: MimeType::IMAGE_JPEG,
data: base64_encode(
    file_get_contents('https://storage.googleapis.com/generativeai-downloads/images/scones.jpg')
)
)
]);

$result->text();

チャット形式で会話を続ける方法

startChatメソッドを使用すると、複数回にわたってチャット形式で会話を続けることができます。

$chat = $client
->geminiPro()
->startChat(history: [
Content::parse(part: 'The stories you write about what I have to say should be one line. Is that clear?'),
Content::parse(part: 'Yes, I understand. The stories I write about your input should be one line long.', role: Role::MODEL)
]);

トークン数を数える方法

countTokensメソッドにテキストを渡すと消費するトークン数を確認することができます。API にはトークン数の制限がある場合がほとんどなので、事前にチェック処理を入れる際に役立つかもしれません。

$response = $client
->geminiPro()
->countTokens('トークンをカウントしたい文字列');

echo $response->totalTokens; 

まとめ

LaravelからGemini AI を利用する方法を解説しました。利用方法はシンプルですね。OpenAI のChatGPT を利用するライブラリの利用方法とも似ています。BardからGeminiに名称変更され、API側もまだまだ発展途上で進化していくでしょう。ライブラリもバージョン1.0.0が今年の2月に公開されたばかりです。引き続き、注目度の高いAPI、ライブラリですね。


スポンサードリンク

PHP、Laravelを学ぶ際のおすすめ書籍

プロフェッショナルWebプログラミング Laravel
Docker Desktop + Laravel Sail を使った環境構築に始まり、Twitter風アプリを題材に基本的なアプリケーション構築の流れを学べます。メール送信やログイン、バッチ処理など実践的な内容もかかれてたので最初の一歩にはおすすめです。


レベルアップPHP ~言語を理解して中級者へ~
PHPの入門書を読み終えさらなる実力をつけたいエンジニア向けの技術書です。PHPの入門書にはあまり載っていないバージョンアップ方法やパフォーマンスなど、実務に役立つ内容も記載が豊富。30日間の無料体験もできる『Kindle Unlimited』でも読めます。

関連記事