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

BAB 15

Belajar AI Agent & PHP: Cara Membuat Multi Tools Agent dengan Tool Chaining

Membangun Multi Tools AI Agent yang canggih: cara meregistrasi banyak tools ke agent, mekanisme AI memilih tool yang tepat secara otomatis, dan mengeksekusi rangkaian tool calls.

Terakhir diperbarui:

Definisi: Apa itu Multi Tools AI Agent PHP?

Direct Answer:Multi Tools AI Agent PHP adalah arsitektur sistem kecerdasan buatan berbasis PHP di mana satu model Large Language Model (LLM) dihubungkan ke berbagai modul fungsional (seperti database, pembaca dokumen, kalkulator, dan REST API pihak ketiga) serta memiliki kemampuan otonom untuk memilih, memanggil, dan merangkai beberapa tool (Tool Call Chaining) secara berurutan guna menyelesaikan tugas kompleks dalam satu sesi interaksi.

Dengan pendekatan ini, aplikasi PHP tidak lagi terbatas pada prompt teks statis, melainkan bertindak sebagai Autonomous Orchestrator yang mampu berinteraksi langsung dengan sistem produksi dan basis data.

TL;DR — Ringkasan Multi Tools AI Agent PHP

  • Otomasi Pemilihan Tool: AI Agent menganalisis maksud instruksi pengguna dan memilih tool relevan murni berdasarkan description skema JSON.
  • Tool Call Chaining: Agent mampu mengeksekusi rangkaian tool berbeda secara berurutan dalam satu loop iterasi hingga mendapatkan konteks lengkap.
  • MCP Centralized Dispatch: Seluruh tools didaftarkan ke McpServer dan dieksekusi melalui McpClient agar arsitektur tetap modular.
  • Batas Loop Protektif: Tetapkan maxIterations (misal: 10 iterasi) untuk mencegah infinite looping dan pembengkakan biaya token API.
Diagram Alur: Multi-Tools Agent Loop & Tool Call Chaining di PHP
WebP Lossless • 74 KB • Schema Ready
Diagram alur kerja Multi Tools AI Agent PHP dan Tool Call Chaining: instruksi pengguna dievaluasi dalam 3 iterasi beruntun (DatabaseTool, WeatherTool, CurrencyTool) via McpClient dispatcher sebelum menghasilkan jawaban final
Gambar 15.1: Siklus Multi-Step Reasoning & Tool Call Chaining — Model AI memecah masalah kompleks menjadi beberapa sub-tugas independen, mengeksekusi tool yang relevan satu demi satu melalui MCP Client, dan mensintesis hasilnya menjadi jawaban komprehensif.
bash - php run-multi-tools-agent.php
Live Trace Demo

$ php run-multi-tools-agent.php

============================================================

TASK PENGGUNA: Cari user bernama "Rusmawan" di database, lalu cek cuaca di Jakarta hari ini.

------------------------------------------------------------

[Iterasi 1] 🔧 Memanggil Tool: search_database_users

↳ Argumen: {"keyword":"Rusmawan"} | Status: FOUND (1 user: Rusmawan Abdullah Sani, Lokasi: Jakarta, ID: 101)

[Iterasi 2] 🔧 Memanggil Tool: get_weather (Tool Chaining)

↳ Argumen: {"latitude": -6.2088, "longitude": 106.8456, "city_name": "Jakarta"} | Status: 200 OK (Suhu: 29.4 °C, Cerah Berawan)

HASIL SINTESIS FINAL AGENT:

User Rusmawan Abdullah Sani berhasil ditemukan di database (ID: 101, Domisili: Jakarta). Berdasarkan pemantauan satelit cuaca waktu-nyata di Jakarta, saat ini temperatur tercatat 29.4 °C dengan kondisi cerah berawan dan kecepatan angin 12 km/h.
*Rangkaian Tools yang Digunakan: search_database_users ➔ get_weather*

Panduan Belajar AI Agent PHP: Multi-Tools & Tool Chaining

