⚡ KHÓA HỌC HARNESS ENGINEERING & AI CODING AGENT (CLAUDE CODE) BÀI 1 / 4
Harness Engineering Series • Bài 1

Khóa Học Harness Engineering (Phần 1): Bản Chất AI Coding Agent & Vòng Lặp Agent Loop Tối Giản

Trong năm 2024–2026, thuật ngữ "AI Agent" đã bị thổi phồng bởi một ngành công nghiệp chắp vá prompt (prompt-plumbing industry). Hàng trăm nền tảng kéo thả no-code, thư viện xâu chuỗi waterfall prompts và các cây if-else phức tạp tự nhận mình là "Agent".

Tuy nhiên, các kỹ sư phần mềm thực chiến nhanh chóng nhận ra: Những hệ thống đó thực chất là các cỗ máy Rube Goldberg mỏng manh, dễ gãy đổ khi gặp bất kỳ trường hợp ngoại lệ nào ngoài dự tính. Dự án nghiên cứu nổi tiếng shareAI-lab/learn-claude-code và cộng đồng kỹ thuật của Anthropic đã đưa ra một tuyên ngôn mang tính bước ngoặt làm thay đổi toàn bộ tư duy phát triển tác nhân AI:

💡
NGUYÊN TẮC VÀNG CỦA HARNESS ENGINEERING:
"Agency — the capacity to perceive, reason, and act — comes from model training, not from external code orchestration. An Agent Product = Model + Harness."
(Năng lực hành động của tác nhân đến từ quá trình huấn luyện mô hình thần kinh, không phải từ các dòng code điều hướng bên ngoài. Một sản phẩm Agent hoàn chỉnh gồm hai phần: Model là người lái (Driver) và Harness là cỗ xe (Vehicle).)

1. Năng Lực Hành Động (Agency) Thực Sự Đến Từ Đâu?

Lịch sử của trí tuệ nhân tạo hiện đại đã chứng minh điều này một cách rõ ràng qua hơn một thập kỷ:

Bạn không thể "lập trình ra trí thông minh" bằng cách chồng chất hàng trăm nhánh rẽ if-else hay vẽ các đồ thị prompt ngoằn ngoèo. Trí thông minh là thứ được học (learned), không phải được code cứng.

2. Định Nghĩa Chuẩn Về "Harness Engineering"

Khi hầu hết chúng ta nói "tôi đang xây dựng một AI Agent", thực chất chúng ta không huấn luyện lại mô hình nền tảng. Công việc thực sự của chúng ta là trở thành một Harness Engineer (Kỹ sư chế tạo khung môi trường).

Harness = Tools + Knowledge + Observation + Action Interfaces + Permissions Tools: Đôi tay của Agent (Bash shell, File I/O, Git, Browser, Database) Knowledge: Bộ não miền (Domain Specs, Architecture Rules, Style Guides) Observation: Đôi mắt của Agent (Git Diff, Terminal Output, Logs, Linter Errors) Action: Cơ chế thực thi (CLI Execution, API Calls, Patch Edits) Permissions: Vòng bảo vệ (Sandbox, File Whitelist, Safe Approval Pipeline)

Nếu chiếc xe được thiết kế tồi (công cụ mập mờ, thiếu quyền thực thi, ngữ cảnh tràn ngập rác), một tay đua siêu hạng (Claude hay Gemini) cũng sẽ đâm sầm vào tường. Ngược lại, một Harness được gia công tỉ mỉ, tinh gọn và rõ ràng sẽ giúp mô hình giải phóng 100% năng lực tiềm năng.

3. Giải Phẫu Vòng Lặp Agent Loop Tối Giản

Bản chất của mọi coding agent hàng đầu thế giới (kể cả Claude Code hay Cursor) khi bóc tách lớp vỏ bề ngoài đều vận hành dựa trên một vòng lặp vĩnh cửu cực kỳ tinh khiết:

User Input → messages[] → LLM → Model Response | Có khối tool_use không? / \ Có Không | | Thực thi tools Trả về văn bản Nối kết quả vào messages[] Kết thúc vòng lặp | Lặp lại vòng tiếp theo → messages[]

Mô hình tự quyết định khi nào cần gọi công cụ, gọi công cụ nào, với tham số gì và khi nào công việc đã hoàn thành để dừng lại. Mã nguồn phần mềm của bạn tuyệt đối không can thiệp phán đoán thay cho mô hình — nó chỉ làm đúng nhiệm vụ: thực thi những gì mô hình yêu cầu và nạp kết quả trả về.

4. Sơ Đồ Kiến Trúc Harness & Vòng Bảo Vệ Sandbox

Dưới đây là sơ đồ kiến trúc tổng quan của một hệ thống Harness tiêu chuẩn, thể hiện rõ sự phân tách ranh giới giữa bộ máy suy luận (Model Reasoning) và khung thực thi an toàn (Harness Sandbox):

