Catatan: Produk ini dikembangkan secara independen dan tidak berafiliasi, didukung, atau disponsori oleh OpenAI.
Instal paket ini sebagai dependensi menggunakan Komposer.
composer require manuelkiessling/ai-tool-bridge
Tantangan utama saat mengintegrasikan AI ke dalam proyek apa pun adalah mengelola interaksi antara AI dan aplikasi Anda lainnya. Hal ini menjadi sangat kompleks ketika AI perlu melakukan panggilan API untuk mengambil informasi atau memicu tindakan.
AI Tool Bridge untuk PHP secara elegan memecahkan masalah ini dengan menawarkan antarmuka sederhana untuk mendefinisikan "fungsi alat" yang dapat dimanfaatkan AI ketika perlu berinteraksi dengan sistem eksternal.
Pengoptimalan yang penting adalah kemampuan perpustakaan untuk menghasilkan struktur JSON yang diperlukan untuk fungsi alat. Ia melakukannya dengan hanya meminta nilai yang diperlukan dari AI dan kemudian menghasilkan JSON berdasarkan skema JSON yang disediakan. Pendekatan ini menjamin validitas JSON akhir yang mencapai kode aplikasi Anda.
Fitur utama perpustakaan ini meliputi:
Anggaplah Anda memiliki bisnis e-niaga dan ingin menyediakan antarmuka obrolan AI yang memungkinkan untuk menelusuri katalog produk Anda. Untuk melakukannya, Anda memutuskan untuk berintegrasi dengan model GPT-4 OpenAI melalui ChatGPT API.
Anda mungkin akan meminta asisten AI seperti "Anda adalah asisten belanja yang ramah dan membantu yang memberi tahu pengguna tentang katalog produk kami..." dan seterusnya.
Namun, Anda tidak dapat menambahkan seluruh katalog produk Anda ke prompt. Jadi, ketika pengguna Anda meminta AI untuk "beri tahu saya tentang beberapa pembantu dapur yang ditawarkan", Anda perlu mengidentifikasi bahwa pada titik percakapan ini, AI memerlukan informasi dari sistem backend e-niaga Anda (misalnya dengan membuat permintaan ke Produk Anda Cari API dengan kueri "pembantu dapur"), Anda perlu mengambil informasi ini untuk AI, dan Anda perlu memberikan informasi yang dihasilkan kembali ke asisten AI, yang kemudian dapat merangkum informasi produk untuk pengguna.
AI paling tahu kapan waktunya mengambil informasi ini dari dunia luar. Karena membuat kode Anda sendiri mendengarkan percakapan dan menebak kapan waktunya untuk membuat panggilan API Pencarian Produk adalah hal yang rumit dan rawan kesalahan, dan membuat gagasan untuk menggunakan AI yang kuat menjadi tidak ada gunanya.
Pendekatan terbaik adalah membuat AI menyadari bahwa waktunya telah tiba untuk berbicara dengan dunia luar, dan melakukannya dengan cara yang terstruktur dan tidak salah lagi.
Solusinya adalah dengan mengajarkan AI, dalam perintah sistem awal, bahwa ia memiliki satu atau lebih alat yang dapat digunakan sesuka hati.
Hal ini dilakukan dengan terlebih dahulu menulis definisi fungsi alat, seperti ini:
<?php
declare (strict_types= 1 );
namespace ManuelKiessling AiToolBridge Example ;
use ManuelKiessling AiToolBridge ToolFunctionCallResult ;
use ManuelKiessling AiToolBridge ToolFunctionCallResultStatus ;
use ManuelKiessling AiToolBridge ToolFunction ;
class MyProductSearchToolFunction implements ToolFunction
{
public function getName (): string
{
return ' productSearch ' ;
}
public function getDescription (): string
{
return ' allows to search the product catalogue and retrieve information about products ' ;
}
public function getInputJsonSchema (): string
{
return <<<'JSON'
{
"type": "object",
"properties": {
"searchterms": {
"type": "string"
}
},
"required": [
"searchterms"
]
}
JSON;
}
public function invoke ( string $ json ): ToolFunctionCallResult
{
// we will talk about this in a minute
return new ToolFunctionCallResult (
$ this ,
ToolFunctionCallResultStatus :: SUCCESS ,
'' ,
[]
);
}
}
Pastikan nama, deskripsi, dan kunci objek dalam skema JSON berguna dan deskriptif - ini membantu AI memahami kapan dan bagaimana menggunakan fungsi alat ini.
Anda dapat menentukan beberapa definisi fungsi alat - misalnya, fungsi alat lain dapat ditambahkan yang memungkinkan AI memasukkan produk ke keranjang pembayaran saat pengguna memintanya. Namun, kami akan membuat contoh ini tetap sederhana.
Selanjutnya, Anda perlu mengintegrasikan jembatan alat dengan pengaturan AI yang ada. Ini dilakukan dengan menggunakan bantuan AiToolBridge
:
class Example
{
private AiToolBridge $ aiToolBridge ;
private MyAiService $ myAiService ;
public function __construct ()
{
$ this -> myAiService = new MyAiService ();
$ myProductSearchToolFunction = new MyProductSearchToolFunction ();
$ this -> aiToolBridge = new AiToolBridge (
new $ this -> myAiService ,
[ $ myProductSearchToolFunction ],
);
$ this -> myAiService -> setSystemPrompt (
" You are a friendly and helpful shopping assistant that informs the user about our product catalog...
{ $ this -> aiToolBridge -> getPrompt ()}"
);
}
}
Hal ini jelas menimbulkan beberapa asumsi - struktur aplikasi Anda dan cara Anda mengintegrasikan layanan AI bisa sangat berbeda.
Namun, titik integrasinya selalu identik. Karena perpustakaan ini harus dapat berbicara dengan asisten AI, Anda harus menyediakan objek yang mengimplementasikan antarmuka AiAssistantMessenger
. Lihat src/Example/MyAiService.php untuk contoh sederhana.
Anda juga perlu melampirkan fungsi alat yang telah Anda tetapkan saat membuat objek AiToolBridge.
Selanjutnya, untuk membuat AI memahami bahwa ia dapat menggunakan peralatan Anda, Anda perlu memperluas perintah "sistem" AI Anda sendiri dengan perintah yang dihasilkan oleh perpustakaan ini. Untuk melakukannya, gunakan metode AiToolBridge::getPrompt
seperti yang ditunjukkan di atas.
Aplikasi Anda dan perpustakaan ini sekarang sepenuhnya terintegrasi dan disiapkan. Namun, ada satu bagian utama yang hilang — perilaku sebenarnya yang seharusnya dipicu saat AI menggunakan fungsi alat Anda.
Mari kita lihat invoke
metode kelas MyProductSearchToolFunction
lagi:
public function invoke ( string $ json ): ToolFunctionCallResult
{
return new ToolFunctionCallResult (
$ this ,
ToolFunctionCallResultStatus :: SUCCESS ,
'' ,
[]
);
}
Di sinilah keajaiban perlu terjadi — yaitu, ini adalah tempat untuk menerapkan semua logika — logika ANDA — yang diperlukan untuk melakukan pencarian produk yang sebenarnya.
Di sini, Anda tidak perlu mempertimbangkan integrasi AI dengan cara apa pun — inilah inti dari perpustakaan ini, untuk melakukan pekerjaan berat untuk Anda.
Lebih tepatnya, ketika metode invoke
dipanggil, pekerjaan berat telah selesai - Anda dapat yakin bahwa metode tersebut akan dipanggil dengan string JSON yang di satu sisi memiliki struktur persis seperti yang telah Anda tetapkan dengan Skema JSON dalam metode MyProductSearchToolFunction::getInputJsonSchema
, dan di sisi lain diisi dengan nilai-nilai yang dianggap berguna oleh AI saat menggunakan fungsi alat.
Jadi, misalnya percakapan AI—Pengguna berjalan seperti ini:
AI: Hello, how can I help you?
User: Tell me about some kitchen helpers on offer.
maka AI akan mengenali bahwa ia harus menggunakan fungsi alat productSearch
untuk mencari kitchen helpers
, yang pada akhirnya menghasilkan panggilan ke MyProductSearchToolFunction::invoke
dengan string JSON berikut:
{
"searchterms" : " kitchen helpers "
}
Anda memiliki kebebasan penuh mengenai bagaimana Anda menerapkan metode ini (selama Anda mengembalikan objek ToolFunctionCallResult
). Dalam contoh kami, jelas masuk akal untuk benar-benar melakukan penelusuran produk, tetapi cara Anda melakukannya sepenuhnya terserah Anda. Kueri database, bicara dengan API, atau apa pun yang mengambil informasi produksi tentang "pembantu dapur".
Dua bidang yang diinginkan pada objek ToolFunctionCallResult
yang perlu Anda kembalikan adalah message
dan data
. Dalam contoh kita, tampilannya akan seperti ini:
public function invoke ( string $ json ): ToolFunctionCallResult
{
$ jsonAsArray = json_decode ( $ json , true );
// use $jsonAsArray['searchterm'] when talking to a DB or an API...
return new ToolFunctionCallResult (
$ this ,
ToolFunctionCallResultStatus :: SUCCESS ,
' Found 2 matching products ' ,
[
[
' id ' => 84 ,
' name ' => ' Kawaii Chick Egg Separator ' ,
' price ' => 14.99 ,
' description ' => ' Whether you’re a beginner baker or an experienced cook, the Kawaii Chick Egg Separator is a must-have kitchen tool that will make separating eggs a breeze. '
],
[
' id ' => 2389 ,
' name ' => ' BlendJet 2 ' ,
' price ' => 49.99 ,
' description ' => ' Imagine the freedom of being able to go anywhere and blend your favorite smoothies, shakes, margaritas, frappés, or baby food without the limitations of a regular blender. '
]
]
);
}
Format data
tidak terbatas pada skema tertentu.
Mari kita lihat bagian terakhir, dan kembali ke kelas Example
kita. Kami berasumsi bahwa dalam implementasi Anda, ada metode handleAssistantMessage
yang dipanggil setiap kali aplikasi Anda mengambil pesan asisten AI baru — sekali lagi, ini adalah detail implementasi aplikasi Anda yang sangat spesifik.
Ini tempatnya — SEBELUM kami mengirim pesan ke pengguna! — di mana kita perlu "terhubung" ke dalam percakapan. Hal ini memungkinkan pustaka alat mendeteksi permintaan fungsi alat apa pun dari AI, dan menanganinya sesuai kebutuhan.
Jika fungsi alat dipanggil dan berhasil, kita perlu mengembalikan hasilnya ke asisten AI — dengan cara ini, asisten AI akan mempelajari produk yang cocok dengan penelusuran produknya:
<?php
declare (strict_types= 1 );
class Example
{
// ...
public function handleAssistantMessage ( string $ message ): void
{
$ toolFunctionCallResult = $ this -> aiToolBridge -> handleAssistantMessage ( $ message );
if ( is_null ( $ toolFunctionCallResult )) {
// The AI didn't use a tool function, thus its message is meant for the user
$ this -> sendAssistantMessageToUser ( $ message );
} else {
// The AI used a tool function, we now need to send the result to the AI
$ dataAsJson = json_encode ( $ toolFunctionCallResult -> data );
$ this -> sendUserMessageToAssistant ( $ toolFunctionCallResult -> message . ' ' . $ dataAsJson );
}
}
public function sendAssistantMessageToUser ( string $ message ): void
{
// whatever code is needed to show an AI assistant message to the user
}
public function sendUserMessageToAssistant ( string $ message ): void
{
// whatever code is needed to send a message to the AI assistant
}
}
Seperti yang Anda lihat, saat kami memberi tahu asisten AI tentang hasil fungsi roll, kami bertindak sebagai pengguna yang memberi tahu asisten tentang hal tersebut. Hal ini karena dari sudut pandang asisten AI, penggunalah yang pertama-tama menyediakan alat tersebut kepada AI! Lihat metode src/AiToolBridge.php untuk memahami mengapa hal ini terjadi.
Kontribusi dipersilahkan! Untuk berkontribusi, silakan membiasakan diri dengan CONTRIBUTING.md.
Menjaga informasi pengguna tetap aman dan terjamin adalah prioritas utama, dan kami menyambut baik kontribusi peneliti keamanan eksternal. Jika Anda yakin telah menemukan masalah keamanan pada perangkat lunak yang disimpan dalam repositori ini, silakan baca SECURITY.md untuk petunjuk cara mengirimkan laporan kerentanan.
AI Tool Bridge untuk PHP adalah hak cipta © Manuel Kießling dan dilisensikan untuk digunakan berdasarkan ketentuan Lisensi Publik Umum GNU (GPL-3.0-atau lebih baru) yang diterbitkan oleh Free Software Foundation.
Silakan lihat LISENSI dan PEMBERITAHUAN untuk informasi lebih lanjut.