Multi-Agents (Advanced)
Key Concepts
Example: Simple Message-Passing Agents
1. Define Agent Node
import asyncio
from caskada import Node
class AgentNode(Node):
async def prep(self, memory):
# We'll store the queue in global memory for simplicity here,
# though in real apps, dependency injection might be better.
message_queue = memory.message_queue
if message_queue.empty():
print("AgentNode: Queue is empty, waiting...")
# In a real app, you might want a timeout or a more sophisticated wait
await asyncio.sleep(1) # Small delay to prevent busy-waiting
return None # No message to process yet
message = await message_queue.get()
print(f"AgentNode: Received message: {message}")
return message
async def exec(self, message: str):
# Simulate processing the message
processed_message = f"Processed: {message.upper()}"
return processed_message
async def post(self, memory, prep_res: str, exec_res: str):
if prep_res: # Only trigger if a message was processed
memory.last_processed_message = exec_res
print(f"AgentNode: Stored processed message: {exec_res}")
self.trigger("default") # Continue processing
else:
# If no message was processed, re-trigger self to check queue again
self.trigger("check_queue")2. Define Message Sender (External Process)
3. Assemble the Flow and Run
Last updated