Files
2026-07-13 13:34:48 +08:00

71 lines
2.5 KiB
TypeScript

/**
* Example 08: Multi-Agent System
*
* This example demonstrates a sophisticated multi-agent orchestration system.
* It shows how to:
* - Implement multiple specialized agents (HR, IT, Sales)
* - Use an orchestrator to coordinate agent interactions
* - Handle agent handoffs and context switching
* - Maintain conversation flow across different agent specializations
* - Build complex agent hierarchies and routing
*
* Key concepts:
* - Multi-agent orchestration patterns
* - Agent specialization and routing
* - Context spreading with spread operator
* - Handoff detection and management
* - Conversational state management across agents
*/
import { Client } from '@botpress/client'
import { execute } from 'llmz'
import { CLIChat } from '../utils/cli-chat'
// Import specialized agent definitions
import { HRAgent } from './agent_hr' // Human Resources specialist
import { ITAgent } from './agent_it' // Information Technology specialist
import { MainAgent } from './agent_main' // Entry point/coordinator agent
import { SalesAgent } from './agent_sales' // Sales and marketing specialist
// Import the orchestration system
import { MultiAgentOrchestrator } from './orchestrator'
// Initialize Botpress client for LLM communication
const client = new Client({
botId: process.env.BOTPRESS_BOT_ID!,
token: process.env.BOTPRESS_TOKEN!,
})
// Set up chat interface and orchestrator
const chat = new CLIChat()
// Create orchestrator with all agents and set MainAgent as entry point
// The orchestrator manages agent selection, context, and handoffs
const orchestrator = new MultiAgentOrchestrator(
[MainAgent, HRAgent, ITAgent, SalesAgent], // Available agents
MainAgent.name // Initial/default agent
)
// Main execution loop with agent orchestration
while (true) {
// Execute with the current agent's context
// The orchestrator provides the appropriate instructions, tools, and configuration
const result = await execute({
// Spread the orchestrator's context (instructions, tools, exits, etc.)
// This dynamically configures the execution based on the current agent
...orchestrator.context,
client,
chat,
})
// Check if the current agent has handed off control to another agent
if (!orchestrator.hasHandedOff(result)) {
// No handoff occurred - continue with user input
// Wait for the next user message to continue the conversation
await chat.prompt()
}
// If handoff occurred, the orchestrator has already switched contexts
// Continue the loop with the new agent's configuration
}