AI Core cho lập trình viên/Agent trong AI: LLM + tool trong vòng lặp quyết định
49/54
Bài 49 / 54~12 phútTầng quyết định của engineerMiễn phí lượt xem

Agent trong AI: LLM + tool trong vòng lặp quyết định

Agent không phải phép màu: LLM + tool + vòng lặp quyết định. Mỗi vòng thêm chi phí và nhân xác suất lỗi — nên nhiều bài toán chỉ cần một lần gọi model là đủ.

TL;DR: "Agent" không phải model thông minh hơn — nó là kiến trúc: cùng một LLM, thêm danh sách tool (mô tả bằng text), đặt vào một vòng lặp: model đọc trạng thái, quyết định gọi tool hay trả lời, kết quả tool nối vào context, rồi lặp lại. "Quyết định" đó vẫn chỉ là sinh đúng định dạng gọi hàm — cùng cơ chế next-token prediction. Agent vượt giới hạn một lần gọi (tra dữ liệu mới, gọi API, tính toán thật), nhưng cái giá là mỗi vòng cộng thêm token/độ trễ và nhân dồn xác suất lỗi. Bài toán một-phát-ăn-ngay (phân loại, trích xuất, tóm tắt) không cần agent — chỉ dùng khi số bước không biết trước và phụ thuộc kết quả bước trước.

Team dev một ngân hàng dựng bot nội bộ trả lời QA về trạng thái giao dịch test trên UAT. Câu hỏi đầu dễ: "Giao dịch mã TXN-88213 đang ở trạng thái gì?" — dán kết quả một lần gọi API vào prompt, hỏi model, xong. QA hỏi tiếp: "Hôm nay user U-4471 có giao dịch nào bị treo (pending) quá 10 phút không, và log lỗi ghi gì?" Câu này không trả lời được bằng cách dán sẵn một cục dữ liệu — phải để model tự tra nhiều lần.

Bài này bóc phép màu "agent": ghép từ gì, mạnh hơn một lần gọi ở đâu, và tốn thêm gì để đổi lấy sức mạnh đó.

1. Analogy — nhờ trợ lý đặt vé máy bay

Bạn gọi tổng đài hỏi: "Chuyến VN209 ngày 15/8 giá bao nhiêu?" Nhân viên tra bảng giá, đọc ngay con số — một câu hỏi, một câu trả lời.

Nếu giao việc mở hơn: "Tìm chuyến rẻ nhất tuần sau, hết chỗ phổ thông thì thử ngày kế, tìm được thì đặt luôn" — nhân viên phải tra giá ngày thứ nhất, hết chỗ thì tự quyết định tra ngày kế, so sánh các lần tra rồi mới đặt — mỗi bước phụ thuộc kết quả bước trước, và phải tự biết dừng khi nào.

Đời thườngAgent
Hỏi giá một chuyến cụ thể, đọc ngay từ bảng có sẵnMột lần gọi model, không cần vòng lặp
Giao việc mở, tự tra nhiều lần dựa trên kết quả lần trướcModel tự quyết định gọi tool nào tiếp theo
Phải biết dừng đúng lúc, không tra vô thời hạnVòng lặp cần giới hạn số bước + điểm dừng an toàn
Mỗi cuộc gọi tra thêm tốn thời gian, cước phíMỗi vòng lặp cộng thêm token: chi phí + độ trễ
💡 Cách nhớ

Một lần gọi model giống hỏi giá một chuyến bay cụ thể. Agent giống giao việc mở cho người phải tự tra nhiều lần rồi mới quyết định — mạnh hơn, nhưng tốn hơn và có thể tra sai đường.

2. Cơ chế: bóc phép màu "agent" ra ba mảnh

Agent không phải một loại model khác hay một "bộ não" tách riêng khỏi LLM. Nó ghép ba thứ:

  1. Một LLM — vẫn đúng cơ chế cũ: dự đoán token kế tiếp khả dĩ nhất từ văn bản đứng trước.
  2. Danh sách tool — mô tả bằng văn bản (tên hàm, tham số, tác dụng), đưa vào cùng prompt. Model không "biết gọi hàm" — nó chỉ học rằng khi cần dữ liệu ngoài, trả lời đúng là sinh text theo khuôn gọi hàm đó.
  3. Một vòng lặp ở tầng hệ thống, ngoài model: đọc trạng thái, nhận quyết định "trả lời" hay "gọi tool X", nếu gọi tool thì hệ thống thực thi tool thật, nối kết quả vào context, rồi lặp lại.

