( gambar dari Blog LangChain | CrewAI: Masa Depan Tim Agen AI)
Pipa Agregasi MongoDB memberi kita data yang perlu kita analisis. Semakin cepat Anda mengekstrak wawasan bermakna dari data mentah, semakin baik keputusan investasi Anda. CrewAI, dikombinasikan dengan kekuatan MongoDB Atlas, memberikan pendekatan unik yang melampaui penghitungan angka dasar untuk menghasilkan analisis yang benar-benar dapat ditindaklanjuti.
Untuk contoh ini, kita akan membuat Agen Peneliti Investasi. Agen ini adalah ahli kami, ahli dalam menemukan data berharga menggunakan alat seperti mesin pencari. Ini dirancang untuk menelusuri tren keuangan, berita perusahaan, dan wawasan analis. Untuk mempelajari lebih lanjut tentang membuat agen menggunakan CrewAI klik di sini
Membuka Kekuatan Kolaborasi AI: Agen, Tugas, dan Alat
Intinya, kombinasi agen, tugas, dan alat CrewAI yang kuat memberdayakan Anda untuk:
Sebelum Kita Mulai
Untuk mengikutinya, Anda memerlukan:
Klaster Atlas MongoDB: Buat klaster gratis Anda dan muat Kumpulan Data Sampel. Data transaksi dalam kumpulan data analitik sampel menawarkan kumpulan data realistis yang memungkinkan pengguna mengasah keterampilan mereka dalam analisis data, pembuatan kueri, dan agregasi, khususnya dalam konteks data keuangan.
Sumber Daya LLM: CrewAI mendukung berbagai koneksi LLM, termasuk model lokal (Ollama), API seperti Azure, dan semua komponen LangChain LLM untuk solusi AI yang dapat disesuaikan. Klik di sini untuk mempelajari lebih lanjut tentang Dukungan CrewAI LLM
Selanjutnya, kami menyiapkan koneksi ke Azure OpenAI. Azure OpenAI dapat digantikan oleh LLM pilihan Anda.
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
)
Lalu mari kita tetapkan peran agen dan tujuan agen sebagai variabel sehingga dapat diakses di seluruh skrip.
# Initial Setup
AGENT_ROLE = "Investment Researcher"
AGENT_GOAL = """
Research stock market trends, company news, and analyst reports to identify potential investment opportunities.
"""
Untuk contoh ini, kita akan menggunakan Integrasi Langchain Pencarian DuckDuckGo. Pencarian DuckDuckGo adalah komponen yang memungkinkan pengguna mencari web menggunakan DuckDuckGo. Anda dapat mengimplementasikan Alat Pencarian Anda dengan API Pencarian pilihan Anda - tidak harus 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 )
Kami akan menggunakan CrewAI untuk mengelola agen dan tugas kami. Dalam hal ini, kami memiliki satu agen – seorang peneliti yang bertugas menganalisis data dan memberikan wawasan yang dapat ditindaklanjuti.
# 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
)
Selanjutnya, kami mendefinisikan pipeline agregasi MongoDB. Pipeline ini digunakan untuk memproses data transaksi kami dan menghitung laba atas investasi untuk setiap simbol saham.
# 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 )
Berikut rincian fungsi pipeline MongoDB:
Melepaskan Transaksi: Pertama, ia menggunakan operator $unwind
untuk membongkar bidang array bernama "transaksi" dalam setiap dokumen. Bayangkan setiap dokumen memiliki informasi tentang beberapa pembelian dan penjualan saham. Unwinding memisahkan transaksi-transaksi ini ke dalam dokumen-dokumen individual, sehingga membuat penghitungan menjadi lebih mudah.
Pengelompokan berdasarkan Simbol: Selanjutnya, operator $group
mengambil alih. Ini mengelompokkan dokumen yang dibatalkan berdasarkan nilai di bidang "transaksi.simbol". Ini pada dasarnya menggabungkan semua transaksi untuk saham tertentu (diwakili oleh simbol) ke dalam satu kelompok.
Menghitung Nilai Beli dan Jual: Dalam setiap grup simbol, pipeline menghitung dua nilai penting:
$sum
bersama dengan pernyataan bersyarat ( $cond
). $cond
memeriksa apakah "transaction_code" dalam objek "transactions" adalah "beli". Jika ya, bidang "total" (jumlah transaksi) akan diubah menjadi dua kali lipat menggunakan $toDouble
dan menambahkannya ke total berjalan untuk buyValue. Jika ini bukan transaksi beli, maka tidak memberikan kontribusi apa pun (0) pada jumlah tersebut. Ini secara efektif menghitung jumlah total yang dibelanjakan untuk membeli saham simbol tertentu. Memproyeksikan Hasil: Sekarang, operator $project
masuk untuk menentukan format keluaran akhir. Ini membuang pengidentifikasi pengelompokan yang dibuat secara otomatis ( _id
) dengan mengaturnya ke 0. Kemudian mengganti nama bidang pengelompokan ( _id
yang berisi "transactions.symbol") menjadi nama yang lebih jelas, "symbol". Terakhir, ia menghitung laba atas investasi untuk setiap simbol menggunakan operator $subtract
. Ini mengurangi buyValue
dari sellValue
untuk menentukan untung atau rugi untuk simbol tersebut.
Mengurutkan berdasarkan Pengembalian: Terakhir, operator $sort
mengatur hasilnya. Ini mengurutkan dokumen berdasarkan bidang "returnOnInvestment" dalam urutan menurun (-1). Artinya, simbol dengan laba atas investasi tertinggi (paling menguntungkan) akan muncul pertama kali pada hasil akhir.
Akhirnya, kami memulai pelaksanaan tugas kami. Agen peneliti akan menggunakan data dari agregasi MongoDB kami, serta alat lain yang mereka miliki, untuk menganalisis data dan memberikan wawasan.
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.
Meskipun kombinasi Kerangka Agregasi MongoDB dan GenAI mewakili alat yang ampuh untuk analisis dan interpretasi data, penting untuk mengenali beberapa potensi keterbatasan:
Ketergantungan pada Data Historis: Kinerja masa lalu mungkin tidak selalu dapat memprediksi hasil di masa depan, terutama di pasar yang tidak dapat diprediksi dimana kejadian yang tidak terduga dapat berdampak signifikan terhadap hasil investasi.
Ketidakpastian dalam Prediksi: Meskipun analisisnya canggih, akan selalu ada tingkat ketidakpastian dalam prediksi investasi. Hasil di masa depan pada dasarnya tidak dapat diketahui, dan faktor-faktor di luar cakupan data historis dapat mempengaruhi hasil.
Keterbatasan LLM: LLM masih terus berkembang, dan kemampuan mereka untuk meneliti, menafsirkan, dan menganalisis data terus meningkat. Namun, bias dalam data pelatihan atau keterbatasan arsitektur model dapat menyebabkan wawasan yang tidak akurat atau menyesatkan.
Dengan menyadari keterbatasan ini dan mengambil langkah-langkah untuk memitigasinya, Anda dapat memastikan pendekatan analisis investasi yang lebih bertanggung jawab dan menyeluruh.