Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Além dos vetores: amplie os recursos do LLM com o Aggregation Framework do MongoDB

Fabian Valle16 min read • Published Jun 20, 2024 • Updated Jun 20, 2024
IAMongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Na área de gestão de investimentos, ter dados de transações atualizados em tempo real é seu aliado mais poderoso. Uma decisão errada pode impactar negativamente todo o seu portfólio. Se você souber como aproveitar dados transacionais, poderá usá-los para descobrir insights acionáveis e tomar decisões de investimento mais estratégicas. Este artigo explorará como a estrutura de agregação do MongoDB e o GenAI trabalham juntos para transformar seu fluxo de trabalho de análise de dados.
Os grandes modelos de linguagem (LLMs) mudaram significativamente a forma como interagimos com computadores, fornecendo recursos como redigir e-mails, escrever poesia e até mesmo participar de conversas semelhantes às humanas. No entanto, quando se trata de lidar com processamento de dados complexos e cálculos matemáticos, os LLMs têm suas limitações.
Embora os LLMs se destaquem na linguagem, eles não conseguem entender e manipular números ou símbolos da mesma maneira. É aí que a estrutura de agregação do MongoDB brilha. Ele permite que você processe coleções inteiras de dados, passando-os por um pipeline de vários estágios. Dentro desses estágios, você pode realizar cálculos e transformações em coleções inteiras. Isso permite que você contorne as limitações dos LLMs, fornecendo um método confiável para análise de dados.
Neste artigo, usaremos a framework de aggregation do MongoDB e a GenAI para superar as limitações do RAG clássico. Exploraremos o conjunto de dados de amostra do MongoDB Atlas — especificamente, o banco de dadossample_analytics e a collectiontransactions. O banco de dados sample_analytics contém três collections para um aplicativo típico de serviços financeiros: clientes, contas e transações.
Para este exemplo, vamos nos concentrar nos dados de transações, que 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 negócios.
O código fonte está disponível no GitHub - mdb-agg-crewai
Antes de começarmos
Para acompanhar, você precisará de:
  1. Um recurso LLM : a CrewAI oferece suporte a várias conexões LLM , incluindo modelos locais (Ollama), APIs como o Azure e todos os componentes do LangChain LLM para soluções de AI personalizáveis. Saiba mais sobre o suporte do CrewAI LLM .
Observação: O código-fonte no exemplo usa o Azure OpenAI. Para acompanhar, você precisará de uma implantação válida do Azure OpenAI.
sample_analytics.transactions
O banco de dados sample_analytics contém três coleções (clientes, contas, transações) para um aplicativo típico de serviços financeiros. A coleção de transações contém detalhes de transações para usuários. Cada documento contém um ID de conta, uma contagem de quantas transações estão nesse conjunto, as datas de início e término das transações cobertas por este documento e uma lista de subdocumentos. Cada subdocumento representa uma única transação e as informações relacionadas para essa transação.
  • transaction_id: este é um identificador único que marca distintamente cada transação.
  • account_id: este campo estabelece uma conexão entre a transação e sua conta correspondente.
  • date: representa a data e a hora precisas em que a transação ocorreu.
  • transaction_code: indica a natureza da transação, como depósito, retirada, compra ou venda.
  • symbol: este campo denota o símbolo da ação ou compromisso envolvido na transação.
  • amount: Isso reflete o valor da transação.
  • total: captura o valor transacionado abrangente, incluindo quantidades, taxas e quaisquer encargos adicionais associados à transação.
Esquema de documento de transação

A tarefa: descobrir oportunidades ocultas

