Ce package n'est plus pris en charge ou entretenu.
Le client Tectalic Openai REST est un package qui fournit un moyen pratique et simple d'interagir avec l' API OpenAI à partir de votre application PHP.
Prend en charge ChatGPT , GPT-4 , GPT-3.5 , GPT-3 , Codex , Dall · E , Whisper , Fineding , Embeddings and Moderation Models, avec des objets de transfert de données entièrement typés (DTOS) pour toutes les demandes et réponses et support d'obstacles automatique IDE.
Plus d'informations sont disponibles sur https://tectalic.com/apis/openai.
Il s'agit d'un package non officiel et n'a aucune affiliation avec OpenAI.
L'intégration d'OpenAI dans votre application est désormais aussi simple que quelques lignes de code.
$ 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.En savoir plus sur l'achèvement du chat.
Ce gestionnaire prend en charge les modèles GPT-3.5 et GPT-4 :
Les modèles GPT-3.5 pris en charge incluent gpt-3.5-turbo et plus encore.
Les modèles GPT-4 pris en charge incluent gpt-4 et plus encore.
Remarque: GPT-4 est actuellement dans une version bêta limitée et n'est accessible qu'à ceux qui ont obtenu un accès. Veuillez consulter ici pour plus de détails et des instructions sur la façon de rejoindre la liste d'attente.
Si vous recevez une erreur 404 lorsque vous essayez d'utiliser GPT-4, votre compte OpenAI n'a pas obtenu un accès.
L'exemple suivant utilise le modèle gpt-3.5-turbo-0613 pour démontrer l'appel de la fonction.
Il convertit le langage naturel en un appel de fonction, qui peut ensuite être exécuté dans votre application.
$ 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)
//}En savoir plus sur l'appel des fonctions.
$ 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. Ce gestionnaire prend en charge tous les modèles GPT-3, y compris text-davinci-003 , text-davinci-002 et plus encore.
En savoir plus sur l'achèvement du texte.
$ 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") Les modèles de codex pris en charge incluent code-davinci-002 et code-cushman-001 .
En savoir plus sur l'achèvement du code.
$ 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 );
}En savoir plus sur la génération d'images.
$ 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... Les modèles Whisper supportés incluent whisper-1 .
En savoir plus sur la parole du texte, y compris les 50+ langues prises en charge.
$ 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... Les modèles Whisper supportés incluent whisper-1 .
En savoir plus sur la parole du texte, y compris les 50+ langues prises en charge.
Besoin d'aide pour commencer? Voir notre guide: comment créer une application à l'aide de l'API OpenAI.
Installez le package dans votre projet:
composer require tectalic/openaiAprès avoir installé le package Tecalic OpenAI REST API Client dans votre projet, assurez-vous d'avoir également un client HTTP PSR-18 compatible tel que «Guzzle» ou le Symfony «HTTP Client».
Vous pouvez utiliser l'exemple de code suivant et le personnaliser en fonction de votre application.
// 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 ); Pour authentifier vos demandes d'API, vous devrez fournir un objet Authentication ( $auth ) lors de l'appel Manager::build() .
L'authentification à l' API OpenAI est par l'authentification du support HTTP.
Veuillez consulter la documentation de l'API OpenAI pour plus de détails sur l'obtention de vos informations d'authentification.
Dans le code d'utilisation ci-dessus, personnalisez le constructeur Authentication à vos besoins. Par exemple, il faudra probablement ajouter une variable d'environnement OPENAI_API_KEY à votre système.
La classe principale avec laquelle vous interagissez est la classe Client ( TectalicOpenAiClient ).
Cette classe Client contient également les méthodes d'assistance qui vous permettent d'accéder rapidement aux 19 gestionnaires d'API.
Veuillez consulter ci-dessous pour une liste complète des gestionnaires et méthodes pris en charge.
Ce package prend en charge 28 méthodes API, qui sont regroupées en 19 gestionnaires d'API.
Voir le tableau ci-dessous pour une liste complète des gestionnaires et méthodes d'API.
| Classe de gestionnaire API et nom de méthode | Description | Verbe API et URL |
|---|---|---|
AudioTranscriptions::create() | Transcrit l'audio dans la langue d'entrée. | POST /audio/transcriptions |
AudioTranslations::create() | Traduit l'audio en anglais. | POST /audio/translations |
ChatCompletions::create() | Crée une réponse modèle pour la conversation de chat donnée. | POST /chat/completions |
Completions::create() | Crée une complétion pour l'invite et les paramètres fournis. | POST /completions |
Edits::create() | POST /edits | |
Embeddings::create() | Crée un vecteur d'intégration représentant le texte d'entrée. | POST /embeddings |
Files::list() | Renvoie une liste de fichiers appartenant à l'organisation de l'utilisateur. | GET /files |
Files::create() | Téléchargez un fichier contenant des documents à utiliser sur divers points de terminaison / fonctionnalités. Actuellement, la taille de tous les fichiers téléchargés par une organisation peut atteindre 1 Go. Veuillez nous contacter si vous devez augmenter la limite de stockage. | POST /files |
Files::retrieve() | Renvoie des informations sur un fichier spécifique. | GET /files/{file_id} |
Files::delete() | Supprimer un fichier. | DELETE /files/{file_id} |
FilesContent::download() | Renvoie le contenu du fichier spécifié. | GET /files/{file_id}/content |
FineTunes::list() | GET /fine-tunes | |
FineTunes::create() | La réponse comprend les détails du travail en file d'attente, y compris l'état du travail et le nom des modèles affinés une fois terminés. En savoir plus sur le réglage fin | POST /fine-tunes |
FineTunes::retrieve() | En savoir plus sur le réglage fin | 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() | Énumérez les travaux de réglage fin de votre organisation | GET /fine_tuning/jobs |
FineTuningJobs::create() | Crée un travail qui affine un modèle spécifié à partir d'un ensemble de données donné. La réponse comprend les détails du travail en file d'attente, y compris l'état du travail et le nom des modèles affinés une fois terminés. En savoir plus sur le réglage fin | POST /fine_tuning/jobs |
FineTuningJobs::retrieve() | Obtenez des informations sur un travail de réglage fin. En savoir plus sur le réglage fin | GET /fine_tuning/jobs/{fine_tuning_job_id} |
FineTuningJobsCancel::fineTuning() | Annulez immédiatement un travail d'adaptation. | POST /fine_tuning/jobs/{fine_tuning_job_id}/cancel |
FineTuningJobsEvents::listFineTuning() | Obtenez des mises à jour de statut pour un travail de réglage fin. | GET /fine_tuning/jobs/{fine_tuning_job_id}/events |
ImagesEdits::createImage() | Crée une image modifiée ou étendue étant donné une image originale et une invite. | POST /images/edits |
ImagesGenerations::create() | Crée une image donnée une invite. | POST /images/generations |
ImagesVariations::createImage() | Crée une variation d'une image donnée. | POST /images/variations |
Models::list() | Répertorie les modèles actuellement disponibles et fournit des informations de base sur chacune comme le propriétaire et la disponibilité. | GET /models |
Models::retrieve() | Récupère une instance de modèle, fournissant des informations de base sur le modèle tel que le propriétaire et l'autorisation. | GET /models/{model} |
Models::delete() | Supprimer un modèle affiné. Vous devez avoir le rôle du propriétaire dans votre organisation pour supprimer un modèle. | DELETE /models/{model} |
Moderations::create() | Classifie si le texte viole la politique de contenu d'Openai | POST /moderations |
La ou les méthode (s) obsolète sont répertoriées avec grève formatage. Veuillez ne pas utiliser ces méthodes, car elles seront supprimées dans une version future.
Il existe deux façons de faire une demande au gestionnaire d'API et à la méthode API nommée:
Si vous avez construit le client pour être accessible à l'échelle mondiale, vous pouvez utiliser directement la classe de gestionnaire API pertinente:
use Tectalic OpenAi Handlers AudioTranscriptions ;
( new AudioTranscriptions ())-> create ();Alternativement, vous pouvez accéder à tous les gestionnaires d'API à partir de la classe client à l'aide de la classe client:
$ client -> audioTranscriptions ()-> create ();Une fois que vous avez fait une demande en utilisant l'une des deux méthodes décrites ci-dessus, l'étape suivante consiste à accéder à la réponse.
Vous pouvez accéder à la réponse de différentes manières. Veuillez choisir votre préféré.
Les réponses du modèle sont des classes PHP de style transfert de données (DTO), avec des propriétés publiques pour chaque propriété API.
Ils offrent une façon structurée de récupérer la réponse d'une demande d'API.
Tous les modèles de réponse sont une instance de TectalicOpenAiModelsAbstractModel ou TectalicOpenAiModelsAbstractModelCollection .
Après avoir effectué la demande, utilisez la méthode ->toModel() Cluent à la méthode API:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ model = ( new AudioTranscriptions ())-> create ()-> toModel (); L'appel toModel() de chaque méthode API renverra le type de classe de modèle approprié pour la méthode API que vous venez d'appeler.
Après avoir effectué la demande, utilisez la méthode ->toArray() Cluent à la méthode API:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ array = ( new AudioTranscriptions ())-> create ()-> toArray ();Dans le tableau associatif qui en résulte, les clés de tableau correspondront aux noms des propriétés publiques dans la classe de modèle pertinente.
Si vous devez accéder à la réponse brute ou inspecter les en-têtes HTTP, utilisez la méthode ->getResponse() Fluent à la méthode API. Il renverra un PsrHttpMessageResponseInterface :
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ response = ( new AudioTranscriptions ())-> create ()-> getResponse (); Lors de l'exécution de demandes avec le client de l'API TECTALIC OpenAI REST , des scénarios spécifiques entraîneront le lancement d'un TectalicOpenAiExceptionClientException . Veuillez consulter ci-dessous pour plus de détails.
Manager Une LogicException sera lancée si la fonction Manager::build() est appelée plusieurs fois, ou si Manager::access() est appelée avant d'appeler Manager::build() .
Le client TECTALIC OpenAI REST dépend d'un client HTTP compatible PSR-18, et que le client HTTP ne doit pas lancer une exception pour les codes de réponse HTTP infructueux.
Un code de réponse infructueux est classé comme celui qui n'est pas dans la plage 200 à 299 (inclus). Des exemples de codes de réponse infructueux comprennent:
100 - 199 )300 - 399 )400 - 499 )500 - 599 )Si un code de réponse infructueux se produit:
toModel() du gestionnaire API lancera une ClientException .toArray() du gestionnaire d'API renverra le corps de réponse et ne lancera pas une ClientException .getResponse() du gestionnaire API renverra la réponse brute et ne lancera pas une ClientException . Vous trouverez ci-dessous un exemple de la façon dont vous pouvez utiliser un bloc try / catch lors de l'exécution d'une demande afin que vous puissiez détecter et gérer les erreurs inattendues.
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 votre client HTTP de choix lance une exception autre que ClientException , le Client Tectalic OpenAI REST API Client et ses classes de gestionnaire API permettra à ces exceptions de secouer.
Consultez la documentation de votre client HTTP pour plus de détails sur la gestion des exceptions.
Le package Tectalic OpenAI REST API Client comprend plusieurs types de tests PHPUNIT automatisés pour vérifier l'opération correcte:
Pour exécuter ces tests, vous devrez avoir installé le package TECTALIC OpenAI REST API avec ses dépendances de développement (c'est-à-dire n'utilisant pas l'indicateur --no-dev lors de l'exécution du compositeur).
Ces tests de phpunit sont conçus pour:
Client et Manager .Les tests unitaires peuvent être exécutés en utilisant la commande suivante, qui doit être exécutée à partir du répertoire racine de ce package.
composer test:unitLes tests unitaires n'effectuent aucune demande réelle contre l'API OpenAI.
Les tests unitaires sont situés dans le répertoire tests/Unit .
Les tests d'intégration sont situés dans le répertoire tests/Integration .
Ces tests de phpunit sont conçus pour confirmer que chaque méthode API analyse une réponse valide, selon la spécification OpenAI API OpenAPI. Hors de la boîte, les tests d'intégration sont conçus pour fonctionner avec le serveur Prism Mock.
Assurez-vous que Prism est installé. Veuillez consulter la documentation PRISM pour plus de détails sur la façon d'installer Prism.
Une fois le prisme installé, vous pouvez exécuter le prisme et les tests d'intégration côte à côte dans des fenêtres terminales distinctes, ou en utilisant la commande suivante, qui doit être exécutée à partir du répertoire racine de ce package.
echo " > Starting Prism server "
prism mock tests/openapi.yaml > /dev/null 2>&1 &
PRISM_PID= $!
sleep 2
echo " => Started "
composer test:integration
kill $PRISM_PIDCes commandes démarreront le serveur PRISM MOCK, puis exécuteront les tests d'intégration, puis arrêteront le serveur PRISM MOCK lorsque les tests seront terminés.
Dans ce cas, les tests d'intégration n'effectuent aucune demande réelle contre l'API OpenAI.
En définissant la variable d'environnement OPENAI_CLIENT_TEST_BASE_URI , vous pouvez définir une cible de points de terminaison API différente pour les tests d'intégration.
Par exemple, au lieu d'utiliser Prism, vous pouvez utiliser un serveur de moquerie / stadification / test de votre choix différent, ou vous pouvez utiliser les points de terminaison en direct de l'API OpenAI.
N'oubliez pas de définir les informations d'identification appropriées dans les variables d'environnement OPENAI_CLIENT_TEST_AUTH_USERNAME OPENAI_CLIENT_TEST_AUTH_PASSWORD .
Une fois votre configuration terminée, exécutez simplement la commande suivante.
composer test:integrationNous ne recommandons pas d'effectuer des tests d'intégration par rapport aux points de terminaison de l'API OpenAI en direct. En effet, les tests enverront des exemples de données à tous les points de terminaison, ce qui peut entraîner la création de nouvelles données ou des données existantes.
Si vous écrivez vos propres tests, vous devrez probablement se moquer des réponses de l' API OpenAI .
Une façon de le faire consiste à installer le package php-http/mock-client dans votre projet, puis à utiliser la classe HttpMockClient (au lieu d'un vrai client PSR-18) lors de l'instanciation du client TECTALIC OpenAI REST .
Cela vous permet de se moquer des réponses de l' API OpenAI , plutôt que de réaliser de vraies demandes.
Veuillez consulter la documentation simulée du client pour plus de détails.
Si vous avez des questions ou des commentaires, veuillez utiliser le forum de discussion.
Ce logiciel est Copyright (C) 2022-présent Tectalic.
Pour les informations sur le droit d'auteur et les licences, veuillez consulter le fichier de licence .