Skip to content

Computer-Using Agent

Ⓐ. Đề 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 này, xin phép dùng luôn từ tiếng Anh là “Agent”. Chủ đề đàm đạo 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ắtsau 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 tham chiếu: chủ yếu là bài ở đây 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]Automatic word wrap
(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)…Automatic word wrap
    -* 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.Automatic word wrap
    -* 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 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 Automatic word wrap
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?! Automatic word wrap
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.

Facebook
Twitter
LinkedIn

ĐĂNG KÝ THAM QUAN

    Ngày tham quan