Panduan praktis membuat tool pertama untuk AI Agent PHP: merancang JSON Schema, mengimplementasikan class tool, mengujinya secara unit, dan mengintegrasikannya ke dalam Agent.
Daftar Isi
Terakhir diperbarui:
TL;DR (Ringkasan Cepat)
- Setiap tool adalah class PHP yang mengimplementasikan
ToolInterface. - Deskripsi tool harus jelas dan spesifik agar AI bisa memilih tool yang tepat.
- Tool harus menangani error dan mengembalikan pesan error yang informatif.
- Selalu validasi input dari AI sebelum mengeksekusi logika bisnis.
Membuat Tool Kalkulator Sederhana
Mari kita mulai dengan tool yang sederhana namun komplet: kalkulator matematika. Ini akan mengajarkan pola dasar pembuatan tool yang bisa Anda aplikasikan ke tool yang lebih kompleks.
<?php
namespace App\Tools;
class CalculatorTool implements ToolInterface
{
public function getDefinition(): array
{
return [
'type' => 'function',
'function' => [
'name' => 'calculate',
'description' => 'Melakukan operasi matematika: penjumlahan, pengurangan, perkalian, pembagian, pangkat, dan modulo. Gunakan tool ini untuk semua kalkulasi numerik yang diperlukan.',
'parameters' => [
'type' => 'object',
'properties' => [
'operation' => [
'type' => 'string',
'enum' => ['add', 'subtract', 'multiply', 'divide', 'power', 'modulo'],
'description' => 'Jenis operasi: add(+), subtract(-), multiply(*), divide(/), power(^), modulo(%)',
],
'a' => [
'type' => 'number',
'description' => 'Operand pertama (angka kiri)',
],
'b' => [
'type' => 'number',
'description' => 'Operand kedua (angka kanan)',
],
],
'required' => ['operation', 'a', 'b'],
],
],
];
}
public function execute(array $args): mixed
{
// Validasi input
$operation = $args['operation'] ?? '';
$a = (float) ($args['a'] ?? 0);
$b = (float) ($args['b'] ?? 0);
return match ($operation) {
'add' => ['result' => $a + $b, 'expression' => "$a + $b = " . ($a + $b)],
'subtract' => ['result' => $a - $b, 'expression' => "$a - $b = " . ($a - $b)],
'multiply' => ['result' => $a * $b, 'expression' => "$a × $b = " . ($a * $b)],
'divide' => $b !== 0.0
? ['result' => $a / $b, 'expression' => "$a ÷ $b = " . ($a / $b)]
: ['error' => 'Pembagian dengan nol tidak diperbolehkan'],
'power' => ['result' => $a ** $b, 'expression' => "$a ^ $b = " . ($a ** $b)],
'modulo' => $b !== 0.0
? ['result' => fmod($a, $b), 'expression' => "$a % $b = " . fmod($a, $b)]
: ['error' => 'Modulo dengan nol tidak diperbolehkan'],
default => ['error' => "Operasi '$operation' tidak dikenal"],
};
}
}
Mengintegrasikan Tool ke Agent
<?php
// run-agent-with-tools.php
require_once __DIR__ . '/vendor/autoload.php';
$config = require __DIR__ . '/config/config.php';
$client = new App\OpenAIClient($config['openai_api_key']);
$agent = new App\Agent\Agent($client, maxIterations: 5);
// Registrasi tool
$agent->registerTool(new App\Tools\CalculatorTool());
// Jalankan dengan task yang membutuhkan kalkulasi
$result = $agent->run('Hitung berapa 15% dari 2.450.000 kemudian tambahkan hasilnya dengan 350.000.');
echo "\n=== HASIL AGENT ===\n";
echo $result . "\n";
Best Practice Membuat Tool
- Deskripsi yang presisi: AI memilih tool berdasarkan deskripsi. Semakin jelas deskripsinya, semakin tepat AI memilih tool yang relevan.
- Validasi semua input: Jangan pernah percaya data dari AI secara buta. Selalu validasi tipe dan range data.
- Return type yang konsisten: Selalu kembalikan array dengan struktur yang konsisten, termasuk dalam kondisi error.
- Atomic dan single-purpose: Satu tool satu fungsi. Hindari tool yang melakukan terlalu banyak hal sekaligus.
- Handle error dengan anggun: Kembalikan pesan error yang informatif agar AI bisa merespons dengan tepat kepada user.
Poin Kunci Bab 11
Pola tool yang kita bangun di sini — Interface, JSON Schema, Validation, Error Handling — adalah template yang akan kita replikasi untuk semua tools berikutnya. Kuasai pola ini dan Anda bisa membuat tools untuk apapun.