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

BAB 15

Membuat Multi Tools Agent

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:

TL;DR (Ringkasan Cepat)

  • AI secara otomatis memilih tool yang paling relevan berdasarkan deskripsi tool.
  • Agent bisa memanggil beberapa tool secara berurutan dalam satu request.
  • Semakin banyak tool, semakin penting deskripsi yang unik dan presisi untuk setiap tool.
  • Monitor jumlah iterasi dan token untuk mencegah infinite loop dan pemborosan biaya.

Agent dengan Banyak Tools

<?php
// run-multi-tools-agent.php
require_once __DIR__ . '/vendor/autoload.php';

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

// Setup PDO
$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]
);

// Inisialisasi semua tools
$tools = [
    new App\Tools\CalculatorTool(),
    new App\Tools\DatabaseTool($pdo),
    new App\Tools\FileTool(allowedDir: './uploads'),
    new App\Tools\GitHubTool(githubToken: $_ENV['GITHUB_TOKEN'] ?? ''),
    new App\Tools\CurrencyTool(),
    new App\Tools\WeatherTool(),
];

// Setup MCP
$mcpServer = new App\MCP\McpServer();
foreach ($tools as $tool) {
    $mcpServer->register($tool->getDefinition()['function']['name'], $tool);
}
$mcpClient = new App\MCP\McpClient($mcpServer);

// Buat Agent dengan semua tools
$client = new App\OpenAIClient($config['openai_api_key']);
$agent  = new App\Agent\MultiToolsAgent($client, $mcpClient, maxIterations: 10);

// Tes dengan query yang membutuhkan beberapa tools
$queries = [
    'Berapa 15% dari 2500000? Dan berikan 3 kurs USD ke IDR saat ini.',
    'Cari user bernama "Ahmad" di database, lalu cek cuaca di Jakarta hari ini.',
    'Cari repository PHP terpopuler di GitHub tentang "ai agent" dan konversi 100 USD ke IDR.',
];

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

MultiToolsAgent dengan Tool Call Chaining

<?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 ($i = 0; $i < $this->maxIterations; $i++) {
            $response = $this->client->chat($this->messages, $toolDefs);
            $message  = $response['choices'][0]['message'];
            $this->messages[] = $message;

            if (!empty($message['tool_calls'])) {
                foreach ($message['tool_calls'] as $toolCall) {
                    $name = $toolCall['function']['name'];
                    $this->callLog[] = $name;
                    echo "  🔧 Memanggil: $name\n";

                    $toolResult = $this->mcpClient->executeToolCall($toolCall);
                    $this->messages[] = $toolResult;
                }
                continue;
            }

            // Tidak ada tool call = jawaban final
            $finalContent = $message['content'] ?? '';
            if (!empty($this->callLog)) {
                $finalContent .= "\n\n---\n*Tools yang digunakan: " . implode(', ', $this->callLog) . "*";
            }
            return $finalContent;
        }

        return 'Batas iterasi maksimum tercapai. Silakan sederhanakan pertanyaan Anda.';
    }

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

        return "Kamu adalah AI Agent multifungsi. Tools yang tersedia: $toolList.\n"
             . "Gunakan tool yang paling tepat untuk setiap bagian task.\n"
             . "Jika task membutuhkan beberapa langkah, eksekusi secara berurutan.\n"
             . "Selalu jawab dalam Bahasa Indonesia.";
    }
}

Poin Kunci Bab 15

Multi Tools Agent adalah wujud nyata dari AI Agent yang "berguna". Kuncinya ada pada kualitas deskripsi setiap tool — AI perlu memahami kapan menggunakan setiap tool agar dapat membuat keputusan yang tepat.