You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/examples/hs_examples/hierarchical_swarm_example.py

130 lines
6.0 KiB

import os
from dotenv import load_dotenv
# Swarm imports
from swarms.structs.agent import Agent
from swarms.structs.hiearchical_swarm import (
HierarchicalSwarm,
SwarmSpec,
)
from swarms.utils.function_caller_model import OpenAIFunctionCaller
load_dotenv()
# ------------------------------------------------------------------------------
# Director LLM: Responsible for orchestrating tasks among the agents
# ------------------------------------------------------------------------------
llm = OpenAIFunctionCaller(
base_model=SwarmSpec,
api_key=os.getenv("OPENAI_API_KEY"),
system_prompt=(
"As the Director of this Hierarchical Agent Swarm, you are in charge of "
"coordinating and overseeing all tasks, ensuring that each is executed "
"efficiently and effectively by the appropriate agents. You must:\n\n"
"1. **Analyze** the user's request and **formulate** a strategic plan.\n"
"2. **Assign** tasks to the relevant agents, detailing **why** each task "
"is relevant and **what** is expected in the deliverables.\n"
"3. **Monitor** agent outputs and, if necessary, provide **constructive "
"feedback** or request **clarifications**.\n"
"4. **Iterate** this process until all tasks are completed to a high "
"standard, or until the swarm has reached the maximum feedback loops.\n\n"
"Remember:\n"
"- **Only** use the agents provided; do not invent extra roles.\n"
"- If you need additional information, request it from the user.\n"
"- Strive to produce a clear, comprehensive **final output** that addresses "
"the user's needs.\n"
"- Keep the tone **professional** and **informative**. If there's uncertainty, "
"politely request further details.\n"
"- Ensure that any steps you outline are **actionable**, **logical**, and "
"**transparent** to the user.\n\n"
"Your effectiveness hinges on clarity, structured delegation, and thoroughness. "
"Always focus on delivering the best possible outcome for the user's request."
),
temperature=0.5,
max_tokens=8196,
)
def main():
# --------------------------------------------------------------------------
# Agent: Stock-Analysis-Agent
# --------------------------------------------------------------------------
# This agent is responsible for:
# - Gathering and interpreting financial data
# - Identifying market trends and patterns
# - Providing clear, actionable insights or recommendations
# --------------------------------------------------------------------------
analysis_agent = Agent(
agent_name="Stock-Analysis-Agent",
model_name="gpt-4o",
max_loops=1,
interactive=False,
streaming_on=False,
system_prompt=(
"As the Stock Analysis Agent, your primary responsibilities include:\n\n"
"1. **Market Trend Analysis**: Evaluate current and historical market data "
"to identify trends, patterns, and potential investment opportunities.\n"
"2. **Risk & Opportunity Assessment**: Pinpoint specific factors—whether "
"macroeconomic indicators, sector-specific trends, or company fundamentals—"
"that can guide informed investment decisions.\n"
"3. **Reporting & Recommendations**: Present your findings in a structured, "
"easy-to-understand format, offering actionable insights. Include potential "
"caveats or uncertainties in your assessment.\n\n"
"Operational Guidelines:\n"
"- If additional data or clarifications are needed, explicitly request them "
"from the Director.\n"
"- Keep your output **concise** yet **comprehensive**. Provide clear "
"rationales for each recommendation.\n"
"- Clearly state any **assumptions** or **limitations** in your analysis.\n"
"- Remember: You are not a financial advisor, and final decisions rest with "
"the user. Include necessary disclaimers.\n\n"
"Goal:\n"
"Deliver high-quality, well-substantiated stock market insights that can be "
"used to guide strategic investment decisions."
),
)
# --------------------------------------------------------------------------
# Hierarchical Swarm Setup
# --------------------------------------------------------------------------
# - Director: llm
# - Agents: [analysis_agent]
# - max_loops: Maximum number of feedback loops between director & agents
# --------------------------------------------------------------------------
swarm = HierarchicalSwarm(
description=(
"A specialized swarm in which the Director delegates tasks to a Stock "
"Analysis Agent for thorough market evaluation."
),
director=llm,
agents=[analysis_agent],
max_loops=1, # Limit on feedback iterations
)
# --------------------------------------------------------------------------
# Execution
# --------------------------------------------------------------------------
# The director receives the user's instruction: "Ask the stock analysis agent
# to analyze the stock market." The Director will then:
# 1. Formulate tasks (SwarmSpec)
# 2. Assign tasks to the Stock-Analysis-Agent
# 3. Provide feedback and/or request clarifications
# 4. Produce a final response
# --------------------------------------------------------------------------
user_request = (
"Please provide an in-depth analysis of the current stock market, "
"focusing on:\n"
"- Key macroeconomic factors affecting market momentum.\n"
"- Potential short-term vs. long-term opportunities.\n"
"- Sector performance trends (e.g., technology, healthcare, energy).\n"
"Highlight any risks, disclaimers, or uncertainties."
)
# Run the swarm with the user_request
swarm.run(user_request)
if __name__ == "__main__":
main()