Incluindo OpenAI ChatGPT a uma aplicação Laravel
Olá, mundo!
Tudo bem?
Nos dias atuais vivemos a coqueluche sobre a Inteligência Artificial, suas ferramentas como a aplicação de aprendizado de máquina e aprendizado profundo, certamente causa espanto, admiração, pois de fato é um instrumento que pode dar inúmeras possibilidades, como estudos avançados no combate ao câncer, por exemplo. Dentre outras boas novas que poderão ser fornecidas para toda a Humanidade. No entanto a IA não é algo que novo, no campo da Computação, já se tem há algum tempo, desde a década de 50, inclusive. Bom, não me alongarei mais, iremos para a práxis, com o intuito de exemplificar sua aplicabilidade com a API da OpenAI em seus projetos Laravel. Este exemplo foi inspirado e adaptado do autor Ahmad Rosid, importante deixar os créditos.
Vamos ao Trabalho\\
Antes de mais nada, necessitamos de criar nossa conta na OpenAI.
Depois de criar sua conta, e posteriormente criar a sua chave de API, vamos criar nosso projeto Laravel:
composer create-project laravel/laravel laravel-gpt
agora com nosso projeto criado, vamos editar nosso arquivo de ambiente .env incluir nossa chave da API da seguinte maneira:
OPENAI_API_KEY="<sua chave API>"
Próximo passo é na pasta de nosso projeto, instalar a biblioteca da OpenAI via composer:
composer require openai-php/client
Agora um passo importante é inserir no arquivo de configuração do Laravel /app/config/app.php, ao final no array associativo, conforme a foto abaixo:
'openai_api_key' => env('OPENAI_API_KEY'),
Com isso, ao iniciar nossa aplicação, ele automaticamente pegará a chave de nossa API, obtida no arquivo .env e assim poderemos fazer chamadas sem a necessidade de incluir em cada requisição que queremos fazer, tornado o código mais enxuto, limpo e eficiente, já falei sobre a arquitetura de uma aplicação Laravel aqui, caso não tenha visto, recomendo a leitura. Aproveitando o gancho, com intuito de demonstrar o padrão de projeto sobre este trecho, esta adoção seria o Facade. ; )
Após fazermos a inserção na configuração de nossa aplicação, devemos agora executar o seguinte comando:
php artisan config:cache
este comando tem o intuito de otimizar as configurações, através de cache, para que todas elas sejam permitidas em tempo de execução, novamente um padrão de projeto Facade. ; )
Vamos criar nossa View que terá um campo do tipo input para inserção do Título do Artigo a ser criado, e um textarea que será onde a API preencherá, através da chamada, o texto feito pelo algoritmo Da Vinci.
resources/views/artigo.blade.php
<!DOCTYPE html> <html lang="pt-br"> <head> <title>OpenAI com Laravel</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> <meta charset="utf-8"> </head> <body> <div class="card"> <div class="card-header">OpenAI - Laravel</div> <div class="card-body"> <form action="/artigo/gerar" method="post"> <!-- Input type text --> <div class="form-group row "> <label for="titulo" class="col-sm-2 col-form-label text-center">Título do Artigo</label> <div class="col-sm-10"> @csrf <input type="text" class="form-control form-control-lg" name="title" id="title" placeholder="Escreva aqui o Título de seu Artigo"> </div> </div> <!-- textarea --> <div class="form-group row "> <label for="content" class="col-sm-2 col-form-label text-center">Artigo criado pela OpenAI</label> <div class="col-sm-10"> <textarea class="form-control" rows="18" name="content" id="content">{{ $content }}</textarea> </div> </div> <!-- botão --> <div class="form-group row "> <label for="submit" class="col-sm-2 col-form-label text-center"></label> <div class="col-sm-10"> <button type="submit" class="btn btn-primary" name="submit" id="submit">Criar Artigo</button> </div> </div> </form> </div> </div> </body> </html>
Para fazermos a chamada desta View, vamos no arquivo de configuração de rotas do Laravel e façamos a inserção de dois métodos, um é um GET para pegarmos nossa View propriamente dita, neste caso na URL /artigo, e outro POST para mandarmos para nosso Controller que será criado, pegando o token da API, bem como a Request e nos retornar na variável {{ $content }} o texto criado pelo Chat-GPT.
Vamos criar nosso Controller:
php artisan make:controller GerarArtigoController
app/Http/Controllers/GeraArtigoController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use OpenAI; class GeraArtigoController extends Controller { // app/Http/Controllers/ArticleGenerator.php public function index(Request $input) { if ($input->title == null) { return; } $title = $input->title; $client = OpenAI::client(config('app.openai_api_key')); $result = $client->completions()->create([ "model" => "text-davinci-003", "temperature" => 0.7, "top_p" => 1, "frequency_penalty" => 0, "presence_penalty" => 0, 'max_tokens' => 600, 'prompt' => sprintf('Write article about: %s', $title), ]); $content = trim($result['choices'][0]['text']); return view('artigo', compact('title', 'content')); } }
Em nosso Controller iremos pegar as informações de nosso formulário com a injeção de dependência Request, em formato de array, iremos verificar se há um valor nulo, caso tenha nada é feito.
Posteriormente chamamos a API com a variável $client, em que usamos o método estático para tal. Com a variável $result iremos chamar o algoritmo text-davinci-003 que terá seus atributos e pesos para a criação de textos. E por fim retornamos para a View o conteúdo criado pela Inteligência Artificial.
agora vamos ao nosso arquivo de rotas routes/web.php e façamos a seguinte inserção:
use App\Http\Controllers\GeraArtigoController; Route::get('/artigo', function () { $title = ''; $content = ''; return view('artigo', compact('title', 'content')); }); Route::post('/artigo/gerar', [GeraArtigoController::class, 'index']);
Como podemos observar acima, fazemos a inclusão da chamada do Controller na palavra reservada use, posteriormente temos as rotas com o método GET, com a chamada de nossa View, e inicializando as variáveis em que ficaram o título ($title), e o conteúdo ($contet).
Já no método POST, chamamos o Index de nosso Controller que irá obter a requisição, bem como as variáveis supracitadas e retornar na textarea o artigo criado pela Inteligência Artificial.
Com tudo isso pronto, vejamos como funciona nossa aplicação:
php artisan serve
Incrível, não?
Como isso funciona?
O algoritmo Text-DaVinci-003 trabalha com um modelo de aprendizado profundo o qual utiliza uma rede neural artificial para gerar textos, este modelo é treinado com uma larga fonte de dados que provê certas proposições feitas a partir dos textos requisitados, como foi feito acima em nossa aplicação. Não é algo assustador?O computador criou o texto, ambos, sobre o PHP e como construir uma Classe Active Record em PHP, obviamente que não foi o código em si, no entanto de maneira bem coerente ele expôs um argumento muito coerente sobre o que pedimos.
Por hoje é isso, pessoal!
Muito interessante o que podemos fazer com esta ferramenta, inclusive para pontos positivos, como negativos, já que também pode ser empregada para efeito de criação e difusão de “Fake News”. Mas o intuito aqui foi o de demonstrar como ela pode nos ajudar, e quão fascinante é o avanço tecnológico, um forte abraço e até mais.
A leitura de todos os bons livros é uma conversação com as mais honestas pessoas dos séculos passados.