Chuyển đến nội dung chính
Giảm 50% tất cả các gói, có thời hạn. Khởi điểm từ $2.48/mo
12 min left
AI và Machine Learning

Cách các tác nhân lập trình AI tải trước ngữ cảnh của bạn và khi nào nó phản tác dụng

D Bởi Dan 12 phút đọc
Split panel showing context files streaming into an AI agent on the left and a developer's blank prompt cursor waiting on the right, illustrating AI agent context pre-loading before the first message

Bạn mở trình soạn thảo và bắt đầu một phiên làm việc. Trước khi bạn gõ bất cứ thứ gì, thậm chí trước khi con trỏ kịp đứng yên trong ô nhập liệu, tác nhân đã đọc một lượng đáng kể. Nó đã tiếp nhận system prompt của mình, định nghĩa của mọi công cụ mà nó có thể gọi, các chỉ dẫn hành vi, tệp CLAUDE.md của dự án bạn (hoặc .cursorrules, hoặc AGENTS.md), mọi quy tắc gắn với đường dẫn đang có hiệu lực, và bất cứ thứ gì nằm trong tệp bộ nhớ của nó. Đến lúc bạn nói lời đầu tiên, tác nhân đã có sẵn một mô hình về bạn, về dự án của bạn và về cách nó phải hành xử.

Mô hình tư duy ngây thơ là: bạn gõ, tác nhân trả lời. Trình tự thật sự là: tác nhân đọc ngữ cảnh của bạn, bạn gõ, tác nhân trả lời. Chính bước đầu tiên lặng lẽ đó, khi tác nhân đọc bạn trước cả khi bạn lên tiếng, là nơi một phần lớn đến bất ngờ kết quả của bạn được định đoạt. Và bằng chứng về việc ngữ cảnh bạn nạp vào có thực sự hữu ích hay không thì khó chịu hơn phần lớn chúng ta vẫn tưởng.

Phiên bản ngắn gọn

  • Các tác nhân lập trình AI nạp ngữ cảnh viết sẵn trước tin nhắn đầu tiên của bạn: system prompt, định nghĩa công cụ, và các tệp hướng dẫn riêng của từng công cụ như CLAUDE.md, quy tắc Cursor, hướng dẫn GitHub Copilot, hoặc AGENTS.md ở nơi được hỗ trợ hay được nhập vào. Không phải bạn khởi đầu cuộc trò chuyện; chính phần đọc của tác nhân mới là khởi đầu.
  • Việc nạp trước đó ngốn một phần đáng kể cửa sổ ngữ cảnh khả dụng trước khi bạn gõ một ký tự nào, nên ngân sách làm việc thực tế của bạn nhỏ hơn những gì cửa sổ mà mô hình quảng cáo gợi ý.
  • Phát hiện thực nghiệm mới là phần phản trực giác: các tệp ngữ cảnh do lập trình viên tự viết giúp ích một chút (khoảng +4% tỷ lệ hoàn thành tác vụ) với cái giá thật (khoảng +19% chi phí suy luận), trong khi các tệp do LLM sinh ra hoặc sao chép dán lại có thể khiến kết quả hơi tệ hơn.
  • Tự lưu trữ mô hình của bạn thay đổi những gì bạn có thể làm xem, không phải những gì bạn phải do. Kiến trúc trước phiên giống nhau ở mọi nơi; các công cụ cục bộ chỉ cho phép bạn kiểm tra và kiểm toán nó. Kỷ luật viết ngữ cảnh mà bạn thực sự hiểu không biến mất.

Mô hình ngây thơ sai: Tác nhân đọc trước

Hãy hình dung đúng khoảnh khắc một phiên Claude Code bắt đầu. System prompt được nạp vào. Các định nghĩa công cụ được nạp vào. Rồi, trước khi bạn nói bất cứ điều gì, tệp CLAUDE.md của bạn được gửi vào, và chi tiết kỹ thuật ở đây rất quan trọng. Tài liệu của chính Anthropic nói rõ rằng Nội dung CLAUDE.md được “gửi như một tin nhắn người dùng sau system prompt,” được tải “vào đầu mỗi cuộc trò chuyện.” Vì vậy, lượt đầu tiên của người dùng trong bản ghi không phải là bạn. Đó là tệp của bạn, nói thay cho bạn, đặt ra các điều kiện trước khi bạn đến.

