PHPOpenAI เป็นห้องสมุดที่ได้รับการดูแลชุมชนที่ช่วยให้ใช้ OpenAI API ใน PHP
โครงการเขียนด้วย 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
นี่คือรหัสตัวอย่างที่แสดงวิธีการใช้ OpenAI API ใน 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() ของวัตถุ Handler เพื่อเข้าถึงข้อมูล
<?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 ส่งคืนข้อผิดพลาด ดังนั้นจึงจำเป็นที่จะต้องสามารถระบุสิ่งที่ทำให้เกิดปัญหา เพื่อจัดการกับปัญหานี้คุณมีตัวเลือกมากมาย
หากคุณใช้วัตถุ Handler ที่มีวิธีการ 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 เมื่อมีให้บริการแทนที่จะรอการตอบกลับที่สมบูรณ์ก่อนที่จะดำเนินการ ตัวเลือกนี้มีประโยชน์สำหรับแอปพลิเคชันที่ต้องใช้การประมวลผลข้อมูลจำนวนมากตามเวลาจริง
<?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 ที่ต้องการรวม OpenAI API เข้ากับโครงการของพวกเขาได้อย่างง่ายดาย ด้วยการติดตั้งอย่างง่ายและการใช้นักแต่งเพลงการจำแนกข้อความการสร้างภาพและการจดจำเอนทิตีที่มีชื่อลงในแอปพลิเคชัน PHP ของคุณ