( изображение из блога LangChain | CrewAI: Будущее команд ИИ-агентов)
Конвейер агрегации MongoDB предоставляет нам данные, которые необходимо проанализировать. Чем быстрее вы сможете извлечь значимую информацию из необработанных данных, тем точнее будут ваши инвестиционные решения. CrewAI в сочетании с мощью MongoDB Atlas обеспечивает уникальный подход, который выходит за рамки простого вычисления чисел и обеспечивает действительно действенный анализ.
В этом примере мы создадим агента по исследованию инвестиций. Этот агент — наш эксперт, обладающий навыками поиска ценных данных с помощью таких инструментов, как поисковые системы. Он предназначен для отслеживания финансовых тенденций, новостей компаний и аналитических идей. Чтобы узнать больше о создании агентов с помощью CrewAI, нажмите здесь.
Раскрытие возможностей совместной работы с использованием ИИ: агенты, задачи и инструменты
По сути, мощное сочетание агентов, задач и инструментов CrewAI позволяет вам:
Прежде чем мы начнем
Чтобы следовать дальше, вам понадобится:
Кластер MongoDB Atlas: создайте бесплатный кластер и загрузите образец набора данных. Данные о транзакциях в образце набора аналитических данных представляют собой реалистичный набор данных, который позволяет пользователям оттачивать свои навыки анализа, выполнения запросов и агрегирования данных, особенно в контексте финансовых данных.
Ресурс LLM: CrewAI поддерживает различные соединения LLM, включая локальные модели (Ollama), API, такие как Azure, и все компоненты LangChain LLM для настраиваемых решений искусственного интеллекта. Нажмите здесь, чтобы узнать больше о поддержке CrewAI LLM
Далее мы настраиваем подключение к Azure OpenAI. Azure OpenAI можно заменить предпочитаемым вами LLM.
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
)
Затем давайте установим роль агента и цель агента в качестве переменной, чтобы к ней можно было обращаться по всему сценарию.
# Initial Setup
AGENT_ROLE = "Investment Researcher"
AGENT_GOAL = """
Research stock market trends, company news, and analyst reports to identify potential investment opportunities.
"""
В этом примере мы будем использовать интеграцию с Langchain для поиска DuckDuckGo. DuckDuckGo Search — это компонент, который позволяет пользователям осуществлять поиск в Интернете с помощью DuckDuckGo. Вы можете реализовать свой инструмент поиска с помощью выбранного вами API поиска — это не обязательно должен быть 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 )
Мы будем использовать CrewAI для управления нашими агентами и задачами. В этом случае у нас есть один агент — исследователь, которому поручено проанализировать данные и предоставить действенную информацию.
# 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
)
Далее мы определяем наш конвейер агрегации MongoDB. Этот конвейер используется для обработки данных о наших транзакциях и расчета рентабельности инвестиций для каждого символа акций.
# 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 )
Вот разбивка того, что делает конвейер MongoDB:
Раскручивание транзакций: во-первых, он использует оператор $unwind
для распаковки поля массива с именем «транзакции» в каждом документе. Представьте, что каждый документ содержит информацию о нескольких покупках и продажах акций. При развертывании эти транзакции разделяются на отдельные документы, что упрощает расчеты.
Группировка по символу. Далее вступает в силу оператор $group
. Он группирует отмененные документы на основе значения в поле «transactions.symbol». По сути, это объединяет все транзакции по конкретной акции (представленной символом) в одну группу.
Расчет значений покупки и продажи. Внутри каждой группы символов конвейер вычисляет два важных значения:
$sum
вместе с условным оператором ( $cond
). $cond
проверяет, является ли «transaction_code» в объекте «transactions» «купить». Если это так, он преобразует поле «total» (сумма транзакции) в двойное с помощью $toDouble
и добавляет его к промежуточной сумме для buyValue. Если это не транзакция покупки, она ничего не добавляет (0) к сумме. Это эффективно подсчитывает общую сумму, потраченную на покупку акций этого конкретного символа. Проецирование результатов. Теперь оператор $project
определяет окончательный выходной формат. Он отбрасывает автоматически сгенерированный идентификатор группировки ( _id
), устанавливая для него значение 0. Затем он переименовывает поле группировки ( _id
, которое содержало «transactions.symbol») на более понятное имя «symbol». Наконец, он рассчитывает рентабельность инвестиций для каждого символа с помощью оператора $subtract
. При этом buyValue
вычитается из sellValue
чтобы определить прибыль или убыток для этого символа.
Сортировка по возврату. Наконец, оператор $sort
упорядочивает результаты. Он сортирует документы на основе поля returnOnInvestment в порядке убывания (-1). Это означает, что символы с самой высокой отдачей от инвестиций (наиболее прибыльные) будут появляться в конечном выводе первыми.
Наконец, мы начинаем выполнение нашей задачи. Агент-исследователь будет использовать данные из нашей агрегации MongoDB, а также любые другие инструменты, имеющиеся в его распоряжении, для анализа данных и предоставления информации.
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.
Хотя комбинация Aggregation Framework MongoDB и GenAI представляет собой мощный инструмент для анализа и интерпретации данных, важно учитывать несколько потенциальных ограничений:
Зависимость от исторических данных. Прошлые результаты не всегда могут предсказать будущие результаты, особенно на непредсказуемых рынках, где непредвиденные события могут существенно повлиять на результаты инвестиций.
Неопределенность в прогнозах. Несмотря на сложность анализа, инвестиционным прогнозам всегда будет присуща определенная степень неопределенности. Будущие результаты по своей сути неизвестны, и факторы, выходящие за рамки исторических данных, могут повлиять на результаты.
Ограничения LLM: LLM все еще развивается, и их способность исследовать, интерпретировать и анализировать данные постоянно улучшается. Однако неточности в обучающих данных или ограничения в архитектуре модели могут привести к неточным или вводящим в заблуждение выводам.
Зная об этих ограничениях и принимая меры по их смягчению, вы можете обеспечить более ответственный и всесторонний подход к инвестиционному анализу.