Thứ thực sự được nạp vào khoảnh khắc mở đầu đó là cả một ngăn xếp: system prompt, các định nghĩa công cụ, các chỉ dẫn hành vi, tệp ngữ cảnh cấp dự án và cấp người dùng của bạn, mọi quy tắc gắn với đường dẫn khớp với các tệp đang liên quan, và một tệp bộ nhớ do chính tác nhân tự duy trì. Trong Claude Code, các tệp ngữ cảnh được phân giải qua một hệ thống phân cấp bốn tầng (chính sách do tổ chức quản lý, rồi cấp người dùng (~/.claude/CLAUDE.md), rồi cấp dự án (./CLAUDE.md), rồi cấp cục bộ (./CLAUDE.local.md)), được nối lại theo đúng thứ tự đó. Bộ nhớ tự động thêm phần của riêng nó: 200 dòng đầu tiên (hoặc 25KB) của tệp MEMORY.md mà tác nhân tự viết và tự đọc, được nạp trong mọi phiên.

Chẳng có thứ nào trong đó là miễn phí. Phần chi phí hạ tầng (system prompt, định nghĩa công cụ, hướng dẫn hành vi) tiêu tốn một tỷ lệ đáng kể của cửa sổ ngữ cảnh hữu dụng trước cả khi tin nhắn đầu tiên của bạn tới nơi. Đó là khoản thuế bạn trả để tác nhân biết cách làm một tác nhân, và nó vô hình trừ khi bạn chủ động đi tìm.

Một tên gọi đang hình thành xung quanh bộ môn quản lý tất cả những điều này. Nhóm AI ứng dụng của Anthropic gọi nó là kỹ thuật ngữ cảnh: “tập hợp các chiến lược để tuyển chọn và duy trì tập token (thông tin) tối ưu trong quá trình suy luận của LLM.” Đây là một thuật ngữ hữu ích vì nó đổi cách nhìn về tệp bạn viết: từ một mẩu ghi chú gửi cho robot thành một quyết định kiến trúc về việc cái gì được chiếm một tài nguyên khan hiếm và đắt đỏ.

Timeline of what an AI coding agent loads before the developer types: system prompt, tool definitions, behavioral instructions, context files including CLAUDE.md, path-scoped rules, and agent memory, all loaded before the first user message

Bốn tác nhân, bốn cách đọc bạn trước

Các tác nhân không đọc bạn theo cùng một cách. Chúng phân chia theo hai trục đáng đặt tên: cái gì được tải khi bắt đầu phiên (một hệ thống phân cấp file được chọn lọc, so với các quy tắc luôn bật, so với quét toàn bộ repo), và bạn có thể kiểm tra bao nhiêu trong số đó, tức là cơ chế đó là một sản phẩm xác định và có thể kiểm toán, hay một chỉ mục ngữ nghĩa mà bạn phải tin tưởng vô điều kiện. Chính trên hai trục này, Claude Code, Cursor, GitHub Copilot và Aider mới thực sự khác nhau.

Công cụNhững gì được tải khi bắt đầu phiênCơ chếKhả năng kiểm tra
Claude CodeCLAUDE.md hierarchy + .claude/rules/ + bộ nhớ tự động; AGENTS.md chỉ khi được nhập hoặc liên kết tượng trưngPhân cấp dựa trên tệp; các quy tắc phân vùng theo đường dẫn có thể tải chậm; hành vi nén và đọc lại khác nhauCao đối với tệp và bộ nhớ của bạn; system prompt vẫn là độc quyền
CursorQuy tắc dự án, nhóm và người dùng; hỗ trợ AGENTS.md; chỉ mục codebase cho ngữ cảnh ngữ nghĩaTệp quy tắc có thể đọc được cộng với lập chỉ mục codebase ngữ nghĩaHỗn hợp: các quy tắc có thể đọc được, nhưng truy xuất chỉ mục kém minh bạch hơn
GitHub CopilotToàn bộ kho lưu trữ copilot-instructions.md cộng thêm dành riêng cho đường dẫn .instructions.md nơi được hỗ trợCác tệp hướng dẫn tùy chỉnh được áp dụng trong các quy trình CopilotVừa phải: các tệp có thể đọc được, nhưng phạm vi phụ thuộc vào bề mặt sản phẩm
AiderMột repo-map nhỏ gọn được lấy từ kho git, cộng với các tệp được thêm/đọc thủ côngBản đồ repo dựa trên ký hiệu/đồ thị được tối ưu hóa cho ngân sách tokenCao: repo-map có thể kiểm tra được, nhưng vẫn chỉ là bản đồ được chọn lọc, không phải toàn bộ repo theo đúng nghĩa đen

