此軟件包不再受支持或維護。
Tectalic OpenAI REST API客戶端是一個軟件包,可提供一種方便,直接的方式與PHP應用程序中的OpenAI API進行交互。
支持CHATGPT , GPT-4 , GPT-3.5 , GPT-3 , Codex , Dall·E , Whisper ,微調,微調,嵌入式和審核模型,並具有完全鍵入的數據傳輸對象(DTOS),用於所有請求和響應以及IDE自動啟用支持。
可以從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目前處於有限的beta中,只有被授予訪問權限的人才能訪問。請參閱此處以獲取有關如何加入候補名單的詳細信息和說明。
如果您在嘗試使用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.該處理程序支持所有GPT-3型號,包括text-davinci-003 , text-davinci-002等。
了解有關文本完成的更多信息。
$ 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/openai在將Tectalic OpenAI REST API客戶端軟件包安裝到您的項目中後,請確保您還擁有兼容的PSR-18 HTTP客戶端,例如“ Guzzle”或Symfony'http Client。
您可以使用以下代碼示例並自定義以適合您的應用程序。
// 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環境變量。
您將與之互動的主要類是客戶端類( TectalicOpenAiClient Client )。
該Client類還包含輔助方法,可讓您快速訪問19個API處理程序。
請參閱下面的支持處理程序和方法的完整列表。
該軟件包支持28種API方法,這些方法分為19個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 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方法提出請求:
如果您構建了客戶以在全球範圍內可訪問,則可以直接使用相關的API處理程序:
use Tectalic OpenAi Handlers AudioTranscriptions ;
( new AudioTranscriptions ())-> create ();另外,您可以使用客戶端類訪問客戶端類的所有API處理程序:
$ client -> audioTranscriptions ()-> create ();一旦您使用上面概述的兩種方法之一提出了請求,下一步就是訪問響應。
您可以以不同的方式訪問響應。請選擇您的首選。
模型響應是數據傳輸對象(DTO)樣式PHP類,每個API屬性具有公共屬性。
他們提供了一種從API請求中檢索響應的結構化方法。
所有響應模型均為TectalicOpenAiModelsAbstractModel或TectalicOpenAiModelsAbstractModelCollection的實例。
執行請求後,將->toModel()流利方法用於API方法:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ model = ( new AudioTranscriptions ())-> create ()-> toModel ();每個API方法的toModel()調用將返回您剛剛調用的API方法的適當模型類類型。
執行請求後,將->toArray()流利方法用於API方法:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ array = ( new AudioTranscriptions ())-> create ()-> toArray ();在結果的關聯數組中,數組鍵將匹配相關模型類中的公共屬性的名稱。
如果您需要訪問原始響應或檢查HTTP標頭,請使用->getResponse() Fluent方法對API方法。它將返回PsrHttpMessageResponseInterface :
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ response = ( new AudioTranscriptions ())-> create ()-> getResponse ();在使用Tectalic OpenAI REST API客戶端執行請求時,特定方案將導致TectalicOpenAiExceptionClientException被拋棄。請參閱下面有關詳細信息。
Manager課程的使用無效如果Manager::build()函數多次稱為LogicException ,或者在呼叫Manager :: Manager::build() Manager::access() ()。
Tectalic OpenAI REST API客戶端取決於PSR-18兼容HTTP客戶端,並且HTTP客戶端不應對失敗的HTTP響應代碼拋出異常。
不成功的響應代碼被歸類為不在200 (包含)範圍內的299代碼。不成功響應代碼的示例包括:
199 100300 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客戶端文檔,以獲取有關異常處理的更多詳細信息。
Toctalic OpenAI REST API客戶端軟件包包括幾種類型的自動PHPUNIT測試,以驗證正確的操作:
要運行這些測試,您將需要安裝具有其DEV依賴項的校直型OpenAI REST API客戶端軟件包(即運行作曲家時不使用--no-dev標誌)。
這些Phpunit測試的設計為:
Client和Manager類。可以使用以下命令運行單元測試,該命令需要從該軟件包的根目錄運行。
composer test:unit單位測試不會針對OpenAI API執行任何真實請求。
單元測試位於tests/Unit目錄中。
集成測試位於tests/Integration目錄中。
根據OpenAI API OpenAPI規範,這些PHPUNIT測試旨在確認每種API方法都會解析有效的響應。開箱即用,集成測試旨在與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模擬服務器,然後運行集成測試,然後在完成測試時停止Prism Mock Server。
在這種情況下,集成測試不會針對OpenAI API執行任何真實請求。
通過設置OPENAI_CLIENT_TEST_BASE_URI環境變量,您可以為集成測試設置另一個API端點目標。
例如,您可以使用所選的其他模擬/登台/測試服務器,而不是使用Prism,也可以使用OpenAI API的實時端點。
不要忘記在OPENAI_CLIENT_TEST_AUTH_USERNAME OPENAI_CLIENT_TEST_AUTH_PASSWORD環境變量中設置適當的憑據。
設置完成後,只需運行以下命令即可。
composer test:integration我們不建議針對實時OpenAI API端點進行集成測試。這是因為測試將將示例數據發送到所有端點,這可能導致創建新數據或被刪除的現有數據。
如果您正在編寫自己的測試,則可能需要嘲笑OpenAI API的響應。
這樣做的一種方法是將php-http/mock-client軟件包安裝到您的項目中,然後在實例化tectalic OpenAI REST API客戶端時使用HttpMockClient類(而不是真實的PSR-18客戶端)。
這使您可以嘲笑OpenAI API的響應,而不是執行真實請求。
請參閱模擬客戶文檔以獲取詳細信息。
如果您有任何疑問或反饋,請使用討論板。
該軟件是版權(c)2022-tresent tectalic。
有關版權和許可信息,請查看許可證文件。