276 lines
7.6 KiB
Markdown
276 lines
7.6 KiB
Markdown
|
|
# Multi-Agent Keywords
|
||
|
|
|
||
|
|
This section covers keywords for building multi-agent systems where multiple specialized bots collaborate to handle complex tasks.
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
Multi-agent orchestration enables:
|
||
|
|
|
||
|
|
- **Task specialization** - Each bot focuses on what it does best
|
||
|
|
- **Collaborative problem-solving** - Bots work together on complex tasks
|
||
|
|
- **Scalable architectures** - Add new specialists without modifying existing bots
|
||
|
|
- **Resilient systems** - Failures are isolated and handled gracefully
|
||
|
|
|
||
|
|
## Keyword Summary
|
||
|
|
|
||
|
|
| Keyword | Syntax | Description |
|
||
|
|
|---------|--------|-------------|
|
||
|
|
| `ADD BOT` | `ADD BOT "name" TRIGGER ON "keywords"` | Add bot to session with triggers |
|
||
|
|
| `DELEGATE TO BOT` | `result = DELEGATE "msg" TO BOT "name"` | Send task to another bot |
|
||
|
|
| `BROADCAST TO BOTS` | `BROADCAST "message" TO BOTS` | Send message to all bots |
|
||
|
|
| `TRANSFER CONVERSATION` | `TRANSFER CONVERSATION TO "botname"` | Hand off conversation |
|
||
|
|
| `BOT REFLECTION` | `BOT REFLECTION true` | Enable agent self-analysis |
|
||
|
|
| `BOT REFLECTION INSIGHTS` | `insights = BOT REFLECTION INSIGHTS()` | Get reflection results |
|
||
|
|
|
||
|
|
## ADD BOT
|
||
|
|
|
||
|
|
Adds a bot to the current session with optional triggers, tools, and schedules.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' Add bot with keyword triggers
|
||
|
|
ADD BOT "billing-bot" TRIGGER ON "billing,invoice,payment"
|
||
|
|
|
||
|
|
' Add bot with tool access
|
||
|
|
ADD BOT "analyst-bot" TOOLS "calculate,forecast,report"
|
||
|
|
|
||
|
|
' Add bot with scheduled execution
|
||
|
|
ADD BOT "monitor-bot" SCHEDULE "0 */1 * * *"
|
||
|
|
|
||
|
|
' Add bot with multiple configurations
|
||
|
|
ADD BOT "support-bot" TRIGGER ON "help,support" TOOLS "ticket,escalate"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Trigger Types
|
||
|
|
|
||
|
|
| Type | Description | Example |
|
||
|
|
|------|-------------|---------|
|
||
|
|
| `TRIGGER ON` | Keyword-based activation | `TRIGGER ON "billing,payment"` |
|
||
|
|
| `TOOLS` | Tool-based activation | `TOOLS "calculate,search"` |
|
||
|
|
| `SCHEDULE` | Cron-based activation | `SCHEDULE "0 9 * * *"` |
|
||
|
|
|
||
|
|
## DELEGATE TO BOT
|
||
|
|
|
||
|
|
Sends a task to another bot and optionally waits for a response.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' Fire-and-forget delegation
|
||
|
|
DELEGATE "Process this order" TO BOT "order-processor"
|
||
|
|
|
||
|
|
' Get response from delegation
|
||
|
|
result = DELEGATE "Calculate ROI" TO BOT "finance-bot"
|
||
|
|
TALK "Result: " + result
|
||
|
|
|
||
|
|
' Delegation with timeout
|
||
|
|
result = DELEGATE "Analyze report" TO BOT "analyst-bot" TIMEOUT 60
|
||
|
|
```
|
||
|
|
|
||
|
|
### Parameters
|
||
|
|
|
||
|
|
| Parameter | Type | Description |
|
||
|
|
|-----------|------|-------------|
|
||
|
|
| `message` | String | Task or message to send |
|
||
|
|
| `botname` | String | Target bot name |
|
||
|
|
| `TIMEOUT` | Number | Optional timeout in seconds (default: 30) |
|
||
|
|
|
||
|
|
## BROADCAST TO BOTS
|
||
|
|
|
||
|
|
Sends a message to all bots in the current session.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' Notify all bots of an event
|
||
|
|
BROADCAST "New customer signup: " + customerid TO BOTS
|
||
|
|
|
||
|
|
' Emergency signal
|
||
|
|
BROADCAST "MAINTENANCE_MODE" TO BOTS
|
||
|
|
|
||
|
|
' Data update notification
|
||
|
|
BROADCAST "PRICE_UPDATE:" + JSON(prices) TO BOTS
|
||
|
|
```
|
||
|
|
|
||
|
|
## TRANSFER CONVERSATION
|
||
|
|
|
||
|
|
Hands off the entire conversation to another bot. The current bot exits.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' Simple transfer
|
||
|
|
TALK "Let me connect you with our billing specialist."
|
||
|
|
TRANSFER CONVERSATION TO "billing-bot"
|
||
|
|
|
||
|
|
' Transfer with context
|
||
|
|
SET CONTEXT "issue" AS "refund request"
|
||
|
|
SET CONTEXT "amount" AS "$150"
|
||
|
|
TRANSFER CONVERSATION TO "refunds-bot"
|
||
|
|
|
||
|
|
' Conditional transfer
|
||
|
|
IF issueType = "technical" THEN
|
||
|
|
TRANSFER CONVERSATION TO "tech-support-bot"
|
||
|
|
ELSE
|
||
|
|
TRANSFER CONVERSATION TO "general-support-bot"
|
||
|
|
END IF
|
||
|
|
```
|
||
|
|
|
||
|
|
## BOT REFLECTION
|
||
|
|
|
||
|
|
Enables agent self-analysis for continuous improvement.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' Enable reflection
|
||
|
|
BOT REFLECTION true
|
||
|
|
|
||
|
|
' Disable reflection
|
||
|
|
BOT REFLECTION false
|
||
|
|
|
||
|
|
' Monitor specific metric
|
||
|
|
BOT REFLECTION ON "conversation_quality"
|
||
|
|
BOT REFLECTION ON "response_accuracy"
|
||
|
|
BOT REFLECTION ON "user_satisfaction"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Reflection Metrics
|
||
|
|
|
||
|
|
| Metric | Description |
|
||
|
|
|--------|-------------|
|
||
|
|
| `conversation_quality` | Overall conversation effectiveness |
|
||
|
|
| `response_accuracy` | Correctness of responses |
|
||
|
|
| `user_satisfaction` | Estimated user satisfaction |
|
||
|
|
| `tone_appropriateness` | Whether tone matches context |
|
||
|
|
| `resolution_rate` | Whether issues were resolved |
|
||
|
|
|
||
|
|
## BOT REFLECTION INSIGHTS
|
||
|
|
|
||
|
|
Retrieves the results of reflection analysis.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' Get insights
|
||
|
|
insights = BOT REFLECTION INSIGHTS()
|
||
|
|
|
||
|
|
' Access properties
|
||
|
|
PRINT "Quality Score: " + insights.qualityScore
|
||
|
|
PRINT "Issues: " + insights.issuesCount
|
||
|
|
|
||
|
|
' Iterate suggestions
|
||
|
|
FOR EACH suggestion IN insights.suggestions
|
||
|
|
PRINT "Suggestion: " + suggestion
|
||
|
|
NEXT suggestion
|
||
|
|
|
||
|
|
' Use for alerting
|
||
|
|
IF insights.qualityScore < 0.5 THEN
|
||
|
|
SEND MAIL admin, "Low Quality Alert", insights.summary
|
||
|
|
END IF
|
||
|
|
```
|
||
|
|
|
||
|
|
### Insights Object
|
||
|
|
|
||
|
|
| Property | Type | Description |
|
||
|
|
|----------|------|-------------|
|
||
|
|
| `qualityScore` | Number | Overall quality (0-1) |
|
||
|
|
| `summary` | String | Text summary |
|
||
|
|
| `issues` | Array | Identified issues |
|
||
|
|
| `issuesCount` | Number | Count of issues |
|
||
|
|
| `suggestions` | Array | Improvement suggestions |
|
||
|
|
| `criticalIssues` | Number | Critical problem count |
|
||
|
|
| `timestamp` | DateTime | When analyzed |
|
||
|
|
|
||
|
|
## Common Patterns
|
||
|
|
|
||
|
|
### Router Pattern
|
||
|
|
|
||
|
|
A central bot routes queries to specialists.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' router-bot/start.bas
|
||
|
|
HEAR userquery
|
||
|
|
|
||
|
|
' Classify the query
|
||
|
|
category = LLM "Classify into: billing, technical, sales, general. Query: " + userquery
|
||
|
|
|
||
|
|
SWITCH category
|
||
|
|
CASE "billing"
|
||
|
|
result = DELEGATE userquery TO BOT "billing-bot"
|
||
|
|
CASE "technical"
|
||
|
|
result = DELEGATE userquery TO BOT "tech-bot"
|
||
|
|
CASE "sales"
|
||
|
|
result = DELEGATE userquery TO BOT "sales-bot"
|
||
|
|
CASE ELSE
|
||
|
|
result = LLM userquery
|
||
|
|
END SWITCH
|
||
|
|
|
||
|
|
TALK result
|
||
|
|
```
|
||
|
|
|
||
|
|
### Expert Panel Pattern
|
||
|
|
|
||
|
|
Multiple bots provide perspectives.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
question = "Should we expand into Europe?"
|
||
|
|
|
||
|
|
' Get multiple expert opinions
|
||
|
|
marketView = DELEGATE question TO BOT "market-analyst"
|
||
|
|
financeView = DELEGATE question TO BOT "finance-expert"
|
||
|
|
riskView = DELEGATE question TO BOT "risk-assessor"
|
||
|
|
|
||
|
|
' Synthesize
|
||
|
|
synthesis = LLM "Combine these expert views: " + marketView + financeView + riskView
|
||
|
|
TALK synthesis
|
||
|
|
```
|
||
|
|
|
||
|
|
### Escalation Pattern
|
||
|
|
|
||
|
|
Automatic escalation when confidence is low.
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' First-line bot
|
||
|
|
confidence = LLM "Rate confidence (0-100) for: " + userquery
|
||
|
|
|
||
|
|
IF confidence < 50 THEN
|
||
|
|
TALK "Let me connect you with a specialist."
|
||
|
|
SET CONTEXT "escalation_reason" AS "low_confidence"
|
||
|
|
TRANSFER CONVERSATION TO "senior-support-bot"
|
||
|
|
ELSE
|
||
|
|
response = LLM userquery
|
||
|
|
TALK response
|
||
|
|
END IF
|
||
|
|
```
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
### config.csv Options
|
||
|
|
|
||
|
|
```csv
|
||
|
|
name,value
|
||
|
|
a2a-enabled,true
|
||
|
|
a2a-timeout,30
|
||
|
|
a2a-max-hops,5
|
||
|
|
a2a-retry-count,3
|
||
|
|
reflection-enabled,true
|
||
|
|
reflection-interval,10
|
||
|
|
reflection-min-messages,3
|
||
|
|
```
|
||
|
|
|
||
|
|
| Option | Default | Description |
|
||
|
|
|--------|---------|-------------|
|
||
|
|
| `a2a-enabled` | `true` | Enable agent-to-agent communication |
|
||
|
|
| `a2a-timeout` | `30` | Default delegation timeout (seconds) |
|
||
|
|
| `a2a-max-hops` | `5` | Maximum delegation chain depth |
|
||
|
|
| `a2a-retry-count` | `3` | Retry attempts on failure |
|
||
|
|
| `reflection-enabled` | `true` | Enable bot reflection |
|
||
|
|
| `reflection-interval` | `10` | Messages between reflections |
|
||
|
|
|
||
|
|
## Best Practices
|
||
|
|
|
||
|
|
1. **Use descriptive bot names** - `billing-bot` not `bot2`
|
||
|
|
2. **Set appropriate timeouts** - Long tasks need longer timeouts
|
||
|
|
3. **Handle failures gracefully** - Always have fallback paths
|
||
|
|
4. **Avoid circular delegation** - Bot A → Bot B → Bot A
|
||
|
|
5. **Keep chains short** - Max 3-4 delegation hops
|
||
|
|
6. **Log delegations** - Helps debug multi-agent flows
|
||
|
|
7. **Review reflection insights** - Act on improvement suggestions
|
||
|
|
|
||
|
|
## See Also
|
||
|
|
|
||
|
|
- [ADD BOT](./keyword-add-bot.md) - Detailed ADD BOT reference
|
||
|
|
- [DELEGATE TO BOT](./keyword-delegate-to-bot.md) - Delegation details
|
||
|
|
- [BOT REFLECTION](./keyword-bot-reflection.md) - Reflection details
|
||
|
|
- [Multi-Agent Orchestration](../chapter-11-features/multi-agent-orchestration.md) - Complete guide
|
||
|
|
- [A2A Protocol](../chapter-11-features/a2a-protocol.md) - Protocol details
|