"Quyết định" gọi tool nào không phải suy luận tách biệt — nó vẫn là next-token prediction, đúng cơ chế bài hallucination đã dạy.

Model không có khái niệm đúng/sai, chỉ chọn token khả dĩ nhất theo phân phối xác suất. Khi phân phối không neo vững, model vẫn phải sinh một token — trong agent, đó có thể là một lệnh gọi tool sai.

Vòng lặp agent: từ trạng thái hiện tại, model chọn trả lời hoặc sinh text gọi hàm; hệ thống thực thi tool thật rồi nối kết quả vào context và quay lại bước quyết định cho vòng kế tiếp

function runAgent(question, tools, maxRounds):
    context <- [question]                        -- lich su: cau hoi + ket qua tool truoc do
    for round in 1..maxRounds:
        decision <- LLM.generate(context, tools)  -- van la du doan token ke tiep
        if decision is "answer":
            return decision.content
        else:
            toolName, args <- parse(decision)      -- doc dung dinh dang goi ham model sinh ra
            result <- executeReal(toolName, args)  -- goi API/DB THAT, ngoai pham vi model
            context <- context + [decision, result]
    return "STOP: vuot maxRounds, chua co cau tra loi chac chan"
// Time: O(maxRounds) lan goi model    Space: O(maxRounds) token tich luy trong context

LLM.generate là nơi duy nhất model được gọi — phần còn lại là code hệ thống. Thiếu maxRounds, một model liên tục chọn "gọi tool" có thể lặp vô thời hạn, không bao giờ sinh "answer".

3. Sức mạnh: vượt giới hạn của một lần gọi

Một lần gọi model tĩnh bị giới hạn bởi đúng những gì nằm trong prompt cộng dữ liệu huấn luyện: không tra được dữ liệu mới hoặc riêng tư, không gọi hành động thật ra ngoài (ghi log, gửi email), không tính toán chính xác trên dữ liệu lớn khi số bản ghi không biết trước.

Agent giải quyết cả ba bằng cách để model yêu cầu hệ thống làm hộ — tra API, chạy query, tính toán — rồi đọc kết quả thật để quyết định bước tiếp theo. Câu hỏi thứ hai của QA không trả lời được bằng một lần gọi tĩnh vì đúng lý do này: số giao dịch bị treo không biết trước, cần tra thêm log cho từng giao dịch tìm được.

4. Cái giá: token cộng dồn và lỗi nhân dồn

4.1 Chi phí và độ trễ tăng theo cấp bậc

Mỗi vòng, hệ thống gửi lại toàn bộ lịch sử cho model — model không nhớ giữa các lần gọi. Giả sử (số minh hoạ) mỗi vòng cộng thêm khoảng 500 token: vòng 1 gửi khoảng 500, vòng 2 khoảng 1000, vòng 3 khoảng 1500... Tổng sau 5 vòng là 500 cộng 1000 cộng 1500 cộng 2000 cộng 2500, bằng 7500 — gấp 15 lần một lần gọi đơn, không phải gấp 5. Độ trễ cộng dồn tương tự vì mỗi vòng chạy tuần tự, không song song được.

4.2 Xác suất lỗi nhân dồn

Giả sử mỗi bước có xác suất đúng 95%. Với chuỗi 5 bước phụ thuộc nhau, xác suất toàn bộ chuỗi đúng là 0,95 nhân với chính nó 5 lần, xấp xỉ 77% — không phải 95%. Nếu một bước bịa một con số, bước sau đọc nó như sự thật đã xác nhận và xây tiếp trên nền sai; không bước nào tự kiểm tra lại.

Đây là lý do giới hạn số vòng + điểm dừng an toàn (mục 2) bắt buộc: thiếu nó, agent vừa tốn chi phí tăng theo cấp bậc, vừa nhân dồn xác suất sai, vừa không tự dừng để báo "tôi không chắc".

