funkyoz/mulagent

LLM multi agent library

1.1.0 2025-02-07 10:55 UTC

This package is auto-updated.

Last update: 2025-05-07 11:28:44 UTC


README

MulAgent

GitHub Tests Packagist Downloads Latest Version License

MulAgent is a PHP package that provides a simple Multi-Agent implementation for LLM applications. It allows you to create and orchestrate multiple AI agents that can work together, each with their own specific tools and capabilities. The package currently supports OpenAI's API.

Inspired by OpenAI Swarm.

Key Features

  • Multi-agent orchestration with routines and handoffs
  • Simple tool-based architecture using PHP functors
  • Simple integration with OpenAI's API
  • Support for PHP 8.1+
  • Type-safe implementation

Quick Examples

1. Basic Agent Without Tools

use MulAgent\Agent\Agent;
use MulAgent\LLM\OpenAI\OpenAIConfig;
use MulAgent\LLM\OpenAI\OpenAILLM;
use MulAgent\Message\Message;
use MulAgent\MulAgent;

// Configure OpenAI
$config = OpenAIConfig::create([
    'model' => 'gpt-4',
    'temperature' => 1,
    'api_key' => getenv('OPENAI_API_KEY'),
]);

// Create LLM instance
$llm = new OpenAILLM($config);

// Create an agent
$agent = new Agent(
    name: 'Assistant',
    llm: $llm,
    instruction: 'You are a helpful assistant.'
);

// Initialize MulAgent
$mulAgent = new MulAgent($agent);

// Run a conversation
$messages = [Message::user('What is the capital of France?')];
$response = $mulAgent->run($messages);

2. Agent with Custom Tools

// Create calculator tools using PHP functors
$addTool = new class () {
    public string $name = 'add';

    public function __invoke(float $first, float $second): string
    {
        return (string)($first + $second);
    }
};

$multiplyTool = new class () {
    public string $name = 'multiply';

    public function __invoke(float $first, float $second): string
    {
        return (string)($first * $second);
    }
};

$divideTool = new class () {
    public string $name = 'divide';

    public function __invoke(float $first, float $second): string
    {
        if (.0 === $second) {
            return 'Cannot divide by zero';
        }
        return (string)($first / $second);
    }
};

// Create and use the agent with calculator tools
$agent = new Agent(
    name: 'Calculator',
    llm: $llm,
    instruction: 'You are a math assistant.',
    tools: [$addTool, $multiplyTool, $divideTool]
);

$mulAgent = new MulAgent($agent);

3. Agent with Handoff Capability

use MulAgent\Tool\AgentTool;

// Create two specialized agents
$mathAgent = new Agent(
    name: 'Math Expert',
    llm: $llm,
    instruction: 'You are a mathematics expert.'
);

$scienceAgent = new Agent(
    name: 'Science Expert',
    llm: $llm,
    instruction: 'You are a science expert.',
    tools: [new AgentTool($mathAgent)] // Science agent can hand off to math agent
);

$mulAgent = new MulAgent($scienceAgent);

For more detailed examples and advanced usage, check out the examples directory.