( imagem do blog LangChain | CrewAI: O futuro das equipes de agentes de IA)
O MongoDB Aggregation Pipeline nos fornece os dados que precisamos analisar. Quanto mais rápido você extrair insights significativos de dados brutos, melhores serão suas decisões de investimento. CrewAI, combinado com o poder do MongoDB Atlas, fornece uma abordagem única que vai além da análise básica de números para fornecer análises verdadeiramente acionáveis.
Para este exemplo, criaremos um Agente Pesquisador de Investimentos. Este agente é nosso especialista, hábil em encontrar dados valiosos usando ferramentas como motores de busca. Ele foi projetado para buscar tendências financeiras, notícias da empresa e percepções de analistas. Para saber mais sobre como criar agentes usando CrewAI clique aqui
Desbloqueando o poder da colaboração com IA: agentes, tarefas e ferramentas
Em essência, a poderosa combinação de agentes, tarefas e ferramentas da CrewAI permite:
Antes de começarmos
Para acompanhar, você precisará de:
MongoDB Atlas Cluster: Crie seu cluster gratuito e carregue o conjunto de dados de amostra. Os dados de transação no conjunto de dados analíticos de amostra oferecem um conjunto de dados realista que permite aos usuários aprimorar suas habilidades em análise, consulta e agregação de dados, especialmente no contexto de dados financeiros.
Recurso LLM: CrewAI oferece suporte a várias conexões LLM, incluindo modelos locais (Ollama), APIs como Azure e todos os componentes LangChain LLM para soluções de IA personalizáveis. Clique aqui para saber mais sobre o suporte CrewAI LLM
A seguir, configuramos nossa conexão com o Azure OpenAI. O Azure OpenAI pode ser substituído pelo seu 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
)
Em seguida, vamos definir a função do agente e a meta do agente como uma variável para que possa ser acessada em todo o 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 exemplo, usaremos a integração The DuckDuckGo Search Langchain. O DuckDuckGo Search é um componente que permite aos usuários pesquisar na web usando o DuckDuckGo. Você pode implementar sua ferramenta de pesquisa com a API de pesquisa de sua escolha - não precisa 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 gerenciar nossos agentes e tarefas. Nesse caso, temos um agente – um pesquisador encarregado de analisar os dados e fornecer insights acionáveis.
# 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 seguir, definimos nosso pipeline de agregação MongoDB. Este pipeline é usado para processar nossos dados de transação e calcular o retorno do investimento para cada símbolo de ação.
# 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 )
Aqui está um resumo do que o pipeline do MongoDB faz:
Desenrolar transações: primeiro, ele usa o operador $unwind
para descompactar um campo de array chamado “transações” dentro de cada documento. Imagine que cada documento contém informações sobre várias compras e vendas de ações. O desenrolamento separa essas transações em documentos individuais, facilitando os cálculos.
Agrupamento por símbolo: Em seguida, o operador $group
assume. Agrupa os documentos desenrolados com base no valor do campo "transactions.symbol". Basicamente, isso combina todas as transações de uma ação específica (representada pelo símbolo) em um único grupo.
Cálculo de valores de compra e venda: dentro de cada grupo de símbolos, o pipeline calcula dois valores cruciais:
$sum
junto com uma instrução condicional ( $cond
). O $cond
verifica se o "transaction_code" dentro do objeto "transactions" é "buy". Se for, ele converte o campo “total” (o valor da transação) em um dobro usando $toDouble
e o adiciona ao total corrente para buyValue. Se não for uma transação de compra, não contribui com nada (0) para a soma. Isso calcula efetivamente o valor total gasto na compra de ações desse símbolo específico. Projetando resultados: Agora, o operador $project
intervém para definir o formato de saída final. Ele descarta o identificador de agrupamento gerado automaticamente ( _id
) definindo-o como 0. Em seguida, renomeia o campo de agrupamento ( _id
que continha o "transactions.symbol") para um nome mais claro, "symbol". Finalmente, calcula o retorno do investimento para cada símbolo usando o operador $subtract
. Isso subtrai buyValue
de sellValue
para determinar o lucro ou perda desse símbolo.
Classificando por Retorno: Por último, o operador $sort
organiza os resultados. Classifica os documentos com base no campo "returnOnInvestment" em ordem decrescente (-1). Isso significa que os símbolos com maior retorno sobre o investimento (mais lucrativos) aparecerão primeiro no resultado final.
Finalmente, iniciamos a execução da nossa tarefa. O agente pesquisador utilizará os dados de nossa agregação MongoDB, bem como quaisquer outras ferramentas à sua disposição, para analisar os dados e fornecer insights.
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.
Embora a combinação do Aggregation Framework do MongoDB e do GenAI represente uma ferramenta poderosa para análise e interpretação de dados, é importante reconhecer algumas limitações potenciais:
Dependência de dados históricos: O desempenho passado nem sempre pode prever resultados futuros, especialmente em mercados imprevisíveis onde acontecimentos imprevistos podem impactar significativamente os resultados do investimento.
Incerteza nas Previsões: Apesar da sofisticação da análise, haverá sempre um grau inerente de incerteza nas previsões de investimento. Os resultados futuros são inerentemente incognoscíveis e factores que vão além do âmbito dos dados históricos podem influenciar os resultados.
Limitações do LLM: Os LLMs ainda estão evoluindo e sua capacidade de pesquisar, interpretar e analisar dados está melhorando continuamente. No entanto, distorções nos dados de treinamento ou limitações na arquitetura do modelo podem levar a insights imprecisos ou enganosos.
Ao estar ciente dessas limitações e tomar medidas para mitigá-las, você pode garantir uma abordagem mais responsável e completa à análise de investimentos.