Этот пакет больше не поддерживается или поддерживается.
Клиент API Tectal Openai REST - это пакет, который обеспечивает удобный и простой способ взаимодействия с API OpenAI из вашего приложения PHP.
Поддерживает CHATGPT , GPT-4 , GPT-3.5 , GPT-3 , Codex , Dall · E , Whisper , тонкая настройка , встраиваемые и модельные модели модерации , с полностью напечатанными объектами передачи данных (DTOS) для всех запросов и ответов и поддержки AIDE Autocomplete.
Более подробная информация доступна по адресу 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 в настоящее время находится в ограниченной бета-версии и доступен только для тех, кому был предоставлен доступ. Пожалуйста, смотрите здесь для деталей и инструкций о том, как присоединиться к списку ожидания.
Если вы получите ошибку 404 при попытке использовать GPT-4, то ваша учетная запись 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") Поддерживаемые модели Codex включают 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+ поддерживаемых языков.
Нужна помощь в начале работы? Смотрите наше руководство: Как построить приложение, используя API OpenAI.
Установите пакет в свой проект:
composer require tectalic/openaiПосле установки клиентского пакета API Tectal Openai REST в свой проект убедитесь, что у вас также есть совместимый клиент PSR-18 HTTP, такой как «Guzzle» или Symfony «клиент 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, вам необходимо предоставить объект Authentication ( $auth ) при вызове Manager::build() .
Аутентификация в API OpenaI - по аутентификации HTTP.
Пожалуйста, смотрите документацию API OpenAI для получения более подробной информации о получении учетных данных аутентификации.
В приведенном выше коде использования настраивайте конструктор Authentication в соответствии с вашими потребностями. Например, скорее всего, потребуется добавить переменную среды OPENAI_API_KEY в вашу систему.
Первичный класс, с которым вы будете взаимодействовать, - это Client -класс ( TectalicOpenAiClient ).
Этот Client класс также содержит вспомогательные методы, которые позволяют быстро получить доступ к 19 обработчикам API.
Пожалуйста, смотрите ниже для полного списка поддерживаемых обработчиков и методов.
Этот пакет поддерживает 28 методов API, которые сгруппированы в 19 обработчиков API.
См. Таблицу ниже для полного списка обработчиков и методов API.
| API Handler Class и имя метода | Описание | Глагол и URL -адрес API |
|---|---|---|
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 ГБ. Пожалуйста, свяжитесь с нами, если вам нужно увеличить предел хранения. | 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 ();После того, как вы сделали запрос, используя один из двух изложенных выше методов, следующим шагом является доступ к ответу.
Вы можете получить доступ к ответу по -разному. Пожалуйста, выберите ваш предпочтительный.
Ответы моделей - это классы PHP объекта передачи данных (DTO) с общественными свойствами для каждого свойства API.
Они предлагают структурированный способ извлечения ответа из запроса API.
Все модели ответов являются экземпляром TectalicOpenAiModelsAbstractModel или TectalicOpenAiModelsAbstractModelCollection .
После выполнения запроса используйте метод ->toModel() для метода API:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ model = ( new AudioTranscriptions ())-> create ()-> toModel (); Вызов toModel() каждого метода API вернет соответствующий тип класса модели для метода API, который вы только что вызвали.
После выполнения запроса используйте метод ->toArray() Fluent для метода API:
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ array = ( new AudioTranscriptions ())-> create ()-> toArray ();В полученном ассоциативном массиве клавиши массива будут соответствовать именам публичных свойств в соответствующем классе модели.
Если вам нужно получить доступ к необработанному ответу или осмотреть заголовки HTTP, используйте метод Fluent ->getResponse() для метода API. Он вернет PsrHttpMessageResponseInterface :
use Tectalic OpenAi Handlers AudioTranscriptions ;
$ response = ( new AudioTranscriptions ())-> create ()-> getResponse (); При выполнении запросов с клиентом API Tectal Openai , конкретные сценарии приведут к выбросу TectalicOpenAiExceptionClientException . Пожалуйста, смотрите ниже для деталей.
Manager A LogicException будет брошено, если функция Manager::build() вызывает несколько раз, или если Manager::access() вызовет перед Calling Manager::build() .
Клиент API Tectal Openai REST зависит от PSR-18, совместимого с HTTP-клиентом, и что клиент HTTP не должен бросать исключение для неудачных кодов ответов HTTP.
Неудачный код ответа классифицируется как тот, который не находится в диапазоне 200 - 299 (включительно). Примеры неудачных кодов ответов включают в себя:
100 - 199 )300 - 399 )400 - 499 )500 - 599 )Если возникает неудачный код ответа:
toModel() выбросит ClientException .toArray() API -обработчика вернет тело ответа и не бросит ClientException .getResponse() API -обработчика () вернет необработанный ответ и не бросит 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 , то Tectal Client API Client API Tectal Openai и его классы API -обработчика позволят этим исключениям пузыриться.
Проконсультируйтесь с документацией вашего клиента HTTP для получения более подробной информации об обработке исключений.
Клиентский пакет API Tectal Openai Openai включает в себя несколько типов автоматических тестов PhpUnit, чтобы проверить правильную операцию:
Чтобы запустить эти тесты, вам нужно будет установить пакет клиента Tectal Openai REST API с его зависимостями DEV (то есть не используя флаг --no-dev при запуске композитора).
Эти тесты фпунита предназначены для:
Client и Manager .Модульные тесты можно запускать с помощью следующей команды, которую необходимо запустить из корневого каталога этого пакета.
composer test:unitМодульные тесты не выполняют никаких реальных запросов против API OpenAI.
Модульные тесты расположены в каталоге tests/Unit .
Интеграционные тесты расположены в каталоге tests/Integration .
Эти тесты PHPUNIT предназначены для подтверждения того, что каждый метод API анализирует допустимый ответ в соответствии с спецификацией API OpenAI OpenAPI. Из коробки интеграционные тесты предназначены для работы с сервером Prism Mock.
Убедитесь, что призма установлена. Пожалуйста, смотрите документацию 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, затем запускают интеграционные тесты, а затем останут макет Prism, когда тесты будут завершены.
В этом случае интеграционные тесты не выполняют никаких реальных запросов против API OpenAI.
Установив переменную среды OPENAI_CLIENT_TEST_BASE_URI , вы можете установить другую цель конечной точки API для интеграционных тестов.
Например, вместо использования Prism вы можете использовать другой сервер издевательств/постановки/тестирования по вашему выбору, или вы можете использовать живые конечные точки API OpenAI.
Не забудьте установить соответствующие учетные данные в OPENAI_CLIENT_TEST_AUTH_USERNAME OPENAI_CLIENT_TEST_AUTH_PASSWORD .
После завершения настройки просто запустите следующую команду.
composer test:integrationМы не рекомендуем проводить интеграционные тесты против Live OpenAI API конечных точек. Это связано с тем, что тесты будут отправлять примеры данных на все конечные точки, что может привести к созданию новых данных, или существующие данные будут удалены.
Если вы пишете свои собственные тесты, вам, вероятно, потребуется высмеивать ответы от API OpenAI .
Один из способов сделать это-установить пакет php-http/mock-client в свой проект, а затем использовать класс HttpMockClient (вместо реального клиента PSR-18) при создании клиента API Tectal Openai .
Это позволяет вам издеваться над ответами от API OpenAI , а не выполнять реальные запросы.
Пожалуйста, смотрите документацию по макете клиента для получения подробной информации.
Если у вас есть какие -либо вопросы или обратная связь, используйте доску для обсуждения.
Это программное обеспечение является Copyright (C) 2022-президентом-тектором.
Для получения информации об авторском праве и лицензии, пожалуйста, просмотрите файл лицензии .