PHPOpenAI PHP에서 OpenAI API를 사용할 수있는 지역 사회 관리 도서관입니다.
이 프로젝트는 PHP로 작성되었으며 OpenAI API 기존 PHP 프로젝트에 쉽게 통합하는 데 사용할 수 있습니다.
이 프로젝트는 열거와 같은 기능을 사용하기 위해 PHP 버전 8.1을 기반으로합니다. 이 프로젝트에는 외부 종속성이 필요하지 않습니다. 그러나 올바르게 작동하려면 컬 확장이 설치되어 있어야합니다.
이 프로젝트는 작곡가를 사용하여 종속성을 관리합니다. 컴포저를 아직 설치하지 않은 경우 공식 작곡가 웹 사이트의 지침을 따라 할 수 있습니다.
프로젝트를 설치하려면 다음 명령을 사용하여 packagist.org에서 패키지를 설치할 수 있습니다.
composer require easygithdev/php-openai OpenAI API 사용하려면 웹 사이트에 가입하고 API 키를 얻어야합니다. API 키가 있으면 PHP 코드에서 사용하여 OpenAI API에 요청을 보낼 수 있습니다.
키를 얻는 방법을 알아 보려면 다음 주소로 이동하십시오.
https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-key.
다음은 PHP에서 OpenAI API를 사용하는 방법을 보여주는 예제 코드입니다.
<?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> ' ; 이 코드는 API 키로 새로운 OpenAIApi 객체를 인스턴스화 한 다음 OpenAI가 제공하는 GPT-3 AI 언어 모델로 텍스트 완료를 수행하기 위해 새 Completion 개체를 만듭니다.
create() 메소드는 Completion 개체에서 호출되어 새 텍스트 완료를 생성합니다. 두 가지 매개 변수가 필요합니다.
완료 결과는 $response 변수로 반환됩니다. 그런 다음 결과는 완성 된 텍스트를 표시하거나 추가 처리를 위해 프로그램의 다른 부분에 공급하는 것과 같은 추가 처리에 사용될 수 있습니다.
환경 변수를 사용하여 키를 저장할 수 있습니다. 그런 다음 다음 예제에서와 같이이 변수를 사용할 수 있습니다.
export OPENAI_API_KEY= " sk-xxxxxxxxxxx "Apache 구성 파일에 변수를 넣을 수 있습니다.
<VirtualHost hostname:80>
...
SetEnv OPENAI_API_KEY sk-xxxxxxxxxxx
...
</VirtualHost>
그런 다음 서비스를 다시 시작하십시오.
이제 php의 getenv() 함수를 호출하여 환경 변수를 사용할 수 있습니다.
<?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 ))API의 URL을 수정 해야하는 경우 다음과 같이 진행할 수 있습니다.
<?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 ();텍스트 완료에 대해 자세히 알아보십시오.
OpenAI API의 스트림 속성은 API가 반환 한 데이터 흐름을 제어하는 데 사용할 수있는 선택적 매개 변수입니다. 이 옵션을 true로 설정하면 API는 단일 응답이 아닌 스트리밍 데이터로 응답을 반환합니다.
즉, 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는 OpenAI API를 프로젝트에 쉽게 통합하려는 PHP 개발자에게 유용한 프로젝트입니다. 간단한 설치 및 작곡가 사용, 텍스트 분류, 이미지 생성 및 PHP 응용 프로그램에 명명 된 엔티티 인식.