Direct Answer — Mekanisme Multi-Tools:Dalam ekosistem Belajar AI Agent PHP, integrasi multi-tools memungkinkan satu agen tunggal bertindak adaptif terhadap beragam domain (kalkulasi angka, query database, pembacaan file lokal, hingga panggilan REST API) hanya dengan meregistrasikan definisi JSON Schema masing-masing tool ke dalam satu dispatcher terpusat.

Dalam kurikulum belajar ai-agent-php tingkat lanjut, kemampuan Membuat Multi Tools Agent adalah fondasi utama untuk membangun sistem otonom yang benar-benar berguna. Dalam skenario dunia nyata, tugas pengguna jarang bisa diselesaikan hanya dengan satu fungsi tunggal. Sebuah query seperti "Cari user Ahmad di MySQL, cek prakiraan cuaca Jakarta hari ini, dan konversikan 100 USD ke IDR" membutuhkan orkestrasi 3 tools berbeda. Berikut adalah skrip inisialisasi 6 tools enterprise ke dalam satu kesatuan agen:

Matriks Peran & Kapabilitas Tools dalam Multi-Tools AI Agent
Nama ToolFungsi Utama (Capability)Input JSON Schema KunciPeran dalam Chaining Loop
CalculatorToolKalkulasi matematika presisi (add, sub, mul, div, pow)operation, a, bEvaluasi persentase, total harga, atau formula numerik
DatabaseToolQuery MySQL via PDO prepared statements terproteksioperation, paramsPengambilan data user, artikel, produk, atau stok barang
FileToolEkstraksi isi file lokal (PDF, DOCX, CSV, TXT, JSON)filenamePembacaan dokumen laporan atau data tabular lokal
GitHubToolPencarian repositori dan profil developer di GitHub APItype, queryAudit repositori open source dan informasi developer
CurrencyToolKonversi valuta asing real-time via ExchangeRate-APIamount, from, toPenyesuaian nilai transaksi keuangan multi-mata uang
WeatherToolPrakiraan cuaca real-time via Open-Meteo APIlatitude, longitudePenyediaan konteks kondisi lingkungan lokasi pengguna

Multi-Tools Takeaway: Setiap tool memiliki batasan fungsional (Single Responsibility) agar model AI tidak bingung saat memilih tool yang paling relevan.

Tabel Komparasi Format Skema Tool: OpenAI Function Calling vs Anthropic MCP
Dimensi ArsitekturOpenAI Function Calling (Native)Anthropic Model Context Protocol (MCP)
Root Wrapper{"type": "function", "function": {...}}{"name": "...", "inputSchema": {...}} (Tools/List)
Definisi Parameterparameters: {"type": "object", "properties": {...}}inputSchema: {"type": "object", "properties": {...}}
Protokol TransportDirect HTTP REST JSON Payload per Chat RequestJSON-RPC 2.0 (stdio / Server-Sent Events / SSE)
Mekanisme Respons ToolArray of {"role": "tool", "tool_call_id": "..."}{"jsonrpc": "2.0", "result": {"content": [...]}}
Kelebihan UtamaIntegrasi langsung tanpa daemon background terpisahStandarisasi lintas model LLM (Claude, OpenAI, Gemini, Local LLM)

Schema Takeaway: Class McpClient di aplikasi kita menjembatani kedua format di atas sehingga backend PHP dapat berkomunikasi secara agnostik.

<?php
// run-multi-tools-agent.php

require_once __DIR__ . '/vendor/autoload.php';

use App\OpenAIClient;
use App\MCP\McpServer;
use App\MCP\McpClient;
use App\Agent\MultiToolsAgent;
use App\Tools\CalculatorTool;
use App\Tools\DatabaseTool;
use App\Tools\FileTool;
use App\Tools\GitHubTool;
use App\Tools\CurrencyTool;
use App\Tools\WeatherTool;

$config = require __DIR__ . '/config/config.php';

// 1. Inisialisasi Koneksi Database PDO Aman
$pdo = new PDO(
    "mysql:host={$config['db']['host']};dbname={$config['db']['name']};charset=utf8mb4",
    $config['db']['user'],
    $config['db']['pass'],
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);

