Agent AI tư vấn đầu tư chứng khoán Việt Nam - Hệ thống phân tích thị trường chứng khoán thông minh sử dụng LangGraph, VnStock API và LLM.
- ✅ Thông tin công ty: Tên công ty, ngành nghề, vốn điều lệ, lịch sử
- ✅ Cổ đông lớn: Top cổ đông với tỷ lệ sở hữu chi tiết
- ✅ Ban lãnh đạo: Danh sách lãnh đạo và tỷ lệ sở hữu
- ✅ Công ty con: Công ty con/liên kết với tỷ lệ nắm giữ
- ✅ Sự kiện công ty: Chia cổ tức, ĐHCĐ, tăng vốn...
- ✅ Giá lịch sử (OHLCV): Open, High, Low, Close, Volume
- Theo ngày cụ thể:
start_datevàend_date - Theo khoảng thời gian:
3M,6M,1Y - Hiển thị chi tiết dưới dạng bảng
- Theo ngày cụ thể:
- ✅ SMA (Simple Moving Average): Phân tích xu hướng giá
- Tính SMA với window tùy chỉnh (SMA-9, SMA-20, SMA-50...)
- So sánh giá với SMA, xác định xu hướng
- Hiển thị bảng chi tiết theo từng ngày
- ✅ RSI (Relative Strength Index): Đánh giá quá mua/quá bán
- RSI > 70: Quá mua (cảnh báo giảm)
- RSI < 30: Quá bán (cơ hội tăng)
- Hiển thị bảng chi tiết với trạng thái
- 📋 Bảng Markdown với dữ liệu chi tiết, dễ đọc
- 📊 Thống kê tổng quan sau mỗi bảng
- 💡 Phân tích và kết luận chuyên nghiệp
- Backend: FastAPI (REST API)
- Agent Framework: LangChain + LangGraph (ReAct Pattern)
- LLM Providers:
- ☁️ Google Gemini (Cloud)
- 🖥️ Ollama (Local)
- Data Source: VnStock3 API (Free)
- Technical Analysis: TA-Lib
- Frontend: React + Vite + TailwindCSS
financial_agent/
├── src/
│ ├── agent/ # LangGraph Agent
│ │ ├── financial_agent.py
│ │ ├── state.py
│ │ └── prompts/
│ ├── tools/ # 8 Tools
│ │ ├── vnstock_tools.py # 6 VnStock tools
│ │ └── technical_tools.py # 2 Technical tools
│ ├── llm/ # LLM Factory
│ │ ├── llm_factory.py
│ │ └── config.py
│ └── api/ # FastAPI
│ └── app.py
├── frontend/ # React UI
│ ├── src/
│ │ ├── components/
│ │ └── App.jsx
│ └── package.json
├── tests/ # Unit Tests
├── test_auto.py # Automated Test Script
└── requirements.txt
# Clone hoặc cd vào thư mục
cd financial_agent
# Tạo virtual environment
python -m venv venv
# Kích hoạt venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
# Cài đặt dependencies
pip install -r requirements.txtBạn có thể chọn 1 trong 2 provider:
Ưu điểm: Nhanh, mạnh mẽ, không cần GPU
- Lấy API key miễn phí tại: https://aistudio.google.com/apikey
- Cập nhật file
.env:
# Google Gemini
GOOGLE_API_KEY=your_api_key_here
LLM_PROVIDER=gemini
GEMINI_MODEL=gemini-2.0-flashƯu điểm: Chạy offline, bảo mật, miễn phí hoàn toàn
Yêu cầu: RAM >= 8GB (khuyến nghị 16GB), GPU có VRAM >= 4GB (tùy chọn)
Bước 1: Tải và cài đặt Ollama
-
Windows:
- Tải tại: https://ollama.com/download/windows
- Chạy file
OllamaSetup.exe - Cài đặt theo hướng dẫn (Next → Next → Install)
-
macOS:
brew install ollama
-
Linux:
curl -fsSL https://ollama.com/install.sh | sh
Bước 2: Khởi động Ollama
# Chạy Ollama server (sẽ tự động chạy ở background trên Windows)
ollama serveBước 3: Pull model
Chọn 1 trong các model sau (theo cấu hình máy):
# Model nhỏ (RAM 4-8GB) - Tốc độ nhanh
ollama pull qwen2.5:3b
# Model trung bình (RAM 8-16GB) - Cân bằng
ollama pull llama3.1:8b
ollama pull qwen2.5:7b
# Model lớn (RAM 16GB+, GPU 8GB+) - Chất lượng cao
ollama pull qwen2.5:14b
ollama pull llama3.1:70bBước 4: Kiểm tra model đã cài
ollama listBước 5: Cập nhật .env
# Ollama Local
LLM_PROVIDER=ollama
OLLAMA_MODEL=qwen2.5:3b # Thay bằng model bạn đã pull
OLLAMA_BASE_URL=http://localhost:11434Lưu ý Ollama:
- Model
qwen2.5:3b(3B parameters) cần ~4GB RAM - Model
llama3.1:8b(8B parameters) cần ~8GB RAM - Nếu gặp lỗi "out of memory", thử model nhỏ hơn hoặc chuyển sang Gemini
- Kiểm tra Ollama đang chạy:
ollama list
# Activate venv (nếu chưa)
venv\Scripts\activate # Windows
source venv/bin/activate # Linux/Mac
# Chạy FastAPI server
uvicorn src.api.app:app --reload
# Server chạy tại: http://localhost:8000# Terminal mới, cd vào frontend
cd frontend
# Cài đặt dependencies (lần đầu)
npm install
# Chạy dev server
npm run dev
# Frontend chạy tại: http://localhost:5173# Test endpoint
curl -X POST http://localhost:8000/api/chat \
-H "Content-Type: application/json" \
-d "{\"question\": \"Thông tin về VNM\"}"# Tạo file Excel mẫu với câu hỏi test
python create_sample_test.py
# Chạy test tự động (đảm bảo backend đang chạy)
python test_auto.py test_questions_sample.xlsx
# Kết quả sẽ được lưu trong test_results_[timestamp].xlsxChi tiết xem file TESTING.md
Thông tin công ty:
- "Thông tin về công ty VNM"
- "VCB thuộc ngành gì?"
Cổ đông & Lãnh đạo:
- "Cổ đông lớn của VCB là ai?"
- "Ban lãnh đạo HPG gồm những ai?"
- "VNM có công ty con nào?"
Sự kiện:
- "Sự kiện gần đây của FPT"
- "VCB có chia cổ tức không?"
Dữ liệu giá:
- "Giá VCB 3 tháng gần nhất"
- "OHLCV của HPG từ đầu năm 2024"
Phân tích kỹ thuật:
- "Tính SMA-20 cho HPG"
- "Tính SMA-9 và SMA-20 của TCB từ đầu tháng 11"
- "RSI của VIC hiện tại"
- "HPG có quá mua không?"
Phân tích tổng hợp:
- "Phân tích toàn diện về VNM"
- "So sánh giá VCB và TCB trong 6 tháng"
Chỉnh sửa .env:
# Gemini
LLM_PROVIDER=gemini
GEMINI_MODEL=gemini-2.0-flash
GOOGLE_API_KEY=your_key_here
# Ollama
LLM_PROVIDER=ollama
OLLAMA_MODEL=qwen2.5:3b
OLLAMA_BASE_URL=http://localhost:11434Lưu ý: Phải restart server sau khi thay đổi .env
Lỗi: "Connection refused"
# Kiểm tra Ollama đang chạy
ollama list
# Nếu không chạy, khởi động lại
ollama serveLỗi: "Out of memory"
- Thử model nhỏ hơn:
ollama pull qwen2.5:3b - Hoặc chuyển sang Gemini
Lỗi: "Model not found"
# Kiểm tra model đã pull chưa
ollama list
# Pull model
ollama pull qwen2.5:3bChỉnh sửa file: src/agent/prompts/system_prompt.txt
Restart server để áp dụng thay đổi.
Request:
{
"question": "Thông tin về VNM"
}Response:
{
"answer": "VNM là Công ty Cổ phần Sữa Việt Nam (Vinamilk)...\n\n| Thông tin | Giá trị |\n|-----------|---------|..."
}Mở trình duyệt: http://localhost:8000/docs
import requests
response = requests.post(
"http://localhost:8000/api/chat",
json={"question": "Giá VCB 3 tháng gần nhất"}
)
print(response.json()["answer"])curl -X POST "http://localhost:8000/api/chat" \
-H "Content-Type: application/json" \
-d '{"question": "Tính SMA-20 cho HPG"}'- Mô tả: Thông tin tổng quan về công ty
- Input:
ticker(VNM, VCB, HPG...) - Output: Tên, ngành, vốn điều lệ, lịch sử công ty
- Mô tả: Danh sách cổ đông lớn
- Input:
ticker - Output: Top 10 cổ đông, tỷ lệ sở hữu, số lượng CP
- Mô tả: Ban lãnh đạo công ty
- Input:
ticker - Output: Danh sách lãnh đạo, chức vụ, tỷ lệ sở hữu
- Mô tả: Công ty con và công ty liên kết
- Input:
ticker - Output: Danh sách công ty con, tỷ lệ nắm giữ
- Mô tả: Sự kiện của công ty
- Input:
ticker - Output: 20 sự kiện gần nhất (cổ tức, ĐHCĐ, tăng vốn...)
- Mô tả: Dữ liệu giá lịch sử (OHLCV)
- Input:
ticker,start_date,end_datehoặcperiod - Output: Bảng OHLCV chi tiết + thống kê
- Mô tả: Simple Moving Average
- Input:
ticker,window(mặc định 20) - Output: Bảng SMA theo ngày + phân tích xu hướng
- Mô tả: Relative Strength Index
- Input:
ticker,window(mặc định 14) - Output: Bảng RSI theo ngày + đánh giá quá mua/quá bán
Tools trả về JSON chuẩn:
{
"success": true,
"ticker": "VNM",
"detailed_data": [
{ "date": "2024-11-01", "close": 85.5, "sma_20": 84.2 },
{ "date": "2024-11-04", "close": 86.0, "sma_20": 84.5 }
],
"analysis": {
"trend": "TĂNG",
"signal": "positive"
},
"message": "Đã tính SMA-20 cho VNM thành công"
}Agent sẽ chuyển đổi JSON này thành bảng Markdown đẹp mắt.
- Documentation: https://vnstocks.com/docs/vnstock
- GitHub: https://github.com/thinh-vu/vnstock
- LangChain Docs: https://python.langchain.com/
- LangGraph Tutorial: https://langchain-ai.github.io/langgraph/
- TA-Lib: https://ta-lib.org/
- Investopedia: https://www.investopedia.com/
- Website: https://ollama.com/
- Model Library: https://ollama.com/library
- GitHub: https://github.com/ollama/ollama
# Kiểm tra Python version (cần >= 3.9)
python --version
# Kiểm tra dependencies
pip list | grep langchain
# Reinstall dependencies
pip install -r requirements.txt --force-reinstallcd frontend
rm -rf node_modules package-lock.json
npm install
npm run dev# Kiểm tra logs
# Server sẽ in ra lỗi chi tiết trong terminal
# Test trực tiếp tools
python -c "from src.tools.vnstock_tools import get_company_info; print(get_company_info('VNM'))"# Kiểm tra service
ollama list
# Restart service
# Windows: Tìm Ollama trong Task Manager → Restart
# Linux/Mac:
sudo systemctl restart ollama
# Test model
ollama run qwen2.5:3b "Hello"- Thêm tools: Financial Ratios (P/E, ROE, ROA...)
- Thêm tools: News scraping
- Thêm charts visualization
- Deploy lên cloud (Vercel + Railway)
- Mobile app (React Native)
- Real-time price updates (WebSocket)
Contributions are welcome!
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
MIT License - see LICENSE file for details
Financial Agent - AI Stock Market Assistant for Vietnam
Built with ❤️ using LangGraph, VnStock, and modern AI technologies
Project: AI Intern 2025
Contact: [Your contact info]
- VnStock team for the amazing free API
- LangChain team for the powerful framework
- Ollama team for local LLM support
- Google for Gemini API
Happy Trading! 📈🚀