Ⓐ. Đề dẫn.
Ⓑ. LLM Agent?
Ⓒ. Computer-Using Agent (CUA).
Ⓓ. OpenAI Operator.
Ⓔ. Tự
dựng LLM Agent bằng cách nào?
Ⓕ. Suy
ngẫm chậm.
~
Để giúp anh/chị
quyết định có đọc tiếp hay không, tôi xin phép cung cấp các thông tin liên quan
đến bài post này như sau:
·
Chủ
đề: Machine Learning
·
Tính
thời sự: tháng 3/2025
·
Thời
gian đọc: 8 phút, kể cả
thời gian uống cà phê (uống cà phê xong là đọc xong)
🦀
Ⓐ. Đề dẫn.
Tôi đoán rằng
nhiều anh/chị đã nghe đến từ “Agent”, “LLM Agent” và gần đây là “AI Agent” – kể
từ sau khi ChatGPT ra đời (tháng 11/2022). Tôi thấy nhiều tài liệu dịch từ
“Agent” là “Tác tử” hoặc “Tác nhân”. Trong khuôn khổ bài nhàn đàm này, xin phép
anh/chị dùng luôn từ tiếng Anh là “Agent”. Chủ đề đàm đạo lần này là “LLM Agent”,
đi sâu tìm hiểu một loại Agent đặc biệt có tên là “Computer-Using Agent”, viết
tắt là CUA.
-
Tóm tắt bài
post: sau phần đề dẫn là khái niệm LLM Agent. Tiếp đó chúng ta cùng tìm hiểu
nguyên lý hoạt động của CUA được tích hợp trong Operator của OpenAI. Cuối cùng
là phần nói về cách devs có thể tự dựng LLM Agent như thế nào.
-
Tài liệu tôi tham
chiếu chủ yếu là bài https://openai.com/index/computer-using-agent/ của OpenAI đăng ngày 23/01/2025.
🦀
Ⓑ. LLM Agent?
Trước khi bàn đến cơ chế hoạt động của CUA, xin nói qua một
chút về Agent và LLM Agent. Có thể hiểu nôm na rằng Agent thay mặt chúng ta làm
một việc nào đấy. Ví dụ, Agent đặt một taxi công nghệ - là thay mặt chủ nhân
của số điện thoại X gọi xe công nghệ hãng Y. Hệ thống đặt chỗ của Y lúc đó giao
tiếp với số điện thoại X. Người ta không quan tâm đằng sau số điện thoại X là
“người” hay “Agent”, miễn là thực hiện đúng quy trình đặt xe. Trong trường hợp
“đại diện” là một LLM (Large Language Model) thì chúng ta có tên gọi là
LLM Agent.
Cái gây tò mò cho chúng ta là làm thế nào mà LLM Agent thực
hiện được như vậy? Câu trả lời ngắn gọn là: LLM bắt chước cách mà chúng ta
(người) vẫn làm. Một cách tổng quan, LLM Agent có thể được hiểu là nó cố gắng
đạt được mục tiêu bằng cách quan sát môi trường xung quanh và hành
động dựa trên các công cụ mà nó có. Chú ý rằng LLM Agent hành động một
cách độc lập, chỉ trong trường hợp đặc biệt mới cần sự can thiệp của con
người. Cái này cũng giống như chủ doanh nghiệp giao việc cho một trợ lý, trợ lý
thường hành động độc lập miễn là hoàn thành công việc được giao. Trợ lý chỉ
trao đổi lại với chủ doanh nghiệp khi nhận thấy có một số thông tin còn thiếu
hoặc gặp các tình huống khác thường.
Nói một cách đơn giản, LLM Agent là một LLM có thể "suy
nghĩ" và "hành động" một cách “tự chủ”. (Tự chủ: tự LLM hành
động, không cần con người can thiệp.)
-
Chúng ta đã phần nào hình dung cách thức hoạt động của một
LLM “thông thường”: đưa cho LLM Prompt và LLM hồi đáp Response:
[Prompt] → {LLM} → [Response]
Vậy LLM “thông thường” cần có tính năng nào nữa để trở thành
Agent?
- Lập
kế hoạch (Planning): LLM Agent thường có một module
lập kế hoạch cho phép chúng chia nhỏ các nhiệm vụ phức tạp thành các bước
nhỏ hơn, dễ quản lý hơn.
- Sử
dụng Công cụ (Tool Use): Chúng có thể được trang
bị khả năng sử dụng các công cụ bên ngoài, chẳng hạn như công cụ tìm kiếm,
máy tính, API hoặc thậm chí là robot vật lý. Điều này cho phép chúng truy
cập thông tin hoặc thực hiện các hành động vượt ra ngoài khuôn khổ kiến
thức tự có của LLM.
- Bộ
nhớ (Memory): Một số LLM Agent kết hợp
các cơ chế bộ nhớ để lưu trữ và truy xuất thông tin từ các tương tác trong
quá khứ, cho phép chúng duy trì ngữ cảnh và cải thiện hiệu suất theo thời
gian.
- Thực
thi (Execution): Chúng có thể thực hiện
các bước đã lên kế hoạch, tương tác với môi trường và sử dụng các công cụ
khi cần thiết.
- Quan
sát (Observation): LLM Agent có thể quan sát
kết quả hành động của chúng và trạng thái của môi trường, cho phép chúng điều
chỉnh kế hoạch một cách thích hợp, học (learn) từ trải nghiệm trước
đó.
LLM Agent là một bước tiến quan trọng vượt ra ngoài LLM “thông
thường”, chủ động hơn, có khả năng hơn và hữu ích hơn trong một loạt các ứng
dụng thực tế.
🦀
Ⓒ. Computer-Using Agent (CUA).
Tạm dịch “Comper-Using Agent”: “Agent Sử dụng-Máy
tính”. Nói một cách khác: CUA là loại Agent sử dụng máy tính (ảo) để thực
thi tác vụ.
Chúng ta hình dung CUA giống hệt như người ngồi trước màn
hình máy tính với bàn phím và chuột. CUA đọc hiểu màn hình, biết đâu là nút
nhấn (button), đâu là menu, đâu là ô nhập dữ liệu, … giống hệt như chúng
ta quan sát màn hình vậy. Chú ý rằng màn hình máy tính vào một thời điểm nào đó
là ảnh (screenshot) của “giao diện đồ họa”. Chúng ta giao tiếp với máy
tính thông qua giao diện đồ họa. Sau khi chúng ta làm một cái gì đó (click
chuột, gõ phím, cuộn màn hình, …) thì ảnh (screenshot) của “giao diện đồ
họa” thay đổi một cách tương ứng. Như vậy có thể hình dung chuỗi tương tác này
như sau:
[screenshot] → {action} → [screenshot] →
{action} → [screenshot] → …
Người ta sử dụng chuỗi tương tự trên đây để huấn luyện CUA. Trừ
khi cài app, trên thực tế chúng ta sử dụng LLM thông qua các bộ duyệt. CUA cũng
vậy. Vì các LLM chạy trên bộ duyệt (browser) bất kỳ, trên hệ điều hành (operating
system) bất kỳ nên CUA có thể chạy trên máy nào cũng được - CUA hoạt động
hoàn toàn độc lập với hệ điều hành (OS) và bộ duyệt (browser).
-
Dưới góc độ kỹ thuật thì CUA hoạt động như thế nào? Lưu ý
rằng CUA là một LLM nên luồng thông tin vẫn có dạng cơ bản sau:
[Instruction] → {CUA} → [Response]
(Chỉ thay vào chỗ của Prompt là Instruction - lệnh).
Sau khi nhận “lệnh” (Instruction) từ người dùng (user),
CUA xử lý theo tiến trình lặp đi lặp lại như sau:
·
Nhận thức
(Perception): Đầu vào của phần “Nhận thức” là ảnh màn hình máy tính (screenshot)
ở thời điểm hiện tại. Dưới góc độ lập trình thì đây chỉ là một bitmap các
pixels, không hơn không kém. Cái đặc biệt là CUA “đọc” được chữ trên màn hình, "nhìn
thấy" giao diện người dùng, phát hiện thay đổi và nhận diện các thành phần
như ô nhập liệu, nút bấm, liên kết (đường link)…
·
Suy luận
(Reasoning): CUA suy luận từng bước (Chain-of-Thought) dựa vào
tập dữ liệu gồm [screenshot hiện tại, chuỗi các {actions, screenshots}
đã thực hiện ở các bước trước]. Bước “tự luận” này cho phép CUA “quan sát” kết
quả của hành động (xem đã hoàn thành tác vụ hay chưa), rồi biến ứng một cách thích
hợp.
·
Hành động
(Action): Hành động của CUA bao gồm: click chuột, cuộn màn hình, gõ phím,
… lên một máy ảo (Virtual Machine) – cho đến lúc tác vụ hoàn thành hoặc
cần sự can thiệp của người dùng. Lúc nào CUA cần sự can thiệp của người dùng?
Đó là lúc CUA cần thông tin dạng đăng nhập (tên đăng nhập, mật khẩu đăng nhập),
thông tin thẻ tín dụng, CAPTCHA, hoặc người dùng chủ động can thiệp.
Tiến trình {Nhận thức, Suy luận, Hành động}
như trên được lặp cho đến khi tác vụ hoàn thành, trừ trường hợp cần sự can
thiệp của người dùng.
-
Cái gây tò mò nhất cho chúng ta là CUA “tự luận” như thế
nào? Cái này OpenAI không nói rõ. Cái đầu tiên có thể nhìn thấy, thông qua các
demo họ trình bày trong bài đăng, thì CUA lưu lại toàn bộ {action,
screenshot}. Đây có thể được coi là bộ nhớ (Memory) của CUA. Tôi
đoán mò là từ việc áp dụng Chain-of-Thought, CUA lên kế hoạch hành động
“tổng thể”: chia việc thực hiện câu lệnh (Instruction) của người dùng
thành nhiều bước nhỏ. Mỗi một bước nhỏ (đại ý) gồm {Hành động, Chụp
màn hình kết quả của hành động này}. Bằng việc đối sánh kế hoạch tổng thể
với lưu ký {action, screenshot}, CUA biết bước tiếp theo nên làm gì.
Có một điểm “ẩn” OpenAI không nói rõ nhưng cộng đồng trên
mạng nói nhiều đó là áp dụng Reinforcement Learning (RL). Nếu CUA gặp
lỗi (phần Response không khớp với kế hoạch tổng thể) thì nó làm gì tiếp
theo? Thường nó sẽ thử lại bằng một cách khác. Đây là trường hợp áp dụng RL để
“mày mò” tìm đường đi đến mục tiêu. Nếu thử lại thành công thì nó “học” được
một trải nghiệm – lần sau nó sẽ “đi theo đường mới”. Đây có thể coi như một quá
trình “tự huấn luyện”.
🦀
Ⓓ. OpenAI Operator.
OpenAI áp dụng
CUA cho Operator.
Đây là Agent đầu tiên của OpenAI, được kích hoạt vào ngày 23/1/2025. Phiên bản
này chỉ dùng hạn chế cho tài khoản Pro (200 USD/tháng), ở Hoa Kỳ, và cũng chỉ ở
dạng “research preview” (tiền khảo cứu). Vì vậy, chúng ta (phần lớn) chưa
có dịp trải nghiệm. Mời anh/chị đọc bản giới thiệu sản phẩm ở đây,
đặc biệt là xem video demo.
Cách dùng: người
dùng mô tả tác vụ rồi yêu cầu Operator thực hiện phần việc còn lại. Người dùng
có thể giành quyền điều khiển tại bất cứ thời điểm nào. Ngoài ra, Operator sẽ
chủ động trao quyền điều khiển cho người dùng trong trường hợp cần thông tin
đăng nhập, thông tin tài khoản hoặc CAPTCHA, xác nhận đơn hàng, …
Trong phần
demo, chúng ta thấy Operator sử dụng một bộ duyệt trên máy ảo (nằm trên Cloud),
hiển thị đầy đủ các bước mà nó thực hiện. Đối thoại giữa người dùng và Operator
diễn ra bằng ngôn ngữ tự nhiên giống hệt như đối thoại giữa người với người.
🦀
Ⓔ. Tự dựng LLM Agent bằng cách nào?
Hẳn nhiều
anh/chị tò mò rằng có cách nào tự dựng được LLM Agent không? Ngày 11/3/2025,
OpenAI có giới thiệu vài công cụ để giải đáp câu hỏi này: New tools for building agents. Trong khuôn khổ bài post này, tôi xin
giới thiệu với anh/chị bộ công cụ Responses API.
Ý tưởng: lập trình viên, thay vì phải “lao tâm
khổ tứ” để thiết lập một Agent từ đầu (việc này không đơn giản), bây giờ chỉ việc
điền dữ liệu theo mẫu rồi gọi hàm là xong! Mọi việc còn lại do LLM thực hiện. Rất
đơn giản, đúng không ạ!? Tôi xin post lại vài ví dụ mà họ đã đăng.
Ví dụ 1: Web search.
JavaScript:
const
response = await openai.responses.create({
model: "gpt-4o",
tools: [ { type:
"web_search_preview" } ],
input: "What was a positive news story
that happened today?",
});
console.log(response.output_text);
Giải thích:
Đoạn
mã trên được viết bằng ngôn ngữ Javascript:
Gọi
phương thức openai.responses.create với 3 tham số: {mô hình là “gpt-4o”, công cụ
là “web_search_preview”, đầu vào là "What was a positive news story that
happened today?"}.
Chú
ý rằng vì phương thức openai.responses.create là hàm bất đồng bộ (asynchronous
function) nên người ta phải dùng câu lệnh await – chờ cho đến khi hàm
kết thúc.
Sau
khi hàm kết thúc, người ta hiển thị kết quả ra màn hình: (console.log(response.output_text);)
-
Ví
dụ trên sử dụng công cụ “web_search_preview”, là công cụ tìm kiếm thông tin
trên mạng Internet.
Ý nghĩa:
Ví
dụ trên giống như khi chúng ta sử dụng ChatGPT với chức năng Search (Search the
web). Chúng ta có thể tạo Agent dạng “Trợ lý Shopping”, “Đại lý đặt vé”…
Có
gì khác giữa việc sử dụng ChatGPT và gọi qua API khi cho cùng một đầu vào? Về
cơ bản thì ChatGPT sẽ tìm kiếm thông tin trên toàn bộ Internet vào thời điểm gọi
API. Có một điểm khác là chúng ta có thể chỉ định thêm các địa chỉ website
riêng của tổ chức, doanh nghiệp (xem hướng dẫn ở
đây).
Ví dụ 2: File search.
JavaScript:
const
productDocs = await openai.vectorStores.create({
name: "Product Documentation",
file_ids: [file1.id, file2.id, file3.id],
});
const
response = await openai.responses.create({
model: "gpt-4o-mini",
tools: [{
type: "file_search",
vector_store_ids: [productDocs.id],
}],
input: "What is deep research by
OpenAI?",
});
console.log(response.output_text);
Giải thích:
Đoạn
mã trên được viết bằng ngôn ngữ Javascript:
Đầu
tiên người ta tạo ra bộ tài liệu có tên là productDocs (tài liệu sản phẩm) bằng
cách gọi phương thức openai.vectorStores.create với 2 tham số { Tên tài liệu là
"Product Documentation", mảng tài liệu là [file1.id, file2.id,
file3.id]}
Tiếp
theo, gọi phương thức openai.responses.create với 3 tham số: {mô hình là “gpt-4o-mini”,
công cụ là “file_search” (với mảng tài liệu productDocs.id), đầu vào là "
What is deep research by OpenAI? "}.
Chú
ý rằng phương thức openai.vectorStores.create (cũng giống như phương thức openai.responses.create)
là hàm bất đồng bộ (asynchronous function) nên người ta phải dùng câu lệnh
await – chờ cho đến khi hàm kết thúc.
Cuối
cùng, người ta hiển thị kết quả ra màn hình (console.log(response.output_text);).
Ý nghĩa:
File
search, đúng như tên gọi của nó, cho phép chúng tìm kiếm thông tin trong mảng
file đã được thiết lập từ trước. Việc này cũng giống như chúng ta thiết lập hệ
thống RAG. Chú ý rằng mảng file cần được thiết lập trước khi gọi API.
Vị trí lưu trữ các file này nằm trên hệ thống của OpenAI (xem hướng dẫn ở đây). Như vậy là thay vì phải thiết lập một hệ thống RAG,
chúng ta chỉ cần thiết lập “mảng các file” theo kiến trúc của OpenAI. Chú ý rằng
thiết lập RAG thường phải có bước huấn luyện file-tuning với tập hợp dữ
liệu cần được “làm sạch”, loại bỏ hết các định dạng văn bản (html, .doc, .docx,
.pdf, .pptx, …). Đây là công đoạn không hề dễ dàng, chưa kể tốn kém về mặt thời
gian và chi phí.
Với
tính năng “file search” chúng ta có thể tạo các Agent dạng “Chăm sóc khách
hàng” theo từng nhóm khách hàng chuyên biệt, “Trợ lý tư pháp” cho các văn phòng
luật, “Trợ lý y khoa” cho bác sỹ, …
Ví dụ 3: Computer Use.
JavaScript:
const
response = await openai.responses.create({
model: "computer-use-preview",
tools: [{
type: "computer_use_preview",
display_width: 1024,
display_height: 768,
environment: "browser",
}],
truncation: "auto",
input: "I'm looking for a new camera.
Help me find the best one.",
});
console.log(response.output);
Giải thích:
Đoạn
mã trên được viết bằng ngôn ngữ Javascript:
Gọi
phương thức openai.responses.create với 4 tham số: {mô hình là "computer-use-preview",
công cụ là “computer_use_preview” – sử dụng bộ duyệt với kích thước màn hình (ảo)
là 1024x768, truncation (cắt ngắn nếu vượt quá chiều dài của context-window): tự
động, đầu vào là " I'm
looking for a new camera. Help me find the best one."}.
Chú
ý rằng vì phương thức openai.responses.create là hàm bất đồng bộ (asynchronous
function) nên người ta phải dùng câu lệnh await – chờ cho đến khi
hàm kết thúc.
Sau
khi hàm kết thúc, người ta hiển thị kết quả ra màn hình: (console.log(response.output);)
Ý nghĩa:
Chú ý: như đàm luận ở phần trên, vào thời điểm
của bài đăng, Computer Use chỉ dùng hạn chế cho tài khoản Pro (200 USD/tháng), ở
Hoa Kỳ, và cũng chỉ ở dạng “research preview” (tiền khảo cứu).
Xem
demo của Operator, thấy họ dựng các Agent có hợp tác với các nền tảng khác như OpenTable (đặt bàn ăn), Instacart (mua hàng), StubHub (mua vé), Thumbtack (dịch vụ dọn nhà), DoorDash (dịch vụ đặt đồ ăn)… Tôi tưởng tượng là
nếu chúng ta tự dựng Agent thì chắc cần cộng tác với các nền tảng điện tử đang
hoạt động ở trong nước, chẳng hạn như “Đặt xe tự động” thì phối hợp với các dịch
vụ taxi công nghệ, “Mua hàng trực tuyến” thì phối hợp với các nền tảng thương mại
điện tử.
Chi
tiết kỹ thuật tích hợp CUA ở đây.
---
(Anh/chị “software
developer” có thể bớt chút thời gian xem Demo về công cụ tạo Agent ở
đây.)
Chú ý: LLM Agent mà người dùng tự dựng, khi lên
mạng Internet, người dùng phải trả phí tùy theo loại công cụ và số lượng truy vấn
(queries)!
🦀
Ⓕ. Suy ngẫm chậm 🤔
Kịch bản ứng dụng
Có thể hình
dung một kịch bản ứng dụng LLM Agent vào thực tế không còn quá xa vời (cuối năm
2025, đầu năm 2026), lấy ví dụ các lĩnh vực y tế, giáo dục, doanh nghiệp vừa và
nhỏ (SMEs):
1. Y tế
- Hỗ trợ chẩn đoán: Phân tích triệu chứng do bác sĩ hoặc
bệnh nhân nhập vào và đưa ra các gợi ý y khoa tham khảo.
- Tóm tắt hồ sơ bệnh án: Đọc hàng loạt tài liệu y tế, sau
đó tóm tắt cho bác sĩ nắm nhanh tình trạng bệnh.
- Tư vấn sức khỏe ảo: Trả lời câu hỏi của bệnh nhân dựa
trên kiến thức y khoa chuẩn hóa.
- Phân tích nghiên cứu y khoa: Đọc nghiên cứu khoa học và giải
thích theo ngôn ngữ đơn giản cho bác sĩ hoặc bệnh nhân.
- Hỗ trợ viết báo cáo y tế: Tạo bản nháp báo cáo lâm sàng, ghi
chú sau khám, thư giới thiệu.
2. Giáo dục
- Trợ giảng ảo: Giải thích khái niệm, trả lời câu
hỏi, đưa ra ví dụ minh họa.
- Tạo đề thi và câu hỏi trắc nghiệm: Sinh tự động các câu hỏi từ nội
dung bài giảng.
- Phản hồi cho bài tập: Đánh giá và đưa ra nhận xét mang
tính hướng dẫn.
- Tóm tắt tài liệu học tập: Giúp học sinh nắm nhanh những điểm
quan trọng.
- Hỗ trợ học ngôn ngữ: Đóng vai hội thoại, giải thích ngữ
pháp và từ vựng.
3. Doanh nghiệp vừa và nhỏ (SMEs)
- Viết email chuyên nghiệp: Soạn thảo email phản hồi khách
hàng, hợp đồng, thông báo nội bộ.
- Hỗ trợ marketing: Viết bài quảng cáo, nội dung mạng
xã hội, slogan.
- Tự động tạo báo cáo: Tóm tắt dữ liệu kinh doanh từ file
excel thành bản tường trình dễ hiểu.
- Trợ lý khách hàng: Tích hợp vào chatbot để trả lời
các câu hỏi phổ biến, tư vấn sản phẩm.
- Hỗ trợ tìm ý tưởng sản phẩm / dịch
vụ mới: Đưa ra gợi
ý dựa trên phân tích xu hướng và nhu cầu thị trường.
LLM tiến hóa?!
Từ việc đơn giản
chỉ là giải đáp câu hỏi ([Prompt] → {LLM} → [Response]),
bây giờ LLM trở thành Agent, có thể thực thi vòng lặp các “nhận thức, suy luận,
hành động” nhằm đáp ứng câu lệnh của người dùng trước khi báo cáo kết quả cuối
cùng:
[Instruction] → LLM Agent: {Perception, Reasoning,
Action}n → [Report result]
-
Câu hỏi mở: với đà “tiến hóa” này, sau Agent sẽ là
gì? Uống xong cà phê nhờ anh/chị dự đoán và giải đáp.
---
Trân trọng
& vui nhã!
(_/)
( •_•)
/ >☕
LeVanLoi