Imagine isto: você está administrando uma empresa com um aplicativo de serviços financeiros padrão. Seu objetivo? Identifique oportunidades ocultas no mercado examinando todos os dados de transações e identificando as três principais ações com base no ganho ou perda líquida. Em seguida, podemos pesquisar eventos atuais e tendências de mercado para descobrir oportunidades potenciais nas ações que historicamente apresentaram o melhor ganho líquido, de acordo com nossos dados de transações.
O ganho líquido fornece uma imagem clara da lucratividade de um investimento em um determinado período. É a diferença entre o valor total recebido com a venda de um ativo (como ações) e o valor total gasto para comprá-lo.
Existem várias razões pelas quais o ganho líquido é importante. Permite aos investidores determinar a rentabilidade dos seus investimentos (positiva ou negativa). Além disso, o ganho líquido ajuda os investidores a comparar o desempenho de diferentes investimentos, estejam eles tendo sucesso ou ficando para trás. Em terceiro lugar, o ganho líquido pode ser usado para avaliar a eficácia de uma estratégia de investimento. Os investimentos que resultam consistentemente em um ganho líquido negativo podem ser muito arriscados e podem precisar ser vendidos. E, por último, o ganho líquido pode influenciar futuras decisões de investimento e mitigar riscos – por exemplo, identificando quais ações historicamente mostraram o melhor ganho líquido.
Em um ambiente SQL tradi Também pode ser uma tarefa que consome muitos recursos, exigindo tempo e capacidade computacional significativos.
O processo pode ser mais eficiente aproveitando o poder da estrutura de agregação do MongoDB, combinado com os recursos inteligentes de tecnologias de AI , como CrewAI e LLMs. Isso não apenas simplifica o processo, mas também oferece insights mais profundos.

A solução: framework de agregação do MongoDB

O pipeline de agregação que criaremos calcula os valores totais de compra e venda de cada ação. Em seguida, ele calcula o ganho ou perda líquida subtraindo o valor total de compra do valor total de venda. Em seguida, as ações são classificadas por Ganho ou Perda Líquido em Ordem decrescente, com os Ganhos Líquidos mais Elevados no topo.
Se você é novo no MongoDB, sugerimos que você crie esse pipeline de agregação usando o construtor de agregações no Compass e o exporte para o Python. O construtor de pipeline de agregação no MongoDB Compass ajuda você a criar pipelines de agregação para processar documentos de uma coleção ou exibir e retornar resultados calculados.

Incremente a análise de capital com MongoDB e CrewAI

Visualização CrewAI
O aggregation pipeline do MongoDB nos fornece os dados que precisamos analisar. Quando você pode extrair insights significativos de dados brutos mais rapidamente, pode tomar melhores decisões de investimento. A CrewAI, combinada com o MongoDB Atlas, fornece uma abordagem exclusiva que vai além do processamento básico de números para fornecer insights aplicáveis.
Para este exemplo, criaremos um agente Pesquisador de Valores. Esse agente encontra dados valiosos usando ferramentas como mecanismos de pesquisa. Ele foi projetado para identificar tendências financeiros, notícias da empresa e insights de analistas. Saiba mais sobre como criar agentes usando a CrewAI.

Desbloqueando o poder da colaboração em AI: agentes, tarefas e ferramentas

A inteligência artificial (AI) está mudando rapidamente, transformando a forma como lidamos com o mundo orientado por dados em que existimos. O CrewAI introduz uma framework para AI participativa que habilita as equipes a fazer mais por meio de unidades de AI especializadas e fluxos de trabalho simplificados.
No centro da CrewAI estão os agentes. Estes não são os típicos assistentes de AI. Em vez disso, funcionam como membros inteligentes da equipe, cada um com uma função distinta (por exemplo, pesquisador, escritor, editor) e um objetivo bem definido . Eles podem executar tarefas, tomar decisões e comunicar-se com outros agentes.
Mas o que realmente diferencia a CrewAI é a colaboração perfeita entre esses agentes. Isso é alcançado por meio de um sistema de tarefas. As tarefas atuam como os blocos de construção dos fluxos de trabalho da CrewAI, permitindo definir uma sequência de ações que aproveitam os pontos fortes de diferentes agentes.
A CrewAI também oferece um arsenal abrangente de ferramentas que capacitam esses agentes. Essas ferramentas incluem raspagem da Web, análise de dados e geração de conteúdo. Ao equipar os agentes com as ferramentas certas, você pode garantir que eles tenham tudo o que precisam para realizar suas tarefas com eficiência.
Em essência, a poderosa combinação de agentes, tarefas e ferramentas do CrewAI permite que você:
  • Automatize tarefas repetitivas.
  • Simplifique os fluxos de trabalho.
  • Desbloqueie o verdadeiro potencial da AI.

