( imagen del blog de LangChain | CrewAI: El futuro de los equipos de agentes de IA)
MongoDB Aggregation Pipeline nos brinda los datos que necesitamos analizar. Cuanto más rápido pueda extraer información significativa de los datos sin procesar, mejores serán sus decisiones de inversión. CrewAI, combinado con el poder de MongoDB Atlas, proporciona un enfoque único que va más allá del cálculo numérico básico para ofrecer análisis verdaderamente procesables.
Para este ejemplo, crearemos un Agente investigador de inversiones. Este agente es nuestro experto, experto en encontrar datos valiosos utilizando herramientas como motores de búsqueda. Está diseñado para buscar tendencias financieras, noticias de empresas y conocimientos de analistas. Para obtener más información sobre cómo crear agentes usando CrewAI, haga clic aquí
Liberando el poder de la colaboración con IA: agentes, tareas y herramientas
En esencia, la poderosa combinación de agentes, tareas y herramientas de CrewAI le permite:
Antes de comenzar
Para seguirlo, necesitarás:
MongoDB Atlas Cluster: cree su clúster gratuito y cargue el conjunto de datos de muestra. Los datos de transacciones en el conjunto de datos analíticos de muestra ofrecen un conjunto de datos realista que permite a los usuarios perfeccionar sus habilidades en análisis, consultas y agregación de datos, particularmente en el contexto de datos financieros.
Recurso LLM: CrewAI admite varias conexiones LLM, incluidos modelos locales (Ollama), API como Azure y todos los componentes LangChain LLM para soluciones de IA personalizables. Haga clic aquí para obtener más información sobre el soporte de CrewAI LLM
A continuación, configuramos nuestra conexión a Azure OpenAI. Azure OpenAI puede ser reemplazado por su LLM preferido.
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
)
Luego, establezcamos la función del agente y el objetivo del agente como una variable para que se pueda acceder a ellos durante todo el script.
# Initial Setup
AGENT_ROLE = "Investment Researcher"
AGENT_GOAL = """
Research stock market trends, company news, and analyst reports to identify potential investment opportunities.
"""
Para este ejemplo, utilizaremos la integración de DuckDuckGo Search Langchain. DuckDuckGo Search es un componente que permite a los usuarios buscar en la web utilizando DuckDuckGo. Puede implementar su herramienta de búsqueda con la API de búsqueda que prefiera; no tiene que ser 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 )
Usaremos CrewAI para administrar nuestros agentes y tareas. En este caso, tenemos un agente: un investigador cuya tarea es analizar los datos y proporcionar información útil.
# 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
)
A continuación, definimos nuestro canal de agregación de MongoDB. Este canal se utiliza para procesar nuestros datos de transacciones y calcular el retorno de la inversión para cada símbolo bursátil.
# 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 )
A continuación se muestra un desglose de lo que hace la canalización de MongoDB:
Desenrollar transacciones: primero, utiliza el operador $unwind
para descomprimir un campo de matriz llamado "transacciones" dentro de cada documento. Imagine que cada documento tiene información sobre múltiples compras y ventas de acciones. La liquidación separa estas transacciones en documentos individuales, lo que facilita los cálculos.
Agrupación por símbolo: A continuación, el operador $group
asume el control. Agrupa los documentos desenrollados según el valor del campo "transactions.symbol". Básicamente, esto combina todas las transacciones de una acción específica (representada por el símbolo) en un solo grupo.
Cálculo de valores de compra y venta: dentro de cada grupo de símbolos, el canal calcula dos valores cruciales:
$sum
junto con una declaración condicional ( $cond
). $cond
comprueba si el "código_transacción" dentro del objeto "transacciones" es "comprar". Si es así, convierte el campo "total" (el monto de la transacción) en un doble usando $toDouble
y lo suma al total acumulado de buyValue. Si no es una transacción de compra, no aporta nada (0) a la suma. Esto calcula efectivamente la cantidad total gastada en la compra de acciones de ese símbolo específico. Proyección de resultados: ahora, el operador $project
interviene para definir el formato de salida final. Descarta el identificador de agrupación generado automáticamente ( _id
) configurándolo en 0. Luego cambia el nombre del campo de agrupación ( _id
que contenía "transactions.symbol") a un nombre más claro, "symbol". Finalmente, calcula el retorno de la inversión para cada símbolo utilizando el operador $subtract
. Esto resta el buyValue
del sellValue
para determinar la ganancia o pérdida de ese símbolo.
Ordenar por retorno: por último, el operador $sort
organiza los resultados. Ordena los documentos según el campo "returnOnInvestment" en orden descendente (-1). Esto significa que los símbolos con el mayor retorno de la inversión (los más rentables) aparecerán primero en el resultado final.
Finalmente, iniciamos la ejecución de nuestra tarea. El agente investigador utilizará los datos de nuestra agregación MongoDB, así como cualquier otra herramienta a su disposición, para analizar los datos y proporcionar información.
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.
Si bien la combinación del marco de agregación de MongoDB y GenAI representa una herramienta poderosa para el análisis e interpretación de datos, es importante reconocer algunas limitaciones potenciales:
Dependencia de datos históricos: Es posible que el desempeño pasado no siempre prediga los resultados futuros, especialmente en mercados impredecibles donde eventos imprevistos pueden afectar significativamente los resultados de la inversión.
Incertidumbre en las predicciones: a pesar de la sofisticación del análisis, siempre habrá un grado inherente de incertidumbre en las predicciones de inversión. Los resultados futuros son inherentemente incognoscibles y factores más allá del alcance de los datos históricos pueden influir en los resultados.
Limitaciones de los LLM: los LLM todavía están evolucionando y su capacidad para investigar, interpretar y analizar datos mejora continuamente. Sin embargo, los sesgos en los datos de entrenamiento o las limitaciones en la arquitectura del modelo podrían generar conocimientos inexactos o engañosos.
Si es consciente de estas limitaciones y toma medidas para mitigarlas, podrá garantizar un enfoque más responsable y completo del análisis de inversiones.