( ภาพจากบล็อก LangChain | CrewAI: อนาคตของทีมตัวแทน AI)
ไปป์ไลน์การรวม MongoDB ให้ข้อมูลที่เราจำเป็นต้องวิเคราะห์ ยิ่งคุณสามารถดึงข้อมูลเชิงลึกที่สำคัญจากข้อมูลดิบได้เร็วเท่าไร การตัดสินใจลงทุนของคุณก็จะยิ่งดีขึ้นเท่านั้น CrewAI ผสมผสานกับพลังของ MongoDB Atlas มอบแนวทางที่เป็นเอกลักษณ์ที่นอกเหนือไปจากการประมวลผลตัวเลขขั้นพื้นฐานเพื่อมอบการวิเคราะห์ที่ดำเนินการได้อย่างแท้จริง
สำหรับตัวอย่างนี้ เราจะสร้างตัวแทนนักวิจัยการลงทุน ตัวแทนรายนี้เป็นผู้เชี่ยวชาญของเรา มีทักษะในการค้นหาข้อมูลอันมีค่าโดยใช้เครื่องมือ เช่น เครื่องมือค้นหา ได้รับการออกแบบมาเพื่อติดตามแนวโน้มทางการเงิน ข่าวสารบริษัท และข้อมูลเชิงลึกของนักวิเคราะห์ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการสร้างตัวแทนโดยใช้ CrewAI คลิกที่นี่
ปลดล็อกพลังแห่งการทำงานร่วมกันของ AI: เจ้าหน้าที่ งาน และเครื่องมือ
โดยพื้นฐานแล้ว การผสมผสานอันทรงพลังของเจ้าหน้าที่ งาน และเครื่องมือของ CrewAI ช่วยให้คุณ:
ก่อนที่เราจะเริ่ม
หากต้องการปฏิบัติตาม คุณจะต้อง:
MongoDB Atlas Cluster: สร้างคลัสเตอร์ฟรีของคุณและโหลดชุดข้อมูลตัวอย่าง ข้อมูลธุรกรรมในชุดข้อมูลการวิเคราะห์ตัวอย่างนำเสนอชุดข้อมูลที่สมจริงซึ่งช่วยให้ผู้ใช้ฝึกฝนทักษะในการวิเคราะห์ข้อมูล การสืบค้น และการรวมกลุ่ม โดยเฉพาะในบริบทของข้อมูลทางการเงิน
ทรัพยากร LLM: CrewAI รองรับการเชื่อมต่อ LLM ที่หลากหลาย รวมถึงโมเดลในเครื่อง (Ollama), API เช่น Azure และส่วนประกอบ LangChain LLM ทั้งหมดสำหรับโซลูชัน AI ที่ปรับแต่งได้ คลิกที่นี่เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการสนับสนุน 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.
"""
สำหรับตัวอย่างนี้ เราจะใช้ The DuckDuckGo Search Langchain Integration DuckDuckGo Search เป็นองค์ประกอบที่ช่วยให้ผู้ใช้สามารถค้นหาเว็บโดยใช้ DuckDuckGo คุณสามารถใช้เครื่องมือค้นหาของคุณกับ Search 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.สัญลักษณ์" นี่เป็นการรวมธุรกรรมทั้งหมดสำหรับหุ้นเฉพาะ (แสดงด้วยสัญลักษณ์) ไว้เป็นกลุ่มเดียว
การคำนวณมูลค่าการซื้อและการขาย: ภายในกลุ่มสัญลักษณ์แต่ละกลุ่ม ไปป์ไลน์จะคำนวณค่าที่สำคัญสองค่า:
$sum
พร้อมกับคำสั่งแบบมีเงื่อนไข ( $cond
) $cond
ตรวจสอบว่า "transaction_code" ภายในออบเจ็กต์ "transactions" เป็น "buy" หรือไม่ หากเป็นเช่นนั้น ระบบจะแปลงฟิลด์ "ผลรวม" (จำนวนธุรกรรม) เป็นสองเท่าโดยใช้ $toDouble
และเพิ่มลงในผลรวมสะสมสำหรับ buyValue หากไม่ใช่ธุรกรรมการซื้อ จะไม่มีส่วนช่วยอะไร (0) ให้กับผลรวม วิธีนี้จะคำนวณจำนวนเงินทั้งหมดที่ใช้ซื้อหุ้นของสัญลักษณ์นั้นอย่างมีประสิทธิภาพ การฉายผลลัพธ์: ตอนนี้ ผู้ดำเนินการ $project
ก้าวเข้ามาเพื่อกำหนดรูปแบบเอาต์พุตสุดท้าย โดยจะละทิ้งตัวระบุการจัดกลุ่มที่สร้างขึ้นโดยอัตโนมัติ ( _id
) โดยตั้งค่าเป็น 0 จากนั้นจะเปลี่ยนชื่อฟิลด์การจัดกลุ่ม ( _id
ซึ่งเก็บ "transactions.สัญลักษณ์") ให้เป็นชื่อที่ชัดเจนยิ่งขึ้น ซึ่งก็คือ "สัญลักษณ์" สุดท้ายจะคำนวณผลตอบแทนจากการลงทุนสำหรับแต่ละสัญลักษณ์โดยใช้ตัวดำเนินการ $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 ยังคงพัฒนาอยู่ และความสามารถในการวิจัย ตีความ และวิเคราะห์ข้อมูลก็มีการปรับปรุงอย่างต่อเนื่อง อย่างไรก็ตาม อคติในข้อมูลการฝึกอบรมหรือข้อจำกัดในสถาปัตยกรรมของแบบจำลองอาจนำไปสู่ข้อมูลเชิงลึกที่ไม่ถูกต้องหรือทำให้เข้าใจผิด
เมื่อตระหนักถึงข้อจำกัดเหล่านี้และดำเนินการเพื่อบรรเทา คุณสามารถมั่นใจได้ว่าจะมีแนวทางการวิเคราะห์การลงทุนที่มีความรับผิดชอบและรอบด้านมากขึ้น