O código

Nesta seção, examinaremos o código Python usado para realizar análises financeiras com base em dados de transações armazenados no MongoDB, usando o GenAI para análise de dados. A versão do Python usada durante o desenvolvimento foi 3.10.10.
Aqui estão os pacotes necessários para executar o código. Certifique-se de que eles estejam instalados corretamente antes de continuar.
requirements.txt
1pymongo==4.7.2
2crewai==0.22.5
3langchain==0.1.10
4langchain-community
5langchain-openai==0.0.5
6duckduckgo-search==6.1.5
Você pode instalar todos os pacotes executando pip install -r requirements.txt.

Configuração do MongoDB

Primeiro, configuramos uma conexão com o MongoDB usando o PyMongo. É aqui que os dados das nossas transações são armazenados.
Importante: embora estejamos incluindo a connection string diretamente no código para fins de demonstração, ela não é recomendada para aplicativos do mundo real. Uma abordagem mais segura é recuperar a cadeia de conexão do seu cluster MongoDB Atlas.
Veja como acessar sua string de conexão do Atlas:
  • Faça login em sua conta do MongoDB Atlas e navegue até seu cluster.
  • Clique em "Conectar" no menu de navegação à esquerda.
  • Escolha o driver que você usará (por exemplo, Python) e sua versão.
  • Você verá uma connection string fornecida. Copie esta string para uso em seu aplicativo.
Depois de ter sua connection string, você está pronto para começar.
arquivo: pipeline_analysis.py
1import os
2import pymongo
3
4MDB_URI = "mongodb+srv://<user>:<password>@cluster0.abc123.mongodb.net/"
5client = pymongo.MongoClient(MDB_URI)
6db = client["sample_analytics"]
7collection = db["transactions"]

Configuração do Azure OpenAI

Em seguida, configuramos nosso recurso Azure OpenAI LLM. O código no exemplo utiliza o Azure OpenAI. Para acompanhar, você precisará de uma implantação válida do Azure OpenAI.
arquivo: pipeline_analysis.py
1from langchain_openai import AzureChatOpenAI
2
3AZURE_OPENAI_ENDPOINT = "https://__DEMO__.openai.azure.com"
4AZURE_OPENAI_API_KEY = "__AZURE_OPENAI_API_KEY__"
5deployment_name = "gpt-4-32k" # The name of your model deployment
6default_llm = AzureChatOpenAI(
7 openai_api_version=os.environ.get("AZURE_OPENAI_VERSION", "2023-07-01-preview"),
8 azure_deployment=deployment_name,
9 azure_endpoint=AZURE_OPENAI_ENDPOINT,
10 api_key=AZURE_OPENAI_API_KEY
11)

Configuração da API de pesquisa na Web

Para este exemplo, usaremos a integração DuckDuckGo Search LangChain. O DuckDuckGo Search é um componente que permite aos usuários pesquisar na web usando o DuckDuckGo Search.
arquivo: pipeline_analysis.py
1# Web Search Setup
2from langchain.tools import tool
3from langchain_community.tools import DuckDuckGoSearchResults
4duck_duck_go = DuckDuckGoSearchResults(backend="news")
5
6# Search Tool - Web Search
7@tool
8def search_tool(query: str):
9 """
10 Perform online research on a particular stock.
11 """
12 return duck_duck_go.run(query)
O DuckDuckGo foi escolhido para este exemplo porque:
  • Não requer chave de API.
  • É fácil de usar.
  • Fornece snippets.
Ferramenta de pesquisa DuckDuckGo

Configuração da CrewAI

Usaremos a CrewAI para gerenciar nossos agentes e tarefas. Nesse caso, temos um agente - um pesquisador que tem a tarefa de analisar os dados e fornecer insights. ​​No CrewAI, as tarefas são as etapas individuais que compõem um fluxo de trabalho maior.