5. Khi nào cần agent, khi nào chỉ cần một lần gọi?

Phần lớn bài toán hằng ngày là một-phát-ăn-ngay: toàn bộ thông tin cần đã nằm gọn trong một prompt.

Bài toánCách làmVì sao
Phân loại phản hồi tích cực/tiêu cựcMột lần gọiInput tự đủ, không cần dữ liệu ngoài
Trích xuất tên/ngày/số tiền từ hoá đơnMột lần gọiThông tin cần đã nằm trong văn bản đưa vào
Tóm tắt một tài liệuMột lần gọiKhông cần hành động hay dữ liệu ngoài
Tra + tổng hợp nhiều nguồn, số lần tra không biết trướcAgentSố bước phụ thuộc kết quả bước trước
Tự đoán trước khi đọc tiếp

Quay lại câu hỏi QA ở đầu bài: "Hôm nay user U-4471 có giao dịch nào bị treo quá 10 phút không, và log lỗi ghi gì?" Bot chỉ có một tool: gọi API tra theo mã giao dịch. Dựa vào bảng trên, một lần gọi model có đủ trả lời không, hay cần vòng lặp agent? Tự trả lời trước khi đọc tiếp.

Câu hỏi đó cần agent: số giao dịch bị treo không biết trước, nên không thể dán sẵn một cục dữ liệu đủ dùng — phải tra danh sách trước, rồi với mỗi giao dịch tìm được lại cần một lần gọi tool khác lấy log tương ứng. Ngược lại, câu hỏi đầu ("giao dịch TXN-88213 đang ở trạng thái gì?") chỉ cần một lần tra theo mã đã biết — không cần vòng lặp.

6. Pitfall tổng hợp

Nhầm 1 — coi "agent thông minh hơn" nên dùng cho mọi tính năng AI: agent đánh đổi chi phí/độ trễ (mục 4) lấy khả năng xử lý số bước không biết trước (mục 3). Dùng cho bài toán phân loại chỉ cộng thêm chi phí và điểm hỏng.

✅ Áp bảng tiêu chí mục 5 trước: dữ liệu cần đã nằm gọn trong một prompt thì một lần gọi luôn rẻ hơn, ít điểm hỏng hơn.

Nhầm 2 — không đặt giới hạn số vòng, tin model "tự biết dừng": model không có tín hiệu nội tại phân biệt "đã đủ dữ liệu" với "cứ tra thêm cho chắc".

✅ Luôn đặt maxRounds cứng (pseudocode mục 2) và một nhánh dừng an toàn — thà báo không chắc còn hơn lặp vô thời hạn hoặc bịa câu trả lời tự tin.

📚 Deep Dive — nguồn tham khảo
  • ReAct: Synergizing Reasoning and Acting in Language Models (Yao và cộng sự, 2022) — bài báo gốc mô tả mẫu hình xen kẽ "suy luận" và "hành động" mà vòng lặp mục 2 dựa trên.
  • Building Effective AI Agents (Anthropic) — khuyến nghị bắt đầu từ giải pháp đơn giản nhất; nói thẳng hệ thống agent đánh đổi độ trễ/chi phí và có rủi ro lỗi nhân dồn, đúng nội dung mục 4.

Ghi chú: cả hai nguồn nói về cơ chế và nguyên tắc quyết định, không gắn với framework cụ thể — khớp phạm vi bài này.

7. Liên hệ các bài khác

8. Tóm tắt

  • Agent = LLM + danh sách tool mô tả bằng text + một vòng lặp ở tầng hệ thống, không phải một loại model khác.
  • "Quyết định" gọi tool hay trả lời vẫn là next-token prediction — cùng cơ chế gây hallucination.
  • Agent vượt giới hạn một lần gọi: tra dữ liệu mới, gọi API thật, tính toán chính xác trên dữ liệu lớn.
  • Mỗi vòng cộng thêm token/độ trễ tăng nhanh hơn tuyến tính; xác suất đúng cả chuỗi giảm theo cấp số nhân qua các bước phụ thuộc nhau.
  • Vòng lặp có thể không hội tụ, nên luôn cần giới hạn số vòng + một điểm dừng an toàn.
  • Chỉ dùng agent khi số bước không biết trước, phụ thuộc kết quả bước trước; bài một-phát-ăn-ngay không cần agent.

