Sebelum memulai praktik, pastikan Anda telah memahami konsep dasar pada materi kelas AI Agent & PHP di infokoding.

BAB 11

Membuat Tool Pertama

Panduan praktis membuat tool pertama untuk AI Agent PHP: merancang JSON Schema, mengimplementasikan class tool, mengujinya secara unit, dan mengintegrasikannya ke dalam Agent.

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

  1. Deskripsi yang presisi: AI memilih tool berdasarkan deskripsi. Semakin jelas deskripsinya, semakin tepat AI memilih tool yang relevan.
  2. Validasi semua input: Jangan pernah percaya data dari AI secara buta. Selalu validasi tipe dan range data.
  3. Return type yang konsisten: Selalu kembalikan array dengan struktur yang konsisten, termasuk dalam kondisi error.
  4. Atomic dan single-purpose: Satu tool satu fungsi. Hindari tool yang melakukan terlalu banyak hal sekaligus.
  5. 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.