
Link bài viết gốc: What is a "harness"?
Theo - t3.gg · X · @theo · 2026-10-23 08:16
Bài viết này được chia sẻ lại, bản quyền thuộc về tác giả gốc, toàn văn căn cứ theo link bài gốc

Thành thật mà nói: Tôi viết bài này vì đã quá mệt mỏi khi phải giải thích đi giải thích lại, và dường như chưa có một “nguồn tài liệu” đơn lẻ nào thực sự giải thích rõ ràng harness rốt cuộc là gì.
Đọc xong bài viết này, bạn sẽ nắm được mọi kiến thức cần thiết về harness là gì và cách chúng hoạt động.
Humans use interfaces (Con người sử dụng giao diện)
Nói chung, con người không dùng máy tính bằng cách viết code. Họ sử dụng một dạng giao diện nào đó, cho dù là terminal, website hay ứng dụng.
Về mặt lý thuyết, con người có thể viết code Python hoặc JS riêng cho từng tác vụ cần hoàn thành. Nhưng chúng ta không để họ làm thế, mà cho phép họ tiếp cận phần code này thông qua các nút bấm, phím tắt, lệnh, v.v.
Ví dụ về giao diện: Chrome, Claude Code, ứng dụng ChatGPT (trước đây là Codex)
Điều đáng chú ý là con người thường không nhìn thấy phần code bên dưới... Con người chỉ nhìn thấy giao diện.
LLMs use harnesses (LLM sử dụng harness)
Theo mặc định, những gì LLM có thể làm chỉ là tạo văn bản. Để mô hình ngôn ngữ có thể làm được nhiều việc hơn, nó cần có công cụ. Hầu hết các LLM hiện nay đều đã được huấn luyện để phối hợp với các công cụ như “read_file” (dùng để truy cập tệp trên máy tính của bạn), “edit_file” (dùng để chỉnh sửa các tệp đó), “bash” (dùng để chạy lệnh) và “search” (dùng để tìm kiếm dữ liệu trực tuyến).
Nhưng LLM vẫn chỉ gửi văn bản! Nó không thể bấm nút như con người. Do đó, chúng ta cần một định dạng văn bản tùy chỉnh để LLM sử dụng, nhằm biểu thị “bạn nên chạy một đoạn code nào đó”. Giả sử chúng ta cung cấp cho LLM một định dạng để gọi công cụ, ví dụ:
<read_file name="README.md">
Giờ đây LLM biết nó có thể phản hồi theo định dạng này. Nhưng đó vẫn chỉ là văn bản, không thể tự làm bất cứ điều gì! Giống như việc bạn gõ bàn phím hay di chuột khi máy tính đang tắt vậy.
Phải có thứ gì đó phân tích cú pháp các phản hồi này, rồi dựa vào phản hồi của LLM để chạy đoạn code tương ứng.
Để LLM thực sự hành động, nó cần:
- Các công cụ có khả năng thực thi tác vụ (read_file, edit_file, bash, search, v.v.)
- Một cú pháp đặc biệt để gọi các công cụ này thông qua văn bản
- Một hệ thống phân tích cú pháp tin nhắn nhằm nhận diện cú pháp đó và chạy code
- Một phương thức trả phản hồi của công cụ về lại cho LLM
- Một danh sách các công cụ khả dụng kèm hướng dẫn sử dụng
Đó chính là harness.
“Isn't Claude Code a harness?” (Claude Code chẳng phải là harness sao?)
Ở một góc độ nào đó thì đúng là vậy.
Claude Code có hai phần: giao diện và harness
Khi bạn chạy “claude” trong terminal, Claude TUI sẽ mở ra. Khi bạn chuyển sang tab “Code” của ứng dụng Claude Desktop, Claude Code GUI sẽ mở ra. Cả hai thứ này đều không phải là harness.
Ở tầng bên dưới, Claude Code sử dụng Anthropic Agent SDK để tương tác với agent. ChatGPT cũng tương tự, ứng dụng ChatGPT/Codex tương tác với Codex App Server (được tích hợp sẵn trong CLI).

