LaravelでAWS Bedrockを使ってテキストを生成する

LaravelでAWS Bedrockを活用する方法について解説します。

AWS SDK for PHPとBedrockRuntimeClientのセットアップ、そしてMetaのLlama 2 70BとAnthropicのClaude 2の使用方法を説明しします。

aws/aws-sdk-php-laravelのインストール

LaravelでAWS SDK for PHPを使うために、aws/aws-sdk-php-laravelをインストールする必要があります。
このライブラリは、AWSの各種サービスとLaravelアプリケーションを簡単に連携させるためのツールです。

インストール手順

  1. aws/aws-sdk-php-laravelの公式サイトにアクセスします。
  2. インストールガイドに従ってセットアップを完了させます。

BedrockRuntimeClientの作成

BedrockRuntimeClientを作成します。

use Aws\BedrockRuntime\BedrockRuntimeClient;

/** @var BedrockRuntimeClient $client */
$client = App::make('aws')->createClient('bedrockruntime');

このクライアントを使用して、AWSの機能をLaravelアプリケーション内で活用できます。

MetaのLlama 2 70Bを使う

MetaのLlama 2 70Bモデルを使用して、AIによるテキスト生成を試みます。

パラメータの設定

$body = [
    'prompt' => $prompt,
    'max_gen_len' => 512,
    'temperature' => 0.5,
    'top_p' => 0.9,
];

モデルの実行とレスポンスの取得

モデルを実行し、生成されたテキストを取得します。

$response = $client->invokeModel([
    'body' => json_encode($body),
    'modelId' => 'meta.llama2-70b-chat-v1',
]);

/** @var Stream $body */
$body = $response['body'];
$response_body = json_decode($body->getContents());
$result = trim($response_body->generation);

AnthropicのClaude 2を使う

AnthropicのClaude 2モデルも同様に使用できますが、リクエストとレスポンスの形式がわずかに異なります。

$body = [
    'prompt' => $prompt,
    'max_tokens_to_sample' => 512,
    'temperature' => 0.5,
    'top_p' => 0.9,
];

$response = $client->invokeModel([
    'body' => json_encode($body),
    'modelId' => 'anthropic.claude-v2',
]);

/** @var Stream $body */
$body = $response['body'];
$response_body = json_decode($body->getContents());
$result =  trim($response_body->completion);

MySQLで個人情報をマスキングする方法(一文字残して*で埋める)

背景

本番環境のデータを検証環境で利用する際に、個人情報を適切にマスキングが必要になりました。

具体的には、名前などの個人情報を変換し、一部の文字を残して他は*で置き換える必要があります。

例
変換前 -> 変換後
鈴木一郎 -> 鈴***
山田太郎 -> 山***

データベースにはMySQL 5.7が使用されています。

解決方法

MySQLで特定の条件で文字列を変換するためには、SUBSTRINGやCONCATなどの文字列関数を利用します。

以下は、usersテーブルのname列に対して、一文字目を残し、残りの文字を*で埋めるSQLの例です。

UPDATE users
SET name = CONCAT(SUBSTRING(name, 1, 1), REPEAT('*', CHAR_LENGTH(name) - 1))

このクエリでは、SUBSTRING関数で文字列の最初の文字(一文字目)を抽出し、REPEAT関数で残りの文字を*で埋めます。
最終的にCONCAT関数でこれらを結合して、変換された名前を取得します。

最後に

プログラムでレコードを1つずつ取得し文字列を変換する方法もありますが、SQLを使用することで効率的に変換できました。

Laraveでフィールドの値をランダムな整数値に更新する

Laraveでフィールドの値をランダムな整数値に更新するには、MySQLのRAND()関数とCEIL()関数を使います。

RAND()関数は0以上1以下のランダムな浮動小数値を返します。

RAND()関数の返り値を2147483647倍すると、0以上2147483647以下のランダムな値になります。

CEIL()関数は引数の値を切り上げて整数値を返すので、RAND()関数の返り値にCEIL()関数を適用すると、0以上2147483647以下の整数値をランダムに生成できます。

次のコードは、すべてのUserのtokenフィールドをランダムな値に更新する例です。

// すべてのUserのtokenフィールドをランダムな値に更新
User::query()->update(['token' => DB::raw('CEIL(RAND() * 2147483647)')]);

Laravel SailでSSL(HTTPS)接続するには

Laraveでアプリケーションを開発しているする場合、Laravel Sailを使うと「http://~」でプロジェクトにアクセスできます。

しかし、使用する機能によっては(たとえばWebRTCを使う場合)、「https://〜」でアクセスする必要があります。

Sail-SSL」は、Laravel SailでHTTPS接続を設定するためのプラグインです。

Sail-SSLを使うと、Laravel Sailで簡単に「https://〜」にアクセスできるようになります。

Sail-SSLの導入

すでにLaravel Sailを使ったアプリケーションが存在する場合は、次の手順で導入できます。

(1) Laravel Sailを起動します。

./vendor/bin/sail up -d

(2) 以下のコマンドを実行して、Sail-SSLをインストールします。

./vendor/bin/sail composer require ryoluo/sail-ssl --dev

「composer require ryoluo/sail-ssl –dev」は、Sail-SSLをインストールするためのコマンドです。
このコマンドを実行すると、Sail-SSLのプラグインがインストールされます。

(3) 以下のコマンドを実行して、SSLを有効にします。

./vendor/bin/sail artisan sail-ssl:install

「sail-ssl:install」は、Sail-SSLを使ってSSLを有効にするコマンドです。
このコマンドを実行すると、Nginxの設定が変更され、HTTPS接続が有効になります。

(4) 以下のコマンドを実行して、Laravel Sailを再起動します。

./vendor/bin/sail down
./vendor/bin/sail up

コンテナーが起動したら「https://localhost」でアクセスできるようになります。

HTTPSアクセスの強制

リンクのURLがhttpになっています。
httpsでアクセスするように設定します。

app/Providers/AppServiceProvider.phpを編集します。

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        URL::forceScheme('https');
    }

ViteのSSL対応

httpsでアクセスできるようになりましたが、まだViteがhttpsに対応していません。
httpsとhttpが混在するとMixed Contentのエラーになります。

vite-plugin-basic-ssl」をインストールして、ViteをSSLに対応します。

npm i -D @vitejs/plugin-basic-ssl

インストールが完了したら、「vite.config.js」を編集します。

// vite.config.js
import basicSsl from '@vitejs/plugin-basic-ssl'

export default {
  plugins: [
    basicSsl()
  ]
}

以上で、自己証明書が作成され、httpsでアクセスできるようになります。