33 điểm bởi GN⁺ 2026-03-18 | 2 bình luận | Chia sẻ qua WhatsApp
  • Các coding agent nội bộ do những tổ chức kỹ thuật lớn như Stripe, Ramp, Coinbase xây dựng độc lập đang hội tụ về những mẫu kiến trúc tương tự, và Open SWE là framework mã nguồn mở hiện thực hóa điều đó
  • Được xây dựng trên Deep AgentsLangGraph, cung cấp các thành phần cốt lõi như sandbox đám mây cô lập, bộ công cụ được tuyển chọn, điều phối sub-agent và tích hợp vào quy trình làm việc của lập trình viên
  • Được xây dựng theo cách composition mà không cần fork agent sẵn có, nên có thể đồng thời duy trì việc nâng cấp framework nền tảng và tùy biến theo từng tổ chức
  • Mọi thành phần chính đều có thể thay thế theo kiểu plug-in như nhà cung cấp sandbox, model, công cụ, trigger, system prompt và middleware
  • Cung cấp cho các nhóm đang cân nhắc triển khai coding agent nội bộ một điểm khởi đầu dựa trên các mẫu đã được kiểm chứng trong production theo giấy phép MIT

Những mẫu chung được phát hiện trong triển khai production

  • Dù được phát triển độc lập, các coding agent như Stripe Minions, Ramp Inspect, Coinbase Cloudbot vẫn hội tụ về các quyết định kiến trúc tương tự
  • Môi trường thực thi cô lập: mỗi tác vụ chạy trong một cloud sandbox chuyên dụng và được cấp toàn quyền trong ranh giới nghiêm ngặt. Điều này cô lập phạm vi ảnh hưởng của sai sót tới hệ thống production, đồng thời cho phép chạy lệnh mà không cần prompt xác nhận cho từng hành động
  • Bộ công cụ được tuyển chọn: theo đội ngũ kỹ thuật Stripe, agent có thể truy cập khoảng 500 công cụ, nhưng đó không phải tập hợp tích lũy theo thời gian mà là bộ công cụ được lựa chọn và bảo trì cẩn thận. Việc tuyển chọn quan trọng hơn số lượng
  • Ưu tiên gọi qua Slack: cả ba hệ thống đều tích hợp Slack làm giao diện mặc định, để lập trình viên có thể truy cập ngay trong quy trình giao tiếp hiện có mà không cần chuyển ngữ cảnh sang ứng dụng mới
  • Ngữ cảnh phong phú ngay từ đầu: kéo toàn bộ ngữ cảnh từ issue trên Linear, thread Slack và GitHub PR để cung cấp trước khi bắt đầu tác vụ, giúp giảm chi phí phát hiện yêu cầu thông qua việc gọi công cụ
  • Điều phối sub-agent: chia nhỏ tác vụ phức tạp và giao cho các agent con chuyên biệt, mỗi agent có ngữ cảnh cô lập và trách nhiệm tập trung riêng