Agentes e tarefas: trabalhando junto como uma equipe

No CrewAI, uma equipe representa um grupo de agentes que trabalham juntos para realizar um conjunto de tarefas. Embora nosso exemplo seja uma equipe de um único agente por questões de simplicidade, você pode criar equipes de vários agentes para fluxos de trabalho mais complexos.
  • Tarefas: essas são as etapas individuais que compõem seu fluxo de trabalho de pesquisa de investimento. Cada tarefa representa uma ação específica que o agente precisa realizar para atingir a meta geral.
  • Agentes: Pense neles como os trabalhadores que executam as tarefas. Vamos ter um agente Pesquisador de Valores dedicado, habilitado com as ferramentas e o conhecimento necessários para concluir as tarefas atribuídas.

Ajustando seu Pesquisador de Investimentos

A CrewAI permite personalizar o comportamento do seu agente por meio de vários parâmetros:
  • Papel e objetivo (AGENT_ROLE e AGENT_GOAL): definem o propósito do agente. Aqui, definimos o papel de "Pesquisador de Investimentos" com o objetivo de "identificar oportunidades de investimento". Isso orienta o agente em direção a fontes de dados e métodos de análise relevantes (por exemplo, tendências de mercado, notícias da empresa, relatórios de analistas).
  • História de fundo: crie uma história de fundo como "Pesquisador especialista em ações com décadas de experiência" para adicionar contexto e potencialmente influenciar o estilo de comunicação e a interpretação das informações do agente.
  • Ferramentas: Equipe seu agente com ferramentas (funções ou classes) para concluir suas tarefas. Isso pode incluir uma ferramenta de busca para coletar informações ou uma ferramenta de análise para processar dados.
  • Modelo de linguagem grande (LLM): esse é o mecanismo de AI que impulsiona as tarefas do agente, como processamento e geração de texto. A escolha de um LLM diferente pode impactar significativamente a produção do agente com base nos pontos fortes e fracos subjacentes do LLM.
  • Verbose (verboso): A configuração verbose=True fornece um registro mais detalhado do processo de pensamento do agente para fins de depuração.
Ajustando esses parâmetros, você pode adaptar seu agente de pesquisa de investimentos para se concentrar em setores específicos do mercado, priorizar fontes de informação e até mesmo influenciar sua tolerância a riscos ou estilo de investimento (por meio do backstory).
arquivo: pipeline_analysis.py
1# Research Agent Setup
2from crewai import Crew, Process, Task, Agent
3AGENT_ROLE = "Investment Researcher"
4AGENT_GOAL = """
5 Research stock market trends, company news, and analyst reports to identify potential investment opportunities.
6"""
7researcher = Agent(
8 role=AGENT_ROLE,
9 goal=AGENT_GOAL,
10 verbose=True,
11 llm=default_llm,
12 backstory='Expert stock researcher with decades of experience.',
13 tools=[search_tool]
14)
15
16task1 = Task(
17 description="""
18Using the following information:
19
20[VERIFIED DATA]
21{agg_data}
22
23*note*
24The data represents the net gain or loss of each stock symbol for each transaction type (buy/sell).
25Net gain or loss is a crucial metric used to gauge the profitability or efficiency of an investment.
26It's computed by subtracting the total buy value from the total sell value for each stock.
27[END VERIFIED DATA]
28
29[TASK]
30- Generate a detailed financial report of the VERIFIED DATA.
31- Research current events and trends, and provide actionable insights and recommendations.
32
33
34[report criteria]
35 - Use all available information to prepare this final financial report
36 - Include a TLDR summary
37 - Include 'Actionable Insights'
38 - Include 'Strategic Recommendations'
39 - Include a 'Other Observations' section
40 - Include a 'Conclusion' section
41 - IMPORTANT! You are a friendly and helpful financial expert. Always provide the best possible answer using the available information.
42[end report criteria]
43 """,
44 agent=researcher,
45 expected_output='concise markdown financial summary of the verified data and list of key points and insights from researching current events',
46 tools=[search_tool],
47)
48# Crew Creation
49tech_crew = Crew(
50 agents=[researcher],
51 tasks=[task1],
52 process=Process.sequential
53)

