( 이미지 출처: LangChain 블로그 | CrewAI: AI 에이전트 팀의 미래)
MongoDB Aggregation Pipeline은 분석에 필요한 데이터를 제공합니다. 원시 데이터에서 의미 있는 통찰력을 더 빨리 추출할수록 더 나은 투자 결정을 내릴 수 있습니다. MongoDB Atlas의 강력한 기능과 결합된 CrewAI는 기본적인 숫자 처리를 뛰어넘어 진정으로 실행 가능한 분석을 제공하는 고유한 접근 방식을 제공합니다.
이 예에서는 투자 연구원 에이전트를 생성하겠습니다. 이 에이전트는 검색 엔진과 같은 도구를 사용하여 귀중한 데이터를 찾는 데 능숙한 당사의 전문가입니다. 금융 동향, 회사 뉴스, 분석가의 통찰력을 찾아볼 수 있도록 설계되었습니다. CrewAI를 사용하여 에이전트를 만드는 방법에 대해 자세히 알아보려면 여기를 클릭하세요.
AI 협업의 힘 활용: 에이전트, 작업 및 도구
본질적으로 CrewAI의 강력한 에이전트, 작업 및 도구 조합을 통해 다음을 수행할 수 있습니다.
시작하기 전에
따라가려면 다음이 필요합니다.
MongoDB Atlas 클러스터: 무료 클러스터를 생성하고 샘플 데이터 세트를 로드합니다. 샘플 분석 데이터 세트의 거래 데이터는 사용자가 특히 금융 데이터의 맥락에서 데이터 분석, 쿼리 및 집계 기술을 연마할 수 있는 현실적인 데이터 세트를 제공합니다.
LLM 리소스: CrewAI는 로컬 모델(Ollama), Azure와 같은 API, 맞춤형 AI 솔루션을 위한 모든 LangChain LLM 구성 요소를 포함한 다양한 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.
"""
이 예에서는 DuckDuckGo 검색 Langchain 통합을 사용합니다. 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 파이프라인의 기능은 다음과 같습니다.
Unwinding Transactions: 먼저 $unwind
연산자를 사용하여 각 문서 내에서 "transactions"라는 배열 필드의 압축을 풉니다. 각 문서에 여러 주식 구매 및 판매에 대한 정보가 있다고 상상해 보십시오. 해제는 이러한 거래를 개별 문서로 분리하여 계산을 더 쉽게 만듭니다.
기호별 그룹화: 다음으로 $group
연산자가 대신합니다. "transactions.symbol" 필드의 값을 기준으로 해제된 문서를 그룹화합니다. 이는 본질적으로 특정 주식(기호로 표시됨)에 대한 모든 거래를 단일 그룹으로 결합합니다.
매수 및 매도 가치 계산: 각 기호 그룹 내에서 파이프라인은 두 가지 중요한 값을 계산합니다.
$cond
)과 함께 $sum
누산기를 사용합니다. $cond
"transactions" 개체 내의 "transaction_code"가 "buy"인지 확인합니다. 그렇다면 $toDouble
사용하여 "total" 필드(거래 금액)를 double로 변환하고 이를 buyValue의 누계에 추가합니다. 구매 거래가 아닌 경우 합계에 아무런 기여도(0)가 없습니다. 이는 해당 특정 기호의 주식을 구매하는 데 소비된 총 금액을 효과적으로 계산합니다. 결과 예측: 이제 $project
연산자가 개입하여 최종 출력 형식을 정의합니다. 자동으로 생성된 그룹화 식별자( _id
)를 0으로 설정하여 삭제합니다. 그런 다음 그룹화 필드("transactions.symbol"을 보유한 _id
)의 이름을 더 명확한 이름인 "symbol"로 바꿉니다. 마지막으로 $subtract
연산자를 사용하여 각 기호에 대한 투자 수익을 계산합니다. sellValue
에서 buyValue
빼면 해당 기호의 손익이 결정됩니다.
반환 기준 정렬: 마지막으로 $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.
MongoDB의 Aggregation Framework와 GenAI의 결합은 데이터 분석 및 해석을 위한 강력한 도구를 나타내지만 몇 가지 잠재적인 제한 사항을 인식하는 것이 중요합니다.
과거 데이터에 대한 의존성: 과거 실적이 미래 결과를 항상 예측할 수는 없습니다. 특히 예상치 못한 사건이 투자 결과에 큰 영향을 미칠 수 있는 예측할 수 없는 시장에서는 더욱 그렇습니다.
예측의 불확실성: 분석의 정교함에도 불구하고 투자 예측에는 항상 내재적인 불확실성이 존재합니다. 미래의 결과는 본질적으로 알 수 없으며, 과거 데이터 범위를 넘어서는 요인이 결과에 영향을 미칠 수 있습니다.
LLM 제한 사항: LLM은 계속 진화하고 있으며 데이터 연구, 해석 및 분석 능력은 지속적으로 향상되고 있습니다. 그러나 훈련 데이터의 편향이나 모델 아키텍처의 제한으로 인해 부정확하거나 오해의 소지가 있는 통찰력이 발생할 수 있습니다.
이러한 제한 사항을 인식하고 이를 완화하기 위한 조치를 취함으로써 투자 분석에 대한 보다 책임감 있고 균형 잡힌 접근 방식을 보장할 수 있습니다.