9. Tự kiểm tra

Tự kiểm tra
Q1
Vì sao "model quyết định gọi tool hay trả lời" vẫn là next-token prediction, không phải một bộ não suy luận riêng?

Model chỉ sinh token kế tiếp khả dĩ nhất, đầu ra được huấn luyện để khớp khuôn "gọi hàm" khi cần dữ liệu ngoài — không có module suy luận nào tách biệt. Vòng lặp và việc thực thi tool thật mới là phần ngoài model. Vì vậy agent thừa hưởng đúng rủi ro của next-token prediction: phân phối không neo vững thì model vẫn sinh ra một token, có thể là lệnh gọi tool sai.

Q2
Một agent chạy 3 vòng lặp phụ thuộc nhau, mỗi vòng đúng 90%. Xác suất cả chuỗi đúng là bao nhiêu, vì sao thấp hơn 90%?

Xấp xỉ 0,9 nhân ba lần, khoảng 73%. Vòng sau đọc kết quả vòng trước như dữ liệu đã "chốt" — vòng 1 sai thì vòng 2 xây trên nền sai, không bước nào kiểm tra lại. Càng nhiều vòng phụ thuộc, xác suất đúng của cả chuỗi càng giảm nhanh hơn xác suất một bước đơn lẻ.

Q3
Vì sao vòng lặp agent bắt buộc có giới hạn số vòng tối đa, thay vì để model tự quyết định khi nào dừng?

Model không có tín hiệu nội tại phân biệt "đủ dữ liệu" với "cứ tra thêm cho chắc" — nó chỉ sinh token theo phân phối xác suất đã học ở mỗi bước, nên có thể tiếp diễn không có điểm dừng tự nhiên. Giới hạn số vòng cộng một nhánh dừng an toàn là cách duy nhất đảm bảo hệ thống luôn kết thúc trong chi phí dự đoán được trước.

Q4
Cho hai bài toán: (a) phân loại phản hồi tích cực/tiêu cực, (b) tìm mọi đơn hàng trễ giao trong tuần và gửi email nhắc từng nhà cung cấp. Bài nào cần agent?

Bài (a) không cần agent: toàn bộ thông tin cần đã nằm gọn trong đoạn text, một lần gọi là đủ. Bài (b) cần agent: số đơn hàng trễ không biết trước, và mỗi đơn tìm được lại cần một hành động thật khác tới đúng nhà cung cấp tương ứng — số bước phụ thuộc kết quả bước tra cứu trước.

Q5
Vì sao chi phí token của agent 5 vòng lặp có thể gấp nhiều lần 5 lần chi phí một lần gọi đơn, không phải đúng gấp 5?

Mỗi vòng gửi lại toàn bộ lịch sử tích luỹ từ các vòng trước, nên lượng token mỗi vòng sau lớn hơn vòng trước — tổng qua 5 vòng cộng dồn kiểu 1 cộng 2 cộng 3 cộng 4 cộng 5 đơn vị, bằng 15, không phải 5 đơn vị bằng nhau cộng lại. Đó là lý do chi phí và độ trễ tăng nhanh hơn tuyến tính theo số vòng.

Q6
Một bot chỉ cần trả lời "hoá đơn này tổng cộng bao nhiêu tiền" từ văn bản hoá đơn dán sẵn trong prompt — có cần xây thành agent không?

Không cần. Toàn bộ thông tin cần đã nằm trong prompt, không cần tra thêm dữ liệu ngoài hay gọi hành động nào ra bên ngoài, và số bước không phụ thuộc kết quả trung gian nào chưa biết trước. Xây agent ở đây chỉ cộng thêm chi phí và rủi ro lỗi nhân dồn mà không đổi lại lợi ích nào.

Bài tiếp theo: Eval & golden set — đo thay vì tin demo

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên

Bài tiếp theo

Eval & golden set — đo AI feature thay vì tin demo