---
title: "Mô hình ReAct: Kết hợp Lý luận và Hành động (Reasoning + Acting) trong AI Agent"
description: "Khám phá kiến trúc ReAct kinh điển: Cách đan xen chuỗi Suy nghĩ (Thought) → Hành động (Action) → Quan sát (Observation) để xây dựng tác tử AI tự động tra cứu, tương tác API và giải quyết bài toán phức tạp."
date: "2026-09-19"
author:
  name: "Nguyen Pham"
  role: "Xin chào. Mình thích lập trình và công nghệ. Đây là blog mình chia sẻ lại các kiến thức về lập trình, công nghệ."
  avatar: "http://0.gravatar.com/avatar/6fb61398e24046b34e13870dd6c357b9?s=128&d=mm&r=g"
category: "AI"
tags: ["AI", "AI Agent", "ReAct", "Tool Use", "Architecture"]
coverImage: "/blog/covers/react.png"
featured: false
readingTime: "7 min read"
---

Trong lĩnh vực phát triển Tác tử AI (AI Agents), **ReAct** (viết tắt của **Reasoning + Acting** - Lý luận kết hợp Hành động) là mô hình kiến trúc nền tảng và có sức ảnh hưởng sâu rộng nhất. Được đề xuất bởi nhóm tác giả Yao et al. (Đại học Princeton & Google Research, 2022), ReAct mở ra một kỷ nguyên mới, biến LLM từ một mô hình chỉ biết sinh văn bản bị động thành một tác tử chủ động có khả năng tương tác với môi trường bên ngoài để giải quyết các vấn đề thế giới thực.

---

## 1. Vấn đề của các mô hình AI trước ReAct

Trước khi ReAct ra đời, hai hướng tiếp cận chính để giải quyết bài toán với LLM đều bộc lộ những điểm yếu chí tử:

1. **Chỉ suy luận (Reasoning-only - như CoT):** 
   - Mô hình chỉ suy nghĩ dựa trên kiến thức nội tại đã được đóng băng trong trọng số (*parametric knowledge*). Khi gặp thông tin mới, thông tin cần cập nhật thời gian thực hoặc cần tra cứu cơ sở dữ liệu riêng, mô hình dễ dàng sinh ra ảo giác (*hallucination*) và tự huyễn hoặc các bước logic sai.
2. **Chỉ hành động (Acting-only):** 
   - Mô hình được kết nối với công cụ nhưng thiếu khả năng phân tích ngữ cảnh trước và sau khi gọi công cụ. Kết quả là tác tử gọi hàm bừa bãi, không biết xử lý khi đầu ra API trả về lỗi hoặc không đúng như kỳ vọng.

---

## 2. Bản chất kiến trúc ReAct: Vòng lặp Tư duy & Hành động

ReAct kết hợp sức mạnh tổng hợp của cả hai yếu tố trên bằng cách đan xen một chu kỳ lặp 3 bước:

$$\text{Thought (Suy nghĩ)} \longrightarrow \text{Action (Hành động)} \longrightarrow \text{Observation (Quan sát)}$$

1. **Thought (Suy nghĩ):** 
   - Tác tử phân tích tình trạng hiện tại của bài toán: *"Tôi đã có thông tin gì? Tôi còn thiếu thông tin gì? Bước tiếp theo cần làm gì để tiến gần hơn đến mục tiêu?"*
2. **Action (Hành động):** 
   - Dựa trên suy nghĩ ở bước 1, tác tử quyết định thực hiện một hành động cụ thể. Hành động này thường là gọi một công cụ ngoại vi với các tham số rõ ràng: ví dụ `Search[từ khóa]`, `Calculate[biểu thức]`, hoặc `QueryDB[câu lệnh SQL]`.
3. **Observation (Quan sát):** 
   - Hệ sinh thái phần mềm thực thi hành động đó và nạp kết quả thực tế trở lại vào ngữ cảnh của Agent. 
4. **Vòng lặp tiếp diễn:** 
   - Agent đọc kết quả *Observation* mới nhận được, tiếp tục sinh ra *Thought* tiếp theo để đánh giá xem đã đủ thông tin trả lời người dùng chưa, hay cần thực hiện một *Action* mới.

---

## 3. Ví dụ luồng thực thi mẫu của ReAct

Giả sử người dùng hỏi: *"Tổng thống hiện tại của nước Pháp sinh năm bao nhiêu và năm nay ông ấy bao nhiêu tuổi?"*

