20 điểm bởi GN⁺ 10 ngày trước | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Managed Agents, một dịch vụ lưu trữ cho các agent chạy dài hạn, áp dụng kiến trúc dựa trên giao diện để vẫn ổn định ngay cả khi harness thay đổi theo sự tiến hóa của mô hình
  • Harness mã hóa các giả định về những việc Claude không thể tự làm, nhưng khi mô hình tiến bộ thì các giả định đó trở nên lỗi thời (stale) và gây ra overhead không cần thiết
  • Giống như hệ điều hành ảo hóa phần cứng thành các trừu tượng như tiến trình và tệp, Managed Agents ảo hóa các thành phần của agent (session, harness, sandbox) để có thể thay thế độc lập
  • Bằng cách tách bộ não (harness) và đôi tay (sandbox), hệ thống đạt cải thiện hiệu năng với p50 TTFT giảm khoảng 60% và p95 giảm hơn 90%
  • Thiết kế này đóng vai trò như một meta-harness có thể tiếp nhận bất kỳ harness hay sandbox nào xuất hiện trong tương lai

Các giả định của harness trở nên lỗi thời theo sự tiến hóa của mô hình

  • Harness là cấu trúc mã hóa các giả định về những tác vụ mà Claude không thể tự làm, nhưng khi mô hình tiến bộ thì các giả định đó trở nên không còn cần thiết
  • Trong Claude Sonnet 4.5, khi gần chạm giới hạn ngữ cảnh có hiện tượng "context anxiety", tức kết thúc tác vụ sớm, nên logic reset ngữ cảnh được thêm vào harness
  • Trong Claude Opus 4.5, hành vi đó biến mất nên logic reset trở thành mã không cần thiết
  • Vì dự đoán harness sẽ tiếp tục thay đổi, nhóm đã xây dựng Managed Agents dựa trên giao diện tổng quát không phụ thuộc vào một cách triển khai cụ thể

Triết lý thiết kế lấy cảm hứng từ hệ điều hành

  • Hệ điều hành ảo hóa phần cứng thành các trừu tượng như tiến trình, tệp để có thể chạy cả những chương trình chưa tồn tại tại thời điểm thiết kế
  • Cũng như lệnh read() hoạt động giống nhau dù là ổ đĩa những năm 1970 hay SSD hiện đại, các lớp trừu tượng tồn tại bền lâu hơn phần cứng
  • Managed Agents cũng đi theo cùng mô hình để ảo hóa các thành phần của agent
    • Session: nhật ký append-only của mọi sự kiện đã xảy ra
    • Harness: vòng lặp gọi Claude và định tuyến các lời gọi công cụ
    • Sandbox: môi trường thực thi nơi Claude chạy mã và chỉnh sửa tệp

Thiết kế ban đầu: giới hạn của container đơn lẻ (vấn đề "pet")

  • Ban đầu, session, harness và sandbox được đặt trong một container duy nhất
  • Cách này có ưu điểm là có thể chỉnh sửa tệp trực tiếp bằng syscall và không cần thiết kế ranh giới dịch vụ
  • Tuy nhiên, nó dẫn tới vấn đề container trở thành "pet" (một instance riêng lẻ không thể thay thế)
    • Khi container gặp sự cố thì session bị mất
    • Khi container không phản hồi thì phải khôi phục thủ công
  • Từ góc độ debug, chỉ với luồng sự kiện WebSocket thì không thể xác định vị trí xảy ra lỗi, còn việc truy cập shell vào container lại khó vì có chứa dữ liệu người dùng
  • Harness mặc định rằng mọi đối tượng thao tác đều nằm trong container, nên khi khách hàng yêu cầu kết nối VPC thì phải dùng peering mạng hoặc chạy harness trong chính môi trường của họ

Tách bộ não và đôi tay (kiến trúc cốt lõi)

  • "Bộ não" (Claude và harness), "đôi tay" (sandbox và công cụ), và "session" (nhật ký sự kiện) được tách thành các giao diện độc lập
  • Mỗi thành phần có thể lỗi hoặc được thay thế một cách độc lập

Harness thoát khỏi container

  • Harness được đưa ra ngoài container và gọi container giống như các công cụ khác thông qua execute(name, input) → string
  • Container được chuyển từ "cattle" (instance có thể thay thế)
  • Khi container lỗi, harness xử lý nó như lỗi gọi công cụ; nếu Claude quyết định thử lại thì dùng provision({resources}) để khởi tạo container mới

Phục hồi khi harness gặp lỗi

  • Vì nhật ký session tồn tại bên ngoài harness nên bên trong harness không còn trạng thái nào buộc phải sống sót
  • Khi có lỗi, dùng wake(sessionId)getSession(id) để lấy nhật ký sự kiện và tiếp tục từ sự kiện cuối cùng
  • Trong vòng lặp agent, harness dùng emitEvent(id, event) để duy trì ghi nhận sự kiện bền vững

Ranh giới bảo mật

  • Trong thiết kế gắn chặt, mã không đáng tin do Claude tạo ra chạy trong cùng container với thông tin xác thực, nên prompt injection có thể đánh cắp biến môi trường
  • Nếu kẻ tấn công lấy được token, họ có thể tạo session mới và ủy nhiệm công việc mà không bị giới hạn
  • Giải pháp mang tính cấu trúc là tách riêng để sandbox không bao giờ có thể truy cập token
  • Git: khi khởi tạo sandbox bằng token truy cập kho mã, hệ thống clone trước và kết nối với git remote cục bộ, để agent có thể push/pull mà không trực tiếp xử lý token
  • Công cụ MCP tùy biến: lưu token OAuth trong vault bảo mật, rồi thông qua proxy chuyên dụng, khi gọi công cụ MCP sẽ lấy thông tin xác thực từ vault bằng token gắn với session để gọi dịch vụ bên ngoài

