Agentic Coding Course
Index
- Lý thuyết
- Prompt Engineering → Context Engineering
- Agentic Coding
- Github Copilot Agent Mode
- Claude Code
- OpenAI Codex
- Agentic Coding hướng tiếp cận theo Spec-Driven Development
Lý thuyết
-
LLM
-
Token: 100 token tương đương khoảng 75 từ tiếng Anh
- Input: Truyền vào cho LLM
- Output: Lượng token trả ra, bao gồm cả Reasoning Token - token được sinh ra tạm thời trong quá trình LLM suy luận)
-
Prompt
-
Context: Tất cả thông tin được cung cấp cho LLM trong quá trình xử lý.
- Việc cung cấp đầy đủ Context ảnh hưởng thiết yếu đến chất lượng phản hồi.
-
Context Window - Context Length ⇒ Working Memory
- Context “vừa đủ” sẽ giúp LLM suy luận, phản hồi hợp lý hơn, do nó hiểu được “đủ” ngữ cảnh.
-
AI Agent
- Là một chương trình phần mềm có khả năng tự chủ nhận thức về môi trường xung quanh, lập kế hoạch (plan) và thực hiện các hành động (act) để đạt được mục tiêu xác định từ trước.
- LLM là bộ não, hiểu và tạo ra ngôn ngữ. Còn AI Agent là một thực thể hoàn chỉnh, có thể sử dụng chân tay, thực hiện các công việc mà bộ não suy nghĩ, theo 1 cách tự chủ.
- Cách thành phần của một AI Agent
- Bộ não - Brain (LLM)
- Công cụ (Tool Use)
- Bộ nhớ - Memory
-
MCP - Model Context Protocol
- Cung cấp Context cho Model một cách hiệu quả, giao tiếp dễ hơn với bên ngoài.
- MCP Server là cầu nối giữa AI Agent kết nối ra bên ngoài, thực thi các tác vụ hoặc lấy về thông tin cần thiết
From Prompt Engineering → Context Engineering
Prompt Engineering
- Tập trung vào kỹ thuật viết prompt, bao gồm cả các prompt hệ thống để hướng dẫn LLM tạo ra kết quả mong muốn
- Nhấn mạnh việc tìm từ ngữ/ cú pháp tối ưu cho một lần phản hồi của mô hình
- Cùng 1 model, prompt khác nhau có thể cho ra kết quả khác nhau đáng kể. Nên thời gian ban đầu, “AI engineering” chủ yếu xoay quanh việc viết prompt cho từng tác vụ.
Context Engineering
- Giờ đang focus vào việc xây dựng Agent có khả năng vận hành nhiều bước, và tự động hơn, nên vấn đề không chỉ nằm ở việc viết prompt thế nào nữa, mà là quản lý trạng thái toàn cục của Context
- Trong quá trình Agent vận hành, nó liên tục sinh ra dữ liệu - log, memory, tool outputs, message history, intermediate results, … Agent sẽ quan sát, tiếp tục suy luận dựa trên những cái đó để đưa ra hành động bước tiếp theo. ⇒ Cần phải liên tục chọn lọc, tái cấu trúc và liên tục cung cấp context cần thiết qua mỗi bước suy luận của Agent.
Vấn đề của LLM
- Bị giới hạn về Context có thể xử lý. Dù window liên tục được mở rộng, nhưng có vđ:
- Chi phí.
- Performance: Context càng lớn, thời gian xử lý càng lâu.
- LLM “mất tập trung”: Context càng lớn thì LLM càng dễ quên
- “Attention budget” có hạn
- Mỗi mô hình có 1 ngân sách chú ý nhất định cho mỗi lần suy luận.
- Kiến trúc Transformer buộc mỗi token phải “attend” đến mọi token khác. Nên context càng dài, độ tập trung càng mỏng.
⇒ Context quyết định chất lượng tác vụ. Tổ chức ngữ cảnh phù hợp sẽ cho output tốt hơn, giúp định hướng suy luận, ghi nhớ và quyết định của AI Agent tốt hơn.
Notes
Context Engineering là nghệ thuật trong việc chọn lọc những gì cần đưa vào Context Window, từ lượng thông tin khổng lồ và không ngừng thay đổi.
Agentic Coding
Nguyên tắc cốt lõi:
-
Tối đa hóa thông tin, tối thiểu hóa nhiễu: Đưa token hữu ích nhất để đạt được mục tiêu, thay vì cố nhồi nhét thật nhiều thông tin.
-
Mạnh dạn bỏ bớt thông tin không tạo thêm giá trị, để dành cho thứ khác quan trọng hơn.
-
Xem context như tài nguyên quý giá. Xem mỗi token như 1 nét vẽ trên 1 khung tranh bị giới hạn.
-
Minimal nhưng không sơ sài.
-
Cách tiếp cận:
- (1) Đưa lượng thông tin nhỏ nhất. Thử nghiệm rồi bù thêm thông tin.
- (2) Đẩy nhiều thông tin vào, nhưng bỏ bớt dần thông tin đi, cho tới khi kết quả lởm ⇒ Điểm cân bằng.
-
Tools
- Chúng cũng sẽ chiếm 1 phần context windows
- Tools nên được thiết kế nhỏ gọn, làm đúng việc, tránh bị trùng lặp chức năng
-
Knowledge
- Kiến thức ngoài giúp LLM ra quyết định chuẩn xác hơn. Vd: Nếu đang làm bài toán về ngân hàng, thì có bảng chú giải thuật ngữ tài chính quan trọng sẽ tốt hơn ⇒ Hiểu được bối cảnh
- Trước khi làm nhiệm vụ, hãy cung cấp cho LLM các kiến thức đặc thù liên quan - Mô tả API, thông tin domain, dữ liệu, …
-
Bộ nhớ ngắn hạn (trong context) - Trong phiên làm việc hiện tại.
-
Bộ nhớ dài hạn (ngoài context) - Ghi các thông tin và lưu trữ bên ngoài (vd vào files) và load ra khi cần. Hoặc sd các công cụ “bộ nhớ” đặc biệt
-
Compaction - Tóm tắt
- Prompt cẩn thận, ưu tiên giữ đủ thông tin (high recall) trước, rồi tinh chỉnh cho gọn dần.
-
Duy trì mục tiêu, nhắc mục tiêu để tránh lạc hướng.
- Kỹ thuật recitation - tự nhắc lại. Yêu cầu Agent định kỳ tóm tắt lại mục tiêu hiện tại vào cuối ngữ cảnh (như cập nhất checklist, TODO). (Tôi đang làm X, bước tiếp theo cần làm là Y)
-
Giữ lại lỗi trong ngữ cảnh.
-
Thường xuyên review lại flow, logic
- Hiện tại đưa ra các chỉ dẫn x, y, nhưng vài tháng sau có mô hình mới ra đời, nó có thể làm tốt mà không cần chỉ dẫn như vậy.
AI Driven Development
- Agentic Coding: AI code chính, tự lên kế hoạch, suy nghĩ, và thực thi. Con người review
Nguyên tắc cốt lõi
Notes
Agentic Coding không chỉ là dùng một công cụ cụ thể, mà là một cách tiếp cận. Biết chia việc cho AI thế nào, cung cấp thông tin ra sao, kiểm soát thế nào.
Thay vì “làm hết mọi thứ”, hãy nghĩ “dạy cho AI làm việc đó”. Muốn dạy tốt thì mình phải nắm vững vấn đề và biết cách diễn đạt thật logic.
Spec Driven Development
- Phát triển dựa trên đặc tả - tập trung làm spec thật chi tiết và đầy đủ trước, sau đó code sẽ được AI sinh ra dựa trên spec.
- Đầu tiên sẽ phải “định nghĩa rõ ràng mình muốn xây dựng cái gì và vì sao cần nó”, rồi mới đến “xây dựng nó như thế nào”.
- Tách biệt ý tưởng “what, why” khỏi công nghệ (“how”) ⇒ Cho phép tái sử dụng ý tưởng, dễ thay đổi giải pháp hoặc công nghệ triển khai trong tương lai.
Muốn Agent có thể hoạt động như một người lập trình viên trong dự án, thì nó cũng cần phải được cung cấp đầy đủ bối cảnh (yêu cầu tính năng, kiến trúc hệ thống, coding conventions, …) giống như thành viên khác trong dự án.
Nhiệm cụ của chúng ta là đảm bảo Agent có đủ các thông tin trước khi bắt đầu code.
Github Copilot
-
Mode
- Ask mode
- Edit mode
- Agent mode
-
Instruction
-
Chatmode
- Tạo ra các chatmode riêng biệt - Specific tools, …
-
Slash command
Từ ý tưởng, tạo ra được file spec trong thư mục context ⇒ Build plan từ spec file (plan.md) ⇒ Break down tasks (task.md) ⇒ Implement (TDD)
Claude Code
-
Custom Instruction - CLAUDE.md -
/init -
Hook: Cho phép người dùng chạy các lệnh shell được config sẵn vào các thời điểm nhất định của một agent lifecycle
- Vd: Khi cbi chạy tool thì có thể custom PreToolUse hook chặn các sử dụng nguy hiểm.
- Khi agent yêu cầu quyền thực thi thì có thể sử dụng Notification hook để thông báo lên desktop
- Khi agent hoặc subagent hoạt động xong thì có thể dùng Stop hoặc SubagentStop hook chạy các file cụ thể (push noti lên Slack?)
-
Slash command
-
Sub Agents: đội thợ chuyên biệt, sẽ có context, instruction, tools riêng độc lập với agent chính.
- Vd: sub-agent thực hiện nghiên cứu techstack, sử dụng tools websearch. Hoặc subagent thực hiện phân tích spec dự án, lên kế hoạch implement
- Cách tạo: Tạo trong thư mục
.claude/agents @db-expert optimize query, then use @security to audit the changes, then @frontend to update the UI- Nên chia nhỏ nhiệm vụ, Có bước tóm tắt context cho agent chính, định nghĩa rõ sub-agent nào có thể chạy song song, sub-agent nào phụ thuộc lẫn nhau
-
SKILL: Bản thiết kế, workflow tổng thể để thực hiện 1 nhiệm vụ phức tạp. Trong Skill có thể kết hợp nhiều slash command và sub-agents với nhau để thực hiện từ đầu → cuối.
- Khi thấy chúng ta đang lặp đi lặp lại cùng 1 việc nhiều lần. (vd gọi 3 slash commands và 2 subagents để thực hiện nhiệm vụ)
- vd: Skill Frontend Code: nghiên cứu techstack, tổng hợp specs, lên plans implement, code, test, validate, …
Các thông tin liên quan tới dự án (spec, plan, task) lưu trong thư mục ‘context’ ⇒ Dễ truy vấn vào các lần sau
OpenAI Codex
- OpenAI Codex Instruction - AGENTS.md -
/init /model- Assign task cho Codex, đi ngủ :v Codex code xong gửi PR để ta có thể review khi thức dậy
Spec Driven Development
- Truyền thống, code là source of truth. Trong SDD thì spec mới là source of truth. AI dựa trên việc cung cấp spec.
- Writing Spec ⇒ Planning ⇒ Breaking Tasks ⇒ Implementing
- Writing Spec: Dự án cần làm gì và tại sao: Liệt kê mục tiêu, nhu cầu người dùng, tính năng chính, ràng buộc, … - spec.md
- Planning: Kiến trúc hệ thống, các thành phần chính, luồng dữ liệu, lựa chọn công nghệ, thư viện API, cơ sở dữ liệu, … - plan.md - Làm thế nào để thực hiện hóa spec?
- Breaking Tasks: Phân tách kế hoạch kỹ thuật thành các đầu việc nhỏ để thực thi tuần tự. Mỗi tác vụ được mô tả trong 1 file md trong thư mục
tasks/hoặc 1 file tasks.md tổng hợp với đủ bối cảnh và tiêu chí hoàn thành. - Tạo khung dự án, xây dựng module/ chức năng, viết test cho mỗi phần, kiểm thử thích hợp, hoàn thiện tài liệu, … - Implement: AI Agent thực hiện lần lượt các tasks cho đến khi hoàn thành công việc. Nếu thay đổi yêu cầu, cần cập nhật lại Spec ⇒ Plan ⇒ Sinh task mới tương ứng
Tools
- Amazon Kiro
- Đưa yêu cầu, Kiro sẽ tự động tạo ra user stories kèm theo acceptance criteria, technical design document, coding tasks, …
- Github Speckit
- Bộ conventions và templates để mô tả dự án theo cách mà AI có thể hiểu được
- Specify CLI → Khởi tạo spec kit
MoMorph
-
Contract First, Test First, Human Review
-
Vai trò nữa của Senior Engineer trong tương lai sẽ cần phải thiết kế và tối ưu hóa được những flow Agents cho dự án của mình, cân bằng giữa tự động hóa và Human Review