此软件包不再受支持或维护。
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环境变量。
您将与之互动的主要类是Client类( TectalicOpenAiClient )。
该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。
有关版权和许可信息,请查看许可证文件。