Este paquete ya no es compatible o mantenido.
El cliente Tectalic OpenAI REST API es un paquete que proporciona una forma conveniente y directa de interactuar con la API de OpenAI desde su aplicación PHP.
Admite ChatGPT , GPT-4 , GPT-3.5 , GPT-3 , Codex , Dall · E , Whisper , ajuste , incrustaciones y modelos de moderación , con objetos de transferencia de datos totalmente tipados (DTO) para todas las solicitudes e respuestas e IDE AutoComplety Support.
Hay más información disponible en https://tectalic.com/apis/openai.
Este es un paquete no oficial y no tiene afiliaciones con OpenAI.
La integración de OpenAI en su aplicación ahora es tan simple como unas pocas líneas de código.
$ openaiClient = Tectalic OpenAi Manager :: build (
new GuzzleHttp Client (),
new Tectalic OpenAi Authentication ( getenv ( ' OPENAI_API_KEY ' ))
);
/** @var TectalicOpenAiModelsChatCompletionsCreateResponse $response */
$ response = $ openaiClient -> chatCompletions ()-> create (
new Tectalic OpenAi Models ChatCompletions CreateRequest ([
' model ' => ' gpt-4 ' ,
' messages ' => [
[
' role ' => ' user ' ,
' content ' => ' Will using a well designed and supported third party package save time? '
],
],
])
)-> toModel ();
echo $ response -> choices [ 0 ]-> message -> content ;
// Yes, using a well-designed and supported third-party package can save time during software development.
// It allows you to focus on the core functionality of your application without having to reinvent the wheel or spend resources developing the same functionality from scratch.
// A good third-party package can provide reliability, efficiency, and continued support with updates and bug fixes, which in turn facilitates faster development and a more stable final product.
// Additionally, using widely adopted packages can also increase the chances of compatibility with other software components and make it easier for other developers to understand and work with your code.Obtenga más información sobre la finalización del chat.
Este controlador admite los modelos GPT-3.5 y GPT-4 :
Los modelos GPT-3.5 compatibles incluyen gpt-3.5-turbo y más.
Los modelos GPT-4 compatibles incluyen gpt-4 y más.
Nota: GPT-4 se encuentra actualmente en una versión beta limitada y solo es accesible para aquellos a quienes se les ha otorgado acceso. Consulte aquí para obtener detalles e instrucciones sobre cómo unirse a la lista de espera.
Si recibe un error 404 al intentar usar GPT-4, entonces su cuenta de OpenAI no se le ha otorgado acceso.
El siguiente ejemplo utiliza el modelo gpt-3.5-turbo-0613 para demostrar llamadas de funciones.
Convierte el lenguaje natural en una llamada de función, que luego se puede ejecutar dentro de su aplicación.
$ openaiClient = Tectalic OpenAi Manager :: build (
new GuzzleHttp Client (),
new Tectalic OpenAi Authentication ( getenv ( ' OPENAI_API_KEY ' ))
);
/** @var TectalicOpenAiModelsChatCompletionsCreateResponse $response */
$ response = $ openaiClient -> chatCompletions ()-> create ( new CreateRequest ([
' model ' => ' gpt-3.5-turbo-0613 ' ,
' messages ' => [
[ ' role ' => ' user ' , ' content ' => ' What ' s the weather like in Boston? ' ]
],
' functions ' => [
[
' name ' => ' get_current_weather ' ,
' description ' => ' Get the current weather in a given location ' ,
' parameters ' => new Tectalic OpenAi Models ChatCompletions CreateRequestFunctionsItemParameters (
[
' type ' => ' object ' ,
' properties ' => [
' location ' => [
' type ' => ' string ' ,
' description ' => ' The worldwide city and state, e.g. San Francisco, CA ' ,
],
' format ' => [
' type ' => ' string ' ,
' description ' => ' The temperature unit to use. Infer this from the users location. ' ,
' enum ' => [ ' celsius ' , ' farhenheit ' ],
],
' num_days ' => [
' type ' => ' integer ' ,
' description ' => ' The number of days to forecast ' ,
],
],
' required ' => [ ' location ' , ' format ' , ' num_days ' ],
]
)
]
],
' function_call ' => ' auto ' ,
]))-> toModel ();
$ params = json_decode ( $ response -> choices [ 0 ]-> message -> function_call -> arguments , true );
var_dump ( $ params );
// array(3) {
// 'location' =>
// string(6) "Boston"
// 'format' =>
// string(7) "celsius"
// 'num_days' =>
// int(1)
//}Obtenga más información sobre las llamadas de funciones.
$ openaiClient = Tectalic OpenAi Manager :: build ( new GuzzleHttp Client (), new Tectalic OpenAi Authentication ( getenv ( ' OPENAI_API_KEY ' )));
/** @var TectalicOpenAiModelsCompletionsCreateResponse $response */
$ response = $ openaiClient -> completions ()-> create (
new Tectalic OpenAi Models Completions CreateRequest ([
' model ' => ' text-davinci-003 ' ,
' prompt ' => ' Will using a third party package save time? ' ,
])
)-> toModel ();
echo $ response -> choices [ 0 ]-> text ;
// Using a third party package can save time because you don't have to write the code yourself. Este controlador admite todos los modelos GPT-3, incluido text-davinci-003 , text-davinci-002 y más.
Obtenga más información sobre la finalización del texto.
$ openaiClient = Tectalic OpenAi Manager :: build ( new GuzzleHttp Client (), new Tectalic OpenAi Authentication ( getenv ( ' OPENAI_API_KEY ' )));
/** @var TectalicOpenAiModelsCompletionsCreateResponse $response */
$ response = $ openaiClient -> completions ()-> create (
new Tectalic OpenAi Models Completions CreateRequest ([
' model ' => ' code-davinci-002 ' ,
' prompt ' => " // PHP 8 n // A variable that saves the current date and time " ,
' max_tokens ' => 256 ,
' stop ' => " ; " ,
])
)-> toModel ();
echo $ response -> choices [ 0 ]-> text ;
// $now = date("Y-m-d G:i:s") Los modelos Codex compatibles incluyen code-davinci-002 y code-cushman-001 .
Obtenga más información sobre la finalización del código.
$ openaiClient = Tectalic OpenAi Manager :: build ( new GuzzleHttp Client (), new Tectalic OpenAi Authentication ( getenv ( ' OPENAI_API_KEY ' )));
/** @var TectalicOpenAiModelsImagesGenerationsCreateResponse $response */
$ response = $ openaiClient -> imagesGenerations ()-> create (
new Tectalic OpenAi Models ImagesGenerations CreateRequest ([
' prompt ' => ' A cute baby sea otter wearing a hat ' ,
' size ' => ' 256x256 ' ,
' n ' => 5
])
)-> toModel ();
foreach ( $ response -> data as $ item ) {
var_dump ( $ item -> url );
}Obtenga más información sobre la generación de imágenes.
$ openaiClient = Tectalic OpenAi Manager :: build ( new GuzzleHttp Client (), new Tectalic OpenAi Authentication ( getenv ( ' OPENAI_API_KEY ' )));
/** @var TectalicOpenAiModelsAudioTranscriptionsCreateResponse $response */
$ response = $ openaiClient -> audioTranscriptions ()-> create (
new Tectalic OpenAi Models AudioTranscriptions CreateRequest ([
' file ' => ' /full/path/to/audio/file.mp3 ' ,
' model ' => ' whisper-1 ' ,
])
)-> toModel ();
echo $ response -> text ;
// Your audio transcript in your source language... Los modelos Whisper compatibles incluyen whisper-1 .
Obtenga más información sobre el discurso al texto, incluidos los más de 50 idiomas compatibles.
$ openaiClient = Tectalic OpenAi Manager :: build ( new GuzzleHttp Client (), new Tectalic OpenAi Authentication ( getenv ( ' OPENAI_API_KEY ' )));
/** @var TectalicOpenAiModelsAudioTranslationsCreateResponse $response */
$ response = $ openaiClient -> audioTranslations ()-> create (
new Tectalic OpenAi Models AudioTranslations CreateRequest ([
' file ' => ' /full/path/to/audio/file.mp3 ' ,
' model ' => ' whisper-1 ' ,
])
)-> toModel ();
echo $ response -> text ;
// Your audio transcript in English... Los modelos Whisper compatibles incluyen whisper-1 .
Obtenga más información sobre el discurso al texto, incluidos los más de 50 idiomas compatibles.
¿Necesita ayuda para comenzar? Vea nuestra guía: Cómo crear una aplicación usando la API de OpenAI.
Instale el paquete en su proyecto:
composer require tectalic/openaiDespués de instalar el paquete de cliente Tectalic OpenAI REST API en su proyecto, asegúrese de tener un cliente HTTP PSR-18 compatible como 'Guzzle' o el Symfony 'HTTP Client'.
Puede usar la siguiente muestra de código y personalizarla para adaptarse a su aplicación.
// Load your project's composer autoloader (if you aren't already doing so).
require_once ( __DIR__ . ' /vendor/autoload.php ' ); use Symfony Component HttpClient Psr18Client ;
use Tectalic OpenAi Authentication ;
use Tectalic OpenAi Client ;
use Tectalic OpenAi Manager ;
// Build a Tectalic OpenAI REST API Client globally.
$ auth = new Authentication ( getenv ( ' OPENAI_API_KEY ' ));
$ httpClient = new Psr18Client ();
Manager :: build ( $ httpClient , $ auth );
// or
// Build a Tectalic OpenAI REST API Client manually.
$ auth = new Authentication ( getenv ( ' OPENAI_API_KEY ' ));
$ httpClient = new Psr18Client ();
$ client = new Client ( $ httpClient , $ auth , Manager :: BASE_URI ); Para autenticar sus solicitudes de API, deberá proporcionar un objeto Authentication ( $auth ) al llamar Manager::build() .
La autenticación a la API de OpenAI es por autenticación de portador HTTP.
Consulte la documentación de la API de OpenAI para obtener más detalles sobre cómo obtener sus credenciales de autenticación.
En el código de uso anterior, personalice el constructor Authentication a sus necesidades. Por ejemplo, es probable que necesite agregar una variable de entorno OPENAI_API_KEY a su sistema.
La clase principal con la que interactuará es la clase Client ( TectalicOpenAiClient ).
Esta clase Client también contiene los métodos auxiliares que le permiten acceder rápidamente a los 19 manejadores de API.
Consulte a continuación una lista completa de manejadores y métodos compatibles.
Este paquete admite 28 métodos API, que se agrupan en 19 manejadores API.
Consulte la tabla a continuación para obtener una lista completa de manejadores y métodos de API.
| Clase de controlador de API y nombre del método | Descripción | API verbo y URL |
|---|---|---|
AudioTranscriptions::create() | Transcribe audio al lenguaje de entrada. | POST /audio/transcriptions |
AudioTranslations::create() | Traduce el audio al inglés. | POST /audio/translations |
ChatCompletions::create() | Crea una respuesta modelo para la conversación de chat dada. | POST /chat/completions |
Completions::create() | Crea una finalización para el aviso y los parámetros proporcionados. | POST /completions |
Edits::create() | POST /edits | |
Embeddings::create() | Crea un vector de incrustación que representa el texto de entrada. | POST /embeddings |
Files::list() | Devuelve una lista de archivos que pertenecen a la organización del usuario. | GET /files |
Files::create() | Cargue un archivo que contenga documentos que se utilizarán en varios puntos finales/características. Actualmente, el tamaño de todos los archivos cargados por una organización puede ser de hasta 1 GB. Póngase en contacto con nosotros si necesita aumentar el límite de almacenamiento. | POST /files |
Files::retrieve() | Devuelve información sobre un archivo específico. | GET /files/{file_id} |
Files::delete() | Eliminar un archivo. | DELETE /files/{file_id} |
FilesContent::download() | Devuelve el contenido del archivo especificado. | GET /files/{file_id}/content |
FineTunes::list() | GET /fine-tunes | |
FineTunes::create() | La respuesta incluye detalles del trabajo enqueado, incluido el estado del trabajo y el nombre de los modelos ajustados una vez completados. Aprenda más sobre el ajuste fino | POST /fine-tunes |
FineTunes::retrieve() | Aprenda más sobre el ajuste fino | GET /fine-tunes/{fine_tune_id} |
FineTunesCancel::cancelFineTune() | POST /fine-tunes/{fine_tune_id}/cancel | |
FineTunesEvents::listFineTune() | GET /fine-tunes/{fine_tune_id}/events | |
FineTuningJobs::listPaginated() | Enumere los trabajos de ajuste de su organización | GET /fine_tuning/jobs |
FineTuningJobs::create() | Crea un trabajo que ajusta un modelo especificado de un conjunto de datos dado. La respuesta incluye detalles del trabajo enqueado, incluido el estado del trabajo y el nombre de los modelos ajustados una vez completados. Aprenda más sobre el ajuste fino | POST /fine_tuning/jobs |
FineTuningJobs::retrieve() | Obtenga información sobre un trabajo ajustado. Aprenda más sobre el ajuste fino | GET /fine_tuning/jobs/{fine_tuning_job_id} |
FineTuningJobsCancel::fineTuning() | Cancelar inmediatamente un trabajo de ajuste. | POST /fine_tuning/jobs/{fine_tuning_job_id}/cancel |
FineTuningJobsEvents::listFineTuning() | Obtenga actualizaciones de estado para un trabajo ajustado. | GET /fine_tuning/jobs/{fine_tuning_job_id}/events |
ImagesEdits::createImage() | Crea una imagen editada o extendida dada una imagen original y un aviso. | POST /images/edits |
ImagesGenerations::create() | Crea una imagen dada un aviso. | POST /images/generations |
ImagesVariations::createImage() | Crea una variación de una imagen dada. | POST /images/variations |
Models::list() | Enumera los modelos disponibles actualmente y proporciona información básica sobre cada uno, como el propietario y la disponibilidad. | GET /models |
Models::retrieve() | Recupera una instancia de modelo, proporcionando información básica sobre el modelo, como el propietario y los permisos. | GET /models/{model} |
Models::delete() | Eliminar un modelo ajustado. Debe tener el papel del propietario en su organización para eliminar un modelo. | DELETE /models/{model} |
Moderations::create() | Clasifica si el texto viola la política de contenido de Openai | POST /moderations |
Los métodos desapercibidos se enumeran con de ataque formato. No use estos métodos, ya que se eliminarán en una versión futura.
Hay dos formas de hacer una solicitud al controlador API nominado y al método API:
Si creó el cliente para que sea accesible a nivel mundial, puede usar la clase de controlador API correspondiente directamente:
use Tectalic OpenAi Handlers AudioTranscriptions ;
( new AudioTranscriptions ())-> create ();Alternativamente, puede acceder a todos los controladores de API desde la clase de cliente utilizando la clase de cliente:
$ client -> audioTranscriptions ()-> create ();Una vez que haya realizado una solicitud utilizando uno de los dos métodos descritos anteriormente, el siguiente paso es acceder a la respuesta.
Puede acceder a la respuesta de diferentes maneras. Elija su preferido.
Las respuestas del modelo son clases de PHP de estilo de transferencia de datos (DTO), con propiedades públicas para cada propiedad API.
Ofrecen una forma estructurada de recuperar la respuesta de una solicitud de API.
Todos los modelos de respuesta son una instancia de TectalicOpenAiModelsAbstractModel o TectalicOpenAiModelsAbstractModelCollection .
Después de realizar la solicitud, use el método ->toModel() fluido al método API:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ model = ( new AudioTranscriptions ())-> create ()-> toModel (); La llamada toModel() de cada método API devolverá el tipo de clase de modelo apropiado para el método API que acaba de llamar.
Después de realizar la solicitud, use el método ->toArray() fluido al método API:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ array = ( new AudioTranscriptions ())-> create ()-> toArray ();En la matriz asociativa resultante, las claves de matriz coincidirán con los nombres de las propiedades públicas en la clase de modelo relevante.
Si necesita acceder a la respuesta sin procesar o inspeccionar los encabezados HTTP, use el método ->getResponse() Fluent al método API. Devolverá un PsrHttpMessageResponseInterface :
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ response = ( new AudioTranscriptions ())-> create ()-> getResponse (); Al realizar solicitudes con el cliente Tectalic OpenAI REST API , los escenarios específicos causarán que se arroje una TectalicOpenAiExceptionClientException . Consulte a continuación para más detalles.
Manager Se lanzará una LogicException si la función Manager::build() se llama varias veces, o si Manager::access() se llama antes de llamar Manager::build() .
El cliente Tectalic OpenAI REST API depende de un cliente HTTP compatible con PSR-18, y que el cliente HTTP no debería lanzar una excepción para códigos de respuesta HTTP sin éxito.
Un código de respuesta fallido se clasifica como uno que no está en el rango 200 - 299 (inclusive). Ejemplos de códigos de respuesta fallidos incluyen:
100 - 199 )300 - 399 )400 - 499 )500 - 599 )Si se produce un código de respuesta fallido:
toModel() del controlador API lanzará una ClientException .toArray() del controlador API devolverá el cuerpo de respuesta y no lanzará una ClientException .getResponse() del controlador de API devolverá la respuesta sin procesar y no lanzará una ClientException . A continuación se muestra un ejemplo de cómo puede desear usar un bloque try / catch cuando realice una solicitud para que pueda detectar y manejar errores inesperados.
use Tectalic OpenAi Authentication ;
use Tectalic OpenAi Client ;
use Tectalic OpenAi ClientException ;
use Tectalic OpenAi Manager ;
// Build a Tectalic OpenAI REST API Client globally.
$ auth = new Authentication ( ' token ' );
Manager :: build ( $ httpClient , $ auth );
$ handler = new AudioTranscriptions ();
// Perform a request
try {
$ model = $ handler -> create ()-> toModel ();
// Do something with the response model...
} catch ( ClientException $ e ) {
// Error response received. Retrieve the HTTP response code and response body.
$ responseBody = $ handler -> toArray ();
$ responseCode = $ handler -> getResponse ()-> getStatusCode ();
// Handle the error...
} Si su cliente HTTP de elección lanza una excepción que no sea ClientException , el Client Tectalic OpenAI REST API Cliente y sus clases de controladores API permitirán que estas excepciones burbujeen.
Consulte la documentación de su cliente HTTP para obtener más detalles sobre el manejo de excepciones.
El paquete de cliente Tectalic OpenAI REST API incluye varios tipos de pruebas de PhPunit automatizadas para verificar la operación correcta:
Para ejecutar estas pruebas, deberá haber instalado el paquete de cliente Tectalic OpenAI REST API con sus Devendencias (es decir, no usar la bandera --no-dev al ejecutar el compositor).
Estas pruebas de PhPunit están diseñadas para:
Client y Manager .Las pruebas unitarias se pueden ejecutar utilizando el siguiente comando, que debe ejecutarse desde el directorio raíz de este paquete.
composer test:unitLas pruebas unitarias no realizan ninguna solicitud real contra la API de OpenAI.
Las pruebas unitarias se encuentran en el directorio tests/Unit .
Las pruebas de integración se encuentran en el directorio tests/Integration .
Estas pruebas PHPUnit están diseñadas para confirmar que cada método API analiza una respuesta válida, de acuerdo con la especificación de OpenAI API OpenAPI. Fuera de la caja, las pruebas de integración están diseñadas para funcionar con el servidor Prism Mock.
Asegúrese de que esté instalado Prism. Consulte la documentación de Prism para obtener detalles sobre cómo instalar Prism.
Una vez que se instala Prism, puede ejecutar Prism y las pruebas de integración una al lado de la otra en Windows Terminal separado, o utilizando el siguiente comando, que debe ejecutarse desde el directorio raíz de este paquete.
echo " > Starting Prism server "
prism mock tests/openapi.yaml > /dev/null 2>&1 &
PRISM_PID= $!
sleep 2
echo " => Started "
composer test:integration
kill $PRISM_PIDEsos comandos iniciarán el servidor Mock Prism, luego ejecutarán las pruebas de integración y luego detendrán el servidor Prism Mock cuando se completen las pruebas.
En este caso, las pruebas de integración no realizan ninguna solicitud real contra la API de OpenAI.
Al configurar la variable de entorno OPENAI_CLIENT_TEST_BASE_URI , puede establecer un objetivo de punto final API diferente para las pruebas de integración.
Por ejemplo, en lugar de usar Prism, puede usar un servidor de burla/puesta/prueba/prueba diferente de su elección, o puede usar los puntos finales en vivo de la API de OpenAI.
No olvide establecer las credenciales apropiadas en las variables de entorno OPENAI_CLIENT_TEST_AUTH_USERNAME OPENAI_CLIENT_TEST_AUTH_PASSWORD .
Después de que se complete su configuración, simplemente ejecute el siguiente comando.
composer test:integrationNo recomendamos ejecutar pruebas de integración contra los puntos finales de la API Live OpenAI. Esto se debe a que las pruebas enviarán datos de ejemplo a todos los puntos finales, lo que puede dar como resultado que se creen nuevos datos o se eliminen los datos existentes.
Si está escribiendo sus propias pruebas, es probable que deba burlarse de las respuestas de la API de OpenAI .
Una forma de hacerlo es instalar el paquete php-http/mock-client en su proyecto, y luego usar la clase HttpMockClient (en lugar de un cliente PSR-18 real) al instancias del cliente Tectalic OpenAI REST REST .
Esto le permite burlarse de las respuestas de la API de OpenAI , en lugar de realizar solicitudes reales.
Consulte la documentación del cliente simulada para más detalles.
Si tiene alguna pregunta o comentarios, utilice el tablero de discusión.
Este software es copyright (c) 2022-presente tectalico.
Para obtener información sobre los derechos de autor y la información de la licencia, consulte el archivo de licencia .