Kiến trúc Open SWE

  • 1. Agent harness: composition dựa trên Deep Agents

    • Thay vì fork agent có sẵn hoặc xây từ đầu, Open SWE sử dụng cách composition trên framework Deep Agents. Cách tiếp cận này tương tự việc nhóm Ramp xây dựng Inspect trên OpenCode
    • Hai lợi thế của composition:
      • Lộ trình nâng cấp: khi Deep Agents được cải thiện hơn nữa (quản lý ngữ cảnh tốt hơn, lập kế hoạch hiệu quả hơn, tối ưu token tốt hơn), có thể thừa hưởng các cải tiến mà không cần xây lại phần tùy biến
      • Tùy biến không cần fork: có thể duy trì công cụ, prompt và workflow riêng của tổ chức dưới dạng cấu hình thay vì sửa logic agent cốt lõi
    • Hạ tầng do Deep Agents cung cấp: lập kế hoạch tích hợp qua write_todos, quản lý ngữ cảnh dựa trên file, sinh sub-agent native qua công cụ task, cùng middleware hook cho điều phối mang tính quyết định
  • 2. Sandbox: môi trường đám mây cô lập

    • Mỗi tác vụ chạy trong cloud sandbox cô lập riêng, là môi trường Linux từ xa với quyền truy cập shell đầy đủ
    • Clone repository và cấp toàn quyền cho agent, còn lỗi được cô lập trong chính môi trường đó
    • Nhà cung cấp sandbox được hỗ trợ mặc định: Modal, Daytona, Runloop, LangSmith. Cũng có thể tự triển khai backend sandbox riêng
    • Hành vi cốt lõi:
      • Gán sandbox persistent cho mỗi thread hội thoại và tái sử dụng ở các tin nhắn tiếp theo
      • Tự động tạo lại sandbox nếu sandbox không còn truy cập được
      • Nhiều tác vụ chạy song song trong các sandbox riêng của chúng
  • 3. Công cụ: tuyển chọn thay vì tích lũy

    • Open SWE cung cấp một bộ công cụ tập trung cùng với các công cụ tích hợp sẵn của Deep Agents (read_file, write_file, edit_file, ls, glob, grep, write_todos, task)
    • Một bộ công cụ nhỏ và được tuyển chọn sẽ thuận lợi hơn cho kiểm thử, bảo trì và suy luận. Các công cụ bổ sung trong tổ chức (API nội bộ, hệ thống triển khai tùy chỉnh, framework kiểm thử chuyên biệt) có thể được thêm một cách tường minh
  • 4. Context engineering: AGENTS.md + source context

    • Thu thập ngữ cảnh từ hai nguồn:
      • Tệp AGENTS.md: nếu có ở thư mục gốc của repository thì sẽ được đọc trong sandbox và chèn vào system prompt. Tệp này có thể mã hóa convention, yêu cầu kiểm thử, quyết định kiến trúc và các pattern riêng của nhóm
      • Source context: kết hợp toàn bộ issue trên Linear (tiêu đề, mô tả, bình luận) hoặc lịch sử thread Slack để đưa cho agent trước khi bắt đầu, cung cấp ngữ cảnh theo tác vụ mà không cần gọi thêm công cụ
    • Đây là cách tiếp cận hai lớp để cân bằng giữa tri thức toàn repository và thông tin riêng của từng tác vụ
  • 5. Điều phối: sub-agent + middleware

    • Kết hợp hai cơ chế:
      • Sub-agent: sinh agent con qua công cụ task. Agent chính giao các tác vụ con độc lập cho những sub-agent cô lập, mỗi agent có stack middleware, danh sách todo và thao tác file riêng
      • Middleware: các hook mang tính quyết định chạy quanh vòng lặp của agent
        • check_message_queue_before_model: chèn các tin nhắn tiếp theo đến trong lúc agent đang chạy (bình luận Linear, tin nhắn Slack) trước lần gọi model kế tiếp. Nhờ đó người dùng có thể bổ sung đầu vào khi agent đang làm việc
        • open_pr_if_needed: lưới an toàn tự động commit và tạo PR nếu agent không hoàn tất việc mở PR
        • ToolErrorMiddleware: bắt và xử lý lỗi công cụ một cách mềm dẻo
    • Việc tách điều phối dạng agentic (do model điều khiển) và dạng quyết định (do middleware điều khiển) giúp đạt được cân bằng giữa độ tin cậy và tính linh hoạt
  • 6. Cách gọi: Slack, Linear, GitHub

    • Slack: mention bot trong thread. Chỉ định repository cần làm việc bằng cú pháp repo:owner/name. Agent phản hồi trong thread với cập nhật trạng thái và link PR
    • Linear: bình luận @openswe vào issue. Agent đọc toàn bộ ngữ cảnh của issue, xác nhận bằng 👀 rồi đăng kết quả dưới dạng bình luận
    • GitHub: xử lý phản hồi review bằng cách gắn @openswe trong bình luận của PR do agent tạo ra, rồi push các chỉnh sửa lên cùng branch
    • Mỗi cách gọi đều tạo thread ID mang tính quyết định, để các tin nhắn tiếp theo trong cùng issue hoặc thread được định tuyến tới đúng agent đang chạy
  • 7. Kiểm chứng: dựa trên prompt + lưới an toàn

    • Chỉ dẫn agent chạy linter, formatter và test trước khi commit
    • Middleware open_pr_if_needed đóng vai trò backstop: nếu agent kết thúc mà không mở PR, middleware sẽ tự động xử lý
    • Có thể mở rộng bằng middleware bổ sung cho các bước như kiểm tra CI mang tính quyết định, kiểm chứng trực quan và cổng duyệt review

