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.