Sự phân chia của Cursor là có tính giáo dục nhất. Các quy tắc của nó nằm trong các file có thể đọc được mà bạn kiểm soát, nhưng nó cũng xây dựng một chỉ mục ngữ nghĩa của toàn bộ codebase của bạn, vector embeddings cung cấp tìm kiếm @codebase mà bạn không thể thực sự kiểm tra. Aider nằm ở đầu kia: đọc toàn bộ kho git của bạn và xây dựng repo-map, một cách tất định, không dùng embedding ở bất kỳ đâu. Bạn có thể kiểm tra chính xác những gì đã được đưa vào mô hình. Cùng một sự đảo ngược kiến trúc, nhưng mức độ nhìn thấy được thì rất khác. Để so sánh sâu hơn từng công cụ, chúng tôi đã điểm qua bức tranh CLI dạng tác tử trong rộng hơn và đối đầu trực tiếp trong OpenCode so với Claude Code ở nơi khác.

Bên dưới các định dạng riêng của từng công cụ, một chuẩn chung đang định hình. AGENTS.md xuất hiện khắp hệ sinh thái công cụ agent (OpenAI Codex, Amp, Jules của Google, Cursor và Factory) và hiện được quản lý bởi Agentic AI Foundation dưới Linux Foundation, được áp dụng ở hơn 60.000 kho mã. Đó là lúc tệp ngữ cảnh trước phiên được nâng cấp từ tiện ích riêng của từng công cụ thành một hiện vật di động hạng nhất: cả ngành đồng ý rằng “những gì tác tử đọc trước khi bạn lên tiếng” xứng đáng có một tiêu chuẩn riêng.

Comparison of four AI coding agents and how they load context before the first message: Claude Code file hierarchy, Cursor rule files and semantic index, GitHub Copilot instruction files, Aider repo-map

Bằng chứng nói gì về việc liệu bất kỳ điều nào trong số này có giúp ích

Đây là nơi câu chuyện thoải mái đổ vỡ. Một nhóm tại ETH Zurich (Gloaguen, Mündler, Müller, Raychev và Vechev) đã thực hiện một đánh giá có kiểm soát, “Đánh giá AGENTS.md,” về việc liệu những tệp ngữ cảnh ở cấp kho mã này có thực sự cải thiện hiệu năng của tác tử lập trình hay không. Trên tất cả các tác tử và mô hình họ nghiên cứu, kết quả không phải là “tệp ngữ cảnh có hiệu quả” cũng không phải “tệp ngữ cảnh vô dụng”. Bản tóm tắt hiện tại nói rằng tệp ngữ cảnh nhìn chung không cải thiện tỷ lệ hoàn thành nhiệm vụ và làm tăng chi phí suy luận trung bình hơn 20%. Trong phần kết quả chi tiết của bài báo, các tệp do lập trình viên viết là ngoại lệ: chúng cải thiện hiệu năng khoảng 4% trung bình, nhưng làm tăng chi phí tới 19%. Các tệp do LLM tạo ra đi sai hướng, làm giảm hiệu năng khoảng 3% trung bình trong khi đẩy chi phí lên hơn 20%. Phát hiện thứ ba làm rõ thêm: tác tử gọi một công cụ nhiều hơn 1,6-2,5 lần khi công cụ đó được nêu tên trong tệp ngữ cảnh, và điều này có lợi hay có hại hoàn toàn phụ thuộc vào việc những lần gọi thêm ấy có chính đáng hay không.

