PHPOpenAI adalah perpustakaan yang dipelihara komunitas yang memungkinkan penggunaan API OpenAI di PHP.
Proyek ini ditulis dalam PHP dan dapat digunakan untuk dengan mudah mengintegrasikan OpenAI API ke dalam proyek PHP Anda yang ada.
Proyek ini didasarkan pada PHP Versi 8.1 untuk menggunakan fitur seperti enumerasi. Proyek ini tidak memerlukan dependensi eksternal. Namun, Anda harus memasang ekstensi keriting agar berfungsi dengan baik.
Proyek ini menggunakan komposer untuk mengelola dependensi. Jika Anda belum menginstal komposer, Anda dapat melakukannya dengan mengikuti instruksi di situs web komposer resmi.
Untuk menginstal proyek, Anda dapat menginstal paket dari packagist.org menggunakan perintah berikut:
composer require easygithdev/php-openai Untuk menggunakan OpenAI API , Anda harus mendaftar di situs web mereka dan mendapatkan kunci API. Setelah Anda memiliki kunci API Anda, Anda dapat menggunakannya dalam kode PHP Anda untuk mengirim permintaan ke API OpenAI.
Untuk mengetahui cara mendapatkan kunci Anda, buka alamat berikut:
https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-key.
Berikut adalah kode contoh yang menunjukkan cara menggunakan API OpenAI di 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> ' ; Kode ini membuat objek OpenAIApi baru dengan kunci API, dan kemudian membuat objek Completion baru untuk melakukan penyelesaian teks dengan model bahasa AI GPT-3 yang disediakan oleh OpenAI.
Metode create() dipanggil pada objek Completion untuk menghasilkan penyelesaian teks baru. Dibutuhkan dua parameter:
Hasil penyelesaian dikembalikan dalam variabel $response . Hasilnya kemudian dapat digunakan untuk pemrosesan lebih lanjut, seperti menampilkan teks yang sudah selesai atau memberinya makan ke bagian lain dari program untuk pemrosesan tambahan.
Anda dapat menggunakan variabel lingkungan untuk menyimpan kunci Anda. Anda kemudian dapat menggunakan variabel ini seperti pada contoh berikut:
export OPENAI_API_KEY= " sk-xxxxxxxxxxx "Anda dapat memasukkan variabel dalam file konfigurasi Apache:
<VirtualHost hostname:80>
...
SetEnv OPENAI_API_KEY sk-xxxxxxxxxxx
...
</VirtualHost>
Dan kemudian restart layanan.
Sekarang, Anda dapat menggunakan variabel lingkungan dengan memanggil fungsi getenv() dari PHP.
<?php
$ response = ( new OpenAIApi ( getenv ( ' OPENAI_API_KEY ' )))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
);Jika Anda ingin memberikan informasi tentang organisasi Anda, Anda harus melanjutkan sebagai berikut.
<?php
$ apiKey = getenv ( ' OPENAI_API_KEY ' );
$ org = getenv ( ' OPENAI_API_ORG ' );
// Passing the organization to the client
$ response = ( new OpenAIClient ( $ apiKey , $ org ))Jika Anda perlu memodifikasi URL API, Anda dapat melanjutkan sebagai berikut:
<?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 ); Untuk mendefinisikan kembali rute, Anda perlu memperluas kelas OpenAIRoute atau mengimplementasikan antarmuka Route .
API mengembalikan tanggapan dalam format JSON. Untuk memfasilitasi akses ke berbagai informasi, Anda dapat menghubungi metode toObject() atau toArray() dari objek penangan untuk mengakses data.
<?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> ' ;Terkadang, API mengembalikan kesalahan. Oleh karena itu, perlu untuk dapat mengidentifikasi apa yang menyebabkan masalah. Untuk menangani kesulitan ini, Anda memiliki banyak pilihan.
Jika Anda menggunakan objek pawang dengan metode toObject() atau toArray() , cukup gunakan struktur 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;
} Jika Anda menggunakan objek CurlResponse , Anda dapat memeriksa bahwa kesalahan telah terjadi menggunakan validator.
$ 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 ();
}Pelajari lebih lanjut tentang kesalahan.
Berikut adalah video yang menampilkan aplikasi yang memungkinkan Anda membuat gambar dengan gaya melukis yang ditentukan oleh pengguna. Aplikasi ini dibuat menggunakan proyek phpopenai.
Anda dapat menemukan kodenya di sini:
https://github.com/easygithdev/phpopenai-playground.git.
Mengintegrasikan OpenAi ke dalam aplikasi Anda sekarang sesederhana beberapa baris kode.
Anda dapat menemukan semua kode di sini:
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 ();Pelajari lebih lanjut tentang penyelesaian obrolan.
$ response = ( new OpenAIClient ( $ apiKey ))-> Completion ()-> create (
ModelEnum:: TEXT_DAVINCI_003 ,
" Say this is a test " ,
)-> toObject ();Pelajari lebih lanjut tentang penyelesaian teks.
Atribut aliran dalam API OpenAI adalah parameter opsional yang dapat Anda gunakan untuk mengontrol aliran data yang dikembalikan oleh API. Jika Anda mengatur opsi ini ke True, API akan mengembalikan respons sebagai data streaming daripada respons tunggal.
Ini berarti bahwa Anda dapat mengambil hasil API saat tersedia, daripada menunggu respons lengkap sebelum memprosesnya. Opsi ini dapat berguna untuk aplikasi yang membutuhkan pemrosesan data dalam jumlah besar.
<?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 ();Pelajari lebih lanjut tentang edit teks.
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; ? > 
Pelajari lebih lanjut tentang pembuatan gambar.
$ response = ( new OpenAIClient ( $ apiKey ))-> Image ()-> createVariation (
__DIR__ . ' /../../assets/image_variation_original.png ' ,
n: 2 ,
size: ImageSizeEnum::is256
)-> toObject ();
Pelajari lebih lanjut tentang variasi gambar.
$ 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 ();
Pelajari lebih lanjut tentang edit gambar.
$ response = ( new OpenAIClient ( $ apiKey ))-> Embedding ()-> create (
ModelEnum:: TEXT_EMBEDDING_ADA_002 ,
" The food was delicious and the waiter... " ,
)-> toObject ();Pelajari lebih lanjut tentang penyematan.
$ response = ( new OpenAIClient ( $ apiKey ))-> Audio ()
-> addCurlParam ( ' timeout ' , 30 )
-> transcription (
__DIR__ . ' /../../assets/openai.mp3 ' ,
ModelEnum:: WHISPER_1 ,
response_format: AudioResponseEnum:: SRT
)-> toObject ();Pelajari lebih lanjut tentang transkripsi audio.
$ response = ( new OpenAIClient ( $ apiKey ))-> Audio ()
-> addCurlParam ( ' timeout ' , 30 )
-> translation (
__DIR__ . ' /../../assets/openai_fr.mp3 ' ,
' whisper-1 ' ,
response_format: AudioResponseEnum:: TEXT
)-> toObject ();Pelajari lebih lanjut tentang terjemahan audio.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> list ()
-> toObject ();Pelajari lebih lanjut tentang model.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> retrieve ( ' text-davinci-001 ' )
-> toObject ();Pelajari lebih lanjut tentang model.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Model ()
-> delete (
$ _POST [ ' model ' ]
)-> toObject ();Pelajari lebih lanjut tentang model.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> list ()
-> toObject ();Pelajari lebih lanjut tentang file.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> create (
__DIR__ . ' /../../assets/mydata.jsonl ' ,
' fine-tune ' ,
)
-> toObject ();Pelajari lebih lanjut tentang file.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> delete ( ' file-xxxx ' )
-> toObject ();Pelajari lebih lanjut tentang file.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> retrieve ( ' file-xxxx ' )
-> toObject ();Pelajari lebih lanjut tentang model.
$ response = ( new OpenAIApi ( $ apiKey ))
-> File ()
-> download ( ' file-xxxx ' )
-> toObject ();Pelajari lebih lanjut tentang model.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> list ()
-> toObject ();Pelajari lebih lanjut tentang fine-tune.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> create (
' file-xxxx '
)
-> toObject ();Pelajari lebih lanjut tentang fine-tune.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> retrieve ( ' ft-xxx ' )
-> toObject ();Pelajari lebih lanjut tentang fine-tune.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> listEvents ( ' ft-xxx ' )
-> toObject ();Pelajari lebih lanjut tentang fine-tune.
$ response = ( new OpenAIApi ( $ apiKey ))
-> FineTune ()
-> Cancel ( ' ft-xxx ' )
-> toObject ();Pelajari lebih lanjut tentang fine-tune.
$ response = ( new OpenAIClient ( $ apiKey ))
-> Moderation ()
-> create ( ' I want to kill them. ' )
-> toObject ();Pelajari lebih lanjut tentang moderasi.
Untuk menjalankan semua tes:
composer test testsHanya menjalankan satu tes:
composer test tests/[NAME]Test.phpPhpopenai adalah proyek yang berguna bagi pengembang PHP yang ingin dengan mudah mengintegrasikan API OpenAI ke dalam proyek mereka. Dengan instalasi sederhana dan penggunaan komposer, klasifikasi teks, pembuatan gambar dan pengenalan entitas yang disebutkan ke dalam aplikasi PHP Anda.