No post de hoje vamos consultar com poucas linhas de código o ChatGPT (Chat Generative Pre-trained Transformer) da OpenAI via API.
Para simplificar nosso exemplo vamos utilizar a linguagem de programação PHP em seu modo de linha de comando, fique a vontade para implementar em outras linguagens e modos.
Antes de iniciarmos vamos entender um pouco mais o que é esse ChatGPT. ChatGPT é um protótipo de um chatbot com inteligência artificial desenvolvido pela OpenAI e especializado em diálogo. O chatbot é um modelo de linguagem ajustado com técnicas de aprendizado supervisionado e por reforço. O modelo básico que foi ajustado foi o modelo de linguagem GPT-3.5 da OpenAI, uma versão melhorada do GPT-3. O ChatGPT foi lançado em novembro de 2022 e chamou a atenção por suas respostas detalhadas e articuladas, embora a precisão de suas informações tenha sido criticada. (wikipedia)
Primeira ação que devemos fazer é solicitar a API KEY que é sua chave de acesso a esta API, acesse o endereço https://platform.openai.com/account/api-keys
Com sua chave em mão vamos criar nosso arquivo de teste, em nosso exemplo: test.php
<?php
$OPENAI_API_KEY = "SUA CHAVE API KEY AQUI";
É importante usar boas práticas para o uso de sua chave, veja aqui algumas recomendações: https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety
Em seguida lemos da entrada qual será a pergunta.
$pergunta = readline('Informe sua pergunta: ');
print "\nSua Pergunta foi: " . $pergunta;
print "\nResposta da OpenAI: ";
Estamos usando ” \n “ para quebrar a linha já que estamos em modo prompt.
Agora vamos iniciar nosso objeto CURL e montar nosso cabeçalho da requisição.
$ch = curl_init();
$headers = [
'Accept: application/json',
'Content-Type: application/json',
'Authorization: Bearer ' . $OPENAI_API_KEY . ''
];
Agora vamos preparar nossos dados a ser postado.
$postData = [
'model' => 'text-davinci-003',
'prompt' => str_replace('"', '', $pergunta),
'temperature' => 0.9,
'max_tokens' => 100,
'top_p' => 1,
'frequency_penalty' => 0.0,
'presence_penalty' => 0.0,
'stop' => '[" Human:", " AI:"]',
];
Para obter mais informações sobre estes e outros parametros recomendo a leitura da documentação oficial no endereço: https://platform.openai.com/docs/introduction
Por fim vamos setar os valores do nosso objeto CURL e realizar a requisição e imprimir o resultado.
curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
$result = curl_exec($ch);
$decoded_json = json_decode($result, true);
print "\n".$decoded_json['choices'][0]['text'];
Agora vamos testar nosso script com o código abaixo.
$ php test.php
Após digitar nossa pergunta é só aguardar o retorno da API.
Com isso temos o resultado da nossa pergunta ao ChatGPT.
Existem outras formas de consultar esta API, muito rica em recursos, recomendo leitura da documentação oficial.
Segue todo o código do script do nosso arquivo test.php
<?php
/** Consultando ChatGPT / OpenIA
* Carlos Rolim
* SOLOWEB - soloweb.com.br
*/
$OPENAI_API_KEY = "SUA CHAVE API KEY AQUI";
$pergunta = readline('Informe sua pergunta: ');
print "\nSua Pergunta foi: " . $pergunta;
print "\nResposta da OpenAI: ";
$ch = curl_init();
$headers = [
'Accept: application/json',
'Content-Type: application/json',
'Authorization: Bearer ' . $OPENAI_API_KEY . ''
];
$postData = [
'model' => 'text-davinci-003',
'prompt' => str_replace('"', '', $pergunta),
'temperature' => 0.9,
'max_tokens' => 100,
'top_p' => 1,
'frequency_penalty' => 0.0,
'presence_penalty' => 0.0,
'stop' => '[" Human:", " AI:"]',
];
curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
$result = curl_exec($ch);
$decoded_json = json_decode($result, true);
print "\n".$decoded_json['choices'][0]['text'];