PHPOpenAI es una biblioteca mantenida por la comunidad que permite el uso de la API OpenAI en PHP.
El proyecto está escrito en PHP y se puede utilizar para integrar fácilmente la OpenAI API en su proyecto PHP existente.
Este proyecto se basa en PHP versión 8.1 para usar características como enumeraciones. Este proyecto no requiere dependencias externas. Sin embargo, debe tener instalada la extensión Curl para que funcione correctamente.
El proyecto utiliza el compositor para administrar las dependencias. Si aún no ha instalado el compositor, puede hacerlo siguiendo las instrucciones en el sitio web oficial del compositor.
Para instalar el proyecto, puede instalar el paquete de Packagist.org usando el siguiente comando:
composer require easygithdev/php-openai Para usar la OpenAI API , debe registrarse en su sitio web y obtener una clave API. Una vez que tenga su clave API, puede usarla en su código PHP para enviar solicitudes a la API de OpenAI.
Para saber cómo obtener su clave, vaya a la siguiente dirección:
https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-key.
Aquí hay un código de ejemplo que le muestra cómo usar la API de OpenAI en 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 un nuevo objeto OpenAIApi con una clave API, y luego crea un nuevo objeto Completion para realizar la finalización del texto con el modelo de lenguaje AI GPT-3 proporcionado por OpenAI.
El método create() se llama al objeto Completion para generar una nueva finalización de texto. Se necesitan dos parámetros:
El resultado de la finalización se devuelve en la variable $response . El resultado se puede utilizar para su posterior procesamiento, como mostrar el texto completo o alimentarlo en otra parte del programa para su procesamiento adicional.
Puede usar una variable de entorno para almacenar su clave. Luego puede usar esta variable como en el siguiente ejemplo:
export OPENAI_API_KEY= " sk-xxxxxxxxxxx "Puede poner la variable en el archivo de configuración de Apache:
<VirtualHost hostname:80>
...
SetEnv OPENAI_API_KEY sk-xxxxxxxxxxx
...
</VirtualHost>
Y luego reinicie el servicio.
Ahora, puede usar la variable de entorno llamando a la función getenv() de PHP.
<?php
$ response = ( new OpenAIApi ( getenv ( ' OPENAI_API_KEY ' )))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
);Si desea proporcionar información sobre su organización, debe proceder de la siguiente manera.
<?php
$ apiKey = getenv ( ' OPENAI_API_KEY ' );
$ org = getenv ( ' OPENAI_API_ORG ' );
// Passing the organization to the client
$ response = ( new OpenAIClient ( $ apiKey , $ org ))Si necesita modificar la URL de la API, puede proceder de la siguiente manera:
<?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 una ruta, debe extender la clase OpenAIRoute o implementar la interfaz Route .
La API devuelve las respuestas en formato JSON. Para facilitar el acceso a la información diferente, puede llamar a los métodos toObject() o toArray() del objeto Handler para acceder a los datos.
<?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> ' ;A veces, la API devuelve errores. Por lo tanto, es necesario poder identificar qué causó el problema. Para manejar esta dificultad, tienes muchas opciones.
Si está utilizando un objeto de controlador con métodos toObject() o toArray() , simplemente use una estructura 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;
} Si está utilizando el objeto CurlResponse , puede verificar que se haya producido un error utilizando los 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 ();
}Obtenga más información sobre los errores.
Aquí hay un video que muestra una aplicación que le permite crear imágenes con un estilo de pintura definido por el usuario. Esta aplicación se crea utilizando el proyecto PhPopenai.
Puede encontrar el código aquí:
https://github.com/easygithdev/phpopenai-playground.git.
La integración de OpenAI en su aplicación ahora es tan simple como unas pocas líneas de código.
Puedes encontrar todos los códigos aquí:
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 ();Obtenga más información sobre la finalización del chat.
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toObject ();Obtenga más información sobre la finalización del texto.
El atributo de transmisión en la API de OpenAI es un parámetro opcional que puede usar para controlar el flujo de datos devuelto por la API. Si establece esta opción en True, la API devolverá una respuesta como datos de transmisión en lugar de una sola respuesta.
Esto significa que puede recuperar los resultados de la API a medida que estén disponibles, en lugar de esperar la respuesta completa antes de procesarlos. Esta opción puede ser útil para aplicaciones que requieren el procesamiento en tiempo real de grandes cantidades de datos.
<?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 ();Obtenga más información sobre la edición 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; ? > 
Obtenga más información sobre la generación de imágenes.
$ response = ( new OpenAIClient ( $ apiKey ))-> Image ()-> createVariation (
__DIR__ . ' /../../assets/image_variation_original.png ' ,
n: 2 ,
size: ImageSizeEnum::is256
)-> toObject ();
Obtenga más información sobre la variación de la imagen.
$ 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 ();
Obtenga más información sobre la edición de imágenes.
$ response = ( new OpenAIClient ( $ apiKey ))-> Embedding ()-> create (
ModelEnum:: TEXT_EMBEDDING_ADA_002 ,
" The food was delicious and the waiter... " ,
)-> toObject ();Obtenga más información sobre la incrustación.
$ response = ( new OpenAIClient ( $ apiKey ))-> Audio ()
-> addCurlParam ( ' timeout ' , 30 )
-> transcription (
__DIR__ . ' /../../assets/openai.mp3 ' ,
ModelEnum:: WHISPER_1 ,
response_format: AudioResponseEnum:: SRT
)-> toObject ();Obtenga más información sobre la transcripción de audio.
$ response = ( new OpenAIClient ( $ apiKey ))-> Audio ()
-> addCurlParam ( ' timeout ' , 30 )
-> translation (
__DIR__ . ' /../../assets/openai_fr.mp3 ' ,
' whisper-1 ' ,
response_format: AudioResponseEnum:: TEXT
)-> toObject ();Obtenga más información sobre la traducción de audio.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> list ()
-> toObject ();Obtenga más información sobre el modelo.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> retrieve ( ' text-davinci-001 ' )
-> toObject ();Obtenga más información sobre el modelo.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> delete (
$ _POST [ ' model ' ]
)-> toObject ();Obtenga más información sobre el modelo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> list ()
-> toObject ();Obtenga más información sobre el archivo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> create (
__DIR__ . ' /../../assets/mydata.jsonl ' ,
' fine-tune ' ,
)
-> toObject ();Obtenga más información sobre el archivo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> delete ( ' file-xxxx ' )
-> toObject ();Obtenga más información sobre el archivo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> retrieve ( ' file-xxxx ' )
-> toObject ();Obtenga más información sobre el modelo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> download ( ' file-xxxx ' )
-> toObject ();Obtenga más información sobre el modelo.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> list ()
-> toObject ();Obtenga más información sobre el ajuste fino.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> create (
' file-xxxx '
)
-> toObject ();Obtenga más información sobre el ajuste fino.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> retrieve ( ' ft-xxx ' )
-> toObject ();Obtenga más información sobre el ajuste fino.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> listEvents ( ' ft-xxx ' )
-> toObject ();Obtenga más información sobre el ajuste fino.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> Cancel ( ' ft-xxx ' )
-> toObject ();Obtenga más información sobre el ajuste fino.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Moderation ()
-> create ( ' I want to kill them. ' )
-> toObject ();Obtenga más información sobre la moderación.
Para ejecutar todas las pruebas:
composer test testsPara ejecutar solo una prueba:
composer test tests/[NAME]Test.phpPhpopenai es un proyecto útil para los desarrolladores de PHP que desean integrar fácilmente la API de OpenAI en sus proyectos. Con una instalación simple y el uso de compositor, clasificación de texto, generación de imágenes y reconocimiento de entidad nombrado en su aplicación PHP.