Planning loop là nhịp tim của agent: cơ chế lặp giúp nó suy nghĩ, hành động, quan sát, và lặp lại đến khi đạt mục tiêu. Mô hình phổ biến nhất là ReAct (Reasoning + Acting) — đan xen suy luận và hành động.
ReAct là gì?
Mỗi vòng lặp, agent sinh ra một bộ ba:
Thought (Nghĩ): Mình cần gì tiếp theo?
Action (Hành động): Gọi tool nào, tham số gì?
Observation (Quan sát): Kết quả tool trả về là gì?
... lặp lại cho đến khi ...
Final Answer: Đủ dữ kiện → trả lời.
Điểm hay của ReAct: suy luận được viết ra thành text trước khi hành động, nên agent "nghĩ trước khi làm", ít gọi tool bừa, và bạn debug được đường tư duy.
Ví dụ ReAct đầy đủ
Mục tiêu: "Thành phố nào trong 3 chi nhánh có doanh thu cao nhất?"
Thought: Cần dữ liệu doanh thu 3 chi nhánh. Query DB.
Action: sql_query("SELECT city, revenue FROM branches")
Observation: [HN: 4.2, HCM: 5.1, ĐN: 2.0]
Thought: HCM cao nhất (5.1). Đã đủ, không cần tool nữa.
Final Answer: TP.HCM có doanh thu cao nhất (5.1 tỷ).
Agent tự quyết định số bước — có bài toán 1 vòng, có bài toán 10 vòng.
Vòng lặp ở dạng pseudocode
def run_agent(goal, max_steps=8):
history = [system_prompt, goal]
for step in range(max_steps):
response = llm(history, tools) # model nghĩ + đề nghị action
if response.is_final: # tiêu chí dừng 1
return response.answer
result = execute_tool(response.tool, # code thực thi
response.args)
history.append(response.thought)
history.append(result) # observation vào memory
return "Đã đạt giới hạn bước." # tiêu chí dừng 2 (an toàn)
Hai điều bắt buộc: một điều kiện dừng khi xong và một giới hạn số bước (max_steps) để không lặp vô tận.
Các bước triển khai một ReAct loop
- Ghép system prompt + mục tiêu làm history khởi đầu.
- Vòng for có
max_steps(đừng dùng while không giới hạn). - Mỗi vòng: gọi LLM kèm danh sách tools.
- Nếu LLM báo final → trả kết quả, thoát.
- Nếu LLM gọi tool → code thực thi, đưa observation trở lại history.
- Cắt/tóm history nếu dài (áp dụng Bài 4).
- Log lại mỗi Thought/Action/Observation để debug.
Khung tư duy: khi nào ReAct hợp lý?
ReAct mạnh khi bước tiếp theo phụ thuộc kết quả bước trước (khám phá, tra cứu nhiều nguồn). Nếu bạn biết trước toàn bộ kế hoạch, mô hình plan-execute (Bài 6) hiệu quả hơn vì ít lời gọi LLM.
Checklist một ReAct loop an toàn
- [ ] Có
max_steps(giới hạn cứng). - [ ] Có điều kiện dừng khi đạt mục tiêu.
- [ ] Observation được đưa lại vào history.
- [ ] Có cắt/tóm history khi dài.
- [ ] Log đầy đủ Thought/Action/Observation.
- [ ] Xử lý trường hợp tool lỗi (đưa lỗi lại cho model).
Sai lầm thường gặp
- Quên
max_steps: agent kẹt trong vòng lặp, gọi tool đi tool lại, đốt token. Đây là lỗi tốn tiền nhất. - Không đưa observation lại cho model: model không thấy kết quả, lặp lại action y hệt.
- Để agent tự quyết định dừng mà không có chốt chặn cứng: một điểm dừng "mềm" (model tự nói xong) chưa đủ; phải có
max_stepscứng. - Không log Thought: khi agent làm sai, bạn không biết nó "nghĩ" sai ở đâu.
- Nhồi cả log thô của tool vào history: tràn context sau vài vòng. Cắt gọn observation.