AOMEGACHAGPT – Integração da OpenAI API em aplicação PHP e criação de chatbot personalizado

Compartilho com vocês este pequeno projeto de minha autoria. Consegui integrar uma aplicação PHP com a OPENAI API e ainda realizar uma customização para conseguir fazer com que o ChatGPT embutido na minha aplicação respondesse perguntas específicas sobre minha empresa após “treinar” ele com minha “base de conhecimento”. Para os que preferem assistir em video segue a seguir o video que criei no Youtube:

Neste artigo ensinarei como acessar a API da OpenAI dentro de nossa aplicação. Mas eu quero que ele responda mensagens específicas sobre a minha empresa. Para isso eu preciso “ensinar” ele, passando informações sobre minha empresa que eu quero que ele esteja apto para responder a um visitante do meu site. 

Eu desenvolvo há vários anos em PHP e gosto muito. O PHP já nasceu sendo uma linguagem de desenvolvimento Web , não preciso aprender muitas tecnologias  nem frameworks para criar uma aplicação Web além de HTML ,CSS e o próprio PHP. Assim que foi disponibilizado a API criada pela OpenAI para fazer uso do ChatGPT dentro de várias linguagens meu interesse foi saber se já existia alguma coisa para o PHP.  O próprio site da OpenAPI exibe uma forma de se conectar com a API via Curl no PHP. Mas não consegui fazê-la funcionar e vi que a solução adotada por muitos passava longe do uso do Curl e sim pelo uso de uma biblioteca desenvolvida por uma comunidade de software livre bastante divulgada, no projeto “openai_php/client” que permite criar no PHP um cliente para a OpenAI API. 

Vamos precisar trabalhar com o PHP versão 8.1 ou superior e ter o Composer instalado em nossa máquina. 

Para baixar e instalar o Composer na sua máquina você pode acessar o link https://getcomposer.org/download/ .

Instalar o Composer é muito simples (em ambos os casos você deve ter o comando PHP disponível no terminal):

  • Se você estiver no Windows, só precisa baixar o arquivo composer-setup.exe que adicionará automaticamente o comando Composer ao PATH do seu sistema.
  • No UNIX/Linux você deve baixar composer.phar digitando a linha curl -sS https://getcomposer.org/installer | php no seu terminal. Você pode então executar o compositor utilizando php composer.phar

Também precisaremos utilizar nossa chave (Key) para autorizar o nosso acesso à OpenAI API. Se você não possui uma Key precisa obter uma se registrando em https://chat.openai.com .O Composer é amplamente utilizado pela comunidade de desenvolvedores PHP para instalar pacotes adicionais no PHP. Em nosso caso, precisaremos do Composer para instalar o pacote do cliente da OpenAI API, denominado de OPENAI_PHP/CLIENT. A seguir o comando para instalar o pacote na pasta raiz de nosso site.

composer require openai-php/client

Agora vamos criar um arquivo PHP, por exemplo aomegachatgpt_000.php, para criar o cliente do OPENAI API em nosso código:

