このパッケージはサポートまたは維持されなくなりました。
Tectalic Openai REST APIクライアントは、 PHPアプリケーションからOpenAI APIと対話するための便利で簡単な方法を提供するパッケージです。
CHATGPT 、 GPT-4 、 GPT-3.5 、 GPT-3 、 CODEX 、 DALL・E 、 Whisper 、微調整、埋め込み、およびモデレーションモデルをサポートします。
詳細については、https://tectalic.com/apis/openaiから入手できます。
これは非公式のパッケージであり、Openaiとの提携はありません。
OpenAIをアプリケーションに統合することは、数行のコードと同じくらい簡単です。
$ 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.チャットの完了の詳細をご覧ください。
このハンドラーは、GPT-3.5とGPT-4モデルの両方をサポートしています。
サポートされているGPT-3.5モデルにはgpt-3.5-turboなどが含まれます。
サポートされているGPT-4モデルにはgpt-4などが含まれます。
注:GPT-4は現在、限られたベータ版にあり、アクセスを許可された人のみがアクセスできます。 WaitListに参加する方法の詳細と手順については、こちらをご覧ください。
GPT-4を使用しようとするときに404エラーを受け取った場合、OpenAIアカウントはアクセスが許可されていません。
次の例ではgpt-3.5-turbo-0613モデルを使用して、関数呼び出しを実証します。
自然言語を関数呼び出しに変換し、アプリケーション内で実行できます。
$ 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)
//}関数呼び出しの詳細をご覧ください。
$ 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.このハンドラーはtext-davinci-003 、 text-davinci-002などのすべてのGPT-3モデルをサポートしています。
テキストの完了の詳細をご覧ください。
$ 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")サポートされているコーデックスモデルにはcode-davinci-002およびcode-cushman-001が含まれます。
コードの完了の詳細をご覧ください。
$ 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 );
}画像生成の詳細をご覧ください。
$ 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...サポートされているささやきモデルにはwhisper-1が含まれます。
50以上のサポートされている言語を含む、テキストへのスピーチの詳細をご覧ください。
$ 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...サポートされているささやきモデルにはwhisper-1が含まれます。
50以上のサポートされている言語を含む、テキストへのスピーチの詳細をご覧ください。
開始するのに助けが必要ですか?ガイドを参照してください:Openai APIを使用してアプリを構築する方法。
プロジェクトにパッケージをインストールします。
composer require tectalic/openaiTectalic Openai Rest APIクライアントパッケージをプロジェクトにインストールした後、「Guzzle」やSymfony 'HTTPクライアント」などの互換性のあるPSR-18 HTTPクライアントも持っていることを確認してください。
次のコードサンプルを使用して、アプリケーションに合わせてカスタマイズできます。
// 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 );APIリクエストを認証するには、 Manager::build()を呼び出すときにAuthentication ( $auth )オブジェクトを提供する必要があります。
Openai APIへの認証は、HTTP Bearer認証によるものです。
認証資格情報の取得の詳細については、OpenAI APIドキュメントを参照してください。
上記の使用法では、ニーズに合わせてAuthenticationコンストラクターをカスタマイズします。たとえば、システムにOPENAI_API_KEY環境変数を追加する必要がある可能性があります。
対話するプライマリクラスは、 Clientクラス( TectalicOpenAiClient )です。
このClientクラスには、19のAPIハンドラーにすばやくアクセスできるヘルパーメソッドも含まれています。
サポートされているハンドラーと方法の完全なリストについては、以下を参照してください。
このパッケージは、19のAPIハンドラーにグループ化された28のAPIメソッドをサポートしています。
APIハンドラーとメソッドの完全なリストについては、以下の表を参照してください。
| APIハンドラークラスとメソッド名 | 説明 | API動詞とURL |
|---|---|---|
AudioTranscriptions::create() | オーディオを入力言語に転写します。 | POST /audio/transcriptions |
AudioTranslations::create() | オーディオを英語に翻訳します。 | POST /audio/translations |
ChatCompletions::create() | 特定のチャット会話のモデル応答を作成します。 | POST /chat/completions |
Completions::create() | 提供されたプロンプトとパラメーターの完了を作成します。 | POST /completions |
Edits::create() | POST /edits | |
Embeddings::create() | 入力テキストを表す埋め込みベクトルを作成します。 | POST /embeddings |
Files::list() | ユーザーの組織に属するファイルのリストを返します。 | GET /files |
Files::create() | さまざまなエンドポイント/機能で使用するドキュメントを含むファイルをアップロードします。現在、1つの組織によってアップロードされたすべてのファイルのサイズは、最大1 GBです。ストレージ制限を増やす必要がある場合は、お問い合わせください。 | POST /files |
Files::retrieve() | 特定のファイルに関する情報を返します。 | GET /files/{file_id} |
Files::delete() | ファイルを削除します。 | DELETE /files/{file_id} |
FilesContent::download() | 指定されたファイルの内容を返します。 | GET /files/{file_id}/content |
FineTunes::list() | GET /fine-tunes | |
FineTunes::create() | 応答には、ジョブステータスや微調整されたモデルの名前を含むエンキュージョブの詳細が含まれます。 微調整の詳細をご覧ください | POST /fine-tunes |
FineTunes::retrieve() | 微調整の詳細をご覧ください | 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() | 組織の微調整の仕事をリストします | GET /fine_tuning/jobs |
FineTuningJobs::create() | 特定のデータセットから指定されたモデルを微調整するジョブを作成します。 応答には、ジョブステータスや微調整されたモデルの名前を含むエンキュージョブの詳細が含まれます。 微調整の詳細をご覧ください | POST /fine_tuning/jobs |
FineTuningJobs::retrieve() | 微調整された仕事に関する情報を入手してください。 微調整の詳細をご覧ください | GET /fine_tuning/jobs/{fine_tuning_job_id} |
FineTuningJobsCancel::fineTuning() | すぐに微調整ジョブをキャンセルします。 | POST /fine_tuning/jobs/{fine_tuning_job_id}/cancel |
FineTuningJobsEvents::listFineTuning() | 微調整されたジョブのステータス更新を取得します。 | GET /fine_tuning/jobs/{fine_tuning_job_id}/events |
ImagesEdits::createImage() | 元の画像とプロンプトを与えられた編集または拡張画像を作成します。 | POST /images/edits |
ImagesGenerations::create() | プロンプトが与えられた画像を作成します。 | POST /images/generations |
ImagesVariations::createImage() | 特定の画像のバリエーションを作成します。 | POST /images/variations |
Models::list() | 現在利用可能なモデルをリストし、所有者や可用性など、それぞれに関する基本情報を提供します。 | GET /models |
Models::retrieve() | モデルインスタンスを取得し、所有者や許可などのモデルに関する基本情報を提供します。 | GET /models/{model} |
Models::delete() | 微調整されたモデルを削除します。モデルを削除するには、組織に所有者の役割が必要です。 | DELETE /models/{model} |
Moderations::create() | テキストがOpenaiのコンテンツポリシーに違反している場合に分類します | POST /moderations |
非推奨方法は、にリストされていますストライクスルーフォーマット。これらの方法は、将来のリリースで削除されるため、これらの方法を使用しないでください。
ノミネートされたAPIハンドラーとAPIメソッドにリクエストを行うには、次の2つの方法があります。
グローバルにアクセスできるようにクライアントを構築した場合、関連するAPIハンドラークラスを直接使用できます。
use Tectalic OpenAi Handlers AudioTranscriptions ;
( new AudioTranscriptions ())-> create ();または、クライアントクラスを使用して、クライアントクラスのすべてのAPIハンドラーにアクセスできます。
$ client -> audioTranscriptions ()-> create ();上記の2つの方法のいずれかを使用してリクエストを行ったら、次のステップは応答にアクセスすることです。
さまざまな方法で応答にアクセスできます。お好みのものを選択してください。
モデル応答は、各APIプロパティのパブリックプロパティを備えたデータ転送オブジェクト(DTO)スタイルのPHPクラスです。
彼らは、API要求から応答を取得する構造化された方法を提供します。
すべての応答モデルはTectalicOpenAiModelsAbstractModelまたはTectalicOpenAiModelsAbstractModelCollectionのインスタンスです。
リクエストを実行した後、 ->toModel() FluentメソッドをAPIメソッドに使用します。
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ model = ( new AudioTranscriptions ())-> create ()-> toModel ();各APIメソッドのtoModel()呼び出しは、呼び出したAPIメソッドの適切なモデルクラスタイプを返します。
リクエストを実行した後、APIメソッドに->toArray() Fluentメソッドを使用します。
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ array = ( new AudioTranscriptions ())-> create ()-> toArray ();結果の連想配列では、配列キーは、関連するモデルクラスのパブリックプロパティの名前と一致します。
生の応答にアクセスするか、HTTPヘッダーを検査する必要がある場合は、APIメソッドに->getResponse() Fluentメソッドを使用します。 PsrHttpMessageResponseInterfaceを返します。
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ response = ( new AudioTranscriptions ())-> create ()-> getResponse ();Tectalic Openai REST APIクライアントでリクエストを実行すると、特定のシナリオによりTectalicOpenAiExceptionClientExceptionスローされます。詳細については、以下をご覧ください。
Managerクラスの無効な使用Manager::build()関数が複数回呼び出される場合、またはマネージャーManager::build() Manager::access()が呼び出される場合、 LogicExceptionがスローされます。
Tectalic OpenAI REST APIクライアントは、 PSR-18互換のHTTPクライアントに依存し、HTTPクライアントは失敗したHTTP応答コードの例外をスローするべきではありません。
失敗した応答コードは299範囲200 (包括的)にないものとして分類されます。失敗した応答コードの例は次のとおりです。
100 199300 399400 499500 599失敗した応答コードが発生した場合:
toModel()メソッドは、 ClientExceptionをスローします。toArray()メソッドは、応答本体を返し、 ClientExceptionをスローしません。getResponse()メソッドは、生の応答を返し、 ClientExceptionをスローしません。以下は、リクエストを実行するときにtry / catchブロックを使用して、予期しないエラーを検出および処理できるようにする方法の例です。
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...
}選択したHTTPクライアントがClientException以外の例外をスローする場合、 Tectalic OpenAI REST API ClientとそのAPIハンドラークラスは、これらの例外をバブルアップさせます。
例外処理の詳細については、HTTPクライアントのドキュメントを参照してください。
Tectalic Openai REST APIクライアントパッケージには、正しい操作を検証するためのいくつかのタイプの自動化されたphPunitテストが含まれています。
これらのテストを実行するには、DEV依存関係を備えたTectalic OpenAI REST APIクライアントパッケージをインストールする必要があります(つまり、Composerを実行するときは--no-devフラグを使用していません)。
これらのphpunitテストは、次のように設計されています。
ClientやManagerクラスなど、パッケージの他の部分の動作を確認します。ユニットテストは、このパッケージのルートディレクトリから実行する必要がある次のコマンドを使用して実行できます。
composer test:unitユニットテストでは、Openai APIに対して実際のリクエストは実行されません。
ユニットテストはtests/Unitディレクトリにあります。
統合テストはtests/Integrationディレクトリにあります。
これらのPHPunitテストは、OpenAI API OpenAPI仕様に従って、各APIメソッドが有効な応答を解析することを確認するように設計されています。箱から出して、統合テストは、PRISMモックサーバーで動作するように設計されています。
プリズムがインストールされていることを確認してください。 Prismのインストール方法の詳細については、Prismドキュメントをご覧ください。
PRISMがインストールされたら、PRISMと統合テストを別々のターミナルウィンドウで並べて実行するか、このパッケージのルートディレクトリから実行する必要がある次のコマンドを使用できます。
echo " > Starting Prism server "
prism mock tests/openapi.yaml > /dev/null 2>&1 &
PRISM_PID= $!
sleep 2
echo " => Started "
composer test:integration
kill $PRISM_PIDこれらのコマンドは、Prism Mock Serverを起動し、統合テストを実行し、テストが完了したらPrism Mockサーバーを停止します。
この場合、統合テストでは、OpenAI APIに対して実際のリクエストは実行されません。
OPENAI_CLIENT_TEST_BASE_URI環境変数を設定することにより、統合テストに別のAPIエンドポイントターゲットを設定できます。
たとえば、Prismを使用する代わりに、選択した別のモッキング/ステージング/テストサーバーを使用するか、Openai APIのライブエンドポイントを使用できます。
OPENAI_CLIENT_TEST_AUTH_USERNAME OPENAI_CLIENT_TEST_AUTH_PASSWORD環境変数に適切な資格情報を設定することを忘れないでください。
セットアップが完了したら、次のコマンドを実行するだけです。
composer test:integrationLive Openai APIエンドポイントに対する統合テストを実行することはお勧めしません。これは、テストがすべてのエンドポイントにサンプルデータを送信するため、新しいデータが作成されるか、既存のデータが削除される可能性があるためです。
独自のテストを書いている場合は、 Openai APIからの応答をmock笑する必要がある可能性があります。
これを行う1つの方法は、 php-http/mock-clientパッケージをプロジェクトにインストールし、テクタリックOpenAI REST APIクライアントをインスタンス化するときにHttpMockClient class(実際のpsr-18クライアントの代わりに)を使用することです。
これにより、実際のリクエストを実行するのではなく、 Openai APIからの応答をmock笑することができます。
詳細については、模擬クライアントのドキュメントをご覧ください。
ご質問やフィードバックがある場合は、ディスカッションボードを使用してください。
このソフトウェアは、著作権(c)2022-present lecectalicです。
著作権およびライセンス情報については、ライセンスファイルを表示してください。