parent
83763c372e
commit
79c88e3740
@ -0,0 +1,175 @@
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from dotenv import load_dotenv
|
||||
from loguru import logger
|
||||
from swarm_models import OpenAIChat
|
||||
from tickr_agent.main import TickrAgent
|
||||
|
||||
from swarms.structs.swarming_architectures import (
|
||||
circular_swarm,
|
||||
linear_swarm,
|
||||
mesh_swarm,
|
||||
pyramid_swarm,
|
||||
star_swarm,
|
||||
)
|
||||
|
||||
# Load environment variables (API keys)
|
||||
load_dotenv()
|
||||
api_key = os.getenv("OPENAI_API_KEY")
|
||||
|
||||
# Initialize the OpenAI model
|
||||
model = OpenAIChat(
|
||||
openai_api_key=api_key, model_name="gpt-4", temperature=0.1
|
||||
)
|
||||
|
||||
# Custom Financial Agent System Prompts
|
||||
STOCK_ANALYSIS_PROMPT = """
|
||||
You are an expert financial analyst. Your task is to analyze stock market data for a company
|
||||
and provide insights on whether to buy, hold, or sell. Analyze trends, financial ratios, and market conditions.
|
||||
"""
|
||||
|
||||
NEWS_SUMMARIZATION_PROMPT = """
|
||||
You are a financial news expert. Summarize the latest news related to a company and provide insights on
|
||||
how it could impact its stock price. Be concise and focus on the key takeaways.
|
||||
"""
|
||||
|
||||
RATIO_CALCULATION_PROMPT = """
|
||||
You are a financial ratio analyst. Your task is to calculate key financial ratios for a company
|
||||
based on the available data, such as P/E ratio, debt-to-equity ratio, and return on equity.
|
||||
Explain what each ratio means for investors.
|
||||
"""
|
||||
|
||||
# Example Usage
|
||||
# Define stock tickers
|
||||
stocks = ["AAPL", "TSLA"]
|
||||
|
||||
|
||||
# Initialize Financial Analysis Agents
|
||||
stock_analysis_agent = TickrAgent(
|
||||
agent_name="Stock-Analysis-Agent",
|
||||
system_prompt=STOCK_ANALYSIS_PROMPT,
|
||||
stocks=stocks,
|
||||
)
|
||||
|
||||
news_summarization_agent = TickrAgent(
|
||||
agent_name="News-Summarization-Agent",
|
||||
system_prompt=NEWS_SUMMARIZATION_PROMPT,
|
||||
stocks=stocks,
|
||||
|
||||
)
|
||||
|
||||
ratio_calculation_agent = TickrAgent(
|
||||
agent_name="Ratio-Calculation-Agent",
|
||||
system_prompt=RATIO_CALCULATION_PROMPT,
|
||||
stocks=stocks,
|
||||
|
||||
)
|
||||
# Create a list of agents for swarming
|
||||
agents = [
|
||||
stock_analysis_agent,
|
||||
news_summarization_agent,
|
||||
ratio_calculation_agent,
|
||||
]
|
||||
|
||||
# Define financial analysis tasks
|
||||
tasks = [
|
||||
"Analyze the stock performance of Apple (AAPL) in the last 6 months.",
|
||||
"Summarize the latest financial news on Tesla (TSLA).",
|
||||
"Calculate the P/E ratio and debt-to-equity ratio for Amazon (AMZN).",
|
||||
]
|
||||
|
||||
# -------------------------------# Showcase Circular Swarm
|
||||
# -------------------------------
|
||||
logger.info("Starting Circular Swarm for financial analysis.")
|
||||
circular_result = circular_swarm(agents, tasks)
|
||||
logger.info(f"Circular Swarm Result:\n{circular_result}\n")
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# Showcase Linear Swarm
|
||||
# -------------------------------
|
||||
logger.info("Starting Linear Swarm for financial analysis.")
|
||||
linear_result = linear_swarm(agents, tasks)
|
||||
logger.info(f"Linear Swarm Result:\n{linear_result}\n")
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# Showcase Star Swarm
|
||||
# -------------------------------
|
||||
logger.info("Starting Star Swarm for financial analysis.")
|
||||
star_result = star_swarm(agents, tasks)
|
||||
logger.info(f"Star Swarm Result:\n{star_result}\n")
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# Showcase Mesh Swarm
|
||||
# -------------------------------
|
||||
logger.info("Starting Mesh Swarm for financial analysis.")
|
||||
mesh_result = mesh_swarm(agents, tasks)
|
||||
logger.info(f"Mesh Swarm Result:\n{mesh_result}\n")
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# Showcase Pyramid Swarm
|
||||
# -------------------------------
|
||||
logger.info("Starting Pyramid Swarm for financial analysis.")
|
||||
pyramid_result = pyramid_swarm(agents, tasks)
|
||||
logger.info(f"Pyramid Swarm Result:\n{pyramid_result}\n")
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# Example: One-to-One Communication between Agents
|
||||
# -------------------------------
|
||||
logger.info(
|
||||
"Starting One-to-One communication between Stock and News agents."
|
||||
)
|
||||
one_to_one_result = stock_analysis_agent.run(
|
||||
"Analyze Apple stock performance, and then send the result to the News Summarization Agent"
|
||||
)
|
||||
news_summary_result = news_summarization_agent.run(one_to_one_result)
|
||||
logger.info(
|
||||
f"One-to-One Communication Result:\n{news_summary_result}\n"
|
||||
)
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# Example: Broadcasting to all agents
|
||||
# -------------------------------
|
||||
async def broadcast_task():
|
||||
logger.info("Broadcasting task to all agents.")
|
||||
task = "Summarize the overall stock market performance today."
|
||||
await asyncio.gather(*[agent.run(task) for agent in agents])
|
||||
|
||||
|
||||
asyncio.run(broadcast_task())
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# Deep Comments & Explanations
|
||||
# -------------------------------
|
||||
|
||||
"""
|
||||
Explanation of Key Components:
|
||||
|
||||
1. **Agents**:
|
||||
- We created three specialized agents for financial analysis: Stock Analysis, News Summarization, and Ratio Calculation.
|
||||
- Each agent is provided with a custom system prompt that defines their unique task in analyzing stock data.
|
||||
|
||||
2. **Swarm Examples**:
|
||||
- **Circular Swarm**: Agents take turns processing tasks in a circular manner.
|
||||
- **Linear Swarm**: Tasks are processed sequentially by each agent.
|
||||
- **Star Swarm**: The first agent (Stock Analysis) processes all tasks before distributing them to other agents.
|
||||
- **Mesh Swarm**: Agents work on random tasks from the task queue.
|
||||
- **Pyramid Swarm**: Agents are arranged in a pyramid structure, processing tasks layer by layer.
|
||||
|
||||
3. **One-to-One Communication**:
|
||||
- This showcases how one agent can pass its result to another agent for further processing, useful for complex workflows where agents depend on each other.
|
||||
|
||||
4. **Broadcasting**:
|
||||
- The broadcasting function demonstrates how a single task can be sent to all agents simultaneously. This can be useful for situations like summarizing daily stock market performance across multiple agents.
|
||||
|
||||
5. **Logging with Loguru**:
|
||||
- We use `loguru` for detailed logging throughout the swarms. This helps to track the flow of information and responses from each agent.
|
||||
"""
|
Loading…
Reference in new issue