( image du blog LangChain | CrewAI : l'avenir des équipes d'agents IA)
Le pipeline d'agrégation MongoDB nous fournit les données que nous devons analyser. Plus rapidement vous pourrez extraire des informations significatives à partir de données brutes, meilleures seront vos décisions d’investissement. CrewAI, combiné à la puissance de MongoDB Atlas, offre une approche unique qui va au-delà des calculs de base pour fournir une analyse véritablement exploitable.
Pour cet exemple, nous allons créer un agent de recherche en investissement. Cet agent est notre expert, habile à trouver des données précieuses à l'aide d'outils tels que les moteurs de recherche. Il est conçu pour rechercher les tendances financières, les actualités des entreprises et les informations des analystes. Pour en savoir plus sur la création d'agents à l'aide de CrewAI, cliquez ici
Libérer la puissance de la collaboration IA : agents, tâches et outils
Essentiellement, la puissante combinaison d'agents, de tâches et d'outils de CrewAI vous permet de :
Avant de commencer
Pour suivre, vous aurez besoin de :
MongoDB Atlas Cluster : créez votre cluster gratuit et chargez l'exemple de jeu de données. Les données de transaction de l'exemple d'ensemble de données analytiques offrent un ensemble de données réaliste qui permet aux utilisateurs de perfectionner leurs compétences en matière d'analyse, d'interrogation et d'agrégation de données, en particulier dans le contexte des données financières.
Ressource LLM : CrewAI prend en charge diverses connexions LLM, y compris les modèles locaux (Ollama), les API comme Azure et tous les composants LangChain LLM pour les solutions d'IA personnalisables. Cliquez ici pour en savoir plus sur le support CrewAI LLM
Ensuite, nous configurons notre connexion à Azure OpenAI. Azure OpenAI peut être remplacé par votre LLM préféré.
from langchain_openai import AzureChatOpenAI
AZURE_OPENAI_ENDPOINT = "https://__DEMO__.openai.azure.com"
AZURE_OPENAI_API_KEY = "__AZURE_OPENAI_API_KEY__"
deployment_name = "gpt-4-32k" # The name of your model deployment
default_llm = AzureChatOpenAI (
openai_api_version = os . environ . get ( "AZURE_OPENAI_VERSION" , "2023-07-01-preview" ),
azure_deployment = deployment_name ,
azure_endpoint = AZURE_OPENAI_ENDPOINT ,
api_key = AZURE_OPENAI_API_KEY
)
Définissons ensuite le rôle de l'agent et l'objectif de l'agent en tant que variable afin qu'ils soient accessibles tout au long du script.
# Initial Setup
AGENT_ROLE = "Investment Researcher"
AGENT_GOAL = """
Research stock market trends, company news, and analyst reports to identify potential investment opportunities.
"""
Pour cet exemple, nous utiliserons l'intégration DuckDuckGo Search Langchain. DuckDuckGo Search est un composant qui permet aux utilisateurs de rechercher sur le Web à l'aide de DuckDuckGo. Vous pouvez implémenter votre outil de recherche avec l'API de recherche de votre choix - il n'est pas nécessaire qu'il s'agisse de DuckDuckGo.
# Web Search Setup
from langchain . tools import tool
from langchain_community . tools import DuckDuckGoSearchResults
duck_duck_go = DuckDuckGoSearchResults ( backend = "news" )
# Search Tool - Web Search
@ tool
def search_tool ( query : str ):
"""
Perform online research on a particular stock.
"""
return duck_duck_go . run ( query )
Nous utiliserons CrewAI pour gérer nos agents et nos tâches. Dans ce cas, nous avons un seul agent : un chercheur chargé d’analyser les données et de fournir des informations exploitables.
# Research Agent Setup
from crewai import Crew , Process , Task , Agent
researcher = Agent (
role = 'Investment Researcher' ,
goal = """
Research market trends, company news, and analyst reports to identify potential investment opportunities.
""" ,
verbose = True ,
llm = default_llm ,
backstory = 'Expert in using search engines to uncover relevant financial data, news articles, and industry analysis.' ,
tools = [ search_tool ]
)
analysis_task = Task (
description = """
Using the following information:
[VERIFIED DATA]
{agg_data}
*note*
The data represents the average price of each stock symbol for each transaction type (buy/sell),
and the total amount of transactions for each type. This would give us insight into the average costs and proceeds from each stock,
as well as the volume of transactions for each stock.
[END VERIFIED DATA]
[TASK]
- Provide a financial summary of the VERIFIED DATA
- Research current events and trends, and provide actionable insights and recommendations
""" ,
agent = researcher ,
expected_output = 'concise markdown financial summary and list of actionable insights and recommendations' ,
tools = [ search_tool ],
)
tech_crew = Crew (
agents = [ researcher ],
tasks = [ analysis_task ],
process = Process . sequential
)
Ensuite, nous définissons notre pipeline d'agrégation MongoDB. Ce pipeline est utilisé pour traiter nos données de transaction et calculer le retour sur investissement pour chaque symbole boursier.
# MongoDB Aggregation Pipeline
pipeline = [
{
"$unwind" : "$transactions" # Deconstruct the transactions array into separate documents
},
{
"$group" : { # Group documents by stock symbol
"_id" : "$transactions.symbol" , # Use symbol as the grouping key
"buyValue" : { # Calculate total buy value
"$sum" : {
"$cond" : [ # Conditional sum based on transaction type
{ "$eq" : [ "$transactions.transaction_code" , "buy" ] }, # Check for "buy" transactions
{ "$toDouble" : "$transactions.total" }, # Convert total to double for sum
0 # Default value for non-buy transactions
]
}
},
"sellValue" : { # Calculate total sell value (similar to buyValue)
"$sum" : {
"$cond" : [
{ "$eq" : [ "$transactions.transaction_code" , "sell" ] },
{ "$toDouble" : "$transactions.total" },
0
]
}
}
}
},
{
"$project" : { # Project desired fields (renaming and calculating net gain)
"_id" : 0 , # Exclude original _id field
"symbol" : "$_id" , # Rename _id to symbol for clarity
"netGain" : { "$subtract" : [ "$sellValue" , "$buyValue" ] } # Calculate net gain
}
},
{
"$sort" : { "netGain" : - 1 } # Sort results by net gain (descending)
},
{ "$limit" : 3 } # Limit results to top 3 stocks
]
results = list ( collection . aggregate ( pipeline ))
client . close ()
print ( "MongoDB Aggregation Pipeline Results:" )
print ( results )
Voici un aperçu de ce que fait le pipeline MongoDB :
Déroulement des transactions : tout d'abord, il utilise l'opérateur $unwind
pour décompresser un champ de tableau nommé « transactions » dans chaque document. Imaginez que chaque document contient des informations sur plusieurs achats et ventes d’actions. Le déroulement sépare ces transactions en documents individuels, ce qui facilite les calculs.
Regroupement par symbole : Ensuite, l'opérateur $group
prend le relais. Il regroupe les documents déroulés en fonction de la valeur du champ "transactions.symbol". Cela regroupe essentiellement toutes les transactions pour un titre spécifique (représenté par le symbole) en un seul groupe.
Calcul des valeurs d'achat et de vente : au sein de chaque groupe de symboles, le pipeline calcule deux valeurs cruciales :
$sum
avec une instruction conditionnelle ( $cond
). Le $cond
vérifie si le "transaction_code" dans l'objet "transactions" est "buy". Si tel est le cas, il convertit le champ « total » (le montant de la transaction) en un double à l'aide $toDouble
et l'ajoute au total cumulé de buyValue. S'il ne s'agit pas d'une transaction d'achat, elle ne contribue rien (0) à la somme. Cela calcule efficacement le montant total dépensé pour acheter des actions de ce symbole spécifique. Projection des résultats : maintenant, l'opérateur $project
intervient pour définir le format de sortie final. Il supprime l'identifiant de regroupement généré automatiquement ( _id
) en le définissant sur 0. Il renomme ensuite le champ de regroupement ( _id
qui contenait le "transactions.symbol") en un nom plus clair, "symbole". Enfin, il calcule le retour sur investissement pour chaque symbole à l’aide de l’opérateur $subtract
. Cela soustrait la buyValue
de la sellValue
pour déterminer le profit ou la perte pour ce symbole.
Tri par retour : Enfin, l'opérateur $sort
organise les résultats. Il trie les documents en fonction du champ "returnOnInvestment" par ordre décroissant (-1). Cela signifie que les symboles ayant le retour sur investissement le plus élevé (les plus rentables) apparaîtront en premier dans le résultat final.
Enfin, nous lançons l’exécution de notre tâche. L'agent chercheur utilisera les données de notre agrégation MongoDB, ainsi que tout autre outil à sa disposition, pour analyser les données et fournir des informations.
Final Answer:
# Detailed Financial Report
## TLDR Summary
Based on the net gain data and recent news trends, all three stocks – Amazon (AMZN), SAP (SAP), and Apple (AAPL) – show promising prospects. Amazon and Apple are experiencing growth and their stocks are hitting new highs. SAP has recently acquired WalkMe, indicating potential future growth.
## Key Insights and Recommendations
### Amazon (AMZN)
- Net Gain: $72,769,230.71
- Recent News: Amazon is poised for its next decade of growth after delivering a return of around 1,000% over the last decade. Its stock price recently hit a new all-time high.
- Recommendation: With its stock hitting an all-time high and positive future growth outlook, Amazon presents a solid investment opportunity for long-term investors.
### SAP (SAP)
- Net Gain: $39,912,931.04
- Recent News: SAP recently announced an agreement to acquire WalkMe, a digital adoption platform, in an all-cash deal valued at about $1.5 billion. The acquisition is expected to close in the third quarter of 2024.
- Recommendation: The recent acquisition of WalkMe indicates potential for future growth. Investors should keep a close eye on SAP's performance post-acquisition.
### Apple (AAPL)
- Net Gain: $25,738,882.29
- Recent News: Apple's stock has risen substantially since releasing its fiscal Q2 earnings. It is predicted to still be undervalued based on its powerful free cash flow.
- Recommendation: Given the powerful free cash flow and the potential for an AI-driven growth cycle, Apple appears to be a good investment opportunity.
## Other Observations
While all three stocks show promising prospects, it's important for investors to consider their own risk tolerance and investment goals before making investment decisions. It's also important to keep an eye on the market trends and news, as they can greatly impact the stock prices.
## Conclusion
In conclusion, Amazon, SAP, and Apple present promising investment opportunities based on their recent news and net gain data. However, as with all investments, potential investors should conduct thorough research and consider their own investment goals and risk tolerance.
Bien que la combinaison du cadre d'agrégation de MongoDB et de GenAI représente un outil puissant pour l'analyse et l'interprétation des données, il est important de reconnaître quelques limites potentielles :
Dépendance aux données historiques : les performances passées ne prédisent pas toujours les résultats futurs, en particulier sur des marchés imprévisibles où des événements imprévus peuvent avoir un impact significatif sur les résultats d'investissement.
Incertitude dans les prévisions : Malgré la sophistication de l’analyse, il existera toujours un degré inhérent d’incertitude dans les prévisions d’investissement. Les résultats futurs sont par nature inconnaissables, et des facteurs dépassant la portée des données historiques peuvent influencer les résultats.
Limites du LLM : Les LLM sont toujours en évolution et leur capacité à rechercher, interpréter et analyser des données s'améliore continuellement. Cependant, des biais dans les données d'entraînement ou des limitations dans l'architecture du modèle pourraient conduire à des informations inexactes ou trompeuses.
En étant conscient de ces limites et en prenant des mesures pour les atténuer, vous pouvez garantir une approche plus responsable et plus complète de l’analyse des investissements.