( Bild vom LangChain-Blog | CrewAI: Die Zukunft der KI-Agententeams)
Die MongoDB Aggregation Pipeline liefert uns die Daten, die wir zur Analyse benötigen. Je schneller Sie aus Rohdaten aussagekräftige Erkenntnisse gewinnen können, desto besser werden Ihre Anlageentscheidungen sein. CrewAI bietet in Kombination mit der Leistungsfähigkeit von MongoDB Atlas einen einzigartigen Ansatz, der über die einfache Zahlenverarbeitung hinausgeht und wirklich umsetzbare Analysen liefert.
Für dieses Beispiel erstellen wir einen Investment Researcher Agent. Dieser Agent ist unser Experte, der sich mit der Suche nach wertvollen Daten mithilfe von Tools wie Suchmaschinen auskennt. Es ist darauf ausgelegt, Finanztrends, Unternehmensnachrichten und Analysteneinblicke aufzuspüren. Um mehr über die Erstellung von Agenten mit CrewAI zu erfahren, klicken Sie hier
Erschließen Sie das Potenzial der KI-Zusammenarbeit: Agenten, Aufgaben und Tools
Im Wesentlichen ermöglicht Ihnen die leistungsstarke Kombination aus Agenten, Aufgaben und Tools von CrewAI:
Bevor wir beginnen
Um mitzumachen, benötigen Sie:
MongoDB Atlas Cluster: Erstellen Sie Ihren kostenlosen Cluster und laden Sie den Beispieldatensatz. Die Transaktionsdaten im Beispielanalysedatensatz bieten einen realistischen Datensatz, der es Benutzern ermöglicht, ihre Fähigkeiten in der Datenanalyse, Abfrage und Aggregation zu verbessern, insbesondere im Kontext von Finanzdaten.
LLM-Ressource: CrewAI unterstützt verschiedene LLM-Verbindungen, einschließlich lokaler Modelle (Ollama), APIs wie Azure und alle LangChain-LLM-Komponenten für anpassbare KI-Lösungen. Klicken Sie hier, um mehr über den CrewAI LLM-Support zu erfahren
Als nächstes richten wir unsere Verbindung zu Azure OpenAI ein. Azure OpenAI kann durch Ihr bevorzugtes LLM ersetzt werden.
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
)
Anschließend legen wir die Agentenrolle und das Agentenziel als Variable fest, damit im gesamten Skript darauf zugegriffen werden kann.
# Initial Setup
AGENT_ROLE = "Investment Researcher"
AGENT_GOAL = """
Research stock market trends, company news, and analyst reports to identify potential investment opportunities.
"""
Für dieses Beispiel verwenden wir die DuckDuckGo Search Langchain-Integration. Die DuckDuckGo-Suche ist eine Komponente, die es Benutzern ermöglicht, das Web mit DuckDuckGo zu durchsuchen. Sie können Ihr Suchtool mit der Such-API Ihrer Wahl implementieren – es muss nicht DuckDuckGo sein.
# 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 )
Wir werden CrewAI verwenden, um unsere Agenten und Aufgaben zu verwalten. In diesem Fall haben wir einen Agenten – einen Forscher, der die Aufgabe hat, die Daten zu analysieren und umsetzbare Erkenntnisse zu liefern.
# 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
)
Als Nächstes definieren wir unsere MongoDB-Aggregationspipeline. Diese Pipeline wird verwendet, um unsere Transaktionsdaten zu verarbeiten und die Kapitalrendite für jedes Aktiensymbol zu berechnen.
# 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 )
Hier ist eine Aufschlüsselung der Funktionen der MongoDB-Pipeline:
Transaktionen abwickeln: Zunächst wird der $unwind
-Operator verwendet, um in jedem Dokument ein Array-Feld namens „transactions“ zu entpacken. Stellen Sie sich vor, jedes Dokument enthält Informationen über mehrere Aktienkäufe und -verkäufe. Durch die Abwicklung werden diese Transaktionen in einzelne Dokumente aufgeteilt, was die Berechnung erleichtert.
Gruppierung nach Symbol: Als nächstes übernimmt der $group
Operator. Es gruppiert die abgewickelten Dokumente basierend auf dem Wert im Feld „transactions.symbol“. Dadurch werden im Wesentlichen alle Transaktionen für eine bestimmte Aktie (dargestellt durch das Symbol) in einer einzigen Gruppe zusammengefasst.
Berechnung der Kauf- und Verkaufswerte: Innerhalb jeder Symbolgruppe berechnet die Pipeline zwei entscheidende Werte:
$sum
-Akkumulator zusammen mit einer bedingten Anweisung ( $cond
). Der $cond
prüft, ob der „transaction_code“ innerhalb des „transactions“-Objekts „buy“ ist. Wenn dies der Fall ist, wandelt es das Feld „total“ (den Transaktionsbetrag) mithilfe von $toDouble
in ein Double um und addiert es zur laufenden Summe für buyValue. Wenn es sich nicht um eine Kauftransaktion handelt, trägt sie nichts (0) zur Summe bei. Dadurch wird effektiv der Gesamtbetrag berechnet, der für den Kauf von Anteilen dieses bestimmten Symbols ausgegeben wurde. Projizieren von Ergebnissen: Jetzt greift der $project
Operator ein, um das endgültige Ausgabeformat zu definieren. Der automatisch generierte Gruppierungsbezeichner ( _id
) wird verworfen, indem er auf 0 gesetzt wird. Anschließend wird das Gruppierungsfeld ( _id
das „transactions.symbol“ enthielt) in einen klareren Namen, „symbol“, umbenannt. Schließlich wird die Kapitalrendite für jedes Symbol mithilfe des $subtract
-Operators berechnet. Dadurch wird der buyValue
vom sellValue
subtrahiert, um den Gewinn oder Verlust für dieses Symbol zu ermitteln.
Sortieren nach Rückgabe: Zuletzt organisiert der $sort
-Operator die Ergebnisse. Es sortiert die Dokumente basierend auf dem Feld „returnOnInvestment“ in absteigender Reihenfolge (-1). Das bedeutet, dass Symbole mit der höchsten Kapitalrendite (am profitabelsten) in der Endausgabe zuerst erscheinen.
Schließlich beginnen wir mit der Ausführung unserer Aufgabe. Der Forscheragent nutzt die Daten aus unserer MongoDB-Aggregation sowie alle anderen ihm zur Verfügung stehenden Tools, um die Daten zu analysieren und Erkenntnisse zu liefern.
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.
Während die Kombination aus dem Aggregation Framework von MongoDB und GenAI ein leistungsstarkes Werkzeug für die Datenanalyse und -interpretation darstellt, ist es wichtig, einige potenzielle Einschränkungen zu erkennen:
Abhängigkeit von historischen Daten: Die Wertentwicklung in der Vergangenheit ist möglicherweise nicht immer eine Vorhersage zukünftiger Ergebnisse, insbesondere in unvorhersehbaren Märkten, in denen unvorhergesehene Ereignisse die Anlageergebnisse erheblich beeinflussen können.
Unsicherheit bei Prognosen: Trotz der Komplexität der Analyse wird es bei Investitionsprognosen immer ein gewisses Maß an Unsicherheit geben. Zukünftige Ergebnisse sind von Natur aus nicht erkennbar und Faktoren, die über den Rahmen historischer Daten hinausgehen, können die Ergebnisse beeinflussen.
LLM-Einschränkungen: LLMs entwickeln sich immer noch weiter und ihre Fähigkeit, Daten zu recherchieren, zu interpretieren und zu analysieren, verbessert sich kontinuierlich. Allerdings können Verzerrungen in den Trainingsdaten oder Einschränkungen in der Modellarchitektur zu ungenauen oder irreführenden Erkenntnissen führen.
Indem Sie sich dieser Einschränkungen bewusst sind und Maßnahmen zu deren Abschwächung ergreifen, können Sie einen verantwortungsvolleren und umfassenderen Ansatz bei der Anlageanalyse gewährleisten.