Pipeline de agregação do MongoDB.

Em seguida, definimos nosso pipeline de agregação do MongoDB. Esse pipeline é usado para processar nossos dados de transação e calcular o ganho líquido para cada símbolo de ação.
arquivo: pipeline_analysis.py
1# MongoDB Aggregation Pipeline
2pipeline = [
3 {
4 "$unwind": "$transactions" # Deconstruct the transactions array into separate documents
5 },
6 {
7 "$group": { # Group documents by stock symbol
8 "_id": "$transactions.symbol", # Use symbol as the grouping key
9 "buyValue": { # Calculate total buy value
10 "$sum": {
11 "$cond": [ # Conditional sum based on transaction type
12 { "$eq": ["$transactions.transaction_code", "buy"] }, # Check for "buy" transactions
13 { "$toDouble": "$transactions.total" }, # Convert total to double for sum
14 0 # Default value for non-buy transactions
15 ]
16 }
17 },
18 "sellValue": { # Calculate total sell value (similar to buyValue)
19 "$sum": {
20 "$cond": [
21 { "$eq": ["$transactions.transaction_code", "sell"] },
22 { "$toDouble": "$transactions.total" },
23 0
24 ]
25 }
26 }
27 }
28 },
29 {
30 "$project": { # Project desired fields (renaming and calculating net gain)
31 "_id": 0, # Exclude original _id field
32 "symbol": "$_id", # Rename _id to symbol for clarity
33 "netGain": { "$subtract": ["$sellValue", "$buyValue"] } # Calculate net gain
34 }
35 },
36 {
37 "$sort": { "netGain": -1 } # Sort results by net gain (descending)
38 },
39 {"$limit": 3} # Limit results to top 3 stocks
40]
41
42
43results = list(collection.aggregate(pipeline))
44client.close()
45
46print("MongoDB Aggregation Pipeline Results:")
47print(results)
Aqui está um detalhamento do que o pipeline MongoDB faz:
  1. Desfazendo transações: Cada documento contém informações sobre várias compras e vendas de ações. O pipeline usa o operador$unwindpara desempacotar um campo de matriz chamado "transactions" em cada documento. O desempacotamento separa essas transações em documentos individuais, simplificando os cálculos subsequentes.
  2. Agrupamento por símbolo: em seguida, o operador$group agrupa os documentos desenrolados com base no valor no campo "transactions.symbol". Isso essencialmente combina todas as transações para uma ação específica (representada pelo símbolo) em um único grupo.
  3. Cálculo de valores de compra e venda: Dentro de cada grupo de símbolos, o pipeline calcula dois valores cruciais:
    • BuyValue: Isso usa o $sum acumulador junto com uma declaração condicional ($cond). O $cond verifica se o " transaction_code " no objeto " transactions " é " buy. " Se for, ele converte o campo " total " (o valor da transação) em duplo usando $toDouble e o adiciona ao total atual de BuyValue. Se não for uma transação de compra, ela 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 .
    • sellValue: Semelhante a buyValue, calcula o valor total recebido pela venda de ações do mesmo símbolo. Ele usa a mesma lógica, mas verifica se há "transaction_code" igual a "vender" e soma esses valores "totais".
  4. Projetando resultados: Agora, o operador$project define o formato de saída final. Ele descarta o identificador de agrupamento gerado automaticamente (_id) configurando-o como 0. Em seguida, ele renomeia o campo de agrupamento (_id que continha "transactions.symbol") para um nome mais claro, "symbol". Finalmente, calcula o ganho ou perda líquida para cada símbolo usando o operador$subtract. Isso subtrai buyValue de sellValue para determinar o ganho ou perda líquida desse símbolo.
  5. Classificação por ganho líquido: O operador$sortorganiza os resultados. Ele classifica os documentos com base no campo "netGain" em ordem decrescente (-1) para que os símbolos com o maior ganho líquido (mais lucrativos) apareçam primeiro na saída final.
  6. Limitando resultados:por último, o operador$limit limita o número de documentos passados para o próximo estágio do pipeline. Nesse caso, ele é definido como 3, o que significa que somente os três principais documentos (ações com o maior ganho neto) serão incluídos no resultado final.

