PHPOpenAI -это библиотека, обслуживаемая сообществом, которая позволяет использовать API OpenAI в PHP.
Проект написан в PHP и может использоваться для легкости интеграции OpenAI API в существующий PHP -проект.
Этот проект основан на PHP версии 8.1, чтобы использовать такие функции, как перечисления. Этот проект не требует никаких внешних зависимостей. Тем не менее, вы должны установить расширение Curl, чтобы он работал должным образом.
Проект использует композитор для управления зависимостями. Если вы еще не установили композитор, вы можете сделать это, следуя инструкциям на официальном веб -сайте композитора.
Чтобы установить проект, вы можете установить пакет с packagist.org, используя следующую команду:
composer require easygithdev/php-openai Чтобы использовать OpenAI API , вам нужно зарегистрироваться на их веб -сайте и получить ключ API. После того, как у вас есть ключ API, вы можете использовать его в коде PHP для отправки запросов в API OpenAI.
Чтобы узнать, как получить ключ, перейдите по следующему адресу:
https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-key.
Вот пример кода, который показывает, как использовать API OpenAI в PHP:
<?php
require_once __DIR__ . ' /vendor/autoload.php ' ;
use EasyGithDev PHPOpenAI Helpers ModelEnum ;
use EasyGithDev PHPOpenAI OpenAIClient ;
$ apiKey = getenv ( ' OPENAI_API_KEY ' );
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toObject ();
// Response as stClass object
echo ' <pre> ' , print_r ( $ response , true ), ' </pre> ' ; Этот код создает новый объект OpenAIApi с ключом API, а затем создает новый объект Completion для выполнения завершения текста с помощью языковой модели GPT-3 AI, предоставленной OpenAI.
Метод create() вызывает объект Completion для создания нового завершения текста. Требуется два параметра:
Результат завершения возвращается в переменной $response . Затем можно использовать результат для дальнейшей обработки, например, отображение завершенного текста или подача его в другую часть программы для дополнительной обработки.
Вы можете использовать переменную среды для хранения ключа. Затем вы можете использовать эту переменную, как в следующем примере:
export OPENAI_API_KEY= " sk-xxxxxxxxxxx "Вы можете поместить переменную в файл конфигурации Apache:
<VirtualHost hostname:80>
...
SetEnv OPENAI_API_KEY sk-xxxxxxxxxxx
...
</VirtualHost>
А затем перезапустить услугу.
Теперь вы можете использовать переменную среды, вызывая функцию getenv() PHP.
<?php
$ response = ( new OpenAIApi ( getenv ( ' OPENAI_API_KEY ' )))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
);Если вы хотите предоставить информацию о вашей организации, вы должны продолжить следующее.
<?php
$ apiKey = getenv ( ' OPENAI_API_KEY ' );
$ org = getenv ( ' OPENAI_API_ORG ' );
// Passing the organization to the client
$ response = ( new OpenAIClient ( $ apiKey , $ org ))Если вам нужно изменить URL -адрес API, вы можете продолжить следующее:
<?php
$ apiKey = getenv ( ' OPENAI_API_KEY ' );
// Create a new router, with origine url and version
$ route = new OpenAIRoute (
' https://api.openai.com ' ,
' v1 '
);
// Get a specific Url
echo $ route -> completionCreate () , ' <br> ' ;
// Passing the router to the client
$ response = ( new OpenAIClient ( $ apiKey ))
-> setRoute ( $ route ); Чтобы переопределить маршрут, вам необходимо расширить класс OpenAIRoute или реализовать интерфейс Route .
API возвращает ответы в формате JSON. Чтобы облегчить доступ к различной информации, вы можете вызвать методы toObject() или toArray() объекта обработчика для доступа к данным.
<?php
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toObject ();
// Response as a stClass object
echo ' <pre> ' , print_r ( $ response , true ), ' </pre> ' ;
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toArray ();
// Response as an associative array
echo ' <pre> ' , print_r ( $ response , true ), ' </pre> ' ;Иногда API возвращает ошибки. Следовательно, необходимо иметь возможность определить, что вызвало проблему. Чтобы справиться с этой задачей, у вас есть много вариантов.
Если вы используете объект обработчика с помощью методов toObject() или toArray() , просто используйте структуру try-catch .
try {
$ response = ( new OpenAIClient ( ' BAD KEY ' ))
-> Completion ()
-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)
-> toObject ();
} catch ( Throwable $ t ) {
echo nl2br ( $ t -> getMessage ());
die;
} Если вы используете объект CurlResponse , вы можете проверить, что ошибка произошла с помощью валидаторов.
$ handler = ( new OpenAIClient ( ' BAD KEY ' ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
);
$ response = $ handler -> getResponse ();
$ contentTypeValidator = $ handler -> getContentTypeValidator ();
if (!( new StatusValidator ( $ response ))-> validate () or
!( new $ contentTypeValidator ( $ response ))-> validate ()) {
echo $ response -> getBody ();
}Узнайте больше об ошибках.
Вот видео, показывающее приложение, которое позволяет вам создавать изображения со стилем живописи, определяемым пользователем. Это приложение создается с использованием проекта Phpopenai.
Вы можете найти код здесь:
https://github.com/easygithdev/phpopenai-playground.git.
Интеграция OpenaI в ваше приложение теперь так же просто, как и несколько строк кода.
Вы можете найти все коды здесь:
https://github.com/easygithdev/phpopenai-examples.
$ response = ( new OpenAIClient ( $ apiKey ))-> Chat ()-> create (
ModelEnum:: GPT_3_5_TURBO ,
[
new ChatMessage (ChatMessage:: ROLE_SYSTEM , " You are a helpful assistant. " ),
new ChatMessage (ChatMessage:: ROLE_USER , " Who won the world series in 2020? " ),
new ChatMessage (ChatMessage:: ROLE_ASSISTANT , " The Los Angeles Dodgers won the World Series in 2020. " ),
new ChatMessage (ChatMessage:: ROLE_USER , " Where was it played? " ),
]
)-> toObject ();Узнайте больше о завершении чата.
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toObject ();Узнайте больше о завершении текста.
Атрибут потока в API OpenAI - это необязательный параметр, который вы можете использовать для управления потоком данных, возвращаемых API. Если вы установите эту опцию TRUE, API вернет ответ как потоковые данные, а не один ответ.
Это означает, что вы можете получить результаты API по мере того, как они становятся доступными, вместо того, чтобы ждать полного ответа перед их обработкой. Этот вариант может быть полезен для приложений, которые требуют обработки больших объемов данных в реальном времени.
<?php
header ( ' Content-Type: text/event-stream ' );
header ( ' Cache-Control: no-cache ' );
. . .
( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
model: " text-davinci-003 " ,
prompt: " Translate this into 1. French, 2. Spanish and 3. Japanese: nn What rooms do you have available? nn 1. " ,
temperature: 0.3 ,
max_tokens: 100 ,
top_p: 1.0 ,
frequency_penalty: 0.0 ,
presence_penalty: 0.0 ,
stream: true
)-> getResponse (); < html >
< body >
< div id =" result " > </ div >
< script >
function nl2br ( str , replaceMode , isXhtml ) {
var breakTag = ( isXhtml ) ? '<br />' : '<br>' ;
var replaceStr = ( replaceMode ) ? '$1' + breakTag : '$1' + breakTag + '$2' ;
return ( str + '' ) . replace ( / ([^>rn]?)(rn|nr|r|n) / g , replaceStr ) ;
}
if ( typeof ( EventSource ) !== 'undefined' ) {
console . info ( 'Starting connection...' ) ;
var source = new EventSource ( 'stream.php' ) ;
source . addEventListener ( 'open' , function ( e ) {
console . info ( 'Connection was opened.' ) ;
} , false ) ;
source . addEventListener ( 'error' , function ( e ) {
var txt ;
switch ( event . target . readyState ) {
// if reconnecting
case EventSource . CONNECTING :
txt = 'Reconnecting...' ;
break ;
// if error was fatal
case EventSource . CLOSED :
txt = 'Connection failed. Will not retry.' ;
break ;
}
console . error ( 'Connection error: ' + txt ) ;
} , false ) ;
source . addEventListener ( 'message' , function ( e ) {
if ( e . data == "[DONE]" ) {
source . close ( ) ;
return ;
}
document . getElementById ( 'result' ) . innerHTML += nl2br ( JSON . parse ( e . data ) . choices [ 0 ] . text ) ;
} , false ) ;
} else {
alert ( 'Your browser does not support Server-sent events! Please upgrade it!' ) ;
console . error ( 'Connection aborted' ) ;
}
</ script >
</ body >
</ html > $ response = ( new OpenAIClient ( $ apiKey ))-> Edit ()-> create (
" What day of the wek is it? " ,
ModelEnum:: TEXT_DAVINCI_EDIT_001 ,
" Fix the spelling mistakes " ,
)-> toObject ();Узнайте больше о редактировании текста.
function displayUrl ( $ url )
{
return ' <img src=" ' . $ url . ' " /> ' ;
}
$ response = ( new OpenAIClient ( $ apiKey ))-> Image ()-> create (
" a rabbit inside a beautiful garden, 32 bit isometric " ,
n: 2 ,
size: ImageSizeEnum::is256,
)-> toObject (); < ?php foreach ($response- > data as $image) : ? >
< div > < ?= displayUrl($image- > url) ? > </ div >
< ?php endforeach; ? > 
Узнайте больше о генерации изображений.
$ response = ( new OpenAIClient ( $ apiKey ))-> Image ()-> createVariation (
__DIR__ . ' /../../assets/image_variation_original.png ' ,
n: 2 ,
size: ImageSizeEnum::is256
)-> toObject ();
Узнайте больше об изменении изображения.
$ response = ( new OpenAIClient ( $ apiKey ))-> Image ()-> createEdit (
image: __DIR__ . ' /../../assets/image_edit_original.png ' ,
mask: __DIR__ . ' /../../assets/image_edit_mask2.png ' ,
prompt: ' a sunlit indoor lounge area with a pool containing a flamingo ' ,
size: ImageSizeEnum::is512,
)-> toObject ();
Узнайте больше о редактировании изображения.
$ response = ( new OpenAIClient ( $ apiKey ))-> Embedding ()-> create (
ModelEnum:: TEXT_EMBEDDING_ADA_002 ,
" The food was delicious and the waiter... " ,
)-> toObject ();Узнайте больше об внедрении.
$ response = ( new OpenAIClient ( $ apiKey ))-> Audio ()
-> addCurlParam ( ' timeout ' , 30 )
-> transcription (
__DIR__ . ' /../../assets/openai.mp3 ' ,
ModelEnum:: WHISPER_1 ,
response_format: AudioResponseEnum:: SRT
)-> toObject ();Узнайте больше о транскрипции звука.
$ response = ( new OpenAIClient ( $ apiKey ))-> Audio ()
-> addCurlParam ( ' timeout ' , 30 )
-> translation (
__DIR__ . ' /../../assets/openai_fr.mp3 ' ,
' whisper-1 ' ,
response_format: AudioResponseEnum:: TEXT
)-> toObject ();Узнайте больше о переводе аудио.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> list ()
-> toObject ();Узнайте больше о модели.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> retrieve ( ' text-davinci-001 ' )
-> toObject ();Узнайте больше о модели.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> delete (
$ _POST [ ' model ' ]
)-> toObject ();Узнайте больше о модели.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> list ()
-> toObject ();Узнайте больше о файле.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> create (
__DIR__ . ' /../../assets/mydata.jsonl ' ,
' fine-tune ' ,
)
-> toObject ();Узнайте больше о файле.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> delete ( ' file-xxxx ' )
-> toObject ();Узнайте больше о файле.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> retrieve ( ' file-xxxx ' )
-> toObject ();Узнайте больше о модели.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> download ( ' file-xxxx ' )
-> toObject ();Узнайте больше о модели.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> list ()
-> toObject ();Узнайте больше о тонкой настройке.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> create (
' file-xxxx '
)
-> toObject ();Узнайте больше о тонкой настройке.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> retrieve ( ' ft-xxx ' )
-> toObject ();Узнайте больше о тонкой настройке.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> listEvents ( ' ft-xxx ' )
-> toObject ();Узнайте больше о тонкой настройке.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> Cancel ( ' ft-xxx ' )
-> toObject ();Узнайте больше о тонкой настройке.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Moderation ()
-> create ( ' I want to kill them. ' )
-> toObject ();Узнайте больше о умеренности.
Чтобы запустить все тесты:
composer test testsЧтобы запустить только один тест:
composer test tests/[NAME]Test.phpPhpopenai - это полезный проект для разработчиков PHP, которые хотят легко интегрировать API OpenAI в свои проекты. С простой установкой и использованием композитора, текстовой классификации, генерации изображений и распознавания объектов в вашем приложении PHP.