// 2. Kumpulkan Seluruh Tools Enterprise
$tools = [
    new CalculatorTool(),
    new DatabaseTool($pdo),
    new FileTool(allowedDir: './uploads'),
    new GitHubTool(token: getenv('GITHUB_TOKEN') ?: null),
    new CurrencyTool(),
    new WeatherTool(),
];

// 3. Daftarkan Tools ke MCP Server & Buat McpClient Adaptor
$mcpServer = new McpServer();
foreach ($tools as $tool) {
    $def = $tool->getDefinition();
    $name = $def['function']['name'] ?? $def['name'];
    $mcpServer->register($name, $tool);
}
$mcpClient = new McpClient($mcpServer);

// 4. Inisialisasi MultiToolsAgent
$client = new OpenAIClient(getenv('OPENAI_API_KEY'));
$agent  = new MultiToolsAgent($client, $mcpClient, maxIterations: 10);

// 5. Eksekusi Kueri Multi-Kriteria
$queries = [
    'Berapa 15% dari 2.500.000? Dan berikan kurs 100 USD ke IDR saat ini.',
    'Cari user bernama "Rusmawan" di database, lalu cek cuaca di Jakarta hari ini.',
    'Cari repository PHP terpopuler di GitHub tentang "ai agent" dan konversikan 50 USD ke IDR.',
];

foreach ($queries as $query) {
    echo "\n" . str_repeat('=', 60) . "\n";
    echo "TASK PENGGUNA: {$query}\n";
    echo str_repeat('-', 60) . "\n";
    $result = $agent->run($query);
    echo "HASIL SINTESIS:\n{$result}\n";
}

Implementasi Multi Tools Agent: Bedah Alur Kerja McpClient dan Eksekusi tool_calls:

Langkah 1 (Discovery & Schema Aggregation): Objek McpClient memanggil method listTools() pada McpServer untuk merangkum seluruh definisi skema JSON parameter ke dalam format standar tools yang dipahami OpenAI Chat Completions API.

Langkah 2 (Autonomous Decision Making): Model AI mengevaluasi instruksi pengguna dan menghasilkan array tool_calls yang memuat nama fungsi dan objek argumen terurai (misal: {"function": {"name": "searchUser", "arguments": "{\"keyword\":\"Rusmawan\"}"}}).

Langkah 3 (Dynamic Execution & Context Feeding): Orchestrator mengoper payload ke $mcpClient->executeToolCall($toolCall). Hasil eksekusi PHP dibungkus dalam pesan dengan role: "tool" dan disematkan kembali ke riwayat percakapan ($messages). Model AI menerima hasil tersebut dan secara cerdas memutuskan apakah masih memerlukan tool berikutnya (Chaining) atau langsung menyusun jawaban final.

Praktik Belajar AI-Agent-PHP: Implementasi Multi-Tools dengan Tool Chaining

Direct Answer — Tool Call Chaining:Tool Call Chaining adalah mekanisme loop di mana hasil eksekusi tool tahap pertama dijadikan konteks input untuk pemanggilan tool berikutnya secara sekuensial hingga mencapai status konvergensi (jawaban final tanpa permintaan fungsi baru).

Berikut adalah kode sumber class MultiToolsAgent yang mengelola loop penalaran multi-langkah (*Autonomous Reasoning Loop*) secara rekursif hingga tugas selesai:

<?php

namespace App\Agent;

use App\OpenAIClient;
use App\MCP\McpClient;

class MultiToolsAgent
{
    private OpenAIClient $client;
    private McpClient $mcpClient;
    private int $maxIterations;
    private array $messages = [];
    private array $callLog = [];

    public function __construct(
        OpenAIClient $client,
        McpClient $mcpClient,
        int $maxIterations = 10
    ) {
        $this->client        = $client;
        $this->mcpClient     = $mcpClient;
        $this->maxIterations = $maxIterations;
    }

