Thiết kế File Viewer & Editor cho Agent: Line numbers, linter tích hợp
Tại sao AI cần line numbers để đọc code? Khám phá thiết kế File Viewer & Editor trong ACI - từ SWE-agent đến Claude Code.
Định nghĩa
File Viewer & Editor trong ACI (Agent-Computer Interface) là tập hợp các công cụ cho phép agent tương tác với filesystem qua API được thiết kế riêng cho quá trình xử lý token tuần tự — bao gồm viewport giới hạn với line numbers và validation tích hợp thay vì giao diện đồ họa toàn diện như IDE cho người dùng.
Giải thích chi tiết
AI "nhìn" file như thế nào?
Khác với con người có thể scroll nhanh qua file 10.000 dòng và nắm bắt cấu trúc trong vài giây, AI đọc file tuần tự từ token này sang token khác. Khi context window chỉ có hiệu quả thực sự ở 4K-8K tokens cho working memory, đưa toàn bộ file lớn vào prompt tương đương với việc ép người đọc ghi nhớ từng chi tiết nhỏ trong khi đọc một cuốn tiểu thuyết dày cộm từ đầu đến cuối không được lật lại trang.
Line numbers như coordinate system
Trong ACI, line numbers không phải là tính năng hiển thị tùy chọn — đó là hệ tọa độ bắt buộc. Khi AI cần sửa một hàm, nó không thể chỉ nói "sửa cái hàm calculate đó". Nó phải chỉ định chính xác: "thay thế dòng 45-47 bằng đoạn code mới". Thiếu line numbers, agent buộc phải dùng string matching, dễ gây lỗi khi file có nhiều đoạn giống nhau.
Thiết kế của SWE-agent giới hạn viewport ở 100 dòng. Nếu file dài hơn, agent phải chủ động gọi view với parameter offset để dịch chuyển cửa sổ. Điều này tạo ra "friction" có chủ đích: agent buộc phải sử dụng search trước để xác định chính xác vị trí, thay vì "lướt" qua file một cách tốn kém về token và dễ gây mất focus.
Validation tích hợp: Fail fast
Khi AI edit file, lỗi syntax có thể xảy ra: thiếu dấu ngoặc, sai indent, import không tồn tại. Trong môi trường HCI, lập trình viên sẽ thấy lỗi highlight trong IDE và sửa ngay. Trong ACI, nếu không có linter tích hợp, lỗi sẽ được phát hiện ở bước test sau — có thể là 5-10 tool calls sau đó, gây ra expensive backtracking.
Claude Code implement 23 lớp validation, trong đó có lint check chạy ngay sau mỗi lần write hoặc edit. Kết quả trả về cho agent không chỉ là "file đã được ghi", mà là "file đã được ghi và kiểm tra: không có lỗi syntax" hoặc "lỗi tại dòng 45 — thiếu colon". Điều này cho phép agent self-correct ngay trong cùng một reasoning step thay vì phải thực thi rồi mới phát hiện lỗi ở turn sau.
Diff-based editing
Thay vì viết lại toàn bộ file (tốn token và rủi ro hallucination), editor nên hỗ trợ diff-based edit: agent chỉ gửi patch cho các dòng cụ thể. Ví dụ:
Edit lines 45-47:
- old_content
+ new_contentĐịnh dạng này yêu cầu line numbers chính xác và validation ngay lập tức để đảm bảo patch apply đúng và không có xung đột.
Ví dụ thực tế
SWE-agent Windowing
SWE-agent implement file viewer với giới hạn cứng 100 lines. Khi agent gọi view, nó nhận:
[Lines 1-100] def setup():
...
[Lines 101-200] (hidden - use offset=101 to view)Nếu cần sửa dòng 150, agent phải:
- Dùng
searchđể tìm pattern chính xác - Gọi
viewvớioffset=101để xem context - Gọi
editvới line number chính xác 150
Quy trình này ngăn agent khỏi việc "đọc lướt" file lớn — một thói quen tự nhiên của người nhưng tốn kém cho AI.
Claude Code Linter Integration
Khi Claude Code thực thi tool write, hệ thống:
- Ghi file
- Chạy linter (ESLint, Ruff, v.v.)
- Trả kết quả về agent trong cùng observation
Nếu lỗi xuất hiện:
✗ Write failed validation
Error at line 23: SyntaxError — unexpected indentAgent thấy lỗi ngay lập tức và có thể gọi edit để sửa trong cùng một turn. Không có validation layer này, agent sẽ tiếp tục làm việc với file bị lỗi, dẫn đến cascade failure khi các edit sau dựa trên nền tảng syntax đã hỏng.
Patch Format trong Aider
Aider (AI pair programming tool) sử dụng Unified Diff format. Agent output:
--- a/calculator.py
+++ b/calculator.py
@@ -45,47 +45,48 @@
def calculate(x):
- return x + 1
+ return x + 2Line numbers (45, 47) cho phép edit chính xác đến từng ký tự. Nếu thiếu line numbers, AI phải dùng string matching và dễ bị lỗi khi file có nhiều hàm tên giống nhau.
Ứng dụng
Sinh viên/Researcher
Hiểu tại sao không thể đơn giản "cho AI đọc cả repo". Khi làm đồ án về code agent, thiết kế file reader với giới hạn 50-100 dòng, luôn attach line numbers, và thêm syntax check trước khi cho agent biết kết quả. Điều này giúp agent chạy ổn định hơn trên codebase lớn hơn vài nghìn dòng.
Developer xây dựng Internal Tools
Thiết kế API cho agent khác với API cho frontend. Thay vì GET /file/content trả về toàn bộ nội dung, dùng GET /file/view?path=x&offset=100&limit=50. Tích hợp linter vào response: trả về content + syntax_valid + errors[]. Điều này giúp agent ít bị "lạc đường" khi edit file.
Tech Lead/AI Architect
Thiết lập quy tắc ACI cho team: "Agent chỉ được xem 100 dòng/lần", "Mọi file operation phải có line numbers", "Validation phải chạy trước khi tool trả kết quả". Điều này giảm 40% lỗi dạng "AI quên nó vừa sửa gì" và "syntax error lan truyền qua nhiều file". Thiết kế này là nền tảng cho multi-agent systems nơi nhiều agent cùng edit code.
So sánh
| Đặc điểm | Giao diện cho Người (HCI) | Giao diện cho Agent (ACI) |
|---|---|---|
| Line numbers | Tùy chọn (có thể tắt) | Bắt buộc (hệ tọa độ tham chiếu) |
| Kích thước viewport | Toàn bộ file (VS Code mở file 10k dòng thoải mái) | Giới hạn 50-100 dòng (tối ưu working memory) |
| Navigation | Scroll, click, fuzzy search | API calls: view(offset=100), search(regex) |
| Syntax validation | Background linting, báo lỗi sau | Immediate validation, trả về ngay trong observation |
| Edit mode | Free-form typing | Diff-based với line numbers cụ thể |
| Error handling | Người dùng tự nhìn console | Agent phải được báo lỗi ngay trong context để self-correct |
ACI thiết kế xung quanh giới hạn của LLM: context window hẹp, xử lý tuần tự, cần địa chỉ chính xác. HCI thiết kế cho linh hoạt và trực giác của con người. Dùng đúng ngôn ngữ cho đúng đối tượng — đừng ép AI dùng IDE của người.
Bài viết liên quan
Cùng cụm
Tool Design cho Agent: Giới hạn kết quả, format output
Thiết kế tool tổng quát cho agent với các nguyên tắc giới hạn và format chuẩn ACI
Permission Gate: Tách 'muốn làm' khỏi 'được phép làm'
Tách biệt ý định và thực thi trong file operations — critical cho security
Thiết kế Search Interface: Giới hạn 50 items và tại sao
Tìm kiếm file trước khi xem — nền tảng của navigation trong ACI
Tool Validation: 23 lớp validation như Claude Code
Chi tiết về các lớp validation và feedback loops trong ACI
Đọc tiếp
Feedback Loops & Quality Gates
Linter là một dạng feedback loop tức thì — tìm hiểu sâu hơn về thiết kế feedback trong Harness Engineering
Security & Guardrails
File editor là công cụ nguy hiểm — cần permission gates và security layers để kiểm soát quyền write
Tool Use & Structured Output (Level 1)
Nền tảng về tool use từ Level 1, tiền đề cho việc thiết kế ACI phức tạp hơn
Permission Gate: Tách 'muốn làm' khỏi 'được phép làm'
Permission Gate là kiến trúc phân tách ý định tool call và quyền thực thi — cách Claude Code và SWE-agent kiểm soát 40+ tools mà AI không bị ngợp
Thiết kế Search Interface: Giới hạn 50 items và tại sao
Tại sao SWE-agent giới hạn 50 kết quả tìm kiếm? Khám phá thiết kế Search Interface cho Agent — không phải UI cho người, mà là ACI tối ưu cho working memory c...