```text
User: Tổng thống hiện tại của nước Pháp sinh năm bao nhiêu và năm nay ông ấy bao nhiêu tuổi?

Thought 1: Tôi cần tìm xem ai đang là Tổng thống Pháp hiện nay.
Action 1: Search["Tổng thống hiện tại của nước Pháp"]
Observation 1: Emmanuel Macron là Tổng thống Cộng hòa Pháp kể từ ngày 14 tháng 5 năm 2017.

Thought 2: Bây giờ tôi đã biết Tổng thống là Emmanuel Macron. Tôi cần tìm năm sinh của ông ấy.
Action 2: Search["Ngày sinh của Emmanuel Macron"]
Observation 2: Emmanuel Jean-Michel Frédéric Macron sinh ngày 21 tháng 12 năm 1977.

Thought 3: Emmanuel Macron sinh năm 1977. Năm hiện tại là năm 2026. Tôi cần tính tuổi: 2026 - 1977.
Action 3: Calculator["2026 - 1977"]
Observation 3: 49

Thought 4: Tôi đã có đầy đủ thông tin: Tổng thống Pháp là Emmanuel Macron, sinh năm 1977 và hiện tại ông 49 tuổi. Tôi có thể đưa ra câu trả lời cuối cùng.
Action 4: Finish["Tổng thống hiện tại của nước Pháp là Emmanuel Macron, sinh ngày 21/12/1977. Tính đến năm 2026, ông 49 tuổi."]
```

---

## 4. Khi nào nên dùng và Khi nào nên tránh?

### Rất nên dùng khi:
- **Tác vụ cần truy xuất dữ liệu động:** Tìm kiếm tin tức mới nhất, kiểm tra giá cổ phiếu, tra cứu kho hàng hoặc lịch biểu.
- **Quy trình điều tra & nghiên cứu đa bước:** Cần đào sâu thông tin, truy vấn nhiều nguồn và liên kết các mẩu dữ liệu rời rạc.
- **Hệ thống tương tác với API thế giới thực:** Tự động gửi email, đặt vé, cập nhật trạng thái đơn hàng trên cơ sở dữ liệu.

### Cần tránh hoặc hạn chế khi:
- **Hỏi đáp sự kiện bất biến đơn giản:** Câu hỏi lý thuyết cơ bản không cần tốn 3–4 vòng gọi công cụ.
- **Ứng dụng yêu cầu độ trễ phản hồi cực thấp:** Mỗi vòng lặp ReAct tốn ít nhất 1 lần gọi LLM + 1 lần gọi API ngoài. 3 vòng lặp có thể mất 5–10 giây.
- **Khi các công cụ bên ngoài không ổn định hoặc độ tin cậy thấp:** Lỗi từ API bên thứ ba có thể làm tác tử rơi vào vòng lặp vô tận nếu không có cơ chế timeout / max iterations chặt chẽ.

---

## 5. Thực hành tốt nhất khi xây dựng ReAct Agent

1. **Luôn giới hạn số lần lặp tối đa (`max_iterations`):**
   - Đặt ngưỡng chặn (thường là 5–10 vòng lặp). Nếu sau số lần này tác tử chưa tìm ra đáp án, hãy kích hoạt fallback yêu cầu hỗ trợ hoặc thông báo cho người dùng.
2. **Cung cấp tài liệu mô tả công cụ (Tool Docstrings) thật rõ ràng:**
   - LLM quyết định gọi công cụ nào hoàn toàn dựa trên phần mô tả (*description*) của công cụ đó. Hãy viết mô tả chi tiết: công cụ dùng để làm gì, nhận tham số nào và trả về định dạng gì.
3. **Xử lý lỗi ngoại lệ an toàn ở tầng Observation:**
   - Khi API gặp lỗi (ví dụ 404, Timeout), đừng để hệ thống crash văng lỗi stack trace. Hãy trả về thông báo lỗi thân thiện vào khối *Observation* (ví dụ: *"Lỗi: Không tìm thấy kết quả phù hợp cho từ khóa X, vui lòng thử từ khóa khác"*) để Agent có thể đọc lỗi và tự điều chỉnh hành vi.

---

## 6. Tài liệu tham khảo quan trọng

- **Yao et al. (2022):** *ReAct: Synergizing Reasoning and Acting in Language Models* (arXiv:2210.03629).
- **Schick et al. (2023):** *Toolformer: Language Models Can Teach Themselves to Use Tools* (arXiv:2302.04761).
- **Khung phát triển phổ biến:** **LangChain** Agent Framework, **LlamaIndex** ReAct Query Engine, **AutoGPT**, và **OpenAI Assistants / Responses API**.
