PHPOpenAI é uma biblioteca mantida na comunidade que permite o uso da API OpenAI no PHP.
O projeto está escrito no PHP e pode ser usado para integrar facilmente a OpenAI API no seu projeto PHP existente.
Este projeto é baseado na versão 8.1 do PHP para usar recursos como enumerações. Este projeto não requer dependências externas. No entanto, você deve ter a extensão do CURL instalada para que funcione corretamente.
O projeto usa o Composer para gerenciar dependências. Se você ainda não instalou o Composer, pode fazê -lo seguindo as instruções no site oficial do compositor.
Para instalar o projeto, você pode instalar o pacote em packagist.org usando o seguinte comando:
composer require easygithdev/php-openai Para usar a OpenAI API , você precisa se inscrever no site deles e obter uma chave da API. Depois de ter sua tecla API, você pode usá -la no seu código PHP para enviar solicitações para a API OpenAI.
Para descobrir como obter sua chave, vá para o seguinte endereço:
https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-Key.
Aqui está um código de exemplo que mostra como usar a API OpenAI no PHP:
<?php
require_once __DIR__ . ' /vendor/autoload.php ' ;
use EasyGithDev PHPOpenAI Helpers ModelEnum ;
use EasyGithDev PHPOpenAI OpenAIClient ;
$ apiKey = getenv ( ' OPENAI_API_KEY ' );
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toObject ();
// Response as stClass object
echo ' <pre> ' , print_r ( $ response , true ), ' </pre> ' ; Este código instancia um novo objeto OpenAIApi com uma chave da API e, em seguida, cria um novo objeto Completion para executar a conclusão do texto com o modelo de idioma GPT-3 AI fornecido pelo OpenAI.
O método create() é chamado no objeto Completion para gerar uma nova conclusão de texto. São necessários dois parâmetros:
O resultado da conclusão é retornado na variável $response . O resultado pode ser usado para processamento adicional, como exibir o texto preenchido ou alimentá -lo em outra parte do programa para processamento adicional.
Você pode usar uma variável de ambiente para armazenar sua chave. Você pode usar esta variável como no exemplo a seguir:
export OPENAI_API_KEY= " sk-xxxxxxxxxxx "Você pode colocar a variável no arquivo de configuração do Apache:
<VirtualHost hostname:80>
...
SetEnv OPENAI_API_KEY sk-xxxxxxxxxxx
...
</VirtualHost>
E reinicie o serviço.
Agora, você pode usar a variável de ambiente chamando a função getenv() do PHP.
<?php
$ response = ( new OpenAIApi ( getenv ( ' OPENAI_API_KEY ' )))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
);Se você deseja fornecer informações sobre sua organização, deve prosseguir da seguinte maneira.
<?php
$ apiKey = getenv ( ' OPENAI_API_KEY ' );
$ org = getenv ( ' OPENAI_API_ORG ' );
// Passing the organization to the client
$ response = ( new OpenAIClient ( $ apiKey , $ org ))Se você precisar modificar o URL da API, poderá proceder da seguinte maneira:
<?php
$ apiKey = getenv ( ' OPENAI_API_KEY ' );
// Create a new router, with origine url and version
$ route = new OpenAIRoute (
' https://api.openai.com ' ,
' v1 '
);
// Get a specific Url
echo $ route -> completionCreate () , ' <br> ' ;
// Passing the router to the client
$ response = ( new OpenAIClient ( $ apiKey ))
-> setRoute ( $ route ); Para redefinir uma rota, você precisa estender a classe OpenAIRoute ou implementar a interface Route .
A API retorna respostas no formato JSON. Para facilitar o acesso às diferentes informações, você pode ligar para os métodos toObject() ou toArray() do objeto Handler para acessar os dados.
<?php
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toObject ();
// Response as a stClass object
echo ' <pre> ' , print_r ( $ response , true ), ' </pre> ' ;
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toArray ();
// Response as an associative array
echo ' <pre> ' , print_r ( $ response , true ), ' </pre> ' ;Às vezes, a API retorna erros. Portanto, é necessário identificar o que causou o problema. Para lidar com essa dificuldade, você tem muitas opções.
Se você estiver usando um objeto manipulador com métodos toObject() ou toArray() , basta usar uma estrutura try-catch .
try {
$ response = ( new OpenAIClient ( ' BAD KEY ' ))
-> Completion ()
-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)
-> toObject ();
} catch ( Throwable $ t ) {
echo nl2br ( $ t -> getMessage ());
die;
} Se você estiver usando o objeto CurlResponse , poderá verificar se ocorreu um erro usando os validadores.
$ handler = ( new OpenAIClient ( ' BAD KEY ' ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
);
$ response = $ handler -> getResponse ();
$ contentTypeValidator = $ handler -> getContentTypeValidator ();
if (!( new StatusValidator ( $ response ))-> validate () or
!( new $ contentTypeValidator ( $ response ))-> validate ()) {
echo $ response -> getBody ();
}Saiba mais sobre erros.
Aqui está um vídeo mostrando um aplicativo que permite criar imagens com um estilo de pintura definido pelo usuário. Este aplicativo é criado usando o projeto Phpopenai.
Você pode encontrar o código aqui:
https://github.com/easygithdev/phpopenai-playground.git.
A integração do OpenAI em seu aplicativo agora é tão simples quanto algumas linhas de código.
Você pode encontrar todos os códigos aqui:
https://github.com/easygithdev/phpopenai-examples.
$ response = ( new OpenAIClient ( $ apiKey ))-> Chat ()-> create (
ModelEnum:: GPT_3_5_TURBO ,
[
new ChatMessage (ChatMessage:: ROLE_SYSTEM , " You are a helpful assistant. " ),
new ChatMessage (ChatMessage:: ROLE_USER , " Who won the world series in 2020? " ),
new ChatMessage (ChatMessage:: ROLE_ASSISTANT , " The Los Angeles Dodgers won the World Series in 2020. " ),
new ChatMessage (ChatMessage:: ROLE_USER , " Where was it played? " ),
]
)-> toObject ();Saiba mais sobre a conclusão do bate -papo.
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toObject ();Saiba mais sobre a conclusão do texto.
O atributo de fluxo na API do OpenAI é um parâmetro opcional que você pode usar para controlar o fluxo de dados retornado pela API. Se você definir esta opção como true, a API retornará uma resposta como dados de streaming, em vez de uma única resposta.
Isso significa que você pode recuperar os resultados da API à medida que eles estão disponíveis, em vez de esperar a resposta completa antes de processá -los. Esta opção pode ser útil para aplicativos que requerem processamento em tempo real de grandes quantidades de dados.
<?php
header ( ' Content-Type: text/event-stream ' );
header ( ' Cache-Control: no-cache ' );
. . .
( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
model: " text-davinci-003 " ,
prompt: " Translate this into 1. French, 2. Spanish and 3. Japanese: nn What rooms do you have available? nn 1. " ,
temperature: 0.3 ,
max_tokens: 100 ,
top_p: 1.0 ,
frequency_penalty: 0.0 ,
presence_penalty: 0.0 ,
stream: true
)-> getResponse (); < html >
< body >
< div id =" result " > </ div >
< script >
function nl2br ( str , replaceMode , isXhtml ) {
var breakTag = ( isXhtml ) ? '<br />' : '<br>' ;
var replaceStr = ( replaceMode ) ? '$1' + breakTag : '$1' + breakTag + '$2' ;
return ( str + '' ) . replace ( / ([^>rn]?)(rn|nr|r|n) / g , replaceStr ) ;
}
if ( typeof ( EventSource ) !== 'undefined' ) {
console . info ( 'Starting connection...' ) ;
var source = new EventSource ( 'stream.php' ) ;
source . addEventListener ( 'open' , function ( e ) {
console . info ( 'Connection was opened.' ) ;
} , false ) ;
source . addEventListener ( 'error' , function ( e ) {
var txt ;
switch ( event . target . readyState ) {
// if reconnecting
case EventSource . CONNECTING :
txt = 'Reconnecting...' ;
break ;
// if error was fatal
case EventSource . CLOSED :
txt = 'Connection failed. Will not retry.' ;
break ;
}
console . error ( 'Connection error: ' + txt ) ;
} , false ) ;
source . addEventListener ( 'message' , function ( e ) {
if ( e . data == "[DONE]" ) {
source . close ( ) ;
return ;
}
document . getElementById ( 'result' ) . innerHTML += nl2br ( JSON . parse ( e . data ) . choices [ 0 ] . text ) ;
} , false ) ;
} else {
alert ( 'Your browser does not support Server-sent events! Please upgrade it!' ) ;
console . error ( 'Connection aborted' ) ;
}
</ script >
</ body >
</ html > $ response = ( new OpenAIClient ( $ apiKey ))-> Edit ()-> create (
" What day of the wek is it? " ,
ModelEnum:: TEXT_DAVINCI_EDIT_001 ,
" Fix the spelling mistakes " ,
)-> toObject ();Saiba mais sobre a edição de texto.
function displayUrl ( $ url )
{
return ' <img src=" ' . $ url . ' " /> ' ;
}
$ response = ( new OpenAIClient ( $ apiKey ))-> Image ()-> create (
" a rabbit inside a beautiful garden, 32 bit isometric " ,
n: 2 ,
size: ImageSizeEnum::is256,
)-> toObject (); < ?php foreach ($response- > data as $image) : ? >
< div > < ?= displayUrl($image- > url) ? > </ div >
< ?php endforeach; ? > 
Saiba mais sobre a geração de imagens.
$ response = ( new OpenAIClient ( $ apiKey ))-> Image ()-> createVariation (
__DIR__ . ' /../../assets/image_variation_original.png ' ,
n: 2 ,
size: ImageSizeEnum::is256
)-> toObject ();
Saiba mais sobre a variação da imagem.
$ response = ( new OpenAIClient ( $ apiKey ))-> Image ()-> createEdit (
image: __DIR__ . ' /../../assets/image_edit_original.png ' ,
mask: __DIR__ . ' /../../assets/image_edit_mask2.png ' ,
prompt: ' a sunlit indoor lounge area with a pool containing a flamingo ' ,
size: ImageSizeEnum::is512,
)-> toObject ();
Saiba mais sobre a edição da imagem.
$ response = ( new OpenAIClient ( $ apiKey ))-> Embedding ()-> create (
ModelEnum:: TEXT_EMBEDDING_ADA_002 ,
" The food was delicious and the waiter... " ,
)-> toObject ();Saiba mais sobre a incorporação.
$ response = ( new OpenAIClient ( $ apiKey ))-> Audio ()
-> addCurlParam ( ' timeout ' , 30 )
-> transcription (
__DIR__ . ' /../../assets/openai.mp3 ' ,
ModelEnum:: WHISPER_1 ,
response_format: AudioResponseEnum:: SRT
)-> toObject ();Saiba mais sobre a transcrição de áudio.
$ response = ( new OpenAIClient ( $ apiKey ))-> Audio ()
-> addCurlParam ( ' timeout ' , 30 )
-> translation (
__DIR__ . ' /../../assets/openai_fr.mp3 ' ,
' whisper-1 ' ,
response_format: AudioResponseEnum:: TEXT
)-> toObject ();Saiba mais sobre a tradução de áudio.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> list ()
-> toObject ();Saiba mais sobre o modelo.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> retrieve ( ' text-davinci-001 ' )
-> toObject ();Saiba mais sobre o modelo.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> delete (
$ _POST [ ' model ' ]
)-> toObject ();Saiba mais sobre o modelo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> list ()
-> toObject ();Saiba mais sobre o arquivo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> create (
__DIR__ . ' /../../assets/mydata.jsonl ' ,
' fine-tune ' ,
)
-> toObject ();Saiba mais sobre o arquivo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> delete ( ' file-xxxx ' )
-> toObject ();Saiba mais sobre o arquivo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> retrieve ( ' file-xxxx ' )
-> toObject ();Saiba mais sobre o modelo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> download ( ' file-xxxx ' )
-> toObject ();Saiba mais sobre o modelo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> list ()
-> toObject ();Saiba mais sobre tune fino.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> create (
' file-xxxx '
)
-> toObject ();Saiba mais sobre tune fino.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> retrieve ( ' ft-xxx ' )
-> toObject ();Saiba mais sobre tune fino.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> listEvents ( ' ft-xxx ' )
-> toObject ();Saiba mais sobre tune fino.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> Cancel ( ' ft-xxx ' )
-> toObject ();Saiba mais sobre tune fino.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Moderation ()
-> create ( ' I want to kill them. ' )
-> toObject ();Saiba mais sobre moderação.
Para executar todos os testes:
composer test testsPara executar apenas um teste:
composer test tests/[NAME]Test.phpO Phpopenai é um projeto útil para desenvolvedores de PHP que desejam integrar facilmente a API do Openai em seus projetos. Com instalação simples e uso do compositor, classificação de texto, geração de imagens e reconhecimento de entidade nomeado em seu aplicativo PHP.