Tôi hiểu vì sao mọi người lại bối rối: Claude Code và Codex đều tích hợp sẵn harness vào trong ứng dụng của họ.
Nhưng bạn cũng có thể tích hợp cùng một harness đó vào các ứng dụng khác! Một vài ví dụ:
- Cursor harness được Grok Bot sử dụng
- Anthropic Agent SDK và Codex App Server được T3 Code sử dụng
- OpenClaw sử dụng Pi
Harness là một phần độc lập, hiếm khi hoặc thậm chí chưa từng lộ diện trước người dùng ứng dụng.
Who owns the tools? (Ai sở hữu những công cụ này?)
Hãy tưởng tượng harness giống như một căn bếp.
Trong bếp có rất nhiều công cụ khác nhau: nồi, chảo, dao, xẻng nấu ăn, máy xay sinh tố, v.v.
Không có căn bếp nào sở hữu đầy đủ mọi thứ mà mỗi đầu bếp cần.
Một harness tốt được xây dựng dựa trên giả định này, cho phép người dùng tự mang theo công cụ của mình.
Cần làm rõ rằng: Phần lớn các công cụ quan trọng đều do harness trực tiếp cung cấp. Codex và Claude Code đều bao gồm rất nhiều công cụ, trong khi các harness khác như Pi lại tinh gọn hơn nhiều.
Đây là lúc mọi thứ bắt đầu trở nên rối rắm, để tôi vẽ thêm một sơ đồ.

Hộp màu cam chỉ “những gì Claude Code bao gồm” (chính xác hơn là Agent SDK).
Bạn có thể thêm nhiều công cụ tùy chỉnh, chẳng hạn như plugin TypeScript để cung cấp cho LLM công cụ kiểm tra code, hoặc plugin CUA giúp agent có thể điều khiển máy tính của bạn.
Hãy chú ý đến ranh giới giữa “tầng công cụ” và tầng con người / LLM. Cả con người lẫn LLM đều không thể nhìn thấy hay chạm tới những công cụ này. Chúng ta không thể biết chúng có tồn tại hay không. Các công cụ được harness cung cấp ra ngoài, mở cho cả LLM lẫn giao diện (tức cách chúng ta nhìn thấy chúng).
MCP khiến mọi chuyện trở nên phức tạp hơn một chút
MCP (Model Context Protocol) là một tiêu chuẩn nhằm giúp harness dễ dàng truy cập các tài nguyên bên ngoài hơn. Nói một cách đơn giản: công cụ là “chạy code tại đây để hoàn thành một tác vụ”, còn MCP là “gửi request API ở nơi khác để hoàn thành một tác vụ”.
Công cụ trực tiếp cung cấp code. Còn MCP cho phép code nằm ở nơi khác, nhưng LLM vẫn có thể gửi request qua MCP để thực hiện thao tác.
Công dụng phổ biến nhất của MCP là cung cấp dữ liệu cho LLM của bạn. Muốn ChatGPT xem email của bạn? Dùng MCP. Muốn Claude phân tích dữ liệu website của bạn? Cũng dùng MCP.
Extension của Chrome hơi giống với công cụ. Chúng có thể thay đổi cách website hoạt động bằng cách chạy code trong Chrome trên máy tính của bạn.
MCP giống như một website hơn. Bạn không cần cài đặt bất cứ thứ gì, chỉ cần biết URL. Một khi đã có URL, bạn (sẽ) có được mọi thông tin cần thiết để sử dụng nó :)
Kết hợp tất cả lại với nhau, nó sẽ trông như thế này:

... Khoan đã, T3 Code làm gì ở đó vậy? Để tôi giải thích.

