Dự án này triển khai ba mô hình agent design patterns phổ biến và mạnh mẽ trong AI: ReAct, Reflection, và Plan-and-Execute. Mỗi pattern giải quyết các loại vấn đề khác nhau và phù hợp với các use case cụ thể.
- Cài đặt
- 1. ReAct Agent
- 2. Reflection Agent
- 3. Plan-and-Execute Agent
- So sánh các Patterns
- Dependencies
- Python >= 3.12
- UV package manager
Bước 1: Clone repository
git clone <repository-url>
cd AgentsBước 2: Cài đặt dependencies
uv syncBước 3: Cấu hình biến môi trường
Tạo file .env trong thư mục gốc:
OPENAI_API_KEY=your_openai_api_key
TAVILY_API_KEY=your_tavily_api_keyFile: ReAct_Agent.ipynb
Pattern: Reasoning + Acting (Suy luận + Hành động)
ReAct (Reasoning and Acting) là pattern kết hợp suy luận logic với hành động thực tế. Agent sẽ suy nghĩ từng bước (reasoning) trước khi thực hiện hành động (acting), tạo thành vòng lặp liên tục cho đến khi có câu trả lời cuối cùng.
User Input → Think → Act → Observe → Think → Act → ... → Final Answer
Chu trình ReAct:
- Thought (Suy nghĩ): Agent phân tích tình huống và quyết định bước tiếp theo
- Action (Hành động): Thực hiện công cụ (tool) cụ thể
- Observation (Quan sát): Nhận kết quả từ tool
- (Lặp lại nếu cần)
- Final Answer: Đưa ra câu trả lời cuối cùng
┌─────────┐
│ Agent │ ←─────────────┐
└────┬────┘ │
│ │
├── Thought │
│ │
▼ │
┌─────────┐ │
│ Tools │ │
│ (Search,│ │
│ Triple) │ │
└────┬────┘ │
│ │
└─ Observation ───────┘
State:
messages: Lịch sử hội thoạinumber_of_steps: Số bước đã thực hiện
Tools:
TavilySearch: Tìm kiếm web real-timetriple(): Nhân một số với 3 (demo tool)
Model: GPT-4o-mini với tool calling
- Mở file ReAct_Agent.ipynb
- Chạy lần lượt từng cell bằng cách nhấn nút
▶️ Run
Example 1: Tìm kiếm đơn giản
"Thời tiết ở Việt Nam như thế nào?"→ Thought: Cần tìm kiếm thông tin thời tiết
→ Action: TavilySearch("thời tiết Việt Nam")
→ Observation: Kết quả tìm kiếm
→ Final Answer: Trả lời người dùng
Example 2: Kết hợp nhiều bước
"Thời tiết ở Việt Nam như thế nào? Sau đó nhân ba lên."→ Thought: Tìm kiếm nhiệt độ
→ Action: TavilySearch
→ Observation: "Nhiệt độ 30°C"
→ Thought: Nhân 30 với 3
→ Action: triple(30)
→ Observation: 90
→ Final Answer: "Nhiệt độ hiện tại là 30°C, nhân 3 = 90°C"
- Minh bạch: Nhìn thấy rõ quá trình suy nghĩ
- Linh hoạt: Tự quyết định khi nào dùng tool
- Hiệu quả: Giải quyết được nhiều loại task phức tạp
- Có thể "lạc đường" với task quá phức tạp
- Không có kế hoạch dài hạn
- Khó debug khi có nhiều bước
- Task cần kết hợp nhiều tools khác nhau
- Cần giải thích quá trình reasoning
- Task không quá phức tạp (< 5-7 bước)
File: Reflection_Agent.ipynb
Pattern: Generate → Reflect → Refine (Tạo → Phản ánh → Cải thiện)
Reflection Agent sử dụng self-critique (tự phê bình) để cải thiện chất lượng output. Agent sẽ tạo ra kết quả ban đầu, sau đó tự đánh giá và cải thiện qua nhiều vòng lặp.
Input → Generate → Reflect → Generate (v2) → Reflect → ... → Final Output
Chu trình Reflection:
- Generate: Tạo output ban đầu
- Reflect: Phê bình và đưa ra đề xuất cải thiện
- Generate: Tạo phiên bản cải thiện dựa trên feedback
- (Lặp lại cho đến khi đạt tiêu chí)
- Final: Trả về phiên bản tốt nhất
┌──────────┐
│ Generate │
└────┬─────┘
│
▼
┌──────────┐
│ Reflect │
└────┬─────┘
│
└─────► (Lặp lại max 6 lần)
│
▼
END
State:
messages: Danh sách các message (request, response, critique)
Nodes:
Generator: Tạo nội dung (viết tweet)Reflector: Phê bình và đề xuất cải thiện
Models:
- Generator: GPT-4o-mini
- Reflector: GPT-4o-mini
Stopping Condition: Dừng sau 3 vòng reflection (6 messages)
- Mở file Reflection_Agent.ipynb
- Chạy lần lượt từng cell bằng cách nhấn nút
▶️ Run
Example: Viết tweet chất lượng cao
"Hãy viết một bài đăng trên Twitter về lý do tại sao
Hoàng tử bé vẫn còn phù hợp với tuổi thơ hiện đại."Vòng 1:
- Generate: "Hoàng tử bé dạy trẻ em về tình bạn và trách nhiệm..."
- Reflect: "Nội dung tốt nhưng hơi dài. Cần ngắn gọn hơn, thêm emoji, và hook mạnh mẽ hơn."
Vòng 2:
- Generate: "🌟 Hoàng tử bé = bài học vượt thời gian! Tình bạn, trách nhiệm, tưởng tượng..."
- Reflect: "Tốt hơn! Nhưng cần thêm call-to-action và hashtag."
Vòng 3:
- Generate: "🌟 Vì sao Hoàng tử bé vẫn phù hợp? Tình bạn thật, trách nhiệm, và sức mạnh tưởng tượng - điều trẻ hiện đại CẦN! 💫 #HoangTuBe #PhanTichSach"
- Final Output ✅
- Chất lượng cao: Output được cải thiện qua nhiều vòng
- Tự động: Không cần human feedback
- Versatile: Áp dụng cho writing, code generation, reasoning
- Tốn token: Mỗi vòng reflection tiêu tốn thêm API calls
- Có thể "over-optimize": Cải thiện quá mức làm mất tự nhiên
- Không phù hợp với task cần sự kiện real-time
- Creative writing: Tweet, blog post, marketing copy
- Code generation: Tự review và cải thiện code
- Essay writing: Văn phong học thuật, báo cáo
- Bất kỳ task nào cần chất lượng output cao
File: Plan-and-Execute_Agent.ipynb
Pattern: Plan → Execute → Replan (Lập kế hoạch → Thực thi → Điều chỉnh)
Plan-and-Execute là pattern chiến lược cho các task phức tạp. Agent sẽ lập kế hoạch toàn diện trước, sau đó thực thi từng bước, và điều chỉnh kế hoạch dựa trên kết quả thực tế.
Input → Plan → Execute Step 1 → Replan → Execute Step 2 → ... → Final Answer
Chu trình Plan-Execute:
- Plan: Tạo kế hoạch chi tiết với các bước cụ thể
- Execute: Thực thi bước đầu tiên
- Replan: Đánh giá kết quả và cập nhật kế hoạch
- Nếu xong → Trả lời người dùng
- Nếu chưa → Tiếp tục execute
- (Lặp lại cho đến khi hoàn thành)
┌─────────┐
│ Planner │
└────┬────┘
│
▼
┌─────────┐
│ Execute │ ← Execute step 1
└────┬────┘
│
▼
┌─────────┐
│ Replan │ ← Cập nhật plan
└────┬────┘
│
├─── Còn bước? ──► Execute
│
└─── Xong? ──────► END
State:
input: Câu hỏi ban đầu của userplan: Danh sách các bước cần thực hiệnpast_steps: Các bước đã hoàn thànhresponse: Câu trả lời cuối cùng
Nodes:
Planner: Tạo kế hoạch chi tiết (GPT-4o-mini)Agent Executor: Thực thi từng bước với tools (ReAct agent)Replanner: Cập nhật kế hoạch dựa trên kết quả (GPT-4o)
Tools:
TavilySearch: Tìm kiếm web
- Mở file Plan-and-Execute_Agent.ipynb
- Chạy lần lượt từng cell bằng cách nhấn nút
▶️ Run - Lưu ý: Sử dụng
asyncđể chạy nhanh hơn
Example: Câu hỏi phức tạp
"Con gà có trước hay quả trứng có trước?"Plan (Kế hoạch ban đầu):
- Tìm kiếm thông tin về nguồn gốc con gà
- Tìm kiếm thông tin về quá trình tiến hóa của trứng
- So sánh timeline tiến hóa của hai loài
- Đưa ra kết luận dựa trên khoa học
Execute Step 1:
- Task: "Tìm kiếm thông tin về nguồn gốc con gà"
- Result: "Gà xuất hiện từ tiến hóa của loài chim cổ đại..."
Replan:
- ✅ Bước 1: Hoàn thành
- Updated Plan: [Bước 2, 3, 4]
Execute Step 2:
- Task: "Tìm thông tin về quá trình tiến hóa của trứng"
- Result: "Trứng có vỏ cứng xuất hiện trước gà..."
Replan:
- ✅ Bước 1, 2: Hoàn thành
- Đánh giá: Đã đủ thông tin để trả lời
- Response: "Theo khoa học, trứng có trước con gà vì..."
- Có tổ chức: Kế hoạch rõ ràng, dễ theo dõi
- Linh hoạt: Điều chỉnh kế hoạch khi cần
- Phù hợp task phức tạp: Chia nhỏ thành các bước đơn giản
- Khả năng phục hồi: Xử lý được lỗi và thay đổi
- Overhead cao: Nhiều API calls (plan + replan + execute)
- Chậm: Phải chờ từng bước hoàn thành
- Over-planning: Có thể tạo plan quá chi tiết
- Task phức tạp: Cần nhiều bước logic
- Research tasks: Tìm kiếm và tổng hợp thông tin
- Multi-step reasoning: "So sánh X và Y", "Phân tích A rồi đề xuất B"
- Khi cần transparency: Muốn biết agent đang làm gì
| Tiêu chí | ReAct | Reflection | Plan-and-Execute |
|---|---|---|---|
| Độ phức tạp task | Trung bình | Đơn giản | Cao |
| Số bước thực hiện | 3-7 bước | 1 task, nhiều vòng | 5-15 bước |
| Chi phí API | Trung bình | Cao | Rất cao |
| Tốc độ | Nhanh | Trung bình | Chậm |
| Chất lượng output | Tốt | Rất tốt | Tốt |
| Tính minh bạch | Cao | Trung bình | Rất cao |
| Use case chính | Q&A, Tool use | Creative writing | Complex research |
ReAct - Khi:
- Cần kết hợp nhiều tools
- Task không quá phức tạp
- Cần balance giữa tốc độ và chất lượng
Reflection - Khi:
- Chất lượng output là ưu tiên số 1
- Creative tasks (writing, content generation)
- Có thể chấp nhận chi phí cao hơn
Plan-and-Execute - Khi:
- Task phức tạp với nhiều bước
- Cần kế hoạch rõ ràng
- Tính chính xác quan trọng hơn tốc độ
langchain==0.3.24- Framework chính cho LLM applicationslangchain-openai==0.3.14- Integration với OpenAI modelslanggraph==0.3.33- State machine và graph-based workflows
langchain-tavily==0.1.6- Web search real-timepython-dotenv>=1.2.1- Environment variables management
grandalf>=0.8- Graph visualization libraryipykernel>=7.1.0- Jupyter notebook support
📄 Xem pyproject.toml để biết danh sách đầy đủ.
- ✅ Tất cả patterns đều nhẹ, không cần GPU
- ✅ Yêu cầu ~500MB RAM
⚠️ Plan-and-Execute có thể chậm với task phức tạp (nhiều API calls)
- ReAct: ~3-7 API calls/task
- Reflection: ~6-12 API calls/task (nhiều vòng reflection)
- Plan-and-Execute: ~10-30 API calls/task (tùy độ phức tạp)
- ReAct: Giới hạn số bước tối đa để tránh infinite loop
- Reflection: Đặt stopping condition hợp lý (3-5 vòng)
- Plan-and-Execute: Set
recursion_limitcao (50+) cho task phức tạp