1. Vì sao cần "context engineering"
Các model mới ra liên tục và ngày càng thông minh. Nhưng diễn giả nhấn mạnh: sự thông minh của model tự nó không tích luỹ được cho tổ chức của bạn. Một model mới ra chưa biết:
Cấu trúc code base của công ty bạn.
Sở thích và cách làm việc của từng người dùng.
Quy trình riêng của tổ chức.
Và nếu agent mắc lỗi hôm nay, ngày mai nó không nhớ để tránh lỗi đó.
Những thứ này là "ngữ cảnh" (context) và nó gần như độc lập với độ thông minh của model. Vì vậy đầu tư vào context engineering (kỹ thuật thiết kế và quản lý ngữ cảnh cung cấp cho model) có tác dụng nhân lên độ thông minh, kể cả khi model ngày càng giỏi hơn.
Vài thuật ngữ cần biết:
Agent: chương trình dùng model AI để tự thực hiện một chuỗi công việc (đọc file, gọi công cụ, viết code…), không chỉ trả lời một câu hỏi.
Context window: "bộ nhớ làm việc" của model trong một phiên, là lượng chữ mà nó nhìn thấy cùng lúc. Sang phiên mới thì trống.
Context engineering: quyết định đưa gì vào context window, khi nào và dưới dạng nào.
Memory (bộ nhớ): thông tin agent lưu lại để dùng ở các phiên sau.
Phương châm của Anthropic được diễn giả nhắc lại: "Làm việc đơn giản mà hiệu quả" (do the simple thing that works).
2. Hành trình một năm qua: bốn bước
Bước 1: File CLAUDE.md
Đây là một file markdown (văn bản thuần, dễ đọc) chứa vài hướng dẫn: cách đi trong code base, quy tắc tổ chức, sở thích người dùng. File này được nạp vào đầu context mỗi khi bắt đầu phiên.
Điểm mạnh: diễn giả gọi là "hiệu quả bất hợp lý", chỉ một file đơn giản mà dẫn dắt agent rất tốt. Điều quan trọng là file này người đọc được, agent ghi được, và con người cũng ghi được.
Điểm yếu: khi file quá dài thì sao, và quản lý nó theo thời gian thế nào.
Bước 2: Công cụ bộ nhớ (memory tools)
Ý tưởng: cho agent tự quyết định khi nào đọc, ghi và cập nhật bộ nhớ, ngay trong phiên làm việc (gọi là in-band, nghĩa là "trong luồng"). Việc cho agent tự chủ hoá ra hoạt động rất tốt. Về sau, nhóm này còn giảm bớt việc quy định công cụ cụ thể.
Bước 3: Skills
Skills giải quyết bài toán context ngày càng phình to, bằng ý tưởng progressive disclosure (tiết lộ dần, nghĩa là chỉ nạp chi tiết khi cần).
Agent chỉ đọc phần mô tả ngắn ở đầu mỗi skill (vài câu) để biết skill đó làm gì.
Khi thấy phù hợp mới nạp toàn bộ nội dung chi tiết.
Diễn giả ví von: giống một giá sách trong phòng. Bạn chỉ nhìn tiêu đề các cuốn. Nếu ai đó bắt đầu nói tiếng Pháp với bạn, bạn rút cuốn từ điển Pháp ra đọc ngay, thay vì phải nhớ sẵn mọi thứ từ bảy năm học tiếng Pháp.
Skills hợp với các quy trình có thủ tục (bạn đã có ý kiến rõ về cách làm từ đầu đến cuối). Nhược điểm: vẫn do người và agent quyết định chủ yếu "cái gì cần skill".
Bước 4: Bộ nhớ dưới dạng hệ thống file (điều diễn giả cho là tốt nhất hiện nay)
Mô hình hoá bộ nhớ như một hệ thống file: các file markdown trong thư mục. Agent vốn rất giỏi dùng công cụ file thông thường như bash và grep (tìm kiếm văn bản), nên cứ để chúng tự tìm thay vì bắt dùng một bộ công cụ riêng. Cách tìm này cũng chính là progressive disclosure.
Ba bài học rút ra:
Markdown rất tốt để đọc bộ nhớ.
Cho phép bộ nhớ lớn lên, nhưng cho agent công cụ để lập chỉ mục và tìm nhanh phần liên quan.
Cho agent tự chủ khi ghi bộ nhớ.
Làm như vậy, bạn có cảm giác học liên tục (continual learning): agent làm tốt hơn qua từng nhiệm vụ.
3. Khi đưa vào sản xuất: những vấn đề mới xuất hiện
Ý tưởng đẹp trên giấy gặp khó khi có nhiều agent cùng làm việc, chạy lâu, code base phức tạp. Diễn giả nêu các tình huống:
Nhiều agent cùng ghi một file bộ nhớ một lúc, quản lý thế nào?
Một agent ghi sai vào ngữ cảnh chung của cả tổ chức mà mọi agent khác đang đọc, lỗi lan ra tất cả, hậu quả nghiêm trọng.
Người và agent cùng chỉnh bộ nhớ, làm sao theo dõi ai làm gì.
Bộ nhớ lỗi thời: thứ từng đúng giờ không còn đúng, hoặc bị ghi sai, hoặc bị cố ý chèn nội dung độc hại (prompt injection, nghĩa là kẻ xấu cài chỉ dẫn vào để agent ghi điều xấu vào bộ nhớ).
Vì vậy cần các nguyên tắc kỹ thuật (guardrails, "rào chắn an toàn"). Diễn giả nêu bốn nguyên tắc.
Nguyên tắc 1: Quản lý phiên bản (versioning)
Lưu lại các phiên bản của bộ nhớ để khôi phục khi một cập nhật tệ. Đồng thời ghi lại cập nhật này dựa trên phiên làm việc nào, bản ghi hội thoại nào, do ai làm (agent nào, con người nào).
Nguyên tắc 2: Xử lý ghi đồng thời (concurrency)
Giải pháp nhóm dùng là băm (hash). Cách hoạt động:
Agent muốn sửa bộ nhớ thì lấy hash của file (một "dấu vân tay" tóm tắt nội dung).
Agent soạn bản sửa.
Trước khi ghi, agent lấy hash lần nữa.
Nếu hai hash khác nhau, nghĩa là trong lúc đó có người khác đã sửa, agent không được ghi. Nó đọc lại bộ nhớ mới, soạn lại bản sửa rồi thử lại.
Ví dụ minh hoạ: hai agent cùng đọc file "quy tắc đặt tên" (hash = A1). Agent 1 sửa xong và ghi (hash đổi thành B2). Agent 2 sửa xong, kiểm tra thấy hash hiện tại là B2 chứ không phải A1, nên bị từ chối, phải đọc lại bản mới rồi sửa tiếp. Nhờ vậy không bản sửa nào bị ghi đè âm thầm.
Nguyên tắc 3: Phân quyền (permissions)
Bộ nhớ lớn gồm nhiều cấp: từ kiến thức toàn tổ chức (mục tiêu, nguyên tắc code base, được chăm chút kỹ) đến sổ nháp riêng của từng agent. Cần phân quyền hợp lý. Ví dụ ngữ cảnh toàn tổ chức nên để chỉ đọc, còn sổ nháp của agent thì cho quyền ghi.
Nguyên tắc 4: Khả năng di chuyển (portability)
Bộ nhớ bạn công sức chăm chút sẽ quan trọng lâu dài, và có thể cần dùng ở nhiều sản phẩm, nhiều hệ thống. Nên thiết kế với API sạch để truy cập từ nhiều nơi.
Kết quả diễn giả quan sát được
Chính xác hơn: lần thứ hai làm cùng việc, agent làm tốt hơn vì đã ghi lại điều gì từng sai.
Nhanh hơn và rẻ hơn: dùng ít token hơn, dễ làm đúng ngay lần đầu vì biết mình đang làm gì.
Nhà phát triển rảnh tay hơn: vòng học liên tục chạy ngầm, bạn tập trung vào sản phẩm.
4. Nút thắt mới: bộ nhớ trong luồng (in-band memory)
Khi agent vừa làm việc vừa tự ghi bộ nhớ trong phiên, có hai hạn chế:
Chia đôi sức lực: agent vừa phải hoàn thành nhiệm vụ, vừa phải đầu tư chăm sóc bộ nhớ cho lần sau. Nên dành bao nhiêu cho việc nào là một bài toán tối ưu khó, chưa kể độ trễ.
Tầm nhìn hạn chế: agent chỉ thấy phiên của nó. Nó không thấy được quy luật lặp lại giữa các phiên, và không biết các agent khác đang gặp lỗi gì. Vì thế bạn thấy nó lặp lại cùng một lỗi qua nhiều phiên.
Ngoài ra, bộ nhớ vẫn lỗi thời theo thời gian, cần một lượt kiểm tra lại.
Ví von trường học: có nhiều học sinh nộp bài, có giáo viên chấm bài và một hiệu trưởng xem xét toàn bộ. Hệ thống này tồn tại có lý do: người có thời gian riêng cho việc giúp học sinh học tốt, và người có tầm nhìn toàn trường để phát hiện quy luật rồi điều chỉnh chương trình học.
5. Giải pháp: "Dreaming" (quá trình chạy ngoài luồng)
Dreaming (mơ) là một quy trình chạy theo lô, không đồng bộ, ngoài phiên làm việc (out-of-band), có nguồn lực riêng, để đảm bảo bộ nhớ luôn hiệu quả và cập nhật.
Cách hoạt động từng bước
Lấy kho bộ nhớ hiện có (tập các file bộ nhớ).
Lấy nhiều bản ghi hội thoại (transcript) của agent trong một khoảng thời gian.
Giao cho một agent xem lại toàn bộ transcript và kho bộ nhớ, tìm ra các quy luật cho thấy bộ nhớ có thể được cải thiện.
Agent đưa ra kho bộ nhớ mới (hoặc các thay đổi đề xuất).
Ngày hôm sau, khi chạy lại các agent, chúng "thông minh" hơn.
Điểm quan trọng: khi xem transcript, không chỉ xem lời qua lại giữa agent và người dùng, mà còn xem kỹ các lần gọi công cụ và siêu dữ liệu vì đó là trung tâm hiệu suất của agent.
Ví dụ (từ phép ví von trường học)
Thiếu cả chủ đề: tất cả học sinh làm sai một câu về địa lý. Giáo viên xem chương trình học và nhận ra cả chủ đề đó bị thiếu, đề xuất bổ sung.
Cấu hình sai công cụ: trong kỳ thi toán, tất cả học sinh trả lời bằng radian trong khi đề yêu cầu độ. Giáo viên hướng dẫn cách cài máy tính. Với agent, đó là phát hiện cấu hình công cụ có vấn đề, ví dụ một lệnh gọi công cụ cứ thất bại.
Vấn đề toàn tổ chức: mọi người đều dùng quá nhiều dấu gạch ngang mà bạn không thích. Bạn thêm một thông báo hoặc thay đổi ngữ cảnh toàn tổ chức.
Thiết kế trong thực tế
Orchestrator (bộ điều phối) triển khai một đàn agent con (subagent) để phân tích song song các transcript.
Orchestrator xem lại kết quả và chỉ khi quy luật đủ phổ biến mới đề xuất đổi bộ nhớ.
Bạn có thể chỉ dẫn (steer) cho agent biết trong trường hợp của bạn điều gì quan trọng, điều gì không.
Kết quả đề xuất kèm bằng chứng: danh sách transcript có hiện tượng, thống kê mức độ phổ biến, và lý do nên cập nhật.
Con người quyết định chấp nhận hoặc từ chối từng thay đổi.
Bộ nhớ thường và dreaming: hai quy trình song song
Bộ nhớ trong luồng (memory) | Dreaming (ngoài luồng) | |
|---|---|---|
Chạy khi nào | Ngay trong phiên làm việc | Theo lô, không đồng bộ |
Ưu điểm | Phiên kế tiếp tốt hơn ngay, độ trễ thấp | Tầm nhìn rộng toàn bộ các phiên, có nguồn lực (token) riêng chỉ để giúp agent học |
Hạn chế | Tranh giành tài nguyên với nhiệm vụ chính, tầm nhìn hẹp | Có chi phí riêng |
Diễn giả cho rằng chi phí thêm này đáng giá, vì bộ nhớ tốt giúp agent làm đúng ngay lần đầu nên nhiều chi phí khác giảm xuống.
6. Một số câu hỏi từ khán giả
Nên dùng giải pháp lưu trữ bộ nhớ nào cho doanh nghiệp? Diễn giả cho biết kiến trúc bộ nhớ trong bài (phiên bản, hash…) có sẵn qua API bộ nhớ và dreaming của Claude Managed Agents. Đây là câu trả lời về sản phẩm của chính họ, bạn nên tự đánh giá thêm các lựa chọn khác.
Dreaming có tôn trọng phân quyền không? Có thể cấu hình: mỗi lần chạy dreaming, bạn quyết định đưa những transcript nào vào, nên có thể chỉ chọn các transcript có cùng quyền truy cập với kho bộ nhớ.
Chúng ta có đang phát minh lại cơ sở dữ liệu không? Diễn giả thừa nhận phần nào là đúng: ban đầu cho agent tự do ghi file, sau khi biết thành phần nào hiệu quả thì đưa vào phần khung (harness) một cách xác định, không phụ thuộc agent (như hash, phiên bản), vì không cần phát minh lại bánh xe.
7. Tóm tắt: điều rút ra cho người mới bắt đầu
Bắt đầu đơn giản: file hướng dẫn (như CLAUDE.md), skills, và cho agent tự quản lý bộ nhớ đã đi được rất xa.
Khi mở rộng (nhiều agent, chạy lâu, lĩnh vực phức tạp): thêm rào chắn để bộ nhớ an toàn, kiểm chứng được, có thể truy vết: quản lý phiên bản, xử lý ghi đồng thời, phân quyền, dễ di chuyển.
Cách làm này không chỉ cho lập trình. Diễn giả dùng bộ nhớ cả khi làm bài thuyết trình (agent nhớ cách bạn viết, kiểu slide bạn thích).
Để khép vòng học, thêm một quy trình ngoài luồng như dreaming: gom lại bộ nhớ, cắt thứ không còn phù hợp, bổ sung thứ agent còn thiếu, sắp xếp lại cho gọn.
Đây còn là lĩnh vực nghiên cứu mở, phần lớn mới xuất hiện trong khoảng một năm qua.
Cách ghi nhớ nhanh: "Cho agent một cuốn sổ (bộ nhớ), đặt luật để sổ không bị ghi hỏng (versioning, hash, phân quyền), và thỉnh thoảng có một 'hiệu trưởng' xem lại cả trường để chỉnh chương trình học (dreaming)."
