Kamis, 13 July 2023

Cara Mengintegrasikan OpenAI ke dalam Laravel

Dalam artikel ini kita akan belajar tentang bagaimana menggunakan open ai dalam Laravel. Mungkin Anda sudah pernah sebelumnya bermain dengan ai dengan menggunakan ChatGPT atau yang lain mirip dengan itu.

Laravel
Open AI

Mungkin Anda sudah pernah sebelumnya bermain dengan ai dengan menggunakan ChatGPT atau yang lain mirip dengan itu. Tapi kali ini kita akan menggunakan open ai dengan Laravel. Jadi, mari kita mulai.

Apa itu Open AI?

Open AI adalah sebuah platform yang memungkinkan kita untuk membuat AI yang dapat digunakan untuk berbagai keperluan.

Membuat Project Laravel

Pertama-tama kita akan membuat project Laravel terlebih dahulu.

laravel new open-ai-with-laravel

Atau Anda bisa menggunakan composer untuk membuat project Laravel.

composer create-project --prefer-dist laravel/laravel open-ai-with-laravel

Install Package Open AI

Setelah itu, maka kita bisa lanjut ke langkah selanjutnya yaitu menginstall package yang telah dibuat oleh Nuno Maduro.

composer require openai-php/laravel

Setelah itu, silakan publish vendor tersebut dengan menggunakan perintah berikut.

php artisan vendor:publish --provider="OpenAI\Laravel\ServiceProvider"

Dengan perintah itu, maka kita akan diberikan 1 file dengan nama openai.php yang berada di dalam folder config. Perhatikan pada bagian:

config/openai.php
return [
    'api_key' => env('OPENAI_API_KEY'),
    // ...    
];

Yang itu berarti dia berharap kita mempunyai sebuah environment variable dengan nama OPENAI_API_KEY. Jadi, silakan buat environment variable tersebut di dalam file .env Anda.

.env
OPENAI_API_KEY=sk-...

Anda bisa melihat open ai key Anda di platform.openai.com/. Jika Anda belum mempunyai akun, silakan daftar terlebih dahulu.

Untuk menggunakan package ini sangat mudah sekali pastinya. API nya sangat mudah dipahami.

use OpenAI\Laravel\Facades\OpenAI;

$result = OpenAI::completions()->create([
    'model' => 'text-davinci-003',
    'prompt' => 'Do you have a cat ?',
]);

echo $result['choices'][0]['text'];

Atau Anda juga bisa menggunakan model lain seperti misalnya gpt-3.5-turbo.

Anda bisa melihat semua model di Open AI Models.

$response = OpenAI::chat()->create([
    'model' => config('openai.model.turbo'),
    'messages' => [[
        'role' => 'user',
        'content' => $request->input('prompt'),
    ]],
]);

return collect($result['choices'])->map(fn ($choice) => [
    'index' => $choice['index'],
    'role' => ucfirst($choice['message']['role']),
    'content' => str($choice['message']['content'])->markdown(),
    'finish_reason' => $choice['finish_reason'],
]);

Simple Workflow

Karena kita tidak mempunyai setup yang sangat serius disini, jadi saya berencana untuk memandu Anda menggunakan laravel command saja.

Membuat Command

Pertama sekali, silakan buat command terlebih dahulu.

php artisan make:command AskAi

Dengan begitu, maka kita akan diberikan file baru tepatnya di dalam folder app/Console/Commands/AskAi.php. Silakan buka file tersebut dan ubah menjadi seperti berikut.

AskAi.php
namespace App\Console\Commands;

use OpenAI\Laravel\Facades\OpenAI;
use Illuminate\Console\Command;

class AskAiCommand extends Command
{
    protected $signature = 'ask:ai';
    protected $description = 'Asking for help the to AI';

    public function handle(): void
    {
        $ask = $this->ask('Your question?');
        $result = OpenAI::completions()->create([
            'model' => 'text-davinci-003',
            'prompt' => $ask,
            'max_tokens' => 250,
        ]);

        $this->warn($ask);
        $this->info($result['choices'][0]['text']);
    }
}

Dengan begitu, maka kita bisa menjalankan command tersebut dengan menggunakan perintah berikut.

php artisan ask:ai

Kurang lebih akan seperti ini hasilnya. Screenshot Ask AI Command Parsinta.com

Jadi jika Anda bekerja dengan controller, sudah pasti Anda bisa mengganti $this->ask('Your question?') menjadi $request->get('question') atau yang lainnya.

Semoga artikel ini bermanfaat dan selamat mencoba. Saya irsyad, sampai jumpa di artikel selanjutnya.