<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>nguyennlt.com</title><description>AI, SEO và Digital Marketing cho thị trường Việt Nam</description><link>https://nguyennlt.com/</link><language>vi-VN</language><item><title>Harness Engineering là gì? Lớp kỹ thuật biến một LLM thành AI Agent thực sự</title><link>https://nguyennlt.com/ai/harness-engineering-la-gi/</link><guid isPermaLink="true">https://nguyennlt.com/ai/harness-engineering-la-gi/</guid><description>Harness Engineering là lớp bọc quanh LLM: tool, memory, vòng lặp và điểm dừng. Nó biến model thành AI Agent, không chỉ chatbot biết trả lời.</description><pubDate>Mon, 17 Aug 2026 11:48:07 GMT</pubDate><content:encoded>&gt; **Trả lời nhanh:** Harness Engineering là kỷ luật thiết kế lớp bọc quanh một LLM (Large Language Model): chọn tool, nạp context, chạy vòng lặp, kiểm tra kết quả và quyết định khi nào dừng. Model chỉ sinh chữ. Harness (lớp điều khiển hành vi agent) mới cho phép hệ thống hành động, nhớ tiến độ, tự kiểm và dừng khi đạt mục tiêu hoặc chạm giới hạn. LangChain viết tắt: agent bằng model cộng harness. Thiếu lớp đó, bạn đang có một chatbot hoặc một lần gọi model, dù nhãn sản phẩm viết AI Agent.

Nếu bạn đang xem sản phẩm gắn nhãn AI Agent, phần lớn bài chỉ khoe model. Model này mới ra, model kia điểm cao hơn. Mở ra thì nó trả lời lịch sự rồi đứng: không tra được đơn hàng, không nhớ đã kiểm tới đâu, không biết lúc nào phải gọi người thật.

Chỗ đó dễ tưởng do model chưa đủ. Thường là hệ thống chưa được bọc để hành động, nhớ tiến độ, và biết lúc dừng. Mình viết cho người không làm kỹ thuật, nên không có đoạn cấu hình coding agent. Cùng mình tìm hiểu tiếp nhé.

_Bài này là cách mình đọc tài liệu công khai tới ngày 17/8/2026, không phải kết quả đo từ hệ thống mình tự vận hành._

![Ba khối sketchnote: Model sinh chữ và nghĩ; Harness gồm tool, nhớ, kiểm và dừng; Agent hành động được và biết dừng. Dấu cộng và dấu bằng đọc thành Agent bằng Model cộng Harness.](/images/blog/harness-engineering-la-gi/model-plus-harness.webp)

_Model sinh chữ. Harness cho phép hành động, nhớ, kiểm và dừng. Cộng hai thứ đó mới ra agent._

## Harness Engineering là gì, và harness khác model ở chỗ nào?