Verificação prévia: garantir uma execução sem erros

Antes de iniciarmos nosso fluxo de trabalho de agente automatizado, precisamos garantir que o código executado até o momento esteja livre de erros.
A saída esperada deve se assemelhar ao seguinte:
1MongoDB Aggregation Pipeline Results:
2[{'netGain': 72769230.71428967, 'symbol': 'amzn'},
3 {'netGain': 39912931.04990542, 'symbol': 'sap'},
4 {'netGain': 25738882.292086124, 'symbol': 'aapl'}]

Iniciando a execução da tarefa do agente

Agora podemos iniciar nossa execução de tarefa. O agente pesquisador utilizará os dados derivados de nossa agregação do MongoDB, juntamente com quaisquer outras ferramentas à sua disposição, para analisar os dados e oferecer insights.
arquivo: pipeline_analysis.py
1tech_crew.kickoff(inputs={'agg_data': str(results)})
Captura de tela dos resultados do pipeline de agregação do MongoDB

Código-fonte completo

arquivo: pipeline_analysis.py
1import os
2import pymongo
3import pprint
4
5# MongoDB Setup
6MDB_URI = "mongodb+srv://<user>:<password>@cluster0.abc123.mongodb.net/"
7client = pymongo.MongoClient(MDB_URI)
8db = client["sample_analytics"]
9collection = db["transactions"]
10
11# Azure OpenAI Setup
12from langchain_openai import AzureChatOpenAI
13AZURE_OPENAI_ENDPOINT = "https://__DEMO__.openai.azure.com"
14AZURE_OPENAI_API_KEY = "__AZURE_OPENAI_API_KEY__"
15deployment_name = "gpt-4-32k" # The name of your model deployment
16default_llm = AzureChatOpenAI(
17 openai_api_version=os.environ.get("AZURE_OPENAI_VERSION", "2023-07-01-preview"),
18 azure_deployment=deployment_name,
19 azure_endpoint=AZURE_OPENAI_ENDPOINT,
20 api_key=AZURE_OPENAI_API_KEY
21)
22
23# Web Search Setup
24from langchain.tools import tool
25from langchain_community.tools import DuckDuckGoSearchResults
26duck_duck_go = DuckDuckGoSearchResults(backend="news",max_results=10)
27
28# Search Tool - Web Search
29@tool
30def search_tool(query: str):
31 """
32 Perform online research on a particular stock.
33 Will return search results along with snippets of each result.
34 """
35 print("\n\nSearching DuckDuckGo for:", query)
36 search_results = duck_duck_go.run(query)
37 search_results_str = "[recent news for: " + query + "]\n" + str(search_results)
38 return search_results_str
39
40
41# Research Agent Setup
42from crewai import Crew, Process, Task, Agent
43AGENT_ROLE = "Investment Researcher"
44AGENT_GOAL = """
45 Research stock market trends, company news, and analyst reports to identify potential investment opportunities.
46"""
47researcher = Agent(
48 role=AGENT_ROLE,
49 goal=AGENT_GOAL,
50 verbose=True,
51 llm=default_llm,
52 backstory='Expert stock researcher with decades of experience.',
53 tools=[search_tool]
54)
55
56task1 = Task(
57 description="""
58Using the following information:
59
60[VERIFIED DATA]
61{agg_data}
62
63*note*
64The data represents the net gain or loss of each stock symbol for each transaction type (buy/sell).
65Net gain or loss is a crucial metric used to gauge the profitability or efficiency of an investment.
66It's computed by subtracting the total buy value from the total sell value for each stock.
67[END VERIFIED DATA]
68
69[TASK]
70- Generate a detailed financial report of the VERIFIED DATA.
71- Research current events and trends, and provide actionable insights and recommendations.
72
73
74[report criteria]
75 - Use all available information to prepare this final financial report
76 - Include a TLDR summary
77 - Include 'Actionable Insights'
78 - Include 'Strategic Recommendations'
79 - Include a 'Other Observations' section
80 - Include a 'Conclusion' section
81 - IMPORTANT! You are a friendly and helpful financial expert. Always provide the best possible answer using the available information.
82[end report criteria]
83 """,
84 agent=researcher,
85 expected_output='concise markdown financial summary of the verified data and list of key points and insights from researching current events',
86 tools=[search_tool],
87)
88# Crew Creation
89tech_crew = Crew(
90 agents=[researcher],
91 tasks=[task1],
92 process=Process.sequential
93)
94
95# MongoDB Aggregation Pipeline
96pipeline = [
97 {
98 "$unwind": "$transactions" # Deconstruct the transactions array into separate documents
99 },
100 {
101 "$group": { # Group documents by stock symbol
102 "_id": "$transactions.symbol", # Use symbol as the grouping key
103 "buyValue": { # Calculate total buy value
104 "$sum": {
105 "$cond": [ # Conditional sum based on transaction type
106 { "$eq": ["$transactions.transaction_code", "buy"] }, # Check for "buy" transactions
107 { "$toDouble": "$transactions.total" }, # Convert total to double for sum
108 0 # Default value for non-buy transactions
109 ]
110 }
111 },
112 "sellValue": { # Calculate total sell value (similar to buyValue)
113 "$sum": {
114 "$cond": [
115 { "$eq": ["$transactions.transaction_code", "sell"] },
116 { "$toDouble": "$transactions.total" },
117 0
118 ]
119 }
120 }
121 }
122 },
123 {
124 "$project": { # Project desired fields (renaming and calculating net gain)
125 "_id": 0, # Exclude original _id field
126 "symbol": "$_id", # Rename _id to symbol for clarity
127 "netGain": { "$subtract": ["$sellValue", "$buyValue"] } # Calculate net gain
128 }
129 },
130 {
131 "$sort": { "netGain": -1 } # Sort results by net gain (descending)
132 },
133 {"$limit": 3} # Limit results to top 3 stocks
134]
135results = list(collection.aggregate(pipeline))
136client.close()
137
138# Print MongoDB Aggregation Pipeline Results
139print("MongoDB Aggregation Pipeline Results:")
140
141pprint.pprint(results) #pprint is used to to “pretty-print” arbitrary Python data structures
142
143# Start the task execution
144tech_crew.kickoff(inputs={'agg_data': str(results)})