KIẾN TRÚC HARNESS ENGINEERING & VÒNG LẶP AGENT LOOP Mô hình là Người Lái (Driver) · Khung Harness là Cỗ Xe (Vehicle) · Tự Trị Thực Thi NGỮ CẢNH HỘI THOẠI 1. Danh sách Messages[]: • System Prompt (Hiến pháp) • User Task / Bug Report • Lịch sử Tool Call & Output 2. Quản Trị Bộ Nhớ: • Nén ngữ cảnh (Compaction) • Ngân sách token linh hoạt Cung cấp bối cảnh toàn diện không làm tràn Context Window API Call LLM REASONING (MODEL) Nhận Thức & Lập Luận Phân tích lỗi · Đọc hiểu code Quyết Định Hành Động Sinh khối tool_use cụ thể Chọn tool: bash, edit, view... Model quyết định thời điểm dừng Không phụ thuộc vào if-else ngoài tool_use HARNESS EXECUTION Permission & Sandbox Chặn lệnh nguy hiểm (rm -rf) Tool Dispatch Engine Thực thi Bash, Edit file, Grep Observation Feedback Bắt stdout, stderr, exit code Vòng hồi tiếp: Nối stdout vào messages[] & tiếp tục vòng lặp

5. Triển Khai Code Python: Bộ Khung Nano Agent Loop

Dưới đây là mã nguồn Python hoàn chỉnh xây dựng một khung Harness Agent Loop tối giản (Nano Harness) tích hợp công cụ thực thi Bash an toàn và cơ chế duyệt quyền theo đúng thiết kế của Claude Code:

import subprocess import json import os class NanoHarness: """ Bộ khung Harness tối giản kết nối LLM với môi trường hệ điều hành """ def __init__(self, model_client, safe_mode: bool = True): self.client = model_client self.safe_mode = safe_mode self.messages = [] # Định nghĩa các công cụ cốt lõi (Tool Definitions) self.tools = [ { "name": "bash", "description": "Thực thi câu lệnh terminal shell trong workspace", "parameters": { "type": "object", "properties": { "command": {"type": "string", "description": "Lệnh shell cần chạy"} }, "required": ["command"] } } ] def execute_bash(self, command: str) -> str: """Thực thi lệnh shell có kiểm soát sandbox và permission""" # Danh sách đen các lệnh mang tính hủy diệt forbidden = ["rm -rf /", ":(){ :|:& };:", "mkfs", "dd if="] if any(f in command for f in forbidden): return "Error: Lệnh bị từ chối bởi chính sách an toàn của Harness Sandbox." if self.safe_mode and any(c in command for c in ["git push", "rm ", "drop"]): user_confirm = input(f"[XÁC NHẬN] Cho phép chạy lệnh nguy hiểm '{command}'? (y/n): ") if user_confirm.lower() != 'y': return "Action Aborted: Người dùng đã từ chối cấp quyền thực thi." try: res = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=30) out = res.stdout if res.returncode == 0 else res.stderr return out if out else "(Lệnh thực thi thành công nhưng không có output)" except Exception as e: return f"Execution Exception: {str(e)}" def run_loop(self, user_goal: str): """Vòng lặp Agent Loop tối giản: while True: messages -> LLM -> tools -> messages""" self.messages.append({"role": "user", "content": user_goal}) while True: # Gọi LLM với danh sách messages và danh sách tools response = self.client.chat_completion(messages=self.messages, tools=self.tools) self.messages.append(response["message"]) # Nếu mô hình không yêu cầu gọi tool -> Đã hoàn thành công việc tool_calls = response["message"].get("tool_calls", []) if not tool_calls: print(f"[AGENT HOÀN THÀNH]: {response['message']['content']}") break # Dispatch công cụ và thu nhận quan sát (Observation) for tc in tool_calls: func_name = tc["function"]["name"] args = json.loads(tc["function"]["arguments"]) if func_name == "bash": obs = self.execute_bash(args["command"]) self.messages.append({ "role": "tool", "tool_call_id": tc["id"], "content": obs })
💡
TỔNG KẾT BÀI HỌC: Trí thông minh là của mô hình, nhưng khả năng tác chiến thực tế phụ thuộc 100% vào cỗ xe Harness. Một Agent Loop tối giản chỉ mất vài chục dòng code, nhưng khi mở rộng ra một dự án lớn, ngữ cảnh sẽ nhanh chóng bị tràn và phân tâm. Trong Phần 2 tiếp theo, chúng ta sẽ mổ xẻ kỹ thuật Quản trị Ngữ cảnh (Context Management), sinh Subagents với tin nhắn sạch và cơ chế Nạp Kỹ Năng Động (Skill Loading on-demand) theo chuẩn SKILL.md của Anthropic!
⚡

Biên Soạn: Học Viện Giao Dịch — Hàng Hóa Plus

Chuỗi bài giảng Harness Engineering được phát triển dựa trên các nghiên cứu chuyên sâu về kiến trúc tác nhân lập trình AI của Anthropic Claude Code và shareAI-lab.