Lên kế hoạch (Planning)
Trong hầu hết mọi trường hợp khi làm việc với Agentic IDE, planning (lên kế hoạch) là bước bắt buộc phải thực hiện trước khi bắt đầu viết code. Đây không phải là một bước tùy chọn, mà là nền tảng để đảm bảo AI đi đúng hướng và mang lại kết quả như mong đợi.
Tại sao Planning lại quan trọng?
Planning là quá trình giúp chúng ta kiểm soát (control) Agent đi theo đúng mục tiêu. Thay vì để AI tự do suy diễn, chúng ta cung cấp một "bản đồ" chi tiết để nó tuân theo. Lợi ích của việc này là:
- Độ chính xác cao: Khi có kế hoạch rõ ràng, AI sẽ tạo ra code và giải pháp phù hợp với kiến trúc và yêu cầu của dự án.
- Cải thiện tốc độ: Giảm thiểu đáng kể thời gian điều chỉnh, sửa chữa và lặp lại (iterations) vì AI đã đi đúng hướng ngay từ đầu.
- Cung cấp Context đầy đủ: Một bản kế hoạch tốt tự nó đã là một "siêu context" (super-context), chứa đựng mọi thông tin cần thiết để AI thực thi nhiệm vụ một cách hiệu quả.
Để lên kế hoạch tốt, người kỹ sư cần có tư duy kiến trúc, kiến thức kỹ thuật sâu rộng và kỹ năng thiết kế hệ thống. Mục đích cuối cùng là để kiểm soát, điều chỉnh và lựa chọn giải pháp phù hợp nhất cho nhu cầu của dự án.
Các cấp độ Planning
Việc lên kế hoạch cho một task, một feature mới, hay cả một dự án từ đầu là hoàn toàn khác nhau về mức độ chi tiết và phạm vi.
1. Planning cho một Task
Đây là cấp độ đơn giản nhất, thường chỉ cần chia nhỏ công việc thành các bước cụ thể mà AI có thể thực hiện.
prompt-planning-task
Model: thinking-model
Prompt: Tôi cần cập nhật giao diện của trang profile người dùng. Hãy chia nhỏ công việc này thành các bước cụ thể.
Kết quả mong đợi: AI sẽ liệt kê các task con.
[ ] Cập nhật component Avatar.[ ] Thêm section "Thông tin cá nhân".[ ] Chỉnh sửa layout của nút "Lưu thay đổi".
2. Planning cho một Feature
Lên kế hoạch cho một feature mới đòi hỏi sự sâu sắc hơn. Nó không chỉ là chia nhỏ công việc mà còn bao gồm:
- Thiết kế giải pháp: Xác định cách feature sẽ được tích hợp vào hệ thống hiện tại.
- Hiểu kiến trúc: Đảm bảo giải pháp tuân thủ kiến trúc đã có.
- Luồng dữ liệu (Data Flow): Mô tả dữ liệu sẽ di chuyển như thế nào qua các component, API và database.
- Chia nhỏ thành nhiều task: Từ thiết kế trên, chia feature thành các task cụ thể cho backend, frontend, database, v.v.
prompt-planning-feature
Model: thinking-model
Prompt: Dựa trên yêu cầu "Xây dựng tính năng bình luận cho bài viết", hãy tạo một bản kế hoạch chi tiết cho feature này. Kế hoạch cần bao gồm:
- Thiết kế kỹ thuật (API endpoints, component frontend).
- Sơ đồ luồng dữ liệu.
- Cấu trúc bảng
commentstrong database. - Danh sách các task cần thực hiện cho Backend và Frontend.
3. Planning cho một Project mới
Đây là cấp độ phức tạp nhất, đòi hỏi một tầm nhìn bao quát toàn bộ dự án. Khác với task hay feature, việc lên kế hoạch cho một dự án mới là một quá trình lặp (iterative process), bao gồm nhiều lượt trao đổi với AI để làm rõ yêu cầu, lựa chọn công nghệ, và phân tích rủi ro.
Mục tiêu của quá trình này là tạo ra hai tài liệu cốt lõi:
plan.md: Một kế hoạch cấp cao (high-level), chứa định hướng chiến lược, mục tiêu, và các cột mốc chính.detailed-plan.md: Một kế hoạch chi tiết, phân rã công việc từplan.mdthành các task cụ thể cho đội ngũ phát triển.
Dưới đây là một ví dụ về chuỗi prompt để thực hiện điều này:
Giai đoạn 1: Khởi tạo ý tưởng (Tương tự như trên)
(Giữ nguyên prompt-project-1)
Giai đoạn 2: Thảo luận và điều chỉnh (Tương tự như trên)
(Giữ nguyên prompt-project-2)
Giai đoạn 3: Tổng hợp Kế hoạch cấp cao (plan.md)
Sau khi đã thống nhất về định hướng, bạn yêu cầu AI tạo ra một bản kế hoạch tổng quan.
prompt-project-3
Model: thinking-model
Prompt: Dựa trên tất cả các thông tin đã thảo luận, hãy tạo nội dung cho file plan.md. Đây là kế hoạch cấp cao, cần bao gồm:
- Tổng quan và Mục tiêu dự án.
- Phạm vi và các tính năng chính của MVP.
- Technical Stack đã chốt.
- Phân tích rủi ro chính.
- Các cột mốc phát triển chính (Major Milestones).
Giai đoạn 4: Tạo Kế hoạch chi tiết (detailed-plan.md)
Khi đã có kế hoạch cấp cao, bạn sử dụng nó làm context để yêu cầu AI tạo ra một kế hoạch chi tiết cho toàn bộ dự án.
prompt-project-4
Model: thinking-model
Prompt:Context: Nội dung file plan.md.
Dựa vào kế hoạch cấp cao đã có, hãy xây dựng một bản kế hoạch chi tiết (detailed-plan.md) cho toàn bộ dự án. Kế hoạch này cần bao gồm:
- Thiết kế API endpoints chi tiết cho tất cả các tính năng.
- Thiết kế cấu trúc tất cả các bảng database liên quan.
- Danh sách các task chính cần thực hiện cho backend và frontend.
- Cấu trúc thư mục chi tiết cho toàn bộ dự án.
Cách tiếp cận này giúp tách biệt rõ ràng giữa tầm nhìn chiến lược (plan.md) và kế hoạch thực thi (detailed-plan.md), giúp quá trình phát triển trở nên có tổ chức và dễ quản lý hơn.
Ví dụ về các sản phẩm đầu ra
Dưới đây là ví dụ minh họa cho các file được tạo ra trong suốt quá trình phân tích và lập kế hoạch cho một dự án "Blog đơn giản".
tôi muốn làm một trang blog đơn giản, cho phép viết bài, có bình luận.# Yêu cầu cho dự án Blog
## 1. User Stories
- **As a Writer,** I want to be able to create, edit, and delete my posts so that I can manage my content.
- **As a Reader,** I want to see a list of all posts so that I can choose what to read.
- **As a Reader,** I want to leave comments on a post to share my thoughts.
## 2. Yêu cầu phi chức năng
- Giao diện phải thân thiện và dễ sử dụng.
- Website phải có tốc độ tải nhanh.# Kế hoạch cấp cao: Dự án Blog
## 1. Mục tiêu
Xây dựng một nền tảng blog cá nhân, tập trung vào việc viết, đọc và bình luận bài viết.
## 2. Tính năng MVP
- Quản lý bài viết (CRUD).
- Quản lý bình luận (CRD - Create, Read, Delete).
## 3. Tech Stack
- **Backend:** Node.js (Express)
- **Frontend:** Vue.js
- **Database:** PostgreSQL
## 4. Các cột mốc chính
- **M1:** Hoàn thành Backend (API cho Post và Comment).
- **M2:** Hoàn thành Frontend.# Kế hoạch chi tiết: Dự án Blog
## 1. Mục tiêu
Hoàn thành toàn bộ API và cấu trúc database cho dự án, bao gồm quản lý bài viết và bình luận.
## 2. Database Schema
- `posts`
- `id`: SERIAL PRIMARY KEY
- `title`: VARCHAR(255) NOT NULL
- `content`: TEXT NOT NULL
- `comments`
- `id`: SERIAL PRIMARY KEY
- `post_id`: INTEGER REFERENCES posts(id) ON DELETE CASCADE
- `author`: VARCHAR(100)
- `content`: TEXT NOT NULL
## 3. API Endpoints
- **Posts:**
- `GET /api/posts`, `GET /api/posts/:id`, `POST /api/posts`, `PUT /api/posts/:id`, `DELETE /api/posts/:id`
- **Comments:**
- `GET /api/posts/:postId/comments`
- `POST /api/posts/:postId/comments`
## 4. Tasks
- [ ] Khởi tạo dự án Node.js với Express.
- [ ] Kết nối database PostgreSQL.
- [ ] Tạo migration cho bảng `posts` và `comments`.
- [ ] Implement API endpoints cho Posts.
- [ ] Implement API endpoints cho Comments.
- [ ] Viết unit test cho toàn bộ API.4. Planning cho các kịch bản linh hoạt
Điều quan trọng cần nhớ là planning không chỉ dành cho việc viết code hay thiết kế hệ thống. Tư duy lập kế hoạch là nguyên tắc cốt lõi để tiếp cận bất kỳ vấn đề nào một cách có cấu trúc. Mục tiêu là luôn có một kế hoạch, dù là đơn giản hay phức tạp, trước khi bắt đầu hành động.
Các kịch bản này có thể bao gồm:
- Nghiên cứu và đề xuất giải pháp: Lên kế hoạch các bước để tìm hiểu, so sánh và chọn ra giải pháp tối ưu cho một vấn đề.
- Thử nghiệm công cụ mới: Lập kế hoạch để đánh giá một thư viện, framework hoặc dịch vụ mới.
- Thực hiện Demo/PoC (Proof of Concept): Lên kế hoạch để xây dựng một bản demo nhanh nhằm kiểm chứng một ý tưởng hoặc tính khả thi của một giải pháp trước khi đầu tư nhiều nguồn lực.
Cách tiếp cận planning trong các trường hợp này không cố định. Nó phụ thuộc hoàn toàn vào bối cảnh của bài toán: yêu cầu cụ thể, nguồn lực (thời gian, con người), chi phí, và mức độ rủi ro. Sự linh hoạt này giúp bạn đưa ra lựa chọn phù hợp và hiệu quả nhất.
prompt-planning-poc
Model: thinking-model
Prompt: Tôi đang cân nhắc sử dụng một thư viện UI mới cho dự án. Hai lựa chọn hàng đầu là Shadcn/ui và DaisyUI. Hãy tạo một kế hoạch để tôi có thể đánh giá và đưa ra quyết định.
Kế hoạch cần bao gồm:
- Các tiêu chí so sánh chính (ví dụ: Dễ sử dụng, Khả năng tùy biến, Hiệu năng, Cộng đồng hỗ trợ).
- Các bước thực hiện một PoC (Proof of Concept) nhỏ với mỗi thư viện để xây dựng một component Card đơn giản.
- Cách thức để trình bày kết quả so sánh để team có thể đưa ra lựa chọn.