Saída de exemplo:

1Thought:
2The recent news for Apple indicates that the company's stock has reached a $3 trillion valuation, largely due to the hype surrounding the introduction of AI to iPhones. This could be a significant catalyst for Apple's future growth. Now, I have enough information to generate a detailed financial report of the verified data, including a TLDR summary, actionable insights, strategic recommendations, other observations, and a conclusion.
3
4Final Answer:
5
6**Financial Report**
7
8**TLDR Summary**
9
10Based on the verified data, the net gains for the three stocks are as follows:
11
121. Amazon (AMZN) - $72,769,230.71
132. SAP - $39,912,931.04
143. Apple (AAPL) - $25,738,882.29
15
16Amazon has the highest net gain, followed by SAP and Apple.
17
18**Actionable Insights**
19
20- **Amazon (AMZN):** The company's stock is seen as a good buy due to its attractive valuation and significant dominance in the e-commerce market.
21- **SAP:** The company is making a significant acquisition of WalkMe Ltd., which could potentially boost its value and market position.
22- **Apple (AAPL):** The company's stock has reached a $3 trillion valuation, largely due to the hype surrounding the introduction of AI to iPhones. This could be a significant catalyst for Apple's future growth.
23
24**Strategic Recommendations**
25
26- **Amazon (AMZN):** Given its dominant position in e-commerce and attractive valuation, it might be a good idea to consider increasing investments in Amazon.
27- **SAP:** Considering the potential value boost from the recent acquisition, investors might want to keep a close watch on SAP's performance and consider it for their portfolio.
28- **Apple (AAPL):** With the hype around the introduction of AI to iPhones, Apple's stock could see significant growth. It might be a good time to invest or increase existing investments.
29
30**Other Observations**
31
32The companies have seen fluctuations in their stock prices but generally perform well. The current trends and developments indicate potential for further growth.
33
34**Conclusion**
35
36Given the net gains and recent developments, Amazon, SAP, and Apple seem to be promising investments. However, as with any investment decision, it's important to consider individual financial goals, risk tolerance, and market conditions. It's always recommended to conduct further research or consult with a financial advisor before making investment decisions.
37
38This report provides a high-level overview of the current events and trends impacting these stocks, but the rapidly changing market environment necessitates regular monitoring and analysis of investment portfolios.
39
40> Finished chain.