Session không phải là cửa sổ ngữ cảnh của Claude

  • Các tác vụ dài hạn thường vượt quá độ dài cửa sổ ngữ cảnh của Claude, nên phải đưa ra những quyết định không thể đảo ngược về việc giữ lại nội dung nào
  • Compaction: Claude lưu phần tóm tắt của cửa sổ ngữ cảnh
  • Công cụ bộ nhớ: Claude ghi ngữ cảnh vào tệp để có thể học xuyên qua các session
  • Context trimming: loại bỏ có chọn lọc các token như kết quả công cụ cũ hoặc khối suy luận
  • Việc loại bỏ ngữ cảnh không thể đảo ngược có thể dẫn tới thất bại vì rất khó dự đoán token nào sẽ cần cho lượt tương lai
  • Các nghiên cứu trước đó đã khám phá cách lưu ngữ cảnh thành một đối tượng tồn tại bên ngoài cửa sổ ngữ cảnh và để LLM viết mã nhằm truy cập nó theo cách lập trình

Cách Managed Agents sử dụng nhật ký session

  • Session đóng vai trò như một đối tượng ngữ cảnh tồn tại bên ngoài cửa sổ ngữ cảnh
  • Nó được lưu bền vững trong nhật ký session, không phải trong sandbox hay REPL
  • Giao diện getEvents() cho phép chọn các lát cắt theo vị trí của luồng sự kiện
    • Đọc tiếp từ vị trí đọc gần nhất
    • Tua ngược vài sự kiện trước một thời điểm cụ thể
    • Đọc lại ngữ cảnh trước một hành động nào đó
  • Các sự kiện được lấy về có thể được harness biến đổi rồi đưa vào cửa sổ ngữ cảnh của Claude
  • Phần biến đổi này bao gồm dọn dẹp ngữ cảnh và context engineering để đạt tỷ lệ hit cao cho prompt cache
  • Session chỉ đảm bảo lưu trữ và truy xuất bền vững, còn việc quản lý ngữ cảnh cụ thể được giao cho harness để thích ứng với nhu cầu thay đổi của các mô hình tương lai

Nhiều bộ não, nhiều đôi tay

Nhiều bộ não (Many Brains)

  • Việc tách bộ não và đôi tay giải quyết phàn nàn ban đầu của khách hàng: khi làm việc với tài nguyên trong VPC thì không còn cần peering mạng nữa
  • Trong thiết kế ban đầu, mỗi bộ não cần một container, nên không thể bắt đầu suy luận cho tới khi provision xong container
  • Ngay cả với session không cần sandbox, vẫn phải gánh chi phí thiết lập đầy đủ container như clone kho mã, khởi động tiến trình và lấy các sự kiện đang chờ
  • Sau khi tách, hệ thống chỉ provision container bằng lời gọi công cụ khi thực sự cần, nhờ đó loại bỏ độ trễ chờ không cần thiết
  • Việc suy luận có thể bắt đầu ngay khi lớp điều phối lấy được các sự kiện chờ từ nhật ký session
  • p50 TTFT giảm khoảng 60%, p95 TTFT giảm hơn 90%
  • Mở rộng theo hướng nhiều bộ não đơn giản là khởi chạy nhiều harness stateless rồi chỉ kết nối với đôi tay khi cần

Nhiều đôi tay (Many Hands)

  • Cần khả năng kết nối mỗi bộ não với nhiều môi trường thực thi
  • Vì Claude phải suy luận về nhiều môi trường thực thi và quyết định phân chia công việc, đây là bài toán nhận thức khó hơn so với một shell đơn lẻ
  • Ban đầu do năng lực mô hình còn hạn chế nên bộ não được đặt trong một container đơn, nhưng khi trí năng tăng lên thì container đơn lại trở thành ràng buộc
  • Trong thiết kế tách rời, mỗi đôi tay được xem như một công cụ execute(name, input) → string
    • Hỗ trợ công cụ tùy biến, máy chủ MCP và công cụ nội bộ
    • Harness không cần biết sandbox là container, điện thoại hay trình giả lập Pokémon
  • Vì bộ não và đôi tay không bị gắn chặt, có thể chuyển đôi tay giữa các bộ não

Kết luận: Managed Agents như một meta-harness

  • Đây là cùng một cách tiếp cận với hệ điều hành: ảo hóa phần cứng để tiếp nhận cả những chương trình chưa tồn tại
  • Managed Agents là một meta-harness không phụ thuộc vào harness cụ thể nào, cung cấp giao diện tổng quát để tiếp nhận nhiều loại harness
  • Claude Code cũng có thể được dùng như một harness, và hệ thống cũng hỗ trợ harness agent chuyên biệt theo tác vụ
  • Với các giao diện, nhóm có lập trường rõ ràng: Claude cần khả năng thao tác trạng thái (session)thực hiện tính toán (sandbox)
  • Thiết kế giao diện này phục vụ việc mở rộng sang nhiều bộ não và nhiều đôi tay, cũng như vận hành ổn định, an toàn trong dài hạn
  • Hệ thống không đưa ra bất kỳ giả định nào về số lượng hay vị trí của bộ não và đôi tay

Chưa có bình luận nào.

Chưa có bình luận nào.