Vì sao dùng Deep Agents

  • Quản lý ngữ cảnh: lượng lớn dữ liệu trung gian mà các tác vụ coding chạy dài sinh ra (nội dung file, đầu ra lệnh, kết quả tìm kiếm) được offload sang bộ nhớ dựa trên file thay vì giữ hết trong lịch sử hội thoại. Điều này đặc biệt hiệu quả để tránh tràn ngữ cảnh trong codebase lớn
  • Primitive lập kế hoạch: công cụ write_todos tích hợp sẵn giúp cấu trúc hóa việc phân rã tác vụ phức tạp, theo dõi tiến độ và thích ứng kế hoạch theo thông tin mới. Điều này đặc biệt hữu ích cho các tác vụ nhiều bước kéo dài
  • Cô lập sub-agent: khi agent chính sinh agent con bằng công cụ task, agent con được cấp ngữ cảnh riêng biệt. Lịch sử hội thoại của các tác vụ con khác nhau không làm nhiễm lẫn nhau, nên có thể suy luận rõ ràng hơn trong tác vụ phức tạp
  • Middleware hook: có thể chèn logic mang tính quyết định vào các điểm cụ thể trong vòng lặp agent. Điều này được dùng để triển khai những hành vi cần chạy ổn định như chèn tin nhắn và tạo PR tự động
  • Lộ trình nâng cấp: Deep Agents được phát triển tích cực như một thư viện độc lập, nên các cải tiến về nén ngữ cảnh, prompt caching, hiệu quả lập kế hoạch và điều phối sub-agent có thể được phản ánh vào Open SWE mà không cần xây lại phần tùy biến

Tùy biến theo từng tổ chức

  • Open SWE được thiết kế như một nền tảng có thể tùy biến, không phải một sản phẩm hoàn thiện. Mọi thành phần chính đều theo kiểu plug-in:
    • Nhà cung cấp sandbox: có thể thay đổi giữa Modal, Daytona, Runloop, LangSmith. Cũng có thể tự triển khai backend sandbox riêng phù hợp với yêu cầu hạ tầng nội bộ
    • Model: có thể dùng mọi nhà cung cấp LLM. Mặc định là Claude Opus 4, và có thể đặt model khác nhau theo từng subtask
    • Công cụ: thêm công cụ cho API nội bộ, hệ thống triển khai, framework kiểm thử, nền tảng giám sát; đồng thời có thể loại bỏ công cụ không cần thiết
    • Trigger: sửa logic tích hợp Slack, Linear, GitHub; hoặc thêm các bề mặt trigger mới như email, webhook, UI tùy chỉnh
    • System prompt: tùy biến prompt mặc định và logic phản ánh tệp AGENTS.md; có thể thêm chỉ dẫn, ràng buộc và convention riêng của tổ chức
    • Middleware: có thể thêm middleware hook riêng cho kiểm chứng, cổng phê duyệt, logging và kiểm tra an toàn

So sánh với các triển khai nội bộ

  • Khi so sánh với các hệ thống nội bộ của Stripe, Ramp và Coinbase dựa trên thông tin công khai, các pattern cốt lõi là tương tự nhau
  • Khác biệt nằm ở chi tiết triển khai, tích hợp nội bộ và công cụ riêng của từng tổ chức; đây cũng là những khác biệt có thể dự đoán được khi thích nghi framework sang môi trường khác

Bắt đầu

2 bình luận

 
sea715 2026-03-18

Mọi người đúng là nghĩ na ná nhau thật.. đúng là thời Chiến Quốc luôn rồi

 
xguru 2026-03-18

Giờ thì ai cũng đang làm coding agent nội bộ, nên đúng là đã có người tạo hẳn một framework cho việc đó rồi. Ai cũng nhanh thật.

Không nhất thiết phải dùng đúng cái này, nhưng có lẽ xem qua các pattern của nhiều công ty mà họ đã tham khảo nội bộ cũng sẽ rất hữu ích