    public function run(string $task): string
    {
        $this->messages = [
            ['role' => 'system', 'content' => $this->buildSystemPrompt()],
            ['role' => 'user',   'content' => $task],
        ];
        $this->callLog = [];
        $toolDefs      = $this->mcpClient->getToolDefinitions();

        for ($iteration = 1; $iteration <= $this->maxIterations; $iteration++) {
            // Request ke model AI dengan membawa seluruh definisi tool
            $response = $this->client->chat($this->messages, $toolDefs);
            $message  = $response['choices'][0]['message'] ?? [];
            $this->messages[] = $message;

            // Jika model meminta eksekusi tool_calls (Multi/Single)
            if (!empty($message['tool_calls'])) {
                foreach ($message['tool_calls'] as $toolCall) {
                    $toolName = $toolCall['function']['name'] ?? 'unknown';
                    $this->callLog[] = $toolName;
                    echo "  [Iterasi {$iteration}] 🔧 Memanggil Tool: {$toolName}\n";

                    // Eksekusi tool lokal via MCP Client
                    $toolResult = $this->mcpClient->executeToolCall($toolCall);
                    $this->messages[] = $toolResult;
                }
                // Lanjutkan loop agar AI dapat memproses hasil tool
                continue;
            }

            // Jika tidak ada tool_calls lagi, artinya model telah mencapai sintesis final
            $finalAnswer = $message['content'] ?? '';
            if (!empty($this->callLog)) {
                $uniqueTools = array_unique($this->callLog);
                $finalAnswer .= "\n\n---\n*Rangkaian Tools yang Digunakan: " . implode(' ➔ ', $uniqueTools) . "*";
            }

            return $finalAnswer;
        }

        return 'Batas iterasi maksimum tercapai sebelum tugas selesai. Silakan sederhanakan instruksi Anda.';
    }

    private function buildSystemPrompt(): string
    {
        $tools = $this->mcpClient->getToolDefinitions();
        $names = array_map(fn($t) => $t['function']['name'] ?? '', $tools);
        $toolList = implode(', ', array_filter($names));

        return "Kamu adalah AI Agent multifungsi tingkat lanjut berbasis PHP.\n"
             . "Tools yang terhubung ke sistem Anda saat ini: {$toolList}.\n"
             . "Aturan Kerja:\n"
             . "1. Analisis task pengguna dan pilih tool yang paling tepat.\n"
             . "2. Jika task membutuhkan beberapa tahapan (chaining), panggil tool secara berurutan.\n"
             . "3. Gunakan hasil dari tool sebelumnya untuk melengkapi input tool berikutnya.\n"
             . "4. Berikan jawaban akhir yang komprehensif, akurat, dan ramah dalam Bahasa Indonesia.";
    }
}

FAQ: Pertanyaan Seputar Multi Tools AI Agent PHP

1. Bagaimana AI mengetahui tool mana yang harus dipilih?

Ringkasan Jawaban:Model AI memilih tool secara otonom dengan mencocokkan semantik instruksi pengguna terhadap properti description dan parameters pada JSON Schema setiap tool.

Oleh sebab itu, deskripsi fungsi harus ditulis sangat jelas dan spesifik mengenai kapan fungsi tersebut harus dan tidak boleh dipanggil.

2. Apa yang dimaksud dengan Tool Call Chaining?

Ringkasan Jawaban:Tool Call Chaining adalah proses di mana agen AI memanggil beberapa tool secara bertahap (sekuensial), menggunakan output dari tool pertama sebagai input untuk tool kedua.

Contoh: Menggunakan GoogleMapsTool untuk mendapatkan koordinat kota, lalu meneruskan koordinat tersebut ke WeatherTool untuk mengambil data cuaca.

3. Mengapa parameter maxIterations sangat krusial pada Multi Tools Agent?

Ringkasan Jawaban:Parameter maxIterations bertindak sebagai *Circuit Breaker* untuk mencegah agen terjebak dalam *infinite loop* saat tool mengalami kegagalan berulang atau model berhalusinasi.

Membatasi iterasi antara 5 hingga 10 putaran melindungi server dari kehabisan memori dan mencegah lonjakan tagihan token API yang tidak terduga.

RA

Rusmawan Abdullah Sani

Lead Software Engineer & System Architect

Praktisi pengembangan backend PHP modern, arsitektur AI Agent, microservices, dan otomasi server Linux. Terhubung melalui profil LinkedIn.