Dieses Paket wird nicht mehr unterstützt oder gewartet.
Der tektalische OpenAI -REST -API -Client ist ein Paket, das eine bequeme und einfache Möglichkeit bietet, mit der OpenAI -API von Ihrer PHP -Anwendung zu interagieren.
Unterstützt ChatGPT , GPT-4 , GPT-3.5 , GPT-3 , Codex , Dall · E , Flüsterung , Feinabstimmung , Einbettungen und Moderationsmodelle mit vollständig typisierten Datenübertragungsobjekten (DTOs) für alle Anfragen und Antworten sowie für die IDE-Autokompromie.
Weitere Informationen finden Sie unter https://tectalic.com/apis/openai.
Dies ist ein inoffizielles Paket und hat keine Zugehörigkeit zu OpenAI.
Das Integrieren von OpenAI in Ihre Anwendung ist jetzt so einfach wie einige Codezeilen.
$ 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.Erfahren Sie mehr über die CHAT -Vervollständigung.
Dieser Handler unterstützt sowohl die GPT-3,5- als auch die GPT-4- Modelle:
Unterstützte GPT-3,5-Modelle umfassen gpt-3.5-turbo und mehr.
Unterstützte GPT-4-Modelle umfassen gpt-4 und mehr.
HINWEIS: GPT-4 befindet sich derzeit in einer begrenzten Beta und ist nur für diejenigen zugänglich, denen der Zugang gewährt wurde. Weitere Informationen und Anweisungen zum Beitritt zur Warteliste finden Sie hier.
Wenn Sie beim Versuch, GPT-4 zu verwenden, einen 404-Fehler erhalten, wurde Ihrem OpenAI-Konto keinen Zugriff gewährt.
Das folgende Beispiel verwendet das gpt-3.5-turbo-0613 -Modell, um die Funktionsaufrufe zu demonstrieren.
Es wandelt natürliche Sprache in einen Funktionsaufruf um, der dann in Ihrer Anwendung ausgeführt werden kann.
$ 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)
//}Erfahren Sie mehr über Funktionsaufrufe.
$ 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. Dieser Handler unterstützt alle GPT-3-Modelle, einschließlich text-davinci-003 , text-davinci-002 und mehr.
Erfahren Sie mehr über die Abschluss des Textes.
$ 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") Zu den unterstützten Codex-Modellen gehören code-davinci-002 und code-cushman-001 .
Erfahren Sie mehr über die Codebetastung.
$ 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 );
}Erfahren Sie mehr über die Bildgenerierung.
$ 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... Unterstützte Whisper-Modelle enthalten whisper-1 .
Erfahren Sie mehr über die Sprache zum Text, einschließlich der über 50 unterstützten Sprachen.
$ 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... Unterstützte Whisper-Modelle enthalten whisper-1 .
Erfahren Sie mehr über die Sprache zum Text, einschließlich der über 50 unterstützten Sprachen.
Benötigen Sie Hilfe mit Hilfe? Siehe unseren Leitfaden: So erstellen Sie eine App mit der OpenAI -API.
Installieren Sie das Paket in Ihrem Projekt:
composer require tectalic/openaiStellen Sie nach der Installation des tektalischen OpenAI-REST-API-Client-Client -Pakets in Ihrem Projekt sicher, dass Sie auch einen kompatiblen PSR-18-HTTP-Client wie "Guzzle" oder das Symfony "HTTP-Client" haben.
Sie können das folgende Code -Beispiel verwenden und an Ihre Anwendung anpassen.
// 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 ); Um Ihre API -Anfragen zu authentifizieren, müssen Sie beim Aufrufen von Manager::build() ein Authentication ( $auth ) angeben.
Die Authentifizierung an der OpenAI -API erfolgt von der HTTP -Trägerauthentifizierung.
Weitere Informationen zum Erhalten Ihrer Authentifizierungsanmeldeinformationen finden Sie in der OpenAI -API -Dokumentation.
Passen Sie im obigen Verwendungscode den Authentication an Ihre Anforderungen an. Müssen Sie beispielsweise wahrscheinlich eine OPENAI_API_KEY -Umgebungsvariable zu Ihrem System hinzufügen.
Die primäre Klasse, mit der Sie interagieren, ist die Client -Klasse ( TectalicOpenAiClient ).
Diese Client -Klasse enthält auch die Helfermethoden, mit denen Sie schnell auf die 19 API -Handler zugreifen können.
Eine vollständige Liste der unterstützten Handler und Methoden finden Sie unten.
Dieses Paket unterstützt 28 API -Methoden, die in 19 API -Handler unterteilt sind.
In der folgenden Tabelle finden Sie eine vollständige Liste der API -Handler und -Methoden.
| API -Handlerklasse und Methodame | Beschreibung | API -Verb und URL |
|---|---|---|
AudioTranscriptions::create() | Transkribiert Audio in die Eingabessprache. | POST /audio/transcriptions |
AudioTranslations::create() | Übersetzt Audio ins Englische. | POST /audio/translations |
ChatCompletions::create() | Erstellt eine Modellantwort für das gegebene Chat -Gespräch. | POST /chat/completions |
Completions::create() | Erstellt eine Fertigstellung für die bereitgestellte Eingabeaufforderung und Parameter. | POST /completions |
Edits::create() | POST /edits | |
Embeddings::create() | Erstellt einen Einbettungsvektor, der den Eingabtext darstellt. | POST /embeddings |
Files::list() | Gibt eine Liste von Dateien zurück, die zur Organisation des Benutzers gehören. | GET /files |
Files::create() | Laden Sie eine Datei hoch, die Dokumente enthält, die für verschiedene Endpunkte/Funktionen verwendet werden sollen. Derzeit kann die Größe aller von einer Organisation hochgeladenen Dateien bis zu 1 GB betragen. Bitte kontaktieren Sie uns, wenn Sie das Speicherlimit erhöhen müssen. | POST /files |
Files::retrieve() | Gibt Informationen zu einer bestimmten Datei zurück. | GET /files/{file_id} |
Files::delete() | Löschen Sie eine Datei. | DELETE /files/{file_id} |
FilesContent::download() | Gibt den Inhalt der angegebenen Datei zurück. | GET /files/{file_id}/content |
FineTunes::list() | GET /fine-tunes | |
FineTunes::create() | Die Antwort enthält Details des auftretenden Jobs, einschließlich des Arbeitsstatus und des Namens der fein abgestimmten Modelle, sobald er abgeschlossen ist. Erfahren Sie mehr über Feinabstimmungen | POST /fine-tunes |
FineTunes::retrieve() | Erfahren Sie mehr über Feinabstimmungen | 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() | Listen Sie die Feinabstimmung Ihrer Organisation auf | GET /fine_tuning/jobs |
FineTuningJobs::create() | Erstellt einen Job, der ein bestimmtes Modell aus einem bestimmten Datensatz fein abgestimmt. Die Antwort enthält Details des auftretenden Jobs, einschließlich des Arbeitsstatus und des Namens der fein abgestimmten Modelle, sobald er abgeschlossen ist. Erfahren Sie mehr über Feinabstimmungen | POST /fine_tuning/jobs |
FineTuningJobs::retrieve() | Informieren Sie sich über einen fein abgestimmten Job. Erfahren Sie mehr über Feinabstimmungen | GET /fine_tuning/jobs/{fine_tuning_job_id} |
FineTuningJobsCancel::fineTuning() | Stornieren Sie sofort einen Feinabstiegsjob. | POST /fine_tuning/jobs/{fine_tuning_job_id}/cancel |
FineTuningJobsEvents::listFineTuning() | Erhalten Sie Statusaktualisierungen für einen feinen Auftrag. | GET /fine_tuning/jobs/{fine_tuning_job_id}/events |
ImagesEdits::createImage() | Erstellt ein bearbeitetes oder erweitertes Bild mit einem Originalbild und einer Eingabeaufforderung. | POST /images/edits |
ImagesGenerations::create() | Erstellt ein Bild, das eine Eingabeaufforderung erstellt. | POST /images/generations |
ImagesVariations::createImage() | Erstellt eine Variation eines bestimmten Bildes. | POST /images/variations |
Models::list() | Listet die aktuell verfügbaren Modelle auf und liefert grundlegende Informationen zu jedem einzelnen wie dem Eigentümer und der Verfügbarkeit. | GET /models |
Models::retrieve() | Ruft eine Modellinstanz ab und liefert grundlegende Informationen über das Modell wie den Eigentümer und die Erlaubnis. | GET /models/{model} |
Models::delete() | Löschen Sie ein feinstimmiges Modell. Sie müssen die Rolle des Eigentümers in Ihrer Organisation haben, um ein Modell zu löschen. | DELETE /models/{model} |
Moderations::create() | Klassifiziert, ob der Text gegen die Inhaltspolitik von OpenAI verstößt | POST /moderations |
Veraltete Methoden (en) sind mit aufgeführt Through Formatierung. Bitte verwenden Sie diese Methoden nicht, da sie in einer zukünftigen Veröffentlichung entfernt werden.
Es gibt zwei Möglichkeiten, um die nominierte API -Handlerin und API -Methode zu beantragen:
Wenn Sie den Client so erstellt haben, dass Sie weltweit zugänglich sind, können Sie die entsprechende API -Handlerklasse direkt verwenden:
use Tectalic OpenAi Handlers AudioTranscriptions ;
( new AudioTranscriptions ())-> create ();Alternativ können Sie über die Client -Klasse auf alle API -Handler aus der Client -Klasse zugreifen:
$ client -> audioTranscriptions ()-> create ();Sobald Sie eine Anfrage unter Verwendung einer der beiden oben beschriebenen Methoden gestellt haben, besteht der nächste Schritt darin, auf die Antwort zuzugreifen.
Sie können auf unterschiedliche Weise auf die Antwort zugreifen. Bitte wählen Sie Ihre bevorzugte.
Modellantworten sind PHP -Klassen im Datenübertragungsobjekt (DTO) mit öffentlichen Eigenschaften für jede API -Eigenschaft.
Sie bieten eine strukturierte Möglichkeit, die Antwort aus einer API -Anfrage abzurufen.
Alle Antwortmodelle sind eine Instanz von TectalicOpenAiModelsAbstractModel oder TectalicOpenAiModelsAbstractModelCollection .
Verwenden Sie nach der Ausführung der Anforderung die fließende Methode ->toModel() zur API -Methode:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ model = ( new AudioTranscriptions ())-> create ()-> toModel (); Jede API -Methode toModel() gibt den entsprechenden Modellklassentyp für die gerade aufgerufene API -Methode zurück.
Verwenden Sie nach der Ausführung der Anforderung die fließende Methode ->toArray() zur API -Methode:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ array = ( new AudioTranscriptions ())-> create ()-> toArray ();In dem resultierenden assoziativen Array entsprechen die Arrayschlüssel mit den Namen der öffentlichen Eigenschaften in der entsprechenden Modellklasse.
Wenn Sie auf die RAW -Antwort zugreifen oder die HTTP -Headers untersuchen müssen, verwenden Sie die fließende Methode ->getResponse() zur API -Methode. Es wird ein PsrHttpMessageResponseInterface zurückgegeben:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ response = ( new AudioTranscriptions ())-> create ()-> getResponse (); Bei der Ausführung von Anfragen mit tektalischem OpenAI -Rest -API -Client werden bestimmte Szenarien dazu führen TectalicOpenAiExceptionClientException geworfen werden. Weitere Informationen finden Sie unten.
Manager Eine LogicException wird ausgeworfen, wenn die Funktion Manager::build() mehrmals aufgerufen wird oder wenn Manager::access() aufgerufen wird, bevor man Manager::build() aufruft.
Der tektalische OpenAI-REST-API-Client hängt von einem PSR-18-kompatiblen HTTP-Client ab, und der HTTP-Client sollte keine Ausnahme für erfolglose HTTP-Antwortcodes abgeben.
Ein erfolgloser Antwortcode wird als einer als einer im Bereich von 200 - 299 (inklusive) eingestuft. Beispiele für erfolglose Antwortcodes sind:
100 - 199 )300 - 399 )400 - 499 )500 - 599 )Wenn ein erfolgloser Antwortcode auftritt:
toModel() -Methode des API -Handlers wirft eine ClientException aus.toArray() gibt den Antwortkörper zurück und wirft keine ClientException aus.getResponse() -Methode des API -Handlers gibt die RAW -Antwort zurück und wirft keine ClientException aus. Im Folgenden finden Sie ein Beispiel dafür, wie Sie bei einer Anforderung möglicherweise einen try / catch -Block verwenden möchten, damit Sie unerwartete Fehler erkennen und umgehen können.
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...
} Wenn Ihr HTTP -Client der Auswahl eine andere Ausnahme als ClientException ausgelöst hat, lassen die tektalischen OpenAI -REST -API Client und seine API -Handlerklassen diese Ausnahmen beeinträchtigen.
In der Dokumentation Ihres HTTP -Kunden finden Sie weitere Informationen zum Ausnahmeber ".
Das tektalische OpenAI -REST -API -Client -Paket enthält verschiedene Arten von automatisierten Phpunit -Tests, um den richtigen Betrieb zu überprüfen:
Um diese Tests auszuführen, müssen Sie das tektalische OpenAI-REST-API-Client- Paket mit seinen Dev-Abhängigkeiten installiert haben (dh das --no-dev Flag nicht beim Ausführen von Komponisten).
Diese Phpunit -Tests sind auf:
Client und Manager .Die Unit -Tests können mit dem folgenden Befehl ausgeführt werden, der aus dem Stammverzeichnis dieses Pakets ausgeführt werden muss.
composer test:unitUnit -Tests führen keine wirklichen Anfragen gegen die OpenAI -API durch.
Unit -Tests befinden sich in den tests/Unit Einheitenverzeichnissen.
Integrationstests befinden sich im Verzeichnis von tests/Integration .
Diese Phpunit -Tests sollen bestätigen, dass jede API -Methode eine gültige Antwort entsprechend der OpenAI -API OpenAPI -Spezifikation analysiert. Aus dem Box sind die Integrationstests so konzipiert, dass sie mit dem Prism Mock -Server arbeiten.
Stellen Sie sicher, dass Prism installiert ist. Weitere Informationen zur Installation von Prisma finden Sie in der Prism -Dokumentation.
Sobald das Prisma installiert ist, können Sie Prisma und die Integrationstests nebeneinander in separaten Terminalfenstern ausführen oder den folgenden Befehl verwenden, die aus dem Stammverzeichnis dieses Pakets ausgeführt werden müssen.
echo " > Starting Prism server "
prism mock tests/openapi.yaml > /dev/null 2>&1 &
PRISM_PID= $!
sleep 2
echo " => Started "
composer test:integration
kill $PRISM_PIDDiese Befehle starten den Prism -Mock -Server, führen dann die Integrationstests aus und stoppen dann den Prism -Mock -Server, wenn die Tests abgeschlossen sind.
In diesem Fall führen die Integrationstests keine wirklichen Anfragen gegen die OpenAI -API durch.
Durch Einstellen der Umgebungsvariablen OPENAI_CLIENT_TEST_BASE_URI können Sie ein anderes API -Endpunktziel für die Integrationstests festlegen.
Anstatt Prisma zu verwenden, können Sie beispielsweise einen anderen Spott-/Staging-/Testserver Ihrer Wahl verwenden oder die Live -Endpunkte der OpenAI -API verwenden.
Vergessen Sie nicht, die entsprechenden Anmeldeinformationen im OPENAI_CLIENT_TEST_AUTH_USERNAME OPENAI_CLIENT_TEST_AUTH_PASSWORD -Umgebungsvariablen festzulegen.
Nach Abschluss Ihres Setups führen Sie einfach den folgenden Befehl aus.
composer test:integrationWir empfehlen nicht, Integrationstests gegen die Live OpenAI -API -Endpunkte durchzuführen. Dies liegt daran, dass die Tests Beispieldaten an alle Endpunkte senden, die dazu führen können, dass neue Daten erstellt oder vorhandene Daten gelöscht werden.
Wenn Sie Ihre eigenen Tests schreiben, müssen Sie wahrscheinlich die Antworten von der OpenAI -API verspotten.
Eine Möglichkeit, dies zu tun, besteht darin, das Paket php-http/mock-client in Ihr Projekt zu installieren und dann die HttpMockClient Klasse (anstelle eines echten PSR-18-Clients) zu verwenden, wenn der tektalische OpenAI-REST-API-Client instanziiert.
Auf diese Weise können Sie die Antworten von der OpenAI -API verspotten, anstatt echte Anfragen auszuführen.
Weitere Informationen finden Sie in der Dokumentation des Mock -Kunden.
Wenn Sie Fragen oder Feedback haben, verwenden Sie bitte das Diskussionsbehörde.
Diese Software ist Copyright (C) 2022-präsent tektalisch.
Für Urheberrechts- und Lizenzinformationen können Sie sich die Lizenzdatei ansehen.