require “vendor/autoload.php”;
$yourApiKey = “xp-Tuskdk2993wo\eldldlXQ”; // chave fake
$client = OpenAI::client($yourApiKey); 
$response = $client->chat()->create([‘model’ => ‘gpt-3.5-turbo’,     ‘messages’ => [ [‘role’ => ‘user’, ‘content’ => ‘Qual é a atividade principal da “Aomega Treinamento e Consultoria” cujo site está em “http://www.aomega.com.br” ?’],     ], ]);  
foreach ($response->choices as $result) {    
$result->index; // 0     $result->message->role; // ‘assistant’    
$result->message->content; //
$result->finishReason; // ‘stop’ } 
echo $result->message->content;  

$yourApiKey  –  variável para armazenar nossa KEY pessoal obtida após nosso registro no site da OpenAI. A nossa KEY não pode ficar visível para o mundo, lembre que o uso de nossa KEY da OpenAI API é pago se exceder o limite gratuito para testes, e o valor pago varia de acordo com o tráfego acumulado de nossa aplicação. Algumas pessoas armazenam a KEY dentro de um arquivo de ambiente do tipo .ENV mas esse arquivo poderia ser acessado por alguém externamente e “roubar” nossa KEY. Então é melhor nossa KEY estar apenas no servidor, no caso dentro de nosso script PHP, assim ela fica mais protegida.

$client – cliente da API obtido instanciando o método client da classe OpenAI do pacote instalado por nós utilizando o Composer.

Existem vários modelos disponíveis na API da OpenAI que podemos utilizar segundo a nossa conveniência. Não vou entrar aqui em detalhes sobre cada um desses modelos, alguns podem ser mais rápidos e outros mais poderosos, dependendo a finalidade que desejamos obter. Entre os modelos temos : gpt-3.5-turbo, da-vinci, curie, babbage, ada. O modelo da-vinci costuma ser mais rápido e com menor custo e atender em muitos casos as nossas necessidades. Em nosso exemplo estamos usando o modelo gpt-3.5-turbo mais versátil e poderoso, mais apropriado para um chat, embora acarrete num custo levemente maior.

$response –  Objeto gerado após a criação com nosso cliente de um chat com o modelo gpt.3-5.turbo. 

messages – array atributo de nosso cliente contendo a chave “role” ou papel, que no caso é o usuário interagindo (“user”), a chave “content” com o texto de nosso prompt com nossa solicitação ao chatgpt.

E logo depois inseri o texto de minha solicitação:

Qual é a atividade principal da “Aomega Treinamento e Consultoria” cujo site está em http://www.aomega.com.br      ?

Para capturar e visualizar a resposta do ChatGPT a minha solicitação posso acrescentar o seguinte código no final:

 foreach ($response->choices as $result) {    
$result->index; // 0    
$result->message->role; // ‘assistant’     
$result->message->content; // ‘    
$result->finishReason; // ‘stop’ }
echo echo $result->message->content; // resposta do chatgpt a ser exibida na tela de resposta ao usuário.    

Repare que depois de instanciado nosso cliente com nosso prompt, o valor do “role” muda de “user” para “assistant”. O assistente é que vai fornecer a resposta no atributo “content” atualizando o valor desta com a resposta do chatgpt à solicitação do usuário.

Bom, com esse código já dá para testar, mas reparem que eu forneci no código o texto do prompt, ele está fixo. O ideal seria ter uma tela com um formulário para que o usuário possa digitar o texto de sua solicitação em um formulário de um script PHP contendo o código mostrado anteriormente e exibisse a resposta na tela.

Vamos incrementar nosso script que vou denominar de aomegachatgpt2.php acrescentando o código HTML necessário no final.

<?php // código PHP mostrado anteriormente ?>
<!DOCTYPE html>
<html>
<head>
<title>Converse com o Aomega-GPT e esclareça suas dúvidas sobre nossos treinamentos</title>
</head>

<body>
    <h1>Converse com o Aomega-GPT e esclareça suas dúvidas sobre nossos treinamentos</h1>
    <form method=”POST” action=”aomegachatgpt2.php”>
        <?php if (isset($result)) {           
echo $result->message->content.”<br/><br/>”; 
        }  ?>

        <h3>O que você gostaria de saber?</h3><br>
         <textarea id=”duvida” name=”duvida” rows=”4″ cols=”50″>
</textarea><br>

        <input type=”submit” value=”Enviar”>
    </form>
</body>
</html>

Agora nosso código PHP está perfeito, temos o ChatGPT embutido em nossa aplicação funcionando. Mas não é isso que quero apenas. Quero que o ChatGPT possa responder perguntas específicas sobre minha empresa…

O problema é que o ChatGPT não acessa a web e sua base de dados não engloba conhecimento até o dia atual. Além disso provavelmente ele não poderá responder perguntas muito específicas sobre minha empresa, apenas de cunho geral com sorte. Entretanto o modelo de Chat da OpenAI API permite que possamos “ensinar” o ChatGPT sobre minha empresa, basta para isso passar para ele as informações que gostaríamos que fossem disponibilizadas.  Lembre que ele tem inteligência artificial e ele saberá fornecer as informações corretas mesmo que perguntado de maneiras diferentes, ele vai “entender” o que você quer e procurar a resposta correta dentro das informações que foram “ensinadas” para ele. Isso será um processo interativo, de “aprendizado”, você irá aperfeiçoar o texto com as informações fornecidas a ele várias vezes até atingir o ideal, quando você ficar satisfeito com o nível de qualidade das respostas fornecidas pelo ChatGPT.

Vamos acrescentar então nossa “base de conhecimento” sobre nossa empresa:

$empresa = “Aomega Treinamento e Consultoria”;
$url = “http://www.aomega.com.br”;
$empresa_nick = “Aomega”;  
$conhecimento = “Nós da $empresa, também conhecida como $empresa_nick, oferecemos serviços de treinamento em Excel níveis básico, intermediário e avançado, Excel VBA, Análise de Dados com Power BI, SQL e Inteligência  artificial, engenharia de PROMPTS no CHATGPT e uso da API.   Ministramos treinamentos online individuais e para grupos via  videoconferência ou presencias para empresas (in company) .   A URL de nosso site é $url . Para solicitar informações adicionais entre  em contato conosco através de nosso formulário na página FALE CONOSCO . A duração dos treinamentos pode ser consultada nos links de aulas  de nosso site. A duração pode variar para os treinamentos personalizados. Entre  em contato conosco através de nosso formulário na página FALE CONOSCO “;


$prompt = "Responder a dúvida $duvida com base nas informações a seguir: $conhecimento ";

Criamos algumas variáveis como $empresa e $empresa_nick e $url para armazenar o nome de nossa empresa, o nome abreviado e a url de nosso website.

Nossa base de conhecimento ficou armazenada na variável $conhecimento.

A variável $duvida irá armazenar o texto com a dúvida/solicitação feita pelo usuário. Ele irá armazenar o valor do campo “duvida” do meu formulário HTML que criei após ser submetido o formulário.

A variável $prompt será utilizada durante a criação dos atributos do objeto cliente do tipo Chat da OpenAI API  e recebe como valor um texto instruindo ao Chat que deve responder as dúvidas com base nas informações da base de conhecimento que armazenei na variável $conhecimento. Então o Chat irá procurar preferencialmente as respostas dentro de minha base de conhecimento, será o primeiro lugar onde ele vai procurar as respostas.

A seguir vou mostrar o trecho do código PHP criado que será modificado para incorporar o uso da variável $prompt.

$response = $client->chat()->create([
    'model' => 'gpt-3.5-turbo',    
    'max_tokens' => 300,
    'temperature' => 0.3,
    'messages' => [ ['role' => 'user', 
        'content' => $prompt],       
    ],
]);
// $resposta = $result->message->content; 

Ou seja o valor de $prompt é atribuído ao atributo “content” do meu cliente $response criado.

Finalmente após melhorar o HTML do meu código e acrescentar CSS e imagens para fazer uma personalização para ficar com a identidade visual do website de minha empresa ficou visualmente assim:

E aqui a tela com a resposta do nosso Chat com inteligência artificial:

Funcionando perfeitamente e respondendo de acordo com a base de conhecimento com a qual treinei o Chat. Arquivos do projeto disponíveis  no Github em https://github.com/evillafuerte/aomegachatgpt.

Autor: Ernesto Villafuerte Oyola

Mestre em Ciências de Computação – Inteligência Artificial

COPPE/UFRJ

Diretor da Aomega Treinamento e Consultoria www.aomega.com.br

12/05/2023

Projeto no GITHUB: https://github.com/evillafuerte/aomegachatgpt

Utilizando o ChatGPT para analisar sentimentos num texto

Nós temos usado o ChatGPT para uma série de coisas mas muita gente não sabe é que ele também sabe fazer análise de sentimentos. A análise de sentimentos é uma aplicação da inteligência artificial que também pode ser feita com o uso de redes neurais e implementando o código em uma linguagem de programação como o Python. Mas para nós usuários isto está fora de nossa realidade, ou estava, agora com o ChatGPT ficou muito fácil para qualquer um fazer análise de sentimentos de um texto.

É claro que para os desenvolvedores ainda é possível fazer coisas mais complexas como a análise não somente de um como de vários textos, tais como avaliações de um produto, com o uso da API da OpenAI, criadora do ChatGPT, e poder concluir o sentimento geral em relação a um determinado produto. Isso eu posso mostrar em outro artigo se vocês pedirem. 🙂

Para ilustrar vou pegar como texto base um artigo publicado no jornal “O Globo” em 09/06/2023 : Avaliação do governo Lula volta a oscilar para baixo e chega a 37% de ‘ótimo’ e ‘bom’, indica pesquisa Ipec/O GLOBO .

Cliquei no artigo e selecionei todo o artigo, inclusive imagens, que o ChatGPT não vai considerar na análise. Enviei o seguinte “prompt” ou solicitação ao ChatGPT: “Qual é o sentimento expressado no seguinte texto? ” e colei o texto a partir da linha seguinte. Vocês podem clicar no artigo para visualizar o artigo completo, não vi necessidade de fazer isto aqui.

A resposta do ChatGPT ao meu prompt: — O sentimento expressado no texto é de preocupação ou tendência negativa em relação à avaliação do governo do presidente Luiz Inácio Lula da Silva. O texto destaca que a aprovação do governo oscilou para baixo, enquanto as avaliações “ruim” ou “péssima” aumentaram. Além disso, menciona a crise do governo com o Congresso e a dificuldade de formar uma base aliada como sinais desfavoráveis. Embora também mencione indicadores positivos na economia, como o crescimento do PIB e a desaceleração da inflação, a ênfase é dada aos aspectos negativos da avaliação do governo. Portanto, o sentimento expressado é de preocupação ou tendência negativa.

Enviei novo prompt: “Você poderia afirmar que no texto há uma intenção de convencer o leitor negativamente?”
A resposta do ChatGPT: — Não é possível afirmar com certeza absoluta se há uma intenção de convencer o leitor negativamente com base apenas no texto fornecido. O texto apresenta informações sobre a queda na aprovação do governo do presidente Lula e destaca aspectos negativos, como a reprovação por parte de uma parcela da população e a crise do governo com o Congresso. No entanto, é importante considerar que o texto também menciona indicadores positivos na economia e opiniões de especialistas que apontam para uma relativa estabilidade na avaliação do governo. Portanto, é possível que haja uma intenção de informar sobre a situação atual do governo Lula, mas não é possível afirmar com certeza se há uma intenção de convencer negativamente o leitor sem ter acesso a mais contexto ou informações adicionais. —

Não satisfeito enviei novo “prompt”: “Se você pudesse resumir o sentimento esse artigo em cinco palavras diferentes, ou sentimentos diferentes, quais seriam estes?”
Resposta ao meu prompt: — Preocupação, oscilação, tendência negativa, crise, instabilidade. —

Para concluir enviei um último prompt: “E se pudesse resumir o artigo que enviei anteriormente em apenas um sentimento , qual seria a palavra?”

Resposta ao meu prompt: — Preocupação.

Como vemos o ChatGPT realizou uma autêntica análise de sentimentos encima do artigo publicado nos dando opção para nos aprofundar na análise por ele realizada com perguntas adicionais e resumir o sentimento espremido no texto, primeiro com um texto curto, depois em cinco palavras apenas como solicitei e por último em um único sentimento geral. Perfeito.

Espero que tenham gostado.

Autor: Ernesto Villafuerte Oyola

Diretor da Aomega Treinamento e Consultoria
Mestre em Ciências de Eng. de Sistemas e Computação – COPPE/UFRJ
MBA em Tecnologia de Informação em Gestão de Negócios
Engenheiro Químico – UERJ

Videoaula de Funções Financeiras no Excel 365! Nivel: Excel Intermediário

VideoAula Funções Financeiras, VP, VF, TAXA, NPER, PGTO, TIPO.
Prof. Ernesto Villafuerte – Aomega Treinamento e Consultoria.

Aprenda a trabalhar com as principais funções financeiras do Excel tais como VP (Valor Presente), VF (Valor Futuro), TAXA, NPER (número de periodos), PGTO (valor de pagamento por período), etc.

Treinamento em Excel Básico para colaboradores da Ancar Ivanhoe concluido!

Alunos Excel Básico - Ancar IvanhoeMais um treinamento de Excel concluido com sucesso da Aomega Treinamento e Consultoria. Na foto alunos de Excel Básico da Ancar Ivanhoe (Shopping Downtown) na Barra da Tijuca, Rio de Janeiro.  O treinamento foi muito produtivo, ministrado pelo professor Ernesto Villafuerte e forte apoio de material didático, incluindo apostilas, exercícios e videoaulas para revisão da matéria.

Alunos do treinamento em Excel Básico para a Ancar Ivanhoe (Shopping Downtown)

VIDEOAULA DE CRIAÇÃO DE TABELAS DINÂMICAS NO EXCEL UTILIZANDO MODELO DE DADOS – EXCEL 2016

Videoaula de criação de tabelas dinâmicas no Excel utilizando Modelo de Dados. Prof. Ernesto Villafuerte Oyola Aomega Treinamento e Consultoria.

A introdução da ferramenta de criação de Modelo de Dados no Excel 2013 permitiu expandir muito a potencialidade de criação de tabelas dinâmicas, permitindo criar tabelas dinâmicas a partir de diversas fontes de dados e criar relacionamentos entre tabelas. Não é mais preciso uma etapa de consolidação de informações de diversas fontes para obter uma única tabela com os dados necessários para criar uma tabela dinâmica. Agora é possível puxar as informações de diversas tabelas onde as informações estão distribuídas, desde que sejam criados relacionamentos entre elas.

Criação de Gráficos Dinâmicos no Excel do Office 365, Excel 2013 e 2016.

Pessoal,  , uma nova videoaula de Excel, sobre criação de Gráficos Dinâmicos, dando continuidade ao assunto de criação de Tabelas Dinâmicas, uma ferramenta muito importante e utilizada do Excel principalmente no ambiente corporativo. Os gráficos dinâmicos nos permitem criar gráficos a partir de tabelas dinâmicas com toda flexibilidade e totalmente sincronizada com a tabela dinâmica. Mudanças, filtros realizados no gráfico dinâmico modificam instantaneamente a tabela dinâmica criada, e o contrário também é verdadeiro.

Criação de Tabelas Dinâmicas no Excel do Office 365, Excel 2013 e 2016.

Novas atualizações de videoaulas em nosso Canal no Youtube!!!

Caros amigos, nosso canal no Youtube está sendo constantemente atualizado com novas videoaulas. Não deixem de visitar e voltar periódicamente para procurar novas atualizações. Espero que esteja sendo do agrado de vocês, aguardo suas sugestões.  Lembrando que a Aomega Treinamento e Consultoria ministra aulas individuais VIP e para grupos (In Company), ou seja no local do aluno.

Canal do Youtube da Aomega Treinamento

canalyoutube

Assista nossa videoaula de Cálculo de Subtotais e Filtros no Excel

Pessoal, com muito prazer anuncio o lançamento de uma nova videoaula de Excel, sobre Classificação, Cálculo de Subtotais e Filtros no Excel. Espero que seja útil para vocês.  Um abraço!