(画像は LangChain ブログから | CrewAI: AI エージェント チームの未来)
MongoDB 集約パイプラインは、分析する必要があるデータを提供します。生データから有意義な洞察を迅速に抽出できるほど、投資に関する意思決定がより適切になります。 CrewAI は、MongoDB Atlas の機能と組み合わせることで、基本的な数値計算を超えた独自のアプローチを提供し、真に実用的な分析を実現します。
この例では、Investment Researcher Agent を作成します。このエージェントは当社の専門家であり、検索エンジンなどのツールを使用して貴重なデータを見つけることに熟練しています。財務トレンド、企業ニュース、アナリストの洞察を把握するように設計されています。 CrewAI を使用したエージェントの作成の詳細については、ここをクリックしてください
AI コラボレーションの力を解き放つ: エージェント、タスク、ツール
基本的に、CrewAI のエージェント、タスク、ツールの強力な組み合わせにより、次のことが可能になります。
始める前に
手順を進めるには、次のものが必要です。
MongoDB Atlas Cluster:無料のクラスターを作成し、サンプル データセットをロードします。サンプル分析データセットのトランザクション データは、特に財務データのコンテキストにおいて、ユーザーがデータ分析、クエリ、集計のスキルを磨くことができる現実的なデータセットを提供します。
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 Search Langchain Integration を使用します。 DuckDuckGo Search は、ユーザーが DuckDuckGo を使用して Web を検索できるようにするコンポーネントです。選択した検索 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 を使用してエージェントとタスクを管理します。この場合、エージェントは 1 人です。つまり、データを分析して実用的な洞察を提供する任務を負った研究者です。
# 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
演算子を使用して、各ドキュメント内の「transactions」という名前の配列フィールドをアンパックします。各文書に複数の株式の売買に関する情報が含まれていると想像してください。アンワインドすると、これらのトランザクションが個別のドキュメントに分割され、計算が容易になります。
シンボルによるグループ化:次に、 $group
演算子が引き継ぎます。 「transactions.symbol」フィールドの値に基づいて、巻き戻されたドキュメントをグループ化します。これは基本的に、特定の株式 (シンボルで表される) のすべての取引を 1 つのグループに結合します。
買い値と売り値の計算:各シンボル グループ内で、パイプラインは 2 つの重要な値を計算します。
$cond
) とともに$sum
アキュムレーターを使用します。 $cond
、「transactions」オブジェクト内の「transaction_code」が「buy」であるかどうかをチェックします。そうであれば、 $toDouble
使用して「合計」フィールド (取引金額) を double に変換し、それを buyValue の現在合計に追加します。購入トランザクションではない場合、合計には何も寄与しません (0)。これにより、その特定のシンボルの株式の購入に費やされる合計金額が効果的に計算されます。結果の投影:次に、 $project
オペレーターが最終的な出力形式を定義します。自動的に生成されたグループ化識別子 ( _id
) を 0 に設定して破棄します。次に、グループ化フィールド (「transactions.symbol」を保持する_id
) の名前を、より明確な名前「symbol」に変更します。最後に、 $subtract
演算子を使用して各シンボルの投資収益率を計算します。これにより、 sellValue
からbuyValue
が減算され、そのシンボルの損益が決定されます。
Return による並べ替え:最後に、 $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 の集約フレームワークと GenAI の組み合わせは、データ分析と解釈のための強力なツールとなりますが、潜在的な制限がいくつかあることを認識することが重要です。
過去のデータへの依存:特に予期せぬ出来事が投資結果に大きな影響を与える可能性がある予測不可能な市場では、過去のパフォーマンスが必ずしも将来の結果を予測するとは限りません。
予測の不確実性:分析が洗練されているにもかかわらず、投資予測には常にある程度の不確実性が内在します。将来の結果は本質的に不可知であり、過去のデータの範囲を超えた要因が結果に影響を与える可能性があります。
LLM の制限: LLM は依然として進化しており、データを調査、解釈、分析する能力は継続的に向上しています。ただし、トレーニング データの偏りやモデルのアーキテクチャの制限により、不正確な洞察や誤解を招く洞察が生じる可能性があります。
これらの制限を認識し、それらを軽減するための措置を講じることにより、投資分析に対するより責任ある包括的なアプローチを確保できます。