Harness Engineering (kỷ luật thiết kế lớp điều khiển hành vi quanh model) là phần bao quanh model, không phải bản thân model. [LangChain định nghĩa harness](https://www.langchain.com/blog/the-anatomy-of-an-agent-harness) là toàn bộ code, cấu hình và logic thực thi không thuộc về model. Cũng theo bài đó, một model trần chưa phải agent; nó thành agent khi harness cấp cho nó state, khả năng thực thi tool, vòng phản hồi để thấy kết quả thật, và những giới hạn có thể cưỡng chế được. Cách viết tắt bài đó dùng, được nhắc lại nhiều trong năm 2026: agent bằng model cộng harness.

Một chỗ dễ nhầm tên: harness ở đây chỉ bộ khung điều khiển, không liên quan tới Harness.io, sản phẩm cùng tên trong lĩnh vực triển khai code.

Cái tên còn mới. Ngày 5/2/2026, [Mitchell Hashimoto viết](https://mitchellh.com/writing/my-ai-adoption-journey) rằng anh gọi thói quen của mình là harness engineering: mỗi lần agent làm sai, anh sửa luôn môi trường quanh nó để lỗi khó lặp lại. Hai dạng anh kể là viết lại file hướng dẫn cho agent, ví dụ AGENTS.md, và làm sẵn tool để agent tự biết mình sai. Anh nói thẳng là chưa rõ ngành đã có thuật ngữ thống nhất chưa. [Trang Wikipedia về agent harness](https://en.wikipedia.org/wiki/Agent_harness) ghi nhận việc ai đặt ra cụm từ này vẫn còn tranh luận, và các kỹ thuật tương tự đã có trước cái tên.

Bỏ hết từ kỹ thuật thì thế này. Model là một bạn thực tập rất nhanh, viết gì cũng trôi chảy. Harness là bản mô tả việc, bộ chìa khóa bạn ấy được phép dùng, checklist phải chạy trước khi báo xong, và quy định rằng bạn ấy không được tự chuyển tiền hoàn cho khách nếu chưa có người duyệt. Thực tập giỏi hơn thì tốt, nhưng thiếu mấy thứ đó thì không ai dám giao việc thật.

![Model như thực tập viết nhanh; Harness gồm mô tả việc, chìa khóa tool, checklist và điểm dừng. Thiếu harness thì không giao việc thật.](/images/blog/harness-engineering-la-gi/intern-vs-harness-kit.webp)

_Model viết nhanh. Harness mới là bản mô tả việc, chìa khóa, checklist và lúc phải dừng._

## Vì sao một LLM chưa phải là AI Agent?

Vì model không với tới thế giới bên ngoài: nó nhận chữ và ảnh, rồi trả về chữ. Vẫn theo [bài của LangChain](https://www.langchain.com/blog/the-anatomy-of-an-agent-harness), một model tự nó không giữ được state bền (tiến độ đã lưu), không thực thi code và không truy cập được thông tin đang thay đổi ngoài kia. Ba việc đó nằm ở lớp bọc.

![Cùng câu hỏi hoàn tiền: Model chỉ đoán rồi dừng; Agent trong harness mở đơn và đối chiếu chính sách thật rồi mới trả lời.](/images/blog/harness-engineering-la-gi/model-vs-agent-order.webp)

_Model trả lời bằng chữ. Agent phải mở được hệ thống thật trước khi kết luận._

Còn agent, tức chương trình tự gọi tool và lặp bước để hoàn thành một việc, thì phải làm được. [IBM định nghĩa AI agent](https://www.ibm.com/think/topics/ai-agents) là hệ thống tự động thực hiện tác vụ bằng cách tự thiết kế workflow với các tool sẵn có. [Hướng dẫn thực hành của OpenAI](https://openai.com/business/guides-and-resources/a-practical-guide-to-building-ai-agents/) tách một agent thành ba thành phần: model, tools và instructions. Model nằm trong trọng số; tools và phần lớn vòng chạy quanh instructions nằm trong harness.

Mình đã viết riêng một bài về ranh giới này: [chatbot dừng ở câu trả lời](/ai/ai-agent-khac-chatbot-o-diem-nao), còn agent tiếp tục tới khi đạt mục tiêu hoặc chạm giới hạn. Phần tiếp tục đó do harness tạo ra, không phải do model thông minh thêm.

Nhịp phổ biến nhất của phần tiếp tục là [ReAct (Reasoning and Acting)](https://arxiv.org/abs/2210.03629), công bố năm 2022: nghĩ, hành động, quan sát, rồi nghĩ tiếp. Model đề xuất hành động; harness thực thi rồi đưa kết quả quan sát ngược lại. ReAct là một pattern phổ biến, không phải kiến trúc duy nhất.

Giả sử bạn hỏi: đơn này có được hoàn tiền không? Một model sẽ viết đoạn văn lịch sự, nghe hợp lý, dựa trên chính sách nó đoán là của bạn. Một agent thì phải mở đơn hàng đó ra, đối chiếu chính sách thật, rồi mới trả lời hoặc hành động. Phần mở đơn và phần hành động là việc của harness.

## Harness làm những việc gì quanh model?

Năm mục dưới đây là các việc của lớp bọc, không phải năm sản phẩm bạn phải mua. Mình liệt kê để bạn nhận ra hệ thống hụt ở đâu khi chạy nửa vời rồi đứng.

![Bốn bước: Model nghĩ, Harness gọi tool, Harness kiểm kết quả, rồi dừng hoặc lặp. Mũi tên nét đứt quay về bước một, có dấu dừng khi chạm giới hạn.](/images/blog/harness-engineering-la-gi/think-act-check-stop.webp)

_Đây là vòng nghĩ – hành – kiểm – dừng quanh model. Hai việc harness còn lại ở trên, nhớ và hàng rào an toàn, không nằm trên ảnh này._

### Cho phép hành động, không chỉ trả lời

Model không tự gọi API (Application Programming Interface). Nó chỉ nói ra muốn dùng tool nào với tham số nào, còn ứng dụng của bạn mới là bên thực thi: đó là function calling, tức cơ chế model yêu cầu ứng dụng gọi một hàm hoặc API. Nhưng có tool chưa đủ: [IBM nói rõ](https://www.ibm.com/think/topics/ai-agents-vs-ai-assistants) riêng khả năng gọi tool không biến một LLM thành agent, vì hệ thống còn phải tự quyết định dùng tool nào, khi nào và kết hợp ra sao để đạt mục tiêu. Chỗ quyết định đó nằm trong harness.

### Nhớ đúng thứ, đúng lúc

Context window (cửa sổ ngữ cảnh) không phải memory: nó là lượng thông tin nhét được vào một lần gọi model. Memory (bộ nhớ) là các quyết định: lưu gì, lấy lại lúc nào, cho ai, giữ bao lâu. [Databricks mô tả](https://www.databricks.com/blog/ai-harness) đây là việc của lớp bọc: harness có thể ghi tiến độ ra file hoặc một kho riêng để model không phải đọc lại toàn bộ đoạn hội thoại ở mỗi lượt, một đoạn chỉ dài thêm và càng dài càng dễ trôi mất chi tiết.

![Cột trái: context window là bàn đầy một cuộn hội thoại cho một lần gọi. Cột phải: memory là tủ hồ sơ với quyết định lưu gì và lấy lúc nào.](/images/blog/harness-engineering-la-gi/context-window-vs-memory.webp)

_Context window là chỗ nhét một lần gọi. Memory là quyết định lưu gì và lấy lại lúc nào._

### Lặp bước và biết lúc dừng

Vòng lặp cần đi kèm điểm dừng: số bước tối đa, thời gian tối đa, điều kiện được coi là xong. [Cloudflare mô tả](https://developers.cloudflare.com/agents/harnesses/) chính harness là nơi quyết định agent nên chạy tiếp hay dừng. Ngày 26/11/2025, [Anthropic viết về harness cho tác vụ chạy dài](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents): những việc kéo dài qua nhiều context window, và thiếu lớp bọc tử tế thì agent hay mắc hai lỗi, làm quá nhiều thứ cùng lúc và tuyên bố xong quá sớm. Cách họ xử lý gợi hình ảnh ca trước để lại giấy nhắn tiến độ cho ca sau.

### Kiểm tra trước khi tuyên bố xong

Ngày 2/4/2026, [Birgitta Böckeler viết trên trang của Martin Fowler](https://martinfowler.com/articles/harness-engineering.html) về hai loại cơ chế: loại định hướng trước khi agent hành động, và loại quan sát sau đó để nó tự sửa. Kiểm tra có thể do máy làm (chạy test, chạy công cụ soát lỗi) hoặc do một model khác đánh giá. Điểm cần nhớ: một dòng dặn trong prompt rằng hãy cẩn thận không phải bước kiểm tra; bước kiểm tra là thứ hệ thống thật sự chạy, và có thể kết luận là chưa đạt. Hashimoto nói cùng ý: hãy cho agent những tool nhanh để nó tự biết mình sai.

[LangChain kể một thí nghiệm](https://www.langchain.com/blog/improving-deep-agents-with-harness-engineering) khá thẳng thắn: với coding agent của họ, điểm trên bộ bài kiểm tra Terminal Bench 2.0 gồm 89 tác vụ đi từ 52,8 lên 66,5 trong khi model giữ nguyên là gpt-5.2-codex, và họ nói phần duy nhất thay đổi là harness. Phạm vi con số rất hẹp: một nhà cung cấp, một agent viết code, một bộ bài kiểm tra. Thứ đáng mang đi là kiểu lỗi họ gặp: agent đọc lại việc của chính nó, thấy ổn, rồi dừng. Chỉ một bước kiểm tra độc lập trong harness mới cắt được vòng tự khen đó.

### Chặn việc không được phép

Guardrail (hàng rào an toàn) khác hẳn một lời dặn. Prompt có thể xin model đừng làm gì đó; harness phải có khả năng từ chối. Những hành động khó hoàn tác, ví dụ gửi tin cho khách, hoàn tiền, xóa dữ liệu, thường cần cổng phê duyệt của người thật, hoặc bị giới hạn cứng ở lớp tool và phân quyền. Mình viết kỹ hơn trong [bài về platform cho AI Agent](/ai/vi-sao-ai-agent-can-platform-thay-vi-prompt).

## Prompt engineering, context engineering và Harness Engineering khác nhau chỗ nào?

Chúng lồng vào nhau, không thay thế nhau. [Databricks xếp ba lớp](https://www.databricks.com/blog/ai-harness) theo phạm vi mở rộng dần: prompt engineering (kỹ thuật tối ưu câu lệnh gửi vào model) lo câu chữ một lượt; context engineering (kỹ thuật chọn thông tin model được nhìn thấy) lo model nhìn thấy gì; Harness Engineering lo cả môi trường quanh model.

![Ba khung lồng nhau: Prompt nằm trong Context, Context nằm trong Harness Engineering. Chú thích viết tay: lồng nhau, không thay thế.](/images/blog/harness-engineering-la-gi/prompt-context-harness-nested.webp)

_Prompt và context nằm trong harness. Chúng không thay thế nhau._

| Kỷ luật | Tối ưu cái gì | Artifact chính |
| --- | --- | --- |
| prompt engineering | Cách viết một lượt gửi vào model | Một prompt tốt |
| context engineering | Model được nhìn thấy thông tin nào, khi nào | Retrieval, memory, cách chọn ngữ cảnh |
| Harness Engineering | Cả môi trường quanh model: tool, vòng lặp, kiểm tra, điểm dừng | Bản thân harness |

Hai lớp trong không mất giá trị vì có harness; cả hai nằm bên trong harness. Thứ dịch chuyển là chỗ đặt chú ý: từ cách viết một câu, sang thứ model được nhìn thấy, rồi sang cả hệ thống quanh nó. Đó là cách nhiều người làm nghề mô tả, không phải mốc chuẩn do tổ chức nào công bố.

## Harness khác runtime và platform thế nào?

Mình lấy cách tách của [tài liệu Cloudflare Agents](https://developers.cloudflare.com/agents/harnesses/): hai lớp, harness và runtime. Đây là phân lớp của một nhà cung cấp, không phải chuẩn phổ quát.

Harness là vòng lặp hành vi quanh model: dựng prompt, nạp memory, chọn tool, xử lý kết quả, và quyết định chạy tiếp hay dừng. Runtime (môi trường chạy bền) là hạ tầng: agent chạy ở đâu, state sống sót qua sự cố thế nào, lịch chạy, và observability (khả năng quan sát hệ thống). Cloudflare nói gọn: runtime trả lời agent sống ở đâu; harness trả lời agent làm gì ở mỗi lượt.

Prompt không đứng ngang hàng harness trên tài liệu đó. Dựng prompt là việc của harness.

![Hai cột: Harness gồm dựng prompt, nạp context, tool, vòng lặp và dừng; Runtime gồm chỗ chạy, state sống và quan sát. Prompt nằm trong harness, không phải cột thứ ba. Chú thích: Cloudflare tách hai lớp, không phải chuẩn phổ quát.](/images/blog/harness-engineering-la-gi/harness-vs-runtime.webp)

_Harness lo hành vi từng lượt, kể cả dựng prompt. Runtime lo chỗ chạy. Đây là hai lớp Cloudflare tách, không phải chuẩn phổ quát._

- **Harness:** Dựng prompt, nạp context, cho phép tool nào, vòng lặp chạy ra sao, khi nào dừng.
- **Runtime:** Agent chạy ở đâu, state sống sót qua sự cố thế nào, quan sát bằng gì.

Còn platform, theo nghĩa mình dùng trên site này, là tập hợp năng lực dùng chung để agent tồn tại được bên ngoài một lần gọi model; harness là lớp hành vi ngồi trên đó. Muốn xem một runtime cụ thể, [GoClaw](/ai/goclaw-la-gi) là ví dụ để đọc.

## Làm sao nhận ra sản phẩm gắn nhãn AI Agent có harness thật?

Bạn không cần đọc code mới đoán được. Năm câu hỏi dưới đây đủ cho phần lớn trường hợp, kể cả agent bạn tự dựng.

1. Nó gọi được hệ thống thật nào, hay chỉ trả về văn bản?
2. Nó nhớ tiến độ qua nhiều bước, hay mỗi lượt bắt đầu như chưa từng làm gì?
3. Việc nguy hiểm có cổng duyệt hoặc chặn cứng, hay chỉ có câu dặn trong prompt?
4. Khi nó báo xong, có bước kiểm tra độc lập không?
5. Bạn xem lại được nó đã làm gì không, hay chỉ thấy câu trả lời cuối?

Nếu phần lớn câu trả lời là không, thứ bạn đang có là một chatbot. Nói vậy không phải để dìm: chatbot tốt vẫn tiết kiệm nhiều thời gian, và ranh giới giữa hai loại nằm ở việc hệ thống được phép làm gì, không nằm ở nhãn dán. Chỉ nên tránh giao cho nó phần việc bạn đang tưởng nó tự làm xong.

## Khi nào chưa cần Harness Engineering?

Khi việc chỉ gọn trong một lượt, chỉ đọc chứ không ghi, và luôn có người xem trước khi bất cứ điều gì xảy ra. Lúc đó thêm vòng lặp và bước kiểm tra chỉ làm chậm hơn. [Anthropic khuyên bắt đầu từ giải pháp đơn giản nhất](https://www.anthropic.com/engineering/building-effective-agents) và chỉ tăng độ phức tạp khi thật cần. [Microsoft xếp cùng ý tưởng thành một thang](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/ai-agent-design-patterns) và nêu nguyên tắc chọn mức thấp nhất còn chạy được: nếu prompt engineering đã giải quyết xong bài toán thì bạn chưa cần agent. Nhiều nhu cầu nghe như cần agent thực ra chỉ cần một workflow có đường đi biết trước.

## Câu hỏi thường gặp

Năm câu dưới đây hay xuất hiện khi bạn đã nghe AI Agent nhưng chưa chắc đang thiếu lớp nào. Mỗi câu trả lời theo cơ chế, không theo nhãn sản phẩm.

### Harness trong bài này có phải phần mềm Harness.io không?

Không. Harness ở đây là lớp bọc quanh model: tool, nhớ, vòng lặp, kiểm tra và điểm dừng. Harness.io là sản phẩm khác, dùng trong triển khai code. Trùng tên, không cùng việc.

### Chỉ cần model mạnh hơn thì đã có AI Agent chưa?

Chưa. Model giỏi hơn thì chữ hay hơn, đoán khéo hơn. Nó vẫn không tự mở đơn hàng, không giữ tiến độ qua nhiều bước, và không tự dừng đúng lúc trừ khi lớp bọc quanh nó làm những việc đó. [LangChain viết](https://www.langchain.com/blog/the-anatomy-of-an-agent-harness) một model trần chưa phải agent.

### Gắn thêm tool vào chatbot đã thành agent chưa?

Chưa chắc. [IBM nói rõ](https://www.ibm.com/think/topics/ai-agents-vs-ai-assistants) khả năng gọi tool tự nó không biến một LLM thành agent. Còn thiếu chỗ hệ thống tự chọn tool nào, gọi khi nào, kết hợp ra sao, và theo đuổi mục tiêu qua nhiều bước thay vì chờ bạn ra lệnh từng lượt.

### Harness Engineering có thay prompt engineering không?

Không. Chúng lồng nhau. Prompt engineering lo câu chữ một lượt gửi vào model. Context engineering lo model được nhìn thấy thông tin nào. Harness Engineering lo cả môi trường quanh model. [Databricks xếp](https://www.databricks.com/blog/ai-harness) ba lớp theo phạm vi mở rộng dần, không phải ba thứ thay thế nhau.

### Harness khác runtime chỗ nào?

Theo [tài liệu Cloudflare Agents](https://developers.cloudflare.com/agents/harnesses/), harness lo hành vi từng lượt, kể cả dựng prompt; runtime lo chỗ agent chạy và state sống sót thế nào. Đây là cách tách của một nhà cung cấp, không phải chuẩn phổ quát. Prompt không đứng thành lớp ngang hàng harness trên tài liệu đó.

## Kết luận: nhìn lớp bọc, không chỉ nhìn model

Cách đọc gọn nhất: bỏ qua tên model trên banner, hỏi hệ thống có chạm được dữ liệu thật không, có nhớ đã làm tới đâu không, khi báo xong có bước kiểm không, và ai được quyền dừng. Thiếu mấy thứ đó thì bạn đang có chatbot. Chatbot tốt vẫn đáng dùng; chỉ đừng giao cho nó phần việc bạn tưởng nó tự làm xong.

Nếu bạn định thử một agent cho việc của mình, câu hỏi đầu tiên theo mình không phải chọn model nào, mà là ai có quyền dừng nó lại. Muốn đi tiếp thì đọc [ranh giới chatbot và AI Agent](/ai/ai-agent-khac-chatbot-o-diem-nao), chỗ nhãn sản phẩm sai nhiều nhất, rồi [phần platform](/ai/vi-sao-ai-agent-can-platform-thay-vi-prompt), nơi harness và runtime nằm cạnh nhau.</content:encoded><category>harness-engineering</category><category>ai-agent</category><category>llm</category><category>prompt-engineering</category><category>agent-platform</category><author>nguyennlt</author><enclosure url="https://nguyennlt.com/images/blog/harness-engineering-la-gi/model-plus-harness.webp" length="0" type="image/webp"/></item><item><title>AI Agent khác Chatbot ở điểm nào? Khi AI bắt đầu có Tool, Memory và quyền hành động</title><link>https://nguyennlt.com/ai/ai-agent-khac-chatbot-o-diem-nao/</link><guid isPermaLink="true">https://nguyennlt.com/ai/ai-agent-khac-chatbot-o-diem-nao/</guid><description>Chatbot trả lời rồi dừng. AI Agent dùng tool, memory và quyền hành động để hoàn thành mục tiêu nhiều bước. Đây là ranh giới thực, không phải nhãn marketing.</description><pubDate>Fri, 14 Aug 2026 16:06:03 GMT</pubDate><content:encoded>&gt; **Trả lời nhanh:** AI Agent khác chatbot ở quyền hành động, không ở giao diện chat. Chatbot nhận văn bản và trả văn bản, mỗi lượt gần như độc lập. Agent nhận một mục tiêu, tự chọn bước, gọi tool, giữ state, quan sát kết quả thật, rồi tiếp tục hoặc dừng khi đạt mục tiêu hay chạm giới hạn đã đặt.

Khi mình nhìn một ô chat, mình không hỏi trước &quot;cái này có AI không&quot;. Mình hỏi hệ thống sau ô đó có tự đi làm nốt việc không, hay chỉ trả lời rồi dừng. Nhìn ô nhập liệu thì hai hệ thống giống nhau đến mức gọi cả hai là AI Agent cũng nghe xuôi.

Khác nhau hiện ra khi có việc thật. Một bên gõ &quot;em đã ghi nhận yêu cầu hoàn tiền&quot;. Bên kia đã gọi cổng thanh toán. Tưởng nhầm thì bạn hoặc ngồi chờ máy tự xong, hoặc không thấy nó đã đụng đơn hàng, kho, hay tiền.

Mình tách đúng chỗ khác nhau ngay dưới đây: hệ thống được phép làm gì, không phải khung chat trông ra sao.

![Sơ đồ so sánh: chatbot đi một chiều từ câu hỏi đến câu trả lời rồi kết thúc; agent chạy vòng lặp giữa model, tool và kết quả quan sát trước khi đạt mục tiêu hoặc dừng](/images/blog/ai-agent-khac-chatbot-o-diem-nao/chatbot-vs-agent-loop.webp)

_Chatbot kết thúc ở câu trả lời. Agent chỉ dừng khi đạt mục tiêu hoặc chạm giới hạn đã đặt trước._

## Chatbot, workflow và agent nằm trên một phổ, không phải hai hộp tách biệt

Chưa phải mọi cửa sổ chat dùng LLM (Large Language Model) đều là agent. Thực tế có một phổ, và nhiều sản phẩm đang nằm ở giữa phổ đó.

[IBM định nghĩa AI agent](https://www.ibm.com/think/topics/ai-agents) là hệ thống tự động thực hiện tác vụ bằng cách tự thiết kế workflow với các tool sẵn có. Cũng theo IBM, chatbot không agentic thường không có tool, memory hay suy luận: chúng phục vụ mục tiêu ngắn, không lập kế hoạch trước và cần người dùng nhập tiếp ở từng lượt. [AWS mô tả theo cùng hướng](https://aws.amazon.com/what-is/ai-agents/): con người đặt mục tiêu, còn agent tự chọn những hành động cần làm để đạt mục tiêu đó.

- **Chatbot rule-based:** Hệ thống đi theo kịch bản và từ khóa đã định sẵn, không sinh nội dung mới.
- **Chatbot dùng LLM:** Hệ thống nhận văn bản và trả văn bản, có thể rất giỏi diễn đạt nhưng không chạm vào hệ thống nào khác.
- **Assistant hoặc workflow có tool:** Model được gắn tool nhưng đi theo đường dẫn do code định sẵn, ví dụ luôn tìm kiếm rồi mới tóm tắt.
- **Agent:** Model tự quyết định bước tiếp theo và tool cần dùng trong một vòng lặp, dựa trên kết quả nhận được từ môi trường.

[Anthropic tách workflow và agent](https://www.anthropic.com/engineering/building-effective-agents) đúng ở ranh giới này trong tài liệu kỹ thuật công bố tháng 12/2024: workflow là LLM và tool được điều phối qua các đường code định trước, còn agent là LLM tự điều khiển quá trình của mình và cách sử dụng tool.

[Microsoft xếp cùng ý tưởng thành một thang độ phức tạp](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/ai-agent-design-patterns) trong hướng dẫn kiến trúc cập nhật năm 2026: gọi model trực tiếp mà không có logic agent và không có tool; một agent có tool, chạy lặp qua các lần gọi model và gọi tool với giới hạn số vòng; nhiều agent chỉ khi một agent không còn xử lý đáng tin cậy. Microsoft nêu rõ nguyên tắc chọn mức thấp nhất: nếu prompt engineering đã giải quyết được bài toán thì bạn chưa cần agent.

Hệ quả thực tế là nhiều sản phẩm đang được gọi là AI Agent thực ra nằm ở hai nấc giữa. Đó không phải điều xấu. Vấn đề chỉ xuất hiện khi kỳ vọng được đặt theo nấc cuối cùng.

## Tool: từ nói về việc cần làm sang gọi được hệ thống thật

Ba mục tiếp theo tách riêng ba trục tạo nên ranh giới: tool, memory và quyền hành động. Thiếu một trục, hệ thống vẫn có thể hữu ích, nhưng chưa hoàn chỉnh theo nghĩa agent.

![Ba trục phân biệt chatbot và agent: tool cho phép gọi hệ thống thật, memory quyết định lưu và lấy lại thông tin nào, quyền hành động gồm vòng lặp, phạm vi cho phép và điểm dừng](/images/blog/ai-agent-khac-chatbot-o-diem-nao/tool-memory-quyen-hanh-dong.webp)

_Tool, memory và quyền hành động là ba trục độc lập. Một hệ thống có thể mạnh ở trục này và trống ở trục kia._

Tool cho phép model yêu cầu ứng dụng đọc dữ liệu hoặc thực hiện một việc nằm ngoài trọng số đã huấn luyện. Điểm hay bị hiểu sai: model không tự gọi API (Application Programming Interface). Ứng dụng của bạn mới là bên thực thi.

[Tài liệu function calling của OpenAI](https://platform.openai.com/docs/guides/function-calling) mô tả vòng trao đổi này theo năm bước, với tool được khai báo bằng JSON schema:

1. Ứng dụng gửi request kèm danh sách tool khả dụng.
2. Model có thể trả về một tool call thay vì câu trả lời cuối.
3. Ứng dụng thực thi tool đó ở phía mình.
4. Ứng dụng gửi kết quả tool ngược lại cho model.
5. Model trả lời cuối cùng hoặc yêu cầu thêm tool call.

Vòng này có thể lặp bao nhiêu lần tùy tác vụ. Đây chính là nơi một chatbot bắt đầu chạm vào hệ thống thật, và cũng là nơi trách nhiệm chuyển từ câu chữ sang phần mềm: ai kiểm tra tham số, ai kiểm tra quyền, ai chặn lệnh sai.

Nhưng có tool chưa đủ để gọi là agent. [IBM nói thẳng trong bài so sánh agent và assistant](https://www.ibm.com/think/topics/ai-agents-vs-ai-assistants) rằng chỉ riêng khả năng gọi tool không biến một LLM thành agent; agent còn phải tự quyết định dùng tool nào, dùng khi nào và kết hợp chúng ra sao để đạt mục tiêu. Cùng bài đó phân biệt assistant mang tính phản ứng, làm việc khi được yêu cầu, với agent mang tính chủ động, tự lập kế hoạch và hành động hướng tới một mục tiêu bằng tool và quyền được cấp.

## Memory: context window không đồng nghĩa với trí nhớ

Chatbot nhớ được nội dung hội thoại thì chưa phải agent. Context window (cửa sổ ngữ cảnh) là lượng token được gửi vào một lần gọi model. Memory là cơ chế quyết định thông tin nào được lưu, lấy lại lúc nào, trong phạm vi của ai và sống bao lâu. Nhét toàn bộ lịch sử vào prompt là một cách dùng context window, không phải một thiết kế memory.

Một hệ thống vận hành thật thường phải tách ít nhất ba lớp:

- **State của run:** Tiến độ hiện tại của tác vụ, ví dụ đã xác minh đơn hàng, đang chờ duyệt.
- **Lịch sử session:** Những gì người dùng đã nói trong phiên làm việc này.
- **Memory dài hạn:** Thông tin cần giữ qua nhiều phiên, kèm phạm vi truy cập và thời hạn lưu.

Với tác vụ chạy dài, Microsoft khuyến nghị lưu tiến độ, kết quả trung gian và lịch sử hội thoại vào một kho bền vững bên ngoài thay vì chỉ dựa vào context trong bộ nhớ tiến trình, đồng thời giới hạn phần state được lưu ở mức tối thiểu cần thiết. Microsoft nêu điều này trong cùng hướng dẫn kiến trúc đã dẫn ở trên.

Anthropic mô tả khối xây dựng cơ bản là một LLM được tăng cường bằng retrieval, tool và memory, trong đó model có thể tự sinh truy vấn tìm kiếm, chọn tool và quyết định giữ lại thông tin nào.

Cần tránh một ngộ nhận phổ biến: memory không phải là học lại. IBM lưu ý agent có thể nhớ và điều chỉnh dựa trên tương tác trước đó, nhưng model nền bên dưới không vì thế mà được huấn luyện lại liên tục. Hệ thống nhớ hơn không có nghĩa model đã giỏi hơn.

## Quyền hành động: vòng lặp, side effect và điểm dừng

Quyền hành động là khả năng tạo ra thay đổi thật, ví dụ ghi dữ liệu, gửi tin nhắn, tạo phiếu hoàn tiền, chạy một lệnh, cộng với một vòng lặp quan sát rồi suy luận rồi hành động rồi quan sát tiếp cho tới khi đạt mục tiêu hoặc chạm giới hạn. Thiếu vòng lặp, một lần gọi tool chỉ là một hàm được kích hoạt bởi văn bản. Thiếu giới hạn, vòng lặp đó là rủi ro vận hành.

Mô thức đặt tên cho cách đan xen suy luận và hành động là [ReAct (Reasoning and Acting)](https://arxiv.org/abs/2210.03629), công bố năm 2022. ReAct là một pattern phổ biến, không phải kiến trúc duy nhất. IBM mô tả cách áp dụng nó theo nhịp nghĩ, hành động, quan sát lặp lại sau mỗi phản hồi từ tool.

Anthropic mô tả agent trong thực tế là LLM dùng tool theo phản hồi từ môi trường trong một vòng lặp, cần dữ liệu đối chiếu thật ở mỗi bước, và cần điều kiện dừng chẳng hạn số vòng lặp tối đa. Tài liệu này cũng cảnh báo chi phí cao hơn và sai số tích lũy qua nhiều bước, nên khuyến nghị chạy thử trong sandbox và đặt guardrail (hàng rào an toàn).

Đây là chỗ khác biệt trở nên nghiêm túc. Một chatbot trả lời sai thì sai trong một đoạn văn, người đọc có thể bỏ qua. Một agent hành động sai sẽ ghi vào database, gửi tin cho khách hàng thật, hoặc kích hoạt một giao dịch. Phạm vi thiệt hại rộng hơn hẳn, và không phải hành động nào cũng hoàn tác được. Vì vậy hành động ghi thường cần idempotency (chạy lại không tạo thêm một hành động). Thao tác nhạy cảm cần cổng phê duyệt và checkpoint để có thể tiếp tục sau khi dừng. Microsoft nêu hai điểm đó trong cùng hướng dẫn kiến trúc đã dẫn ở trên.

## Bảng so sánh theo tiêu chí quyết định

| Tiêu chí | Chatbot | AI Agent |
| --- | --- | --- |
| Mục tiêu | Trả lời đúng trong lượt hiện tại | Hoàn thành một việc qua nhiều bước |
| Output | Văn bản cho người đọc | Văn bản cộng thay đổi trong hệ thống |
| Tool | Không có, hoặc chỉ đọc theo đường cố định | Tự chọn tool và thứ tự gọi theo kết quả nhận được |
| Memory | Chủ yếu là context của phiên hiện tại | State của run, lịch sử session, memory dài hạn có phạm vi |
| Quyền hành động | Không tạo side effect ngoài hội thoại | Có quyền ghi hoặc gửi, kèm giới hạn và điểm dừng |
| Người dùng làm gì | Hỏi tiếp ở từng bước | Đặt mục tiêu, duyệt các bước rủi ro, kiểm tra kết quả |
| Rủi ro khi sai | Nội dung sai, người đọc phát hiện được | Dữ liệu, tiền hoặc quan hệ khách hàng bị ảnh hưởng thật |
| Khi nào phù hợp | Hỏi đáp, soạn nháp, tra cứu, hỗ trợ tuyến đầu | Việc nhiều bước, cần tool, cần state và hành động thật |

Bảng này là công cụ phân loại, không phải bảng xếp hạng. Một chatbot tốt không kém giá trị hơn một agent. Workflow có tool hoặc có ghi theo đường code cố định nằm giữa hai cột: chưa phải chatbot thuần, cũng chưa phải agent. Điều cần đọc từ bảng là mức trách nhiệm: càng đi sang cột phải, bạn càng phải trả lời được các câu hỏi về quyền, giới hạn, khả năng hoàn tác và người chịu trách nhiệm cuối.

## Khi nào chatbot vẫn đủ, khi nào cần agent

Dùng chatbot khi công việc là hỏi đáp, đường đi hẹp và output để con người đọc rồi tự quyết. Dùng agent khi công việc gồm nhiều bước không đoán trước, cần gọi tool, cần giữ state qua thời gian và cần tạo ra thay đổi thật. Anthropic khuyên bắt đầu từ giải pháp đơn giản nhất và chỉ tăng độ phức tạp khi cần, bởi hệ thống agentic thường đánh đổi latency và chi phí để lấy kết quả tốt hơn trên tác vụ khó. Với nhiều ứng dụng, tối ưu một lần gọi model kèm retrieval và ví dụ trong prompt đã đủ.

Vài tình huống giả định để thấy ranh giới rõ hơn:

- **Giả sử bạn bán lẻ online và cần trả lời chính sách đổi trả:** Một chatbot đọc từ tài liệu nội bộ là đủ, vì câu trả lời không cần thay đổi gì trong hệ thống.
- **Giả sử bạn cần 20 caption cho một chiến dịch:** Vẫn là chatbot, vì người duyệt là điểm kiểm soát chất lượng và không có side effect nào xảy ra trước khi đăng.
- **Giả sử bạn muốn tự động đối chiếu khiếu nại với đơn hàng rồi đề xuất hoàn tiền:** Việc này cần tool để tra cứu đơn, cần state để nhớ đã kiểm tra tới đâu, và cần một bước người duyệt trước khi tiền thật ra khỏi tài khoản. Nếu các bước luôn giống nhau, đó là workflow. Chỉ gọi là agent khi model tự chọn đường đi và tool theo kết quả nhận được. Anthropic dùng chăm sóc khách hàng làm ví dụ vì nó kết hợp hội thoại với tool truy cập dữ liệu khách, đơn hàng, kiến thức nội bộ, cùng các hành động như hoàn tiền hay cập nhật ticket.
- **Giả sử bạn muốn gom số liệu quảng cáo từ nhiều kênh rồi soạn báo cáo tuần:** Nếu các bước luôn giống nhau, một workflow cố định gọi API rồi cho model viết phần nhận xét sẽ rẻ hơn và dễ kiểm soát hơn một agent tự do.

Ví dụ cuối đáng chú ý nhất: rất nhiều nhu cầu được mô tả là cần agent thực ra chỉ cần một workflow ổn định. Tự chủ chỉ đáng trả giá khi bạn không thể viết trước đường đi.

## Rủi ro khi gắn nhãn agent cho một chatbot có plugin

Gọi sai tên gây ra ba loại thiệt hại cụ thể.

- **Kỳ vọng sai:** Team tin rằng hệ thống sẽ tự làm xong việc nên bỏ bớt người kiểm tra, trong khi hệ thống thực chất vẫn cần người nhập tiếp ở mỗi bước.
- **Chi phí và độ trễ tăng:** Thêm vòng lặp và tool call nghĩa là thêm token, thêm thời gian chờ, và thêm sai số tích lũy qua các bước.
- **Hành động sai có hậu quả thật:** Một tool ghi dữ liệu được gọi nhầm sẽ để lại dấu vết trong hệ thống, không chỉ trong đoạn chat.

Điểm cần nhớ về kiểm soát: prompt có thể định hướng hành vi, nhưng guardrail phải có khả năng chặn hành vi. Một dòng chữ dặn model đừng hoàn tiền quá một mức nào đó không phải là biện pháp kiểm soát; giới hạn phải nằm ở lớp tool, ở phân quyền và ở hàng đợi phê duyệt. Với hành động khó hoàn tác, human-in-the-loop (có người duyệt trong vòng lặp) vẫn là thiết kế mặc định hợp lý. Microsoft mô tả cổng duyệt có thể gắn vào đúng lần gọi tool nhạy cảm, thay vì bắt mọi bước phải chờ người.

Cũng nên tỉnh táo với ngôn ngữ tiếp thị. Từ agent hiện được dùng rất rộng, từ một tính năng tự động hóa nhỏ tới một hệ thống nhiều bước có quyền ghi. Cách kiểm tra nhanh là hỏi nhà cung cấp ba câu: hệ thống được gọi những tool nào, nó lưu state ở đâu, và nó dừng theo điều kiện gì. Bài viết này không chứa liên kết tiếp thị và không giới thiệu sản phẩm trả phí nào.

## Câu hỏi thường gặp

Bốn câu dưới đây là chỗ hay bị dán nhãn sai. Mỗi câu trả lời theo cơ chế thật (tool, memory, quyền hành động), không theo tên sản phẩm trên UI.

### ChatGPT có phải AI Agent không?

Tùy cách dùng. Khi bạn hỏi và nhận lại văn bản, đó là chatbot. Khi phiên làm việc cho phép model gọi tool, đọc kết quả trả về và lặp thêm bước hướng tới một mục tiêu, phần đó vận hành theo cơ chế agent. Nhãn trên sản phẩm không quyết định; cơ chế bên dưới mới quyết định.

### Chatbot gắn thêm tool đã là agent chưa?

Chưa chắc. Theo IBM, khả năng gọi tool tự nó không biến một LLM thành agent. Điều kiện còn thiếu là hệ thống tự chọn tool nào, gọi khi nào, kết hợp ra sao, và theo đuổi mục tiêu qua nhiều bước thay vì chờ người dùng ra lệnh từng lượt.

### Agent có tự học và tự cải thiện theo thời gian không?

Không theo nghĩa model tự giỏi lên. Agent có thể nhớ kết quả và điều chỉnh cách làm dựa trên memory, nhưng model nền không được huấn luyện lại liên tục từ các cuộc hội thoại. Cải thiện thật sự thường đến từ việc bạn sửa prompt, sửa tool, sửa dữ liệu và sửa quy trình, rồi đo lại.

### Có cần nhiều agent ngay từ đầu không?

Thường là không. Microsoft khuyến nghị chỉ chuyển sang nhiều agent khi một agent có tool không còn xử lý đáng tin cậy. Một agent với bộ tool gọn dễ debug, dễ giới hạn và dễ giải thích hơn nhiều so với một hệ thống nhiều agent trao đổi qua lại.

## Kết luận: chọn theo việc hệ thống được phép làm

Cách phân loại gọn nhất là bỏ qua giao diện và hỏi ba câu: hệ thống có gọi được tool thật không, nó giữ state ở đâu ngoài context window, và nó được phép tạo ra thay đổi nào mà không cần người bấm nút. Trả lời không cho cả ba thì bạn đang có chatbot, và trong nhiều trường hợp như vậy là đủ. Trả lời có cho cả ba thì bạn đang có một hệ thống phần mềm có quyền hành động, cần được thiết kế và vận hành như phần mềm.

Nếu use case của bạn đã rơi vào nhóm thứ hai, bước tiếp theo không phải chọn framework mà là dựng lớp bọc quanh model. Bài [Harness Engineering là gì](/ai/harness-engineering-la-gi) tách lớp hành vi đó: tool, nhớ tiến độ, vòng lặp, kiểm tra và điểm dừng. Phần hạ tầng dùng chung, nơi giữ state, quyền, cổng phê duyệt và truy vết, nằm trong bài [Vì sao AI Agent cần một platform, không chỉ một prompt](/ai/vi-sao-ai-agent-can-platform-thay-vi-prompt). Nếu bạn muốn xem một ví dụ kiến trúc cụ thể về cách tách prompt, tool, memory và tracing thành các lớp riêng, [GoClaw](/ai/goclaw-la-gi) là một tham chiếu mã nguồn mở để đọc, không phải một stack cần bê nguyên.</content:encoded><category>ai-agent</category><category>chatbot</category><category>tool-calling</category><category>memory</category><category>llm</category><author>nguyennlt</author><enclosure url="https://nguyennlt.com/images/blog/ai-agent-khac-chatbot-o-diem-nao/chatbot-vs-agent-loop.webp" length="0" type="image/webp"/></item><item><title>GoClaw là gì? Nhìn AI Agent từ góc độ Platform Engineering</title><link>https://nguyennlt.com/ai/goclaw-la-gi/</link><guid isPermaLink="true">https://nguyennlt.com/ai/goclaw-la-gi/</guid><description>GoClaw cung cấp runtime, multi-tenancy, tool, memory và tracing cho AI Agent. Nhưng dưới góc Platform Engineering, team vẫn phải tự vận hành những gì?</description><pubDate>Mon, 10 Aug 2026 22:07:39 GMT</pubDate><content:encoded>&gt; **Trả lời nhanh:** GoClaw là một gateway kiêm runtime tự host để chạy AI Agent theo một pipeline chung, với multi-tenancy, tool, memory, tracing, quota và các control bảo mật cấu hình được. Dưới góc Platform Engineering, nó phù hợp nhất ở **execution plane**. Nó không thay thế toàn bộ Internal Developer Platform (nền tảng cho developer nội bộ), vì identity của tổ chức, secret lifecycle, CI/CD, policy, SLO, eval trước release và quy trình vận hành vẫn cần platform team sở hữu.

Khi mình đọc tài liệu GoClaw, câu hỏi không nằm ở runtime có API hay không. Câu hỏi nằm ở chỗ nghe như một AI Agent Platform hoàn chỉnh, nên dễ tưởng mua một runtime là đã có Internal Developer Platform. Nói ngắn, đó là nền tảng ghép sẵn để developer nội bộ tự triển khai và vận hành: CI/CD, identity, secret, môi trường, chứ không phải một phần mềm mua về là xong. Giống mua một cái bếp rồi khoe đã mở nhà hàng.

Nấu được. Chưa có thu ngân, giấy phép, hay người trực khi cháy chảo lúc 2 giờ sáng. Runtime này chạy được agent, nhận request, gọi tool và ghi trace. Phần còn lại của nền tảng vẫn phải tự lo.

Mình nhìn GoClaw bằng góc Platform Engineering, để bạn biết nó đứng ở lớp nào trước khi đánh giá hay triển khai.

_Lưu ý minh bạch: nội dung dưới đây được đối chiếu với tài liệu và mã nguồn công khai của GoClaw vào ngày 11/08/2026. Đây không phải benchmark production độc lập, cũng không phải báo cáo trải nghiệm vận hành thực tế. Những gì tài liệu khẳng định sẽ được ghi là &quot;theo tài liệu&quot;; những gì là suy luận kiến trúc sẽ được ghi rõ là phân tích._

![Sơ đồ trái sang phải: kênh Chat, API và Webhook đi vào khối xanh GoClaw execution runtime, rồi kết nối tới Model, Tool và PostgreSQL. Chú thích: not the whole platform.](/images/blog/goclaw-la-gi/goclaw-platform-engineering-hero.webp)

_GoClaw nên được nhìn như một execution gateway nằm trong hệ thống platform lớn hơn, không phải toàn bộ platform._

## Đang nói về GoClaw nào?

Tên &quot;GoClaw&quot; bị trùng giữa vài dự án không liên quan. Trước khi đọc tiếp, hãy chắc bạn đang nhìn đúng thứ:

- **Bài này nói về** [`nextlevelbuilder/goclaw`](https://github.com/nextlevelbuilder/goclaw) trên GitHub. Site sản phẩm là [goclaw.sh](https://goclaw.sh); tài liệu đầy đủ nằm ở [docs.goclaw.sh](https://docs.goclaw.sh).
- **Không phải** [goclaw.org](https://goclaw.org/), một runtime agent cá nhân khác — site đó mô tả khả năng chạy độc lập hoặc cạnh [OpenClaw](https://goclaw.org/docs/readme/). Docs, lệnh và mô hình vận hành của hai bên không thay thế cho nhau.
- Ngoài ra còn có ít nhất một repo cá nhân và một ứng dụng iOS trùng tên.

Theo [README chính thức](https://github.com/nextlevelbuilder/goclaw), repo này tự mô tả là Multi-Tenant AI Agent Platform và multi-agent AI gateway built in Go. Nó chạy dưới dạng một binary, đứng giữa ứng dụng của bạn và các nhà cung cấp LLM, nhận request từ nhiều kênh, chạy một pipeline chuẩn hóa, gọi tool, lưu trạng thái hội thoại và ghi trace.

Nghe nhỏ nhặt, nhưng trong thực tế đây là nguồn lỗi phổ biến: một kỹ sư copy lệnh cài đặt từ kết quả tìm kiếm của dự án khác rồi kết luận sai về khả năng của sản phẩm. Khi đánh giá, hãy chốt đúng URL repo và đúng nhánh trước khi làm bất cứ điều gì.

Về độ mới, snapshot repo ngày 11/08/2026 cho thấy dự án được tạo tháng 02/2026; [stable tag gần nhất là v3.14.0](https://github.com/nextlevelbuilder/goclaw/releases/tag/v3.14.0), phát hành ngày 15/06/2026, trong khi dòng prerelease đã mang version v3.15.0-beta và commit mới nhất của repo là ngày 09/08/2026. Tuy nhiên, lịch sử `main` và `dev` đã diverge, nên không thể chỉ nhìn tên branch rồi mặc định một bên chứa toàn bộ thay đổi của bên kia. Khi đánh giá, hãy pin một tag hoặc commit SHA cụ thể — một artifact bất biến, không phải một branch tiếp tục thay đổi.

## Vì sao nên nhìn GoClaw bằng lăng kính Platform Engineering?

Platform Engineering là kỷ luật thiết kế và vận hành các toolchain, workflow cho phép developer tự phục vụ (self-service), nhằm giảm cognitive load — tức lượng thứ một kỹ sư phải nhớ và tự lo để đưa được code lên production. Theo [định nghĩa của PlatformEngineering.org](https://platformengineering.org/blog/what-is-platform-engineering), điểm cốt lõi là _platform-as-a-product_: platform team đối xử với developer nội bộ như khách hàng, và cung cấp **paved road** (còn gọi là golden path) — con đường mặc định đã được lát sẵn, có sẵn best practice, để đi nhanh mà vẫn an toàn.

[CNCF phân biệt rất rõ](https://www.cncf.io/blog/2023/12/08/internal-developer-platform-vs-internal-developer-portal-vs-paas/) giữa Internal Developer Platform (IDP), portal và PaaS: IDP là _tổng hợp_ các tool và workflow mà platform team ghép lại thành trải nghiệm self-service, chứ không phải một sản phẩm đơn lẻ mua về. Và golden path phải là _đường lát sẵn, không phải cái lồng_ — developer vẫn phải thoát ra được khi có nhu cầu chính đáng.

Với AI Agent, khung tư duy này vẫn đúng, chỉ thêm vài concern mới. Một [bài member post của CNCF về Platform Engineering cho agentic enterprise](https://www.cncf.io/blog/2026/07/21/platform-engineering-for-the-agentic-enterprise-managing-applications-resources-and-ai-agents/) lập luận rằng platform dùng chung cho agent cần workflow có quan điểm rõ ràng (opinionated), self-service, môi trường chuẩn hóa và thực hành vận hành đi kèm. Đây là góc framing hữu ích, dù nó không nói gì về GoClaw cụ thể.

Từ đó có một câu hỏi thực dụng, và đó cũng là câu hỏi của bài này:

&gt; Nếu team bạn cần một paved road để chạy AI Agent, GoClaw lấp được bao nhiêu phần của con đường đó, và bạn còn phải tự lát bao nhiêu mét nữa?

Câu trả lời không nằm ở chỗ sản phẩm tự gọi mình là gì. Nó nằm ở chỗ ai chịu trách nhiệm khi có sự cố lúc 2 giờ sáng.

## GoClaw nằm ở đâu trong agent stack?

Điểm phân biệt quan trọng nhất: **GoClaw không phải một SDK bạn import vào code, mà là một service bạn triển khai và vận hành.** Bạn gọi nó qua API hoặc qua các kênh nhắn tin nó hỗ trợ, thay vì nhúng thư viện vào ứng dụng.

Theo tài liệu [How GoClaw Works](https://github.com/nextlevelbuilder/goclaw-docs/blob/793758b5ed50df2b72459f58f8187576f869e32d/core-concepts/how-goclaw-works.md), luồng cơ bản là: gateway nhận request → định tuyến tới agent phù hợp → gọi LLM provider → thực thi tool nếu model yêu cầu → trả response. Bên trong là một pipeline nhiều giai đoạn, đại ý gồm dựng context, suy luận, cắt tỉa context, gọi tool, quan sát kết quả, kiểm tra điều kiện dừng rồi kết thúc.

![Ba cột sketchnote: kênh và API bên trái, execution runtime GoClaw với pipeline, orchestration và state ở giữa, LLM provider, tools/MCP, database và traces bên phải.](/images/blog/goclaw-la-gi/goclaw-agent-stack.webp)

_Trong agent stack, GoClaw chuẩn hóa đường thực thi từ input tới model, tool và state._

Vài chi tiết đáng chú ý về mặt vận hành, cũng theo tài liệu này:

- Mỗi session có một hàng đợi riêng, tức các request trong cùng một hội thoại được xử lý tuần tự.
- Scheduler chia làn (lane) riêng cho main agent, subagent, team và cron job.
- Tool chỉ đọc có thể chạy song song trong giới hạn; còn tool có tác dụng thay đổi dữ liệu, tool MCP và tool thực thi lệnh thì chạy tuần tự.

Đây là những quyết định thiết kế có ý nghĩa thật với người vận hành: chúng ràng buộc mô hình concurrency và ảnh hưởng trực tiếp tới hành vi dưới tải.

Nếu bạn chưa quen với lớp bọc quanh model, [Harness Engineering là gì](/ai/harness-engineering-la-gi) tách harness khỏi việc chọn model. Cách phân tầng prompt / harness / runtime và vì sao agent nghiêm túc cần hạ tầng chứ không chỉ prompt tốt nằm trong bài [vì sao AI Agent cần một platform, không chỉ một prompt](/ai/vi-sao-ai-agent-can-platform-thay-vi-prompt). Ở đây, ta chỉ cần một kết luận từ đó: prompt là _nội dung_, runtime là _nơi nội dung được thực thi có kiểm soát_. GoClaw thuộc về vế thứ hai.

## Platform scorecard: GoClaw đã giải quyết sẵn những gì?

Phần này chấm theo từng năng lực platform. Mỗi mục nêu cả lợi ích lẫn giới hạn — vì giới hạn mới là thứ quyết định bạn còn phải làm gì.

![Năm thẻ năng lực ngang nhau: Self-service, Runtime, Provider &amp; state, Isolation &amp; security, Telemetry — mỗi thẻ có bullet ngắn và một dòng Limit, không có điểm số.](/images/blog/goclaw-la-gi/goclaw-platform-scorecard.webp)

_Năm nhóm năng lực đều cần được đọc cùng giới hạn vận hành của chúng, không phải như một bảng điểm._

### Self-service surface

GoClaw có dashboard và API để tạo, cấu hình agent, và theo README nó kết nối được với nhiều kênh nhắn tin phổ biến. Với một product team, đây là self-service thật: người không viết code hạ tầng vẫn dựng được agent và đưa nó tới người dùng.

**Giới hạn:** đây là self-service ở tầng _người vận hành agent_, không phải self-service xuyên suốt vòng đời phát triển. Việc cấp môi trường mới, gắn agent vào pipeline CI/CD, quản lý cấu hình theo môi trường (dev/staging/prod), phân quyền ai được sửa agent nào ở môi trường nào — tài liệu không mô tả GoClaw đảm nhận những phần này. Nói cách khác, nó cho bạn một control surface, không cho bạn một developer platform hoàn chỉnh.

### Runtime và orchestration chuẩn hóa

Đây là giá trị mạnh nhất và cũng đúng nghĩa &quot;paved road&quot; nhất. Pipeline chung, hàng đợi theo session, scheduler chia làn, cơ chế giới hạn vòng lặp — tất cả nghĩa là mọi agent trong hệ thống chạy theo cùng một mô hình thực thi. Không còn chuyện mỗi team tự viết một vòng lặp agent với một cách xử lý lỗi khác nhau.

Theo README, GoClaw còn hỗ trợ team/orchestration nhiều agent và subagent, tức bạn có thể mô hình hóa các workflow phức tạp hơn một agent đơn lẻ.

**Giới hạn:** pipeline có thể mở rộng nhưng vẫn đưa ra một mô hình thực thi có chủ kiến. Nếu use case của bạn cần một control flow khác hẳn — ví dụ một graph có điều kiện rẽ nhánh phức tạp, hoặc human-in-the-loop ở giữa chuỗi tool — bạn cần kiểm chứng xem hook, quality gate và orchestration mode của GoClaw có diễn đạt được không trước khi cam kết. Golden path chỉ hữu ích khi nó không biến thành cái lồng.

### Providers, tools, MCP, state và memory dùng chung

GoClaw gom sẵn một tập lớn LLM provider, một tập tool tích hợp sẵn, hỗ trợ MCP (Model Context Protocol — chuẩn mở để agent kết nối tới nguồn dữ liệu và công cụ bên ngoài), một mô hình memory nhiều tầng và một knowledge vault. Trạng thái lưu trên PostgreSQL ở bản Standard.

Đây chính là thứ tiết kiệm nhiều công sức: bạn không phải tự viết lớp trừu tượng provider, không phải tự thiết kế schema lưu hội thoại, không phải tự làm cơ chế cắt tỉa context.

**Một lưu ý về con số:** số lượng provider và tool được ghi _khác nhau_ giữa các trang tài liệu chính thức. Tính đến 11/08/2026, [trang What Is GoClaw](https://github.com/nextlevelbuilder/goclaw-docs/blob/793758b5ed50df2b72459f58f8187576f869e32d/getting-started/what-is-goclaw.md) ghi một con số, README ghi con số khác, và trang How It Works ghi con số thứ ba. Vì vậy tốt nhất đừng coi bất kỳ con số cụ thể nào là sự thật ổn định — hãy đọc trực tiếp danh sách trong mã nguồn ở phiên bản bạn định dùng, và chỉ tính những provider/tool bạn thực sự cần.

**Giới hạn:** có sẵn tool không đồng nghĩa với có sẵn mô hình quản trị phù hợp với tổ chức của bạn. Ai được bật tool nào, tool nào được phép thay đổi dữ liệu ở production, hành động nào cần phê duyệt — đó vẫn là câu hỏi policy mà tổ chức bạn phải trả lời và cấu hình.

### Isolation theo tenant và các control bảo mật cấu hình được

[Tài liệu multi-tenancy](https://github.com/nextlevelbuilder/goclaw-docs/blob/793758b5ed50df2b72459f58f8187576f869e32d/core-concepts/multi-tenancy.md) mô tả hai chế độ dùng chung một binary: Personal và SaaS. Ở chế độ SaaS, tenant được xác định từ API key gắn với tenant, và mọi truy vấn SQL đều gắn điều kiện lọc theo `tenant_id` ở tầng ứng dụng, với thiết kế fail-closed theo tài liệu.

Điểm cực kỳ quan trọng, và tài liệu nói thẳng: **ứng dụng của bạn vẫn sở hữu authentication, billing và UI.** Danh tính người dùng cuối được truyền vào qua header `X-GoClaw-User-Id`; GoClaw không tự xác thực end user. Nghĩa là ranh giới bảo mật đầu tiên vẫn nằm ở phía bạn — nếu ứng dụng của bạn truyền sai user id, GoClaw nhận chính identity đó làm ngữ cảnh.

Về mặt bảo mật, [tài liệu security hardening](https://github.com/nextlevelbuilder/goclaw-docs/blob/793758b5ed50df2b72459f58f8187576f869e32d/deployment/security-hardening.md) mô tả năm lớp: transport, input, tools, output và isolation. Nhưng cần đọc kỹ giá trị mặc định:

- Hành động khi phát hiện prompt injection mặc định là _cảnh báo_, không chặn.
- Gateway token để trống sẽ cấp quyền admin — tài liệu nói rõ đây chỉ dành cho phát triển local.
- Danh sách CORS để trống nghĩa là cho phép tất cả origin, nhằm tương thích ngược.
- Rate limit có thể tắt.
- Sandbox cho từng agent là tùy chỉnh được.

Cách đọc đúng: đây là một bộ _control có thể cấu hình_, không phải một đảm bảo an toàn mặc định. Nếu bạn triển khai với cấu hình mặc định rồi coi như đã được bảo vệ, bạn đã hiểu sai tài liệu.

![Phễu năm lớp Transport, Input, Tools, Output, Isolation tách thành nhánh xanh Production đã harden và nhánh đỏ mặc định dễ khởi động.](/images/blog/goclaw-la-gi/goclaw-security-hardening.webp)

_Control chỉ trở thành hàng rào production sau khi team chủ động cấu hình và kiểm chứng._

### Trace và telemetry

[Tài liệu observability](https://github.com/nextlevelbuilder/goclaw-docs/blob/793758b5ed50df2b72459f58f8187576f869e32d/deployment/observability.md) cho biết GoClaw có tracing tích hợp sẵn cho mỗi lượt chạy agent, với span riêng cho lời gọi LLM và tool, kèm thông tin token, thời lượng, trạng thái, và một dashboard đọc dữ liệu từ PostgreSQL. Có tùy chọn xuất OTLP nếu build với build tag `otel` — tức muốn đẩy trace sang hệ thống quan sát chung của công ty, bạn phải build đúng cách chứ không chỉ bật config.

Tài liệu cũng cảnh báo chế độ trace chi tiết có thể lưu toàn bộ input/output, và khuyến nghị chỉ dùng ở môi trường phát triển. Đây là một cảnh báo về quyền riêng tư dữ liệu cần được xử lý nghiêm túc trước khi bật ở production.

**Giới hạn:** có telemetry chưa phải có observability như một mô hình vận hành. Trace cho bạn _dữ liệu_; SLO, ngưỡng cảnh báo, chính sách lưu trữ, quy trình on-call và incident review vẫn là thứ team phải xây.

## Platform team vẫn phải sở hữu những gì?

Bảng dưới đây là phần thực dụng nhất của bài. Cột giữa là những gì tài liệu mô tả GoClaw cung cấp; cột phải là phần trách nhiệm không chuyển giao được. Lưu ý cách diễn đạt: &quot;tài liệu không mô tả&quot; khác với &quot;sản phẩm thiếu&quot; — nhiều mục dưới đây vốn dĩ _không phải_ việc của một execution runtime.

![Hai dải ngang: platform control plane phía trên do platform team sở hữu; execution plane phía dưới với khối GoClaw chỉ chiếm một phần, kèm ô nét đứt cho thành phần khác.](/images/blog/goclaw-la-gi/goclaw-ownership-boundary.webp)

_GoClaw nằm trong execution plane; quyền sở hữu control plane vẫn thuộc về platform team._

| Concern               | GoClaw cho sẵn                               | Team còn phải làm                               |
| --------------------- | -------------------------------------------- | ----------------------------------------------- |
| Identity &amp; auth       | Tenant-bound API key, RBAC, nhận user id     | Xác thực end user, IAM/SSO, ánh xạ vai trò      |
| Secrets &amp; tool policy | Mã hóa provider key, tool controls, approval | Vault, luân chuyển key, policy theo môi trường  |
| Deploy &amp; rollback     | Binary/container, lệnh cập nhật              | CI/CD, pin version, version cấu hình, rollback  |
| Capacity &amp; cost       | Usage analytics, quota, cost tracking, cap   | Bảng giá, ngân sách tổ chức, alert, chargeback  |
| Backup &amp; DR           | PostgreSQL, backup/restore và tenant backup  | Lịch chạy, off-site, RPO/RTO, restore drill     |
| SLO &amp; incident        | Trace, span, dashboard, OTLP tùy chọn        | Alert, on-call, runbook, postmortem             |
| Eval &amp; quality        | Hook, evaluate loop, quality gate trong run  | Regression suite và gate trước release          |
| Developer experience  | Dashboard, API, docs                         | Template, hướng dẫn nội bộ, hỗ trợ, đo mức dùng |

Hai hàng đáng chú ý nhất là **eval** và **cost governance**.

GoClaw có hook, evaluate loop và quality gate để kiểm soát output trong một lượt chạy. Tuy nhiên, tài liệu công khai chưa cho thấy một vòng đời regression evaluation hoàn chỉnh: tập test có phiên bản, chạy lại khi đổi model/prompt/tool, so sánh kết quả và chặn release. Với hệ thống dựa trên LLM, phần này không phải chuyện tùy chọn: thay một model, sửa một prompt, hoặc chính provider cập nhật model đều có thể làm chất lượng thay đổi mà không có lỗi kỹ thuật nào được ném ra.

Về cost governance, GoClaw đã đi xa hơn việc chỉ ghi token. [Usage &amp; Quota](https://github.com/nextlevelbuilder/goclaw-docs/blob/793758b5ed50df2b72459f58f8187576f869e32d/advanced/usage-quota.md) mô tả quota request theo user, group, channel và provider; request bị chặn trước khi agent chạy khi vượt hạn mức. [Cost Tracking](https://github.com/nextlevelbuilder/goclaw-docs/blob/793758b5ed50df2b72459f58f8187576f869e32d/advanced/cost-tracking.md) mô tả cost analytics và ngân sách tháng theo agent, có thể chặn lượt chạy khi vượt ngưỡng.

Nhưng những control này không xóa trách nhiệm của platform team. Cost chỉ chính xác khi bảng giá model được cấu hình và cập nhật đúng; tổ chức vẫn phải định nghĩa ngân sách dùng chung, cảnh báo cho người chịu trách nhiệm, chargeback/showback, ngoại lệ và quy trình xử lý khi cap bị chạm. Với agent tự gọi tool nhiều vòng, một thay đổi nhỏ vẫn có thể làm chi phí tăng mạnh trước khi policy phù hợp được thiết lập.

Backup cũng không bắt đầu từ con số không: [CLI của GoClaw](https://github.com/nextlevelbuilder/goclaw-docs/blob/793758b5ed50df2b72459f58f8187576f869e32d/reference/cli-commands.md) có lệnh backup/restore toàn hệ thống và theo tenant. Phần team phải sở hữu là biến các primitive đó thành chiến lược production: lịch chạy, mã hóa, lưu off-site, retention, RPO/RTO và restore drill định kỳ.

## Một reference architecture thực tế

Cách gọn nhất để định vị GoClaw là chia hệ thống thành bốn lớp:

![Bốn lớp xếp dọc: product interfaces, platform control plane, execution plane GoClaw, rồi providers/tools/data/telemetry. GoClaw chỉ nằm ở lớp 3.](/images/blog/goclaw-la-gi/goclaw-reference-architecture.webp)

_Reference architecture đặt GoClaw đúng vào lớp execution, giữa control plane và các dependency hạ tầng._

**Lớp 1 — Product teams và interfaces.** Ứng dụng web, mobile, các kênh nhắn tin, các dịch vụ nội bộ gọi agent. Lớp này sở hữu trải nghiệm người dùng, xác thực end user và logic nghiệp vụ.

**Lớp 2 — Platform control plane.** CI/CD, quản lý cấu hình và phiên bản, IAM, secret management, policy engine, cấp phát môi trường, giám sát và cảnh báo, quản lý ngân sách. Đây là nơi platform team đặt paved road của tổ chức. GoClaw _không_ chiếm chỗ của lớp này.

**Lớp 3 — Execution plane.** GoClaw ngồi ở đây: nhận request, định tuyến, chạy pipeline, gọi tool, giữ state theo session và tenant, sinh trace. Đây là nơi nó mạnh nhất và cũng là nơi nó nên được đánh giá.

**Lớp 4 — Providers, tools, data và telemetry.** LLM provider, MCP server, hệ thống nội bộ mà tool truy cập, PostgreSQL, và backend quan sát nhận OTLP.

Kết luận kiến trúc: **GoClaw là một component của lớp 3, không phải toàn bộ control plane.** Nếu bạn định dùng nó, hãy vẽ đúng lớp 2 của mình trước — vì đó là phần bạn phải tự xây dù chọn công cụ nào ở lớp 3.

## Khi nào GoClaw là lựa chọn hợp lý?

![Hai cột so sánh: nên pilot khi multi-agent, multi-tenant, self-hosted; cân nhắc phương án khác khi một agent đơn giản, control flow đặc thù, giấy phép hoặc SLA chưa rõ.](/images/blog/goclaw-la-gi/goclaw-fit-decision-map.webp)

_GoClaw phù hợp theo điều kiện vận hành, không phải là lựa chọn mặc định cho mọi agent._

**Đáng cân nhắc pilot khi:**

- Bạn cần chạy nhiều agent cho nhiều khách hàng hoặc nhiều nhóm, và ranh giới dữ liệu giữa họ là yêu cầu bắt buộc.
- Bạn muốn tự host gateway, runtime và state để kiểm soát tốt hơn hạ tầng và vòng đời dữ liệu; nếu dùng LLM provider bên ngoài, payload gửi tới provider vẫn rời hạ tầng của bạn theo cấu hình đã chọn.
- Bạn đã có sẵn PostgreSQL và năng lực vận hành nó.
- Team bạn đang có nhiều triển khai agent rời rạc, mỗi cái một kiểu, và bạn muốn hợp nhất về một mô hình thực thi.
- Bạn cần nhiều kênh nhắn tin mà không muốn viết integration cho từng kênh.
- Sử dụng của bạn là phi thương mại, hoặc bạn sẵn sàng đi làm rõ vấn đề giấy phép (xem phần sau).

**Có thể là lựa chọn sai khi:**

- Bạn chỉ cần một agent duy nhất, đơn giản, gắn trong một ứng dụng — một thư viện gọn nhẹ sẽ ít chi phí vận hành hơn nhiều.
- Bạn cần control flow rất đặc thù mà các hook và orchestration mode hiện có không diễn đạt được.
- Bạn đang xây sản phẩm thương mại và chưa giải quyết được điều khoản giấy phép.
- Team bạn không có ai sẵn sàng nhận vai trò vận hành một service stateful thêm nữa.
- Bạn cần một sản phẩm có SLA thương mại và lộ trình ổn định đã được cam kết.

## Checklist đánh giá GoClaw trong một ngày

Mục tiêu của checklist này là ra quyết định kiến trúc, **không phải triển khai production**. Toàn bộ nên chạy trong môi trường cô lập, với dữ liệu giả.

![Mười bước đánh giá trong một ngày theo đường uốn: giấy phép, repo, môi trường cô lập, agent tối giản, ranh giới tenant, tool ghi dữ liệu, trace, restart, backup, ownership gap.](/images/blog/goclaw-la-gi/goclaw-one-day-pilot-checklist.webp)

_Mười bước tạo thành một vòng đánh giá: từ license gate tới ownership gap trước khi quyết định pilot._

1. **Kiểm tra giấy phép trước tiên.** Đọc [file LICENSE](https://github.com/nextlevelbuilder/goclaw/blob/main/LICENSE) và đối chiếu với mục đích sử dụng dự kiến của bạn. Nếu không hợp, dừng ở đây và tiết kiệm cả ngày.
2. **Chốt đúng repo và đúng nhánh.** Xác nhận bạn đang ở `nextlevelbuilder/goclaw`. Theo tài liệu quickstart, nhánh mặc định là nhánh phát triển còn nhánh ổn định là `main` — hãy đánh giá trên nhánh ổn định, không phải nhánh dev.
3. **Dựng môi trường cô lập.** Quickstart từ source yêu cầu Go khá mới (README ghi Go 1.26+ tính đến 11/08/2026). Với database, [tài liệu cài đặt](https://github.com/nextlevelbuilder/goclaw-docs/blob/master/getting-started/installation.md) ghi PostgreSQL 15+ kèm pgvector, trong khi README và Docker path thường nêu PostgreSQL 18. Kiểm tra đúng yêu cầu của bản bạn pin — riêng điều này đã có thể là yếu tố quyết định.
4. **Chạy một agent tối giản.** Một model, một tool chỉ đọc. Xác nhận vòng đời request hoạt động đúng như tài liệu mô tả.
5. **Kiểm thử ranh giới tenant và user.** Tạo hai tenant, gửi request chéo, và thử cố tình truyền sai user id qua header. Ghi lại chính xác hành vi quan sát được — đây là kiểm chứng quan trọng nhất nếu bạn làm multi-tenant.
6. **Thử một tool có tác dụng thay đổi dữ liệu.** Xem cơ chế phê duyệt, giới hạn và sandbox thực tế hoạt động ra sao, và bạn cấu hình được tới đâu.
7. **Bật trace và thử xuất OTLP.** Kiểm tra xem dữ liệu trace có đủ để chẩn đoán một lượt chạy hỏng không, và bạn cần build như thế nào để đẩy được sang hệ thống quan sát sẵn có.
8. **Mô phỏng lỗi và khởi động lại.** Ngắt service giữa một lượt chạy dài, khởi động lại, quan sát điều gì xảy ra với session đang dở và với hàng đợi.
9. **Thử backup và rollback.** Backup database, thay đổi cấu hình agent, rồi quay lại trạng thái cũ. Đo xem quy trình này mất bao lâu và có bao nhiêu bước thủ công.
10. **Viết ra danh sách ownership gap.** Dùng bảng ở phần trên làm khung: với mỗi hàng, ghi rõ ai trong tổ chức bạn sẽ sở hữu nó và bằng công cụ gì. Nếu có hàng nào không có tên người, đó là rủi ro chưa được nhận diện.

## Rủi ro cần đọc trước khi chọn

![Năm ô rủi ro ngang hàng: giấy phép CC BY-NC, version và docs lệch, lịch sử lỗ hổng, cấu hình bảo mật mặc định, chưa có benchmark độc lập.](/images/blog/goclaw-la-gi/goclaw-risk-dossier.webp)

_Năm nhóm rủi ro cần due diligence trước khi đầu tư pilot hoặc production._

**Giấy phép là ràng buộc lớn nhất.** GoClaw dùng CC BY-NC 4.0 — yêu cầu ghi nhận tác giả và **không cấp phép sử dụng cho mục đích thương mại**. Vì vậy không nên mô tả nó bằng cụm &quot;open source&quot; một cách chung chung mà bỏ qua điều kiện này. Nếu bạn định dùng trong sản phẩm thương mại, hãy làm rõ với chủ dự án và bộ phận pháp lý của bạn trước khi đầu tư kỹ thuật. Đây không phải tư vấn pháp lý.

**Dự án thay đổi nhanh và tài liệu chưa nhất quán.** Như đã nêu, số lượng provider và tool khác nhau giữa các trang chính thức tính đến 11/08/2026. Dòng prerelease mang version minor cao hơn stable, nhưng lịch sử `main` và `dev` đã diverge. Với hệ thống chạy production, điều này nghĩa là bạn cần pin tag hoặc commit SHA, đọc changelog cẩn thận và tự kiểm chứng thay vì tin vào tên branch hay con số trên trang giới thiệu.

**Đã có lỗ hổng công khai ở các bản cũ, và không nên suy ra là đã vá xong.** [CVE-2026-10218](https://www.cve.org/CVERecord?id=CVE-2026-10218) mô tả lỗi phân quyền trên các bản 3.11.0–3.11.3, được dự án theo dõi tại [issue #1120](https://github.com/nextlevelbuilder/goclaw/issues/1120). [Release v3.14.0](https://github.com/nextlevelbuilder/goclaw/releases/tag/v3.14.0) có liệt kê một nhóm security fixes, nhưng changelog không nêu CVE này. Tính đến 24/06/2026, issue vẫn mở và maintainer ghi nhận endpoint evolution suggestion trên `dev` lúc đó vẫn thiếu cổng tenant-admin. Vì vậy: pin bản đã chọn, đối chiếu advisory với đúng commit, rồi tự threat model — đừng coi tên version mới hơn là bằng chứng đã vá.

**Bảo mật là kết quả của cấu hình, không phải mặc định.** Một số giá trị mặc định thiên về dễ khởi động và tương thích ngược. Toàn bộ phần hardening phải được coi là việc bắt buộc trước khi tiếp xúc dữ liệu thật, không phải việc để dành.

**Chưa có benchmark độc lập trong mẫu kết quả đã kiểm tra.** Các con số về hiệu năng, mức tiêu thụ tài nguyên và tiết kiệm chi phí xuất hiện trong tài liệu là claim của nhà phát triển. Trong các trang đã kiểm tra ngày 11/08/2026, chưa có benchmark production độc lập đủ phương pháp để xác nhận. Điều đó không khẳng định các con số sai, nhưng cũng không nên dùng chúng làm cơ sở duy nhất cho một quyết định kiến trúc. Nếu hiệu năng quan trọng với bạn, hãy tự đo trên workload của mình.

## Câu hỏi thường gặp

Những câu này lặp lại ranh giới đã nêu ở trên, vì đó là chỗ quyết định hay bị kéo lệch. Trả lời ngắn theo đúng lớp: GoClaw là runtime, không phải cả platform.

### GoClaw có phải là Internal Developer Platform không?

Không, theo cách CNCF định nghĩa IDP. GoClaw là một execution runtime cho agent — một component có thể trở thành paved road trong IDP của bạn. IDP là tổng hợp của nhiều tool và workflow do platform team ghép lại, bao gồm CI/CD, IAM, secrets, policy, môi trường và giám sát. GoClaw không thay thế những phần đó.

### GoClaw có thay thế LangGraph hay n8n không?

Chúng giải quyết những vấn đề khác nhau và không nằm cùng một lớp. Về mặt hình thái, GoClaw là một service tự host với runtime, multi-tenancy và tracing tích hợp — bạn triển khai và vận hành nó. Một thư viện orchestration thì được import vào ứng dụng của bạn và để bạn tự lo hạ tầng. Câu hỏi đúng không phải &quot;cái nào tốt hơn&quot; mà là &quot;tôi muốn sở hữu lớp runtime hay muốn nó có sẵn&quot;. Việc so sánh chi tiết nên dựa trên use case cụ thể của bạn, không dựa trên bảng tính năng.

### Khác nhau giữa bản Lite và Standard là gì?

Theo README, bản Lite dùng SQLite và bị giới hạn — trong đó có giới hạn số agent và số team, đồng thời không có đầy đủ các kênh, knowledge graph, RBAC và mô hình multi-tenant như bản Standard. Bản Standard dùng PostgreSQL và là bản có đủ năng lực multi-tenancy. Thực tế: Lite phù hợp để thử và cho use case cá nhân; nếu bạn quan tâm tới góc platform trong bài này, bạn đang nói về Standard.

### Tôi có dùng GoClaw cho sản phẩm thương mại được không?

Giấy phép CC BY-NC 4.0 không cấp quyền sử dụng thương mại. Nếu đó là ý định của bạn, hãy liên hệ chủ dự án để hỏi về điều khoản riêng và xác nhận với bộ phận pháp lý. Đừng suy diễn từ việc mã nguồn công khai — công khai không đồng nghĩa với được phép dùng thương mại.

### Có cần Kubernetes để chạy GoClaw không?

Không bắt buộc. Theo README, GoClaw là một binary duy nhất, nên nó chạy được trên VPS thường, trong container, hoặc trên orchestrator tùy hạ tầng của bạn. Câu hỏi thực sự không phải là Kubernetes, mà là: ai vận hành PostgreSQL, ai lo backup, ai nhận cảnh báo khi service chết. Trả lời được ba câu đó thì cách đóng gói chỉ còn là chi tiết triển khai.

## Quyết định thế nào

Quy tắc quyết định gọn nhất:

**Chọn GoClaw nếu vấn đề lớn nhất của bạn nằm ở lớp execution** — nhiều agent, nhiều tenant, nhiều kênh, và bạn muốn thống nhất chúng về một runtime thay vì để mỗi team tự viết. Đó là chỗ nó tạo ra giá trị rõ ràng nhất.

**Đừng chọn nó như một cách để né việc xây platform.** Nếu vấn đề lớn nhất của bạn là không ai sở hữu identity, secrets, deployment, eval và chi phí, thì thêm một service nữa vào hệ thống sẽ làm vấn đề đó nặng hơn chứ không nhẹ đi.

Bước tiếp theo cụ thể: dành nửa ngày làm ba việc theo đúng thứ tự — (1) kiểm tra giấy phép so với mục đích sử dụng của bạn, (2) chạy bước 5 trong checklist trên, tức kiểm thử ranh giới tenant, và (3) điền tên người sở hữu vào từng hàng của bảng ownership. Nếu cả ba đều cho kết quả chấp nhận được, hãy chạy pilot đầy đủ. Nếu bước 1 hoặc bước 3 tắc, kết quả kỹ thuật của bước 2 không cứu được quyết định.

Các bài khác về chủ đề ứng dụng AI trong thực tế nằm ở [chuyên mục AI](/ai).</content:encoded><category>goclaw</category><category>ai-agent</category><category>platform-engineering</category><category>agent-platform</category><category>self-hosted</category><author>nguyennlt</author><enclosure url="https://nguyennlt.com/images/blog/goclaw-la-gi/goclaw-platform-engineering-hero.webp" length="0" type="image/webp"/></item><item><title>Vì sao AI Agent cần một platform, không chỉ một prompt?</title><link>https://nguyennlt.com/ai/vi-sao-ai-agent-can-platform-thay-vi-prompt/</link><guid isPermaLink="true">https://nguyennlt.com/ai/vi-sao-ai-agent-can-platform-thay-vi-prompt/</guid><description>Prompt hướng dẫn AI Agent. Platform giúp agent dùng công cụ, giữ trạng thái, kiểm soát rủi ro, đo chất lượng và phục hồi khi lỗi.</description><pubDate>Tue, 04 Aug 2026 04:44:08 GMT</pubDate><content:encoded>&gt; **Trả lời nhanh:** Prompt quyết định agent nghĩ gì. Platform quyết định agent làm được gì, đi được bao xa, và chuyện gì xảy ra khi nó làm sai. Prompt đủ khi tác vụ một lượt, chỉ đọc, có người duyệt. Cần runtime khi agent phải giữ state, gọi tool có rủi ro, hoặc phục hồi sau lỗi.

Khi mình nhìn một agent hoàn tiền chạy ngoài production, chỗ hỏng hiếm khi nằm ở câu chữ trong prompt. Nó quên đã xác minh đơn, gọi API lần hai, hoặc không giải thích được vì sao hoàn sai.

Vậy khi nào prompt còn đủ, khi nào nên dùng workflow tất định, và khi nào thật sự cần runtime? Mình tách từng kiểu hỏng của ca hoàn tiền ra đúng lớp hệ thống ngay dưới đây.

![Hai cột: Prompt nghĩ trong một lượt bằng câu chữ; Platform làm được việc, đặt giới hạn và xử lý khi sai.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/hero-prompt-vs-platform.webp)

_Prompt quyết định agent nghĩ gì. Platform quyết định agent làm được gì, đi được bao xa, và chuyện gì xảy ra khi nó làm sai._

## Khi nào prompt là đủ?

Prompt thường là đủ khi tác vụ nằm gọn trong một lần suy luận và kết quả chưa trực tiếp tạo tác động ra bên ngoài.

Cụ thể hơn, prompt đơn thuần thường phù hợp khi:

- Đầu vào đã được cung cấp sẵn, agent không phải tự đi tìm dữ liệu.
- Tác vụ kết thúc trong một hoặc hai lượt, không cần nhớ gì qua lần chạy sau.
- Không có hành động ghi dữ liệu, gửi thông tin ra ngoài hay chuyển tiền.
- Luôn có người đọc và duyệt kết quả trước khi dùng.

Tóm tắt tài liệu, phân loại phản hồi khách hàng, viết bản nháp email, gợi ý tiêu đề: đây là địa hạt của prompt. Với các tác vụ này, lớp vận hành phức tạp thường chưa mang lại lợi ích tương xứng với chi phí.

Có một lựa chọn trung gian hay bị bỏ qua: workflow tất định. Anthropic phân biệt rõ hai thứ trong [bài viết về xây dựng agent hiệu quả](https://www.anthropic.com/engineering/building-effective-agents): workflow là hệ thống trong đó LLM (Large Language Model) và tool được điều phối theo các đường dẫn đã được code định sẵn, còn agent là hệ thống trong đó LLM tự định hướng quá trình và cách sử dụng tool. Anthropic khuyến nghị bắt đầu từ giải pháp đơn giản nhất và chỉ tăng độ phức tạp khi kết quả thực sự tốt hơn, vì hệ thống agentic đánh đổi độ trễ và chi phí để lấy hiệu quả trên tác vụ khó.

Nếu đường đi từ input đến output đã biết trước, và business rule biểu diễn được bằng code, thì một workflow tất định gọi LLM ở vài điểm sẽ dễ kiểm chứng hơn một agent tự lập kế hoạch. Anthropic cũng mô tả khối xây dựng cơ bản là **augmented LLM**: model được bổ sung khả năng truy xuất, sử dụng tool và ghi nhớ. Đó là điểm xuất phát tự nhiên trước khi nghĩ tới bất cứ kiến trúc nào phức tạp hơn.

Microsoft mô tả cùng một ý dưới dạng nấc thang trong [tài liệu về design pattern cho AI agent](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/ai-agent-design-patterns): đi từ gọi model trực tiếp, lên single agent, rồi mới tới multi-agent. Mỗi nấc chỉ nên leo khi nấc dưới không còn đáp ứng được.

![Ba cột: Prompt một lượt chỉ đọc có người duyệt; Workflow đường đi đã biết; Agent tự định hướng tool.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/when-prompt-workflow-agent.webp)

_Bắt đầu từ lựa chọn đơn giản nhất. Prompt khi tác vụ một lượt. Workflow khi đường đi đã biết. Agent khi model phải tự định hướng tool._

## Sáu dấu hiệu bạn đã vượt khỏi phạm vi của prompt

Hãy đưa agent hoàn tiền vào vận hành thật. Nhiệm vụ mô tả trong prompt nghe rất gọn: kiểm tra đơn hàng, đối chiếu chính sách, xác nhận lý do với khách, hoàn tiền nếu đủ điều kiện.

Ngoài production, cùng nhiệm vụ ấy trở thành một chuỗi hành động: xác thực người yêu cầu, lấy đơn hàng, tra đúng phiên bản chính sách, kiểm tra giao dịch đã từng hoàn chưa, tính số tiền, xin phê duyệt nếu vượt ngưỡng, gọi API (Application Programming Interface) thanh toán, ghi nhận kết quả, thông báo cho khách, và xử lý khi một bước bất kỳ thất bại.

Sáu dấu hiệu dưới đây cho biết bạn đã bước ra khỏi vùng mà prompt còn giải quyết được. Mỗi dấu hiệu đi kèm lớp hệ thống chịu trách nhiệm, và phần sau của bài sẽ mở từng lớp ra.

| Kiểu hỏng cụ thể trong ca hoàn tiền | Lớp hệ thống cần bổ sung |
| --- | --- |
| Tiến trình restart giữa chừng, agent quên đã xác minh đơn hàng và hoàn tiền lần thứ hai | Trạng thái bền vững và khóa chống trùng |
| Agent gọi API thanh toán bằng credential của một nhân viên khác, hoặc gọi tool nó không được phép dùng | Danh tính và quyền ở lớp tool |
| Agent lặp vô hạn giữa tra chính sách và hỏi lại khách, đốt token không giới hạn | Orchestration có giới hạn |
| Agent tự quyết hoàn một khoản vượt ngưỡng vì khách hàng gây áp lực trong hội thoại | Nhiều lớp chặn hành vi và phê duyệt của người |
| Khách khiếu nại, team chỉ có câu trả lời cuối, không biết agent đã đọc gì và gọi gì | Trace để điều tra từng bước |
| Sửa prompt để xử lý tốt ca hoàn trễ hạn, vô tình làm hỏng ca đơn đã hoàn một phần | Evals chạy trước và sau thay đổi |

Điểm chung của sáu dòng trên: không dòng nào sửa được bằng cách viết lại câu chữ. Bạn có thể ghi đừng hoàn tiền hai lần trong prompt, nhưng câu đó không tạo ra một khóa chống trùng.

![Sáu dấu hiệu: restart quên state, sai credential, lặp vô hạn, tự hoàn quá ngưỡng, chỉ có câu trả lời cuối, sửa prompt làm hỏng ca cũ.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/six-failure-modes.webp)

_Mỗi dấu hiệu trỏ tới một lớp hệ thống. Không dấu hiệu nào được giải bằng cách viết lại câu chữ trong prompt._

## Platform là gì: prompt, harness và runtime

Platform ở đây không nhất thiết là một sản phẩm SaaS (Software as a Service). Nó là tập hợp năng lực dùng chung giúp agent tồn tại được bên ngoài một lần gọi model.

Một cách tách ba lớp dễ nhớ:

- **Prompt** trả lời: agent nên làm gì trong lượt này, theo nguyên tắc nào, xuất ra định dạng gì.
- **Harness** (lớp điều khiển hành vi agent): nạp context nào, cho phép tool nào, chạy vòng lặp ra sao, khi nào dừng.
- **Runtime** duy trì hoạt động: agent chạy ở đâu, giữ trạng thái thế nào, phục hồi ra sao, được quan sát bằng gì.

Ranh giới giữa harness và runtime lấy từ [tài liệu Cloudflare Agents](https://developers.cloudflare.com/agents/harnesses/): harness lo model call, xây dựng prompt, chọn tool và chiến lược memory; runtime cung cấp state, session, routing, scheduling, thực thi bền vững và observability. Đây là cách phân lớp của Cloudflare, không nên xem là một chuẩn thuật ngữ phổ quát. Giá trị của cách chia này nằm ở việc nó buộc bạn hỏi phần này thuộc lớp nào, chứ không nằm ở bản thân từ ngữ. Mình tách riêng lớp hành vi quanh model trong [Harness Engineering là gì](/ai/harness-engineering-la-gi), vì nó hay bị nhầm với việc chọn model mạnh hơn.

![Ba lớp lồng nhau: Prompt chứa instructions và định dạng; Harness nạp context, chọn tool và chạy vòng lặp; Runtime giữ state, session, lịch chạy và observability.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/prompt-harness-runtime.webp)

_Prompt nằm trong harness. Harness quyết định context và tool. Runtime giữ cho toàn bộ chạy được qua thời gian và lỗi._

Prompt vẫn là thành phần bắt buộc, không phải thứ bị thay thế. OpenAI mô tả trong [hướng dẫn thực hành xây dựng agent](https://openai.com/business/guides-and-resources/a-practical-guide-to-building-ai-agents/) rằng một agent có ba thành phần cốt lõi: model, tools và instructions. Prompt chính là nơi chứa phần lớn instructions. Vấn đề chỉ phát sinh khi ta kỳ vọng prompt kiêm luôn vai trò của database, hệ thống phân quyền, hàng đợi, log và bộ kiểm thử.

Sáu phần tiếp theo là sáu năng lực tối thiểu để một agent hành động thật đứng vững.

## 1. Trạng thái bền vững và idempotency

Đây là lớp trả lời câu hỏi: agent có tiếp tục được qua thời gian, lỗi và restart không?

Một yêu cầu hoàn tiền hiếm khi kết thúc trong vài giây. Nó có thể phải chờ khách bổ sung ảnh chụp sản phẩm, chờ quản lý duyệt khoản vượt ngưỡng, chờ cổng thanh toán phản hồi. Trong khoảng chờ đó, tiến trình có thể bị restart, deploy đè lên, hoặc timeout.

Nếu toàn bộ tiến độ chỉ nằm trong context của model, tiến trình bị mất thì agent không có một bản ghi bền vững để tiếp tục. Vì vậy tác vụ chạy dài cần lưu state và kết quả trung gian bên ngoài bộ nhớ tiến trình.

Cũng nên tách rõ **context** và **memory**. Context window là dữ liệu bạn gửi vào một lần suy luận. Memory là cơ chế quyết định thông tin nào được lưu, lấy lại khi nào, trong phạm vi của ai, và giữ bao lâu. Trong ca hoàn tiền, ít nhất ba loại trạng thái nên nằm riêng:

- **Trạng thái run**: đã xác minh đơn hàng, đang chờ duyệt. Cần chính xác và có checkpoint.
- **Lịch sử hội thoại**: lý do khách đưa ra. Cần giới hạn theo session và theo user.
- **Memory dài hạn**: kênh liên lạc khách ưa dùng. Cần consent, thời hạn lưu và khả năng xoá.

Nối tất cả lịch sử vào prompt là cách làm dễ nhất và tệ nhất: chi phí tăng, nhiễu tăng, quyền riêng tư khó kiểm soát.

Phần khó nhất của lớp này là **idempotency** (chạy lại không tạo thêm một hành động). Không có nó, mọi cơ chế retry đều trở thành nguồn rủi ro: agent thử lại một lệnh hoàn tiền tưởng như thất bại, trong khi giao dịch đầu đã thành công.

Về mặt năng lực cụ thể, tài liệu [persistence của LangGraph](https://docs.langchain.com/oss/javascript/langgraph/persistence) là một ví dụ đọc được: nó mô tả checkpoint lưu lại state tại từng bước, khả năng chịu lỗi và resume từ điểm gần nhất, cùng human-in-the-loop (có người duyệt trong vòng lặp) dựa trên chính cơ chế checkpoint đó. Bạn không cần dùng đúng thư viện này. Thứ đáng giữ là hình dung về việc một run có thể tạm dừng và tiếp tục trông như thế nào trong thiết kế.

![Bốn bước hoàn tiền: xác minh đơn ghi checkpoint, chờ duyệt nếu vượt ngưỡng, khóa chống trùng, rồi gọi API thanh toán một lần.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/refund-durable-flow.webp)

_Mỗi bước ghi checkpoint. Run có thể dừng chờ người duyệt rồi tiếp tục. Lệnh thanh toán đi qua khóa chống trùng._

## 2. Danh tính và quyền ở lớp tool

Model chỉ sinh ra dự đoán. Agent trở nên hữu ích khi đọc được dữ liệu thật và tác động được vào hệ thống thật qua API, function, database hay các tool khác.

Nhưng có tool chưa phải là có kiểm soát. Platform còn phải trả lời được:

- Tool nhận input và trả output theo schema nào.
- Người dùng đang được phục vụ có quyền kích hoạt tool đó không.
- Hành động là chỉ đọc, hay có ghi và khó hoàn tác.
- Credential được cấp, giới hạn phạm vi và thu hồi ra sao.
- Lỗi tạm thời khác lỗi nghiệp vụ thế nào.

Prompt có thể nhắc model tôn trọng quyền hạn. Nhưng quyền thật phải được thực thi ở nơi model không sửa được luật. [Hướng dẫn kiến trúc agentic AI của AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/govern-architect-agentic-ai/agents-layer.html) xếp identity, authorization và audit trail vào ngay trong lớp agent, cùng với circuit breaker để ngắt khi hành vi vượt ngưỡng an toàn. Tức là coi chúng là thành phần kiến trúc, không phải một đoạn văn trong instructions.

Với agent hoàn tiền, điều này có nghĩa rất cụ thể: tool `refund` không chạy dưới một credential vạn năng dùng chung, mà chạy dưới danh tính có phạm vi giới hạn, có audit trail ghi lại ai đã kích hoạt, cho đơn hàng nào, ở thời điểm nào.

Google nhấn mạnh cùng hướng trong [tài liệu về core concept của AI agent](https://cloud.google.com/resources/core-concepts-ai-agents): bảo mật là một trong những mối quan tâm nền tảng khi đưa agent lên production, bên cạnh runtime, trace và evaluation.

## 3. Orchestration có giới hạn

Orchestration là lớp quyết định bước nào chạy trước, output nào chuyển tiếp cho bước sau, khi nào rẽ nhánh, khi nào thử lại, khi nào kết thúc và khi nào giao lại cho người.

JetBrains mô tả vòng lặp này trong [bài về orchestration cho AI agent](https://www.jetbrains.com/pages/ai-agents/architecture/ai-agent-orchestration/) như chu trình lập kế hoạch, định tuyến, thực thi, quan sát và điều chỉnh, và lưu ý rằng orchestration cần thiết ngay cả với một agent duy nhất, chứ không phải chỉ khi có nhiều agent. OpenAI cũng mô tả agent vận hành theo một run loop chạy tới khi đạt điều kiện thoát, và khuyến nghị bắt đầu bằng single agent trước khi nghĩ đến kiến trúc nhiều agent.

Prompt chaining cố định chỉ chạy được A → B → C. Một orchestration loop thật phải xử lý được tình huống hệ thống trả về đơn hàng này đã được hoàn một phần: nghĩa là rẽ nhánh sang một quy trình khác, chứ không phải đi tiếp bước C như kế hoạch ban đầu.

Phần quan trọng nhất là các giới hạn được thực thi. Đây là nơi bạn chặn vòng lặp vô hạn và chi phí mất kiểm soát bằng những điều kiện nằm trong code:

- Số bước tối đa của một run.
- Ngân sách token và chi phí.
- Số lần gọi mỗi tool.
- Thời gian chạy tối đa.
- Số lần retry trước khi bàn giao cho người.

![Vòng lặp lập kế hoạch, hành động, quan sát, điều chỉnh với các chốt giới hạn số bước, token, gọi tool, thời gian và retry nằm trong code.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/bounded-agent-loop.webp)

_Bốn bước của vòng lặp. Năm giới hạn được thực thi bằng code, không bằng câu chữ trong prompt._

Microsoft nêu thẳng giới hạn số vòng lặp như một biện pháp thiết kế cần thiết, chứ không phải tùy chọn nâng cao. Một câu đừng thử quá nhiều lần đặt cuối prompt không có hiệu lực cưỡng chế nào.

## 4. Guardrail nhiều lớp và phê duyệt của người

Quyền của agent càng lớn, một quyết định sai càng đắt. Vì vậy **guardrail** (hàng rào an toàn) không nên là một lớp đơn.

OpenAI khuyến nghị tiếp cận **layered defense**: kết hợp nhiều loại guardrail thay vì dựa vào một cơ chế duy nhất, cùng với authentication, authorization và các biện pháp bảo mật phần mềm thông thường. Các lớp thường gặp gồm kiểm tra dữ liệu đầu vào, lọc thông tin nhạy cảm, giới hạn phạm vi hành động, tách quyền đọc khỏi quyền ghi, và kiểm tra đầu ra trước khi nó biến thành hành động.

Lớp cuối cùng là can thiệp của con người. OpenAI nêu hai tình huống kích hoạt rõ ràng: khi agent vượt ngưỡng lỗi hoặc thất bại lặp lại, và khi hành động thuộc nhóm rủi ro cao. Với agent hoàn tiền, ranh giới đó vẽ được rất cụ thể. Khoản dưới ngưỡng chính sách thì agent tự xử lý; khoản vượt ngưỡng thì dừng lại và chờ người duyệt.

Điểm mấu chốt phân biệt guardrail với prompt: prompt định hướng hành vi, còn guardrail phải có khả năng **chặn** hành vi. Nếu một cơ chế chỉ hoạt động khi model chịu hợp tác, nó không phải guardrail.

Đây cũng là lý do human-in-the-loop cần được thiết kế ở lớp runtime chứ không phải lớp giao diện. Một điểm chờ phê duyệt chỉ hoạt động được nếu run có thể tạm dừng, giữ nguyên state, và tiếp tục sau khi người duyệt trả lời. Đó chính là cơ chế checkpoint đã nói ở phần 1.

![Phễu guardrail: input check, lọc nhạy cảm, tách đọc và ghi, output check, rồi rẽ dưới ngưỡng agent tự hoàn hoặc vượt ngưỡng chờ người duyệt.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/guardrail-funnel.webp)

_Prompt định hướng hành vi. Guardrail phải chặn được hành vi. Khoản vượt ngưỡng dừng lại chờ người duyệt._

## 5. Observability và trace

Khi một khoản hoàn tiền sai xảy ra, câu hỏi đầu tiên là vì sao. Nếu bạn chỉ log câu trả lời cuối, câu hỏi đó không có lời đáp.

**Observability** (khả năng quan sát hệ thống) ở đây nghĩa là team đọc được toàn bộ run, không chỉ output. Một trace đủ dùng cho agent thường ghi lại:

- Phiên bản model và phiên bản prompt.
- Context hoặc tài liệu đã truy xuất.
- Từng tool call: tham số, kết quả, độ trễ.
- Các lần retry và các lần bàn giao.
- Token, chi phí, thời gian.
- Quyết định phê duyệt hoặc từ chối.
- Trạng thái cuối của run.

![Từ kết quả hoàn sai số tiền lần ngược: kết quả và phê duyệt, tool call, context đã truy xuất, rồi model và prompt.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/agent-trace-anatomy.webp)

_Một trace đủ dùng để lần từ kết quả sai về đúng nhóm lỗi: model, context, tool, hoặc workflow._

Giá trị lớn nhất của trace là giúp phân biệt bốn nguyên nhân dễ bị nhầm lẫn: lỗi model, lỗi truy xuất context, lỗi tool, và lỗi workflow. Trong ca hoàn tiền, agent hoàn sai số tiền có thể là model tính sai, có thể là tool trả về đơn hàng cũ, cũng có thể là workflow bỏ qua bước kiểm tra hoàn một phần. Ba nguyên nhân đó cần ba cách sửa hoàn toàn khác nhau, và không cái nào đoán được nếu chỉ nhìn output.

Google xếp trace cùng nhóm với runtime, bảo mật và evaluation trong các mối quan tâm khi vận hành agent ở production. Tức là hạ tầng quan sát không phải thứ thêm sau, mà là điều kiện để agent vận hành được.

## 6. Evals chạy trước và sau mỗi thay đổi

Prompt thường được tinh chỉnh bằng vài lần thử tay. Cách này nhanh ở giai đoạn đầu và mù ở giai đoạn sau: bạn sửa một câu để xử lý tốt hơn ca hoàn trễ hạn, rồi không biết mình vừa làm hỏng ca đơn đã hoàn một phần.

Bộ eval cho agent nên bao gồm:

- Tập tình huống đại diện, kèm các edge case đã từng gây lỗi thật.
- Tiêu chí thành công cho từng bước, không chỉ cho kết quả cuối.
- Kiểm tra tất định với schema, quyền và business rule.
- Đánh giá bằng người hoặc bằng model khi tiêu chí mang tính ngữ nghĩa.
- So sánh giữa các phiên bản prompt, model, tool và workflow.

Điểm cần nhấn: đánh giá agent khác đánh giá một câu trả lời. Một run có thể cho ra kết quả đúng qua một chuỗi bước sai, ví dụ hoàn đúng số tiền nhưng đã bỏ qua bước kiểm tra trùng lặp. Chỉ chấm output cuối sẽ cho điểm cao cho một hành vi nguy hiểm.

Về mặt triển khai, tài liệu [evaluate và monitor GenAI app của Databricks](https://docs.databricks.com/aws/en/mlflow3/genai/eval-monitor) (cập nhật 2026-07-28) là một ví dụ về cách nối vòng đời này: dùng trace làm đơn vị dữ liệu chung, chấm điểm bằng scorer trong giai đoạn phát triển, rồi tiếp tục chấm trên lưu lượng production để phát hiện suy giảm chất lượng. Đây chỉ là một cách hiện thực hóa. Thứ nên giữ lại là nguyên tắc dùng cùng một bộ tiêu chí ở cả development lẫn production, để tốt hơn là một kết luận đo được chứ không phải cảm giác.

## Ba mức trưởng thành

Yêu cầu một platform không có nghĩa phải mở đầu bằng Kubernetes, multi-agent và một dashboard lớn. Ba mức dưới đây là ba điểm dừng hợp lý khác nhau.

### Mức 1: Prompted feature

Tác vụ một lượt, chỉ đọc dữ liệu được đưa sẵn, không tạo tác động bên ngoài, luôn có người kiểm tra output. Đủ dùng: quản lý phiên bản prompt và một tập test nhỏ.

### Mức 2: Agent runtime tối thiểu

Tác vụ nhiều bước, gọi vài tool, cần giữ trạng thái xuyên suốt một run: đúng ca hoàn tiền. Cần: run ID và state store, tool schema kèm permission, timeout và giới hạn vòng lặp, structured logs, phê duyệt trước hành động rủi ro, eval cho các luồng quan trọng. Đây thường là điểm dừng hợp lý cho một team nhỏ.

Trong mã nguồn mở, [GoClaw](/ai/goclaw-la-gi) minh họa khá rõ cách phân lớp này: prompt chỉ là một stage trong agent pipeline, còn history, tool, memory, multi-agent orchestration và tracing được xử lý như các thành phần riêng. Đây nên được xem là một ví dụ kiến trúc để tham khảo, không phải lý do để team nhỏ bê nguyên cả stack.

### Mức 3: Shared agent platform

Nhiều agent hoặc nhiều team lặp lại cùng nhu cầu: registry cho agent và tool, identity và policy dùng chung, secrets, quota và cost control tập trung, deployment kèm versioning và rollback, observability ở cấp tổ chức. IBM mô tả nhu cầu này trong [bài về AI agent management](https://www.ibm.com/think/topics/ai-agent-management): khi số lượng agent tăng lên, tổ chức cần một control plane (lớp điều khiển nền tảng) dùng chung để quản lý và giám sát chúng một cách nhất quán, thay vì để mỗi agent tự mang theo cơ chế riêng.

![Ba mức: prompted feature một lượt chỉ đọc; agent runtime tối thiểu với tool, state và phê duyệt; shared platform với control plane dùng chung.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/three-platform-levels.webp)

_Mỗi mức là một điểm dừng hợp lệ. Leo lên mức cao hơn khi mức hiện tại không còn giữ được rủi ro thực tế._

Nếu bạn mới có đúng một use case, dựng hạ tầng mức 3 trước thường tốn nhiều hơn giá trị nó mang lại.

## Kiến trúc tối thiểu cho một team nhỏ

Gọn hơn bạn nghĩ. Một platform mức 2 đủ cho agent hoàn tiền có thể chỉ gồm bảy thành phần:

1. **API nhận goal** và tạo `run_id`.
2. **Orchestrator có giới hạn** chạy agent loop với số bước và ngân sách rõ ràng.
3. **Tool registry nhỏ** khai báo schema, quyền, timeout và mức rủi ro của từng tool.
4. **Database** lưu trạng thái run, checkpoint và kết quả tool quan trọng.
5. **Approval queue** cho các hành động ghi, gửi hoặc chuyển tiền.
6. **Trace store** ghi model, prompt version, tool call, latency, cost và lỗi.
7. **Eval suite** chạy trước mỗi lần đổi prompt, model hoặc workflow.

![Bảy thành phần mức 2: API và run_id, orchestrator có giới hạn, tool registry, database checkpoint, approval queue, trace store, eval suite.](/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/min-architecture.webp)

_Bảy thành phần này đã là một platform theo nghĩa kiến trúc. Chúng có thể nằm gọn trong một codebase và phục vụ đúng một agent hoàn tiền._

Bảy thứ này đã là một platform theo nghĩa kiến trúc: một đường chạy chuẩn, có policy và có khả năng quan sát. Chúng hoàn toàn có thể nằm gọn trong một codebase, dùng hạ tầng sẵn có, và phục vụ đúng một agent.

Nguyên tắc nên giữ: **chuẩn hóa những gì lặp lại, đừng trừu tượng hóa những gì chưa tồn tại**. Đến khi agent thứ hai cần đúng cơ chế tool permission hoặc tracing đó, hãy tách nó thành capability dùng chung.

## Checklist quyết định

Trước khi viết dòng code đầu tiên, chạy qua sáu câu hỏi này:

1. **Đường đi từ input đến output đã biết trước chưa?** Nếu rồi, dùng workflow tất định, không cần agent.
2. **Agent có thực hiện hành động khó hoàn tác không?** Nếu có, cần tool schema, permission và bước phê duyệt cho đúng hành động đó.
3. **Một run có thể bị gián đoạn hoặc phải chờ bên khác không?** Nếu có, cần state bền vững, checkpoint và idempotency.
4. **Hành động có nguy cơ lặp lại gây hậu quả kép không?** Nếu có, cần khóa chống trùng ở lớp tool, không phải ghi chú trong prompt.
5. **Khi sự cố xảy ra, team có giải thích được agent đã làm gì không?** Nếu không, cần trace chi tiết theo bước.
6. **Bạn có cách chứng minh phiên bản mới không làm hỏng ca cũ không?** Nếu không, cần eval chạy trước và sau thay đổi.

Câu trả lời không ở câu 1 và có ở bất kỳ câu nào từ 2 đến 6 đều chỉ tới một lớp hệ thống cụ thể cần bổ sung, không phải một prompt cần viết lại.

## Câu hỏi thường gặp

Những câu dưới đây hay xuất hiện khi team đã có prompt khá ổn nhưng chưa chắc đang thiếu lớp nào. Trả lời ngắn, rồi mới quyết định có cần thêm harness hay runtime.

### Prompt engineering có còn quan trọng khi đã có platform không?

Có. Prompt vẫn định nghĩa mục tiêu, nguyên tắc và cách model sử dụng context. Platform không sửa được một chỉ dẫn mơ hồ; nó chỉ đảm bảo chỉ dẫn ấy nhận đúng dữ liệu, chạy trong giới hạn và được đo qua từng phiên bản.

### Dùng framework agent có nghĩa là đã có platform chưa?

Không hẳn. Framework thường giúp dựng agent loop, tool calling hoặc workflow. Hệ thống production còn cần state bền vững, identity, permission, secrets, deployment, tracing, eval, approval và quy trình xử lý sự cố. Hãy đối chiếu danh sách năng lực thực tế thay vì nhìn nhãn.

### Một agent duy nhất có cần orchestration không?

Có, nếu nó chạy nhiều bước. Orchestration ở đây là cơ chế theo dõi state, gọi tool, xử lý kết quả, giới hạn retry và quyết định điểm dừng. Multi-agent chỉ là một topology phức tạp hơn, không phải điều kiện để có orchestration.

### Có nên bắt đầu bằng multi-agent không?

Thường là không. Cả OpenAI lẫn Microsoft đều khuyến nghị tối ưu single agent trước. Chỉ tách nhiều agent khi một agent không còn xử lý đáng tin cậy vì prompt quá phức tạp, tool quá tải, hoặc cần cô lập quyền giữa các domain thật sự khác nhau.

### Có tiêu chí số nào quyết định lúc nào được phép xây platform không?

Không. Chỉ một hành động tạo tác động thật cũng đã có thể cần schema, permission, guardrail và approval. Ngược lại, một agent chạy mười bước nhưng chỉ đọc dữ liệu công khai thì rủi ro thấp hơn nhiều. Rủi ro của hành động, chứ không phải số bước, mới là thứ quyết định.

## Việc nên làm tiếp theo

Đừng bắt đầu bằng việc chọn platform. Hãy bắt đầu bằng một bài tập cụ thể, làm được trong một buổi:

Lấy agent bạn đang có. Viết ra chuỗi bước thật của nó khi chạy ngoài production, kèm mọi lần nó chạm vào hệ thống bên ngoài. Với mỗi bước, trả lời ba câu: bước này có ghi dữ liệu không, bước này có thể bị gián đoạn không, và nếu bước này sai thì tôi biết bằng cách nào?

Bước đầu tiên trả lời có cho câu 1 hoặc câu 2, hoặc không biết cho câu 3, chính là failure mode đầu tiên prompt không giải quyết được. Thêm đúng lớp hệ thống cho bước đó: một khóa chống trùng, một điểm phê duyệt, một trace, rồi dừng lại. Lặp lại khi bước tiếp theo cần đến.

Đó là cách một platform hình thành: từ các rủi ro có thật, không phải từ một sơ đồ kiến trúc vẽ trước.

Bạn có thể đọc thêm các bài về [ứng dụng AI thực tế](/ai) tại nguyennlt.com.</content:encoded><category>ai-agent</category><category>agent-platform</category><category>llm</category><category>orchestration</category><category>ai-engineering</category><author>nguyennlt</author><enclosure url="https://nguyennlt.com/images/blog/vi-sao-ai-agent-can-platform-thay-vi-prompt/hero-prompt-vs-platform.webp" length="0" type="image/webp"/></item></channel></rss>