Limitações e considerações

A estrutura de agregação do MongoDB e o GenAI são ferramentas poderosas para analisar dados, mas devemos reconhecer algumas limitações em potencial.
Primeiro, há uma dependência maior de dados históricos. O desempenho passado de um investimento não é necessariamente indicativo de resultados futuros. Este é especialmente o caso em mercado imprevisível.
Em segundo lugar, há uma dependência de trechos de resultados de pesquisa. Os trechos fornecidos pelo DuckDuckGo nem sempre fornecem informações suficientes. Talvez você queira considerar a raspagem do URL do resultado da pesquisa usando algo como o Firecrawl, que pode rastrear e converter qualquer site em marcação limpa ou dados estruturados.
Em seguida, sempre haverá dúvidas sobre as projeções, por mais habilidosas que essas ferramentas possam ser.
E, finalmente, devemos considerar que os LLMs têm suas próprias limitações. Eles estão sempre desenvolvendo e melhorando continuamente. No entanto, vieses nos dados de treinamento ou limitações na arquitetura do modelo podem levar a insights imprecisos ou enganosos.
É importante estar ciente dessas limitações para garantir uma abordagem mais responsável e completa para a análise de investimentos.

Conclusão

Neste artigo, exploramos como a estrutura de agregação do MongoDB, os grandes modelos de linguagem e o CrewAI podem ser aproveitados para transformar a análise de investimentos. A chave para tomar decisões de investimento mais inteligentes é aproveitar o poder dos dados de suas transações. A estrutura de agregação do MongoDB fornece as ferramentas para calcular com eficiência métricas essenciais, como ganho net, diretamente na plataforma de dados, sem nenhum código adicional necessário na camada de aplicativos.
Quando combinada com a capacidade da CrewAI de automatizar fluxos de trabalho de pesquisa, você obtém uma compreensão mais profunda do mercado, identifica novas oportunidades, toma decisões mais inteligentes e impulsiona o sucesso do seu investimento.

O futuro: análise de investimento baseada em IA

O futuro da análise de investimentos pertence àqueles que adotam dados e AI. Ao combinar a robusta plataforma de dados do MongoDB com os recursos de geração de insights de ferramentas de AI como o CrewAI, você obtém a capacidade de:
  • Analise tendências mais rapidamente do que aquelas que dependem de métodos tradicionais.
  • Identifique padrões benéficos que outros perdem.
  • Tome decisões informadas com base em dados brutos e insights contextuais.
  • Automatize a análise entediante, dando a você mais tempo para o planejamento estratégico.
Não apenas analise o mercado - molde-o. Explore o MongoDB e o AI hoje mesmo e transforme seu processo de tomada de decisão de capital.
O código fonte está disponível em Github - mdb-agg-crewai.
Alguma dúvida? Comentários? Junte-se a nós na Comunidade de desenvolvedores MongoDB para continuar a conversa.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Série temporal MongoDB com C++


Sep 17, 2024 | 6 min read
Tutorial

Assine o MongoDB Change Streams via WebSockets


Sep 23, 2022 | 3 min read
Início rápido

Tutorial de fluxos de alterações e triggers com o Node.js


Aug 24, 2023 | 17 min read
Tutorial

Aproveite o Atlas Vector Search com o HashiCorp Terraform: capacitando a pesquisa semântica em aplicativos modernos


May 02, 2024 | 4 min read
Sumário