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.
130 lines
6.0 KiB
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()
|