Hãy dừng lại một chút ở dòng nói về các tệp do LLM sinh ra, vì đó mới là dòng chịu lực. Một tệp mà bạn không tự viết, dù do một mô hình tạo ra hay tải về từ một gói cộng đồng gồm “những cấu hình CLAUDE.md tốt nhất” rồi thả vào repo, với agent sẽ đọc lên như chỉ dẫn từ một người thực sự không hiểu codebase của bạn. Trên các mô hình trong nghiên cứu, kết quả ròng là âm: bạn trả nhiều token hơn để nhận kết quả tệ hơn một chút. bài viết về Augment Code về chuyện này diễn đạt rất đúng khi gọi kết quả tích tụ đó là “ngăn kéo đồ linh tinh trong ngữ cảnh của tác tử”. Mỗi chỉ dẫn trông hợp lý mà bạn xúc vào đều có chi phí, và những chỉ dẫn bạn không tự viết, cho một codebase mà chúng không hiểu, thường tốn nhiều hơn phần chúng đem lại.

Tôi không đọc điều này theo kiểu “tệp ngữ cảnh là xấu”, cũng không theo kiểu “tệp ngữ cảnh là tốt”. Chính những khung được ăn cả ngã về không như vậy mới sụp đổ ngay khi chạm vào dữ liệu. Cách đọc hẹp hơn là: ngữ cảnh là hạ tầng mà bạn thiết kế một cách có chủ đích, và một tệp bạn không viết, cho một mã nguồn mà nó không hiểu, là chi phí chứ không phải món quà. Lưu ý về phạm vi cũng quan trọng. Đây là điều bài báo tìm thấy với những mô hình và tác tử mà nó thử nghiệm, không phải một quy luật phổ quát cho mọi LLM. Nhưng nó chỉ rất rõ về một hướng, và được củng cố từ phía nhà cung cấp: chính đội AI ứng dụng của Anthropic đã ghi nhận xu hướng nạp ngữ cảnh “vừa đúng lúc” qua các công cụ khi chạy thay vì nạp trước tất cả, và mô tả một cách tiếp cận lai lấy trước một phần dữ liệu rồi khám phá phần còn lại lúc chạy. Khi chính công ty phát hành CLAUDE.md đang nghiêng về việc nạp trước ít hơn, bản năng sao chép và dán một tệp ngữ cảnh khổng lồ đáng được xem lại.

Điểm rút ra của phần này: tác giả là tín hiệu dự báo liệu ngữ cảnh có đáng bỏ công hay không. Chi phí token là như nhau trong cả hai trường hợp; điều làm thay đổi lợi ích là hướng dẫn đó có đến từ người thực sự hiểu codebase hay không.

Research results on context file quality versus inference cost: developer-written files show +4% task success at +19% cost, LLM-generated files show -3% task success at +20% cost, from ETH Zurich evaluation of AGENTS.md

Ngữ cảnh dần mờ nhạt: Tại sao bắt đầu phiên không phải là toàn bộ câu chuyện

Việc nạp sẵn đặt ra ràng buộc. Nó không giữ được ràng buộc đó. Thứ mà các lập trình viên liên tục gặp phải là nửa sau của câu chuyện: ngữ cảnh bạn sắp xếp cẩn thận lúc bắt đầu phiên sẽ bào mòn dần khi phiên chạy, và nó diễn ra một cách lặng lẽ.