T3 Code cung cấp các tính năng tùy chỉnh cho LLM nhằm thực hiện những tác vụ mà các harness không cung cấp. Ví dụ: chúng tôi cho phép dùng thread của Claude Code để tạo sub-agent trong Codex. Các công cụ khác cũng làm điều tương tự, chẳng hạn như Herdr, Orca và Superset là những ví dụ điển hình.
Vậy tại sao điều này lại được cung cấp dưới dạng một MCP? Liệu đây có phải là một chiêu trò rẻ tiền nhằm trốn tránh việc tự xây dựng harness riêng không?
Hãy nhớ lại phần trích dẫn trước đó:
Công cụ trực tiếp cung cấp code. Còn MCP cho phép code nằm ở nơi khác, nhưng LLM vẫn có thể gửi request qua MCP để thực hiện thao tác.
T3 Code có rất nhiều code để triển khai các tính năng thú vị, chẳng hạn như sub-agent đa harness (multi-harness). Về mặt kỹ thuật, chúng tôi hoàn toàn có thể tái cấu trúc toàn bộ các tính năng tuyệt vời nhất của T3 Code thành một bộ plugin cho Claude Code, Codex, Antigravity, Pi, Cursor, Muse, v.v...
Hoặc chúng tôi có thể giữ lại toàn bộ code bên trong chính T3 Code và cung cấp một MCP server đơn giản để LLM sử dụng :)
Quay lại ví dụ về căn bếp, MCP gần giống như những công thức nấu ăn. Chúng là phương pháp để làm điều gì đó, chứ không phải bản thân điều đó.
T3 Code đang cung cấp một cuốn sách công thức nấu ăn cho căn bếp. Nó hoàn toàn không làm thay đổi cách căn bếp vận hành. Nếu các đầu bếp quyết định muốn xem công thức của chúng tôi, điều đó thật tuyệt! Họ cũng có thể phớt lờ nó hoàn toàn, và chẳng có gì thay đổi cả.
... Vậy thì agent là gì?
Bạn có biết tôi tự hào đến mức nào khi có thể viết đến tận đây mà không phải lặp đi lặp lại từ “agent” khi chưa định nghĩa nó không? Chẳng dễ dàng chút nào đâu, haha.
Nói một cách ngắn gọn - agent là sản phẩm được tạo ra khi harness kết hợp với LLM.
LLM chỉ tạo văn bản, chúng không thực sự làm bất cứ điều gì. Các harness chỉ là căn bếp, bản thân chúng không thể nấu được món gì. Sự kết hợp giữa LLM và harness mới tạo ra một “agent”.
Các “agent” khác nhau thường chỉ là các cấu hình harness khác nhau, ví dụ như công cụ tùy chỉnh, chỉ dẫn, MCP server, v.v.
T3 Code có phải là một harness không?
Không. Nếu bạn không mang theo một harness, T3 Code sẽ không thể hoạt động.
Quay lại ví dụ căn bếp:
- Đầu bếp = LLM
- Căn bếp = harness
- T3 Code = Nhà hàng
T3 Code là một nhà hàng cho phép bạn mang theo bất kỳ căn bếp nào mình muốn. Chúng tôi có cuốn sách công thức nấu ăn yêu thích của riêng mình và cung cấp nó cho mọi căn bếp, nhưng trừ khi bạn yêu cầu đầu bếp, họ sẽ không mở nó ra :)
Dành cho những ai muốn tìm hiểu sâu hơn...
Nếu bạn thích kiểu giải thích từ trên xuống này, hãy bảo sếp của bạn chi tiền cho khóa học Mega.dev ra mắt vào tuần tới của tôi nhé. Tôi sẽ đi sâu vào tất cả những nội dung này ở đó :)
Ngoài ra hãy xem thử T3 Code . Nó là mã nguồn mở , vì vậy bạn có thể yêu cầu agent của mình giải thích cách nó hoạt động để hiểu sâu hơn.
Học tương tác với AI (NotebookLM)
Ngoài đọc , bạn có thể nghe , xem và xem hoạ thông tin ở đầu bài. Bài này còn có bộ công cụ tương tác do AI tạo: Bài kiểm tra trắc nghiệm, Thẻ ghi nhớ, Sơ đồ tư duy, Bản trình bày và Báo cáo chuyên sâu.
Mở không gian học tương tác