Một cách hữu ích để hình dung điều này đến từ cách diễn đạt của nhóm Mem0 rằng một cửa sổ ngữ cảnh là RAM, không phải lưu trữ, tạm thời và có giới hạn, không phải nơi cư trú lâu dài cho các chỉ dẫn của bạn. Nạp thứ gì đó vào lúc đầu thì nó có mặt; đi đủ lâu mà không dùng đến thì nó phai đi, giống như một biến bạn thôi tham chiếu rồi cuối cùng bị ghi đè. Đó là cơ chế đằng sau hiện tượng mà giới nghiên cứu gọi là sự suy giảm chỉ dẫn. Nghiên cứu năm 2026 của Gamage và đồng nghiệp phát hiện rằng các ràng buộc kiểu “đừng làm điều này” đặc biệt mong manh: trong một thiết lập được thử nghiệm, mức tuân thủ giảm từ 73% ở lượt thứ 5 xuống còn khoảng 33% ở lượt thứ 16. Đó là kết quả phòng thí nghiệm, không phải hằng số phổ quát, nhưng nó khớp với điều nhiều người cảm nhận trong các phiên dài.

Ranh giới phiên là nơi mọi thứ trở nên sắc nét hơn. Các lập trình viên trong cuộc thảo luận trên Hacker News cho biết các subagent được sinh ra có thể gặp vấn đề bàn giao ngữ cảnh, nên công việc được chuyển giao giữa chừng có thể đến với ít ngữ cảnh của phiên cha hơn bạn tưởng. Và thời gian nhàn rỗi cũng có cái giá của nó: trong một chủ đề thảo luận mà Boris Cherny của Anthropic đã lên tiếng, cuộc thảo luận nói về việc một phiên để không có thể kích hoạt một đợt dựng lại lớn do trượt bộ nhớ đệm, hàng trăm nghìn token, mà không hề cảnh báo bạn. Mạch xuyên suốt mà cộng đồng liên tục phản ánh là sự im lặng: quá trình nén chạy, phần suy luận trước đó bị cắt bớt, chất lượng tụt xuống, và không có gì trên màn hình cho bạn biết điều đó đã xảy ra. Bạn chỉ nhận ra kết quả tệ đi.

Tự lưu trữ có cho bạn nhiều quyền kiểm soát hơn không?

Tự chạy toàn bộ (Ollama cộng Open WebUI, hoặc một agent như Aider hay Continue.dev trỏ tới mô hình cục bộ) và câu trả lời trung thực cho “bây giờ tôi có kiểm soát nhiều hơn không?” là: bạn có thêm khả năng hiển thị, không phải kiểm soát vốn có nhiều hơn. Sự phân biệt đó là toàn bộ vấn đề.

Điều mà tự lưu trữ thực sự mang lại cho bạn là khả năng kiểm tra. Không dữ liệu hội thoại nào rời khỏi hạ tầng của bạn. Bạn có thể đọc toàn bộ system prompt thay vì phải tin vào một prompt độc quyền. Với một công cụ tất định như Aider, bạn có thể kiểm toán chính xác những gì đã đi vào mỗi lần gọi mô hình: repo-map là một tạo tác đọc được, không phải hộp đen ngữ nghĩa như chỉ mục embedding của Cursor. Với bất kỳ ai quan tâm đến khả năng kiểm toán và khả năng tái lập, đến việc trả lời được câu hỏi “tác nhân thực sự đã thấy gì?”, khả năng soi xét đó là có thật và không hề nhỏ.

Nhưng sự đảo ngược về kiến trúc này không quan tâm mô hình chạy ở đâu. Dù bạn dùng mô hình cục bộ qua Ollama, Claude Code nối vào API đám mây, hay Cursor theo gói thuê bao, tác tử vẫn đọc ngữ cảnh trước phiên của nó trước khi bạn nói, và bạn vẫn phải thiết kế ngữ cảnh đó một cách có chủ đích. Kỷ luật là như nhau. Tự vận hành mang lại cho bạn một ô cửa rõ ràng hơn để nhìn vào cơ chế; nó không mang lại một cơ chế khác, và chắc chắn không miễn cho bạn bài học của ETH Zurich về chuyện gì xảy ra khi bạn nạp ngữ cảnh do người khác viết. Vậy nên điều duy nhất đáng thay đổi sau tất cả: đừng coi tệp ngữ cảnh là món quà bạn trao cho tác tử, hãy coi nó là hạ tầng có chi phí vận hành. Hãy viết những gì bạn thực sự hiểu về mã nguồn, nạp ít thay vì nhiều, và nhớ rằng tác tử đã đọc bạn trước, nên phiên bản của bạn mà nó đọc được nên là phiên bản bạn sẵn sàng đứng sau.

Câu hỏi thường gặp

Các tác nhân lập trình AI có đọc tệp của bạn trước khi bạn gõ gì không?

Có. Khi phiên làm việc bắt đầu, một AI coding agent nạp system prompt, các định nghĩa công cụ và các tệp ngữ cảnh của bạn (CLAUDE.md, .cursorrules hoặc AGENTS.md), cùng với repo-map hay tệp bộ nhớ nếu có, tất cả đều diễn ra trước tin nhắn đầu tiên của bạn. Riêng trong Claude Code, tệp CLAUDE.md được gửi vào dưới dạng một tin nhắn người dùng ngay sau system prompt, nên cuộc trò chuyện thực chất bắt đầu bằng tệp của bạn chứ không phải bằng bạn.

Các tệp ngữ cảnh như CLAUDE.md có thực sự cải thiện hiệu suất tác nhân không?

Một phần, và ít hơn hầu hết mọi người nghĩ. Trong Đánh giá của ETH Zurich về các tệp kiểu AGENTS.md, bản tóm tắt hiện tại nói rằng các tệp ngữ cảnh nhìn chung không cải thiện tỷ lệ hoàn thành nhiệm vụ và làm tăng chi phí suy luận trung bình hơn 20%. Kết quả chi tiết hữu ích hơn cho người làm thực tế: các tệp do lập trình viên cung cấp cải thiện hiệu năng trung bình khoảng 4%, nhưng làm tăng chi phí tới 19%, trong khi các tệp do LLM sinh ra làm giảm hiệu năng trung bình khoảng 3% và đẩy chi phí lên hơn 20%. Cách đọc thực dụng: tệp bạn tự viết và hiểu rõ có thể giúp một chút; tệp bạn không viết có thể âm thầm khiến bạn tốn kém.

Bao nhiêu cửa sổ ngữ cảnh được sử dụng trước khi tôi gửi tin nhắn?

Một phần đáng kể. System prompt, định nghĩa công cụ và hướng dẫn hành vi được nạp trước bất kỳ đầu vào nào từ người dùng, và gộp lại chúng chiếm một phần không nhỏ của cửa sổ ngữ cảnh hữu dụng. Ngân sách làm việc thực dùng của bạn nhỏ hơn cửa sổ ngữ cảnh mà mô hình quảng cáo, chính vì khoản chi phí khởi động cố định này.

Tự lưu trữ mô hình AI có cho bạn nhiều quyền kiểm soát hơn đối với ngữ cảnh không?

Nhiều khả năng quan sát hơn, chứ không phải nhiều quyền kiểm soát tự thân hơn. Tự vận hành cho phép bạn xem toàn bộ system prompt, giữ dữ liệu hội thoại trên hạ tầng của chính bạn, và (với một công cụ tất định như Aider) cho phép bạn soát lại chính xác những gì đã đi vào mỗi lệnh gọi. Nhưng kiến trúc ngữ cảnh trước phiên vẫn y như ở các công cụ đám mây, và bạn vẫn phải thiết kế ngữ cảnh của mình một cách có chủ đích.

AGENTS.md là gì?

AGENTS.md là một định dạng mở dùng để cho các agent lập trình biết cách làm việc với một codebase, tương đương với README nhưng hướng tới agent. Nó xuất hiện khắp hệ sinh thái công cụ agent (OpenAI Codex, Amp, Jules của Google, Cursor và Factory) và hiện do Agentic AI Foundation quản lý dưới sự bảo trợ của Linux Foundation, với mức áp dụng ở hơn 60.000 kho mã, khiến nó trở thành chuẩn chung giữa các công cụ đang hình thành cho ngữ cảnh agent trước phiên làm việc.

Chia sẻ

Thêm bài viết từ blog

Tiếp tục đọc.

Sẵn sàng triển khai? Từ $2.48/tháng.

Cloud độc lập, từ 2008. AMD EPYC, NVMe, 40 Gbps. Hoàn tiền trong 14 ngày.