SELECTOOLS: Framework Python toàn diện cho hệ thống AI Agent với Multi-agent, RAG và Đánh giá tích hợp

07 tháng 4, 2026·7 phút đọc

Selectools v0.20.1 là framework Python mã nguồn mở giúp xây dựng hệ thống AI Agent mạnh mẽ, hỗ trợ multi-agent, RAG và 50 bộ đánh giá tích hợp. Điểm nổi bật là giải quyết vấn đề ngắt quãng của LangGraph bằng Python generators và quy trình kiểm toán bảo mật nghiêm ngặt.

SELECTOOLS: Framework Python toàn diện cho hệ thống AI Agent với Multi-agent, RAG và Đánh giá tích hợp

Selectools v0.20.1 đã chính thức ra mắt, mang đến một framework Python mã nguồn mở (giấy phép Apache-2.0) dành cho các hệ thống AI Agent. Công cụ này hỗ trợ đa dạng các nhà cung cấp mô hình ngôn ngữ lớn (LLM) như OpenAI, Anthropic, Gemini và Ollama, tất cả đều có thể cài đặt nhanh chóng thông qua một câu lệnh pip đơn giản.

Điểm nhấn kỹ thuật: Cách xử lý ngắt quãng sau khi dừng của con người

Một trong những vấn đề lớn khi xây dựng các hệ thống AI tương tác với con người (Human-in-the-Loop) là cách xử lý việc tiếp tục quy trình sau một lần ngắt quãng. Cơ chế interrupt() của LangGraph được thiết kế để thực thi lại toàn bộ nội dung của node khi tiếp tục (resume). Điều này xuất phát từ mô hình checkpoint-replay của LangGraph. Mặc dù hoạt động được, nhưng nó tạo ra một sự trừu tượng bị rò rỉ (leaky abstraction), buộc các nhà phát triển phải cấu trúc lại mọi node cần đầu vào của con người để đảm bảo các tác vụ tốn kém không bị chạy lại lặp thừa.

Selectools giải quyết vấn đề này bằng cách sử dụng Python generators. Node sẽ yield một InterruptRequest. Đồ thị sẽ tiếp tục chính xác tại điểm yield đó thông qua generator.send(). Nhờ đó, các tác vụ tốn kém chỉ chạy đúng một lần mà không cần các thao tác xử lý phức tạp để đảm bảo tính định thức (idempotency).

async def review_node(state):
    analysis = await expensive_llm_analysis(state.data["draft"])  # chạy một lần
    decision = yield InterruptRequest(prompt="Approve?", payload=analysis)
    state.data["approved"] = (decision == "yes")  # tiếp tục tại đây

Như ghi chú trong changelog v0.18.0: "Tiếp tục tại chính điểm yield (LangGraph khởi động lại toàn bộ node)."

Điều phối Multi-Agent (Multi-Agent Orchestration)

AgentGraph là một trình thực thi đồ thị có hướng dành cho các node agent. Việc định tuyến (routing) được thực hiện thông qua các hàm Python thuần túy, không sử dụng router học máy hay DSL (Domain Specific Language) nào. Đây là một lựa chọn có chủ đích: trong các hệ thống agent sản xuất thực tế, chúng ta thường muốn luồng điều khiển xác định (deterministic control flow), để LLM tập trung vào suy luận trong các node thay vì quyết định cấu trúc đồ thị.

Một số lựa chọn thiết kế chính bao gồm:

  • ContextMode: Kiểm soát lịch sử trao đổi giữa các node: LAST_MESSAGE (mặc định), LAST_N, FULL, SUMMARY, CUSTOM. Điều này giúp ngăn chặn việc bùng nổ ngữ cảnh (context explosion) khi các agent hạ du bị ngập trong các cuộc hội thoại không liên quan từ thượng lưu.
  • Thực thi song song: Hỗ trợ các mẫu fan-out/fan-in với MergePolicy (LAST_WINS, FIRST_WINS, APPEND).
  • Phát hiện vòng lặp và tắc nghẽn: Theo dõi trạng thái thông qua băm (hashing) để xem trạng thái có thực sự thay đổi hay không.

SupervisorAgent

Selectools cung cấp bốn chiến lược điều phối khác nhau:

Chiến lượcMô tảPhù hợp nhất cho
plan_and_executeLLM tạo ra kế hoạch JSON, các agent thực hiện tuần tựTác vụ có cấu trúc
round_robinCác agent luân phiên nhau, giám sát viên kiểm tra hoàn thành mỗi vòngTinh chỉnh lặp đi lặp lại
dynamicRouter LLM chọn agent tốt nhất cho từng bướcTác vụ đa dạng
magenticMagentic-One: Sổ cái Task/Progress + lập kế hoạch tự độngNghiên cứu tự chủ

Chiến lược magentic triển khai mẫu Magentic-One từ Microsoft Research. Ngoài ra, ModelSplit cho phép sử dụng các mô hình đắt tiền cho việc lập kế hoạch và các mô hình rẻ hơn cho việc thực thi, giúp giảm chi phí từ 70-90%.

Khung đánh giá tích hợp (Built-in Eval Framework)

Selectools đi kèm với 50 bộ đánh giá (evaluators) tích hợp sẵn mà không yêu cầu dịch vụ trả phí nào, bao gồm 30 bộ đánh giá xác định và 20 bộ sử dụng LLM làm giám khảo. Hệ thống cũng hỗ trợ so sánh cặp A/B, phát hiện hồi quy (regression detection), xuất XML JUnit cho CI và tạo báo cáo HTML.

Nghiêm ngặt về kỹ thuật: Săn lỗi tự động và Kiểm toán bảo mật

Tác giả đặc biệt tự hào về câu chuyện săn lỗi (bug-hunting) của dự án này, với tất cả các khẳng định đều được ghi công khai trong CHANGELOG.md.

  • v0.19.1 Ralph Loop Bug Hunt: Hệ thống hội tụ tự động chạy 8 lượt qua tất cả 7 module cho đến khi có 3 lượt sạch liên tiếp. Kết quả là khoảng 90 lỗi được sửa và 254 bài kiểm tra hồi quy mới được thêm vào. Các sửa lỗi bao gồm ngăn chặn deadlock trong ThreadPoolExecutor, xử lý sự kiện async trên cache hit của LLM, và ngăn chặn việc chèn prompt injection.
  • v0.19.1 RAG Adversarial Bug Hunt: Tám sửa lỗi trường hợp cạnh, bao gồm xử lý n_results cho ChromaVectorStore khi bộ sưu tập trống, và xác thực mẫu prompt cho ContextualChunker.
  • Kiểm toán bảo mật song song (v0.20.0): 5 subagent Claude đã chạy song song trên toàn bộ mã nguồn, tập trung vào các hệ thống con như đồng thời hóa, bảo vệ None, chèn mã, duyệt đường dẫn và an toàn sự cố. Tổng cộng có 56 phát hiện, với 9 sửa lỗi bảo mật quan trọng được triển khai, bao gồm sửa lỗi chèn điểm số, ReDoS trong regex tùy chỉnh và duyệt đường dẫn trong ToolLoader.

Các mẫu Agent nâng cao

Bốn mẫu cấp cao được tích hợp trong selectools.patterns:

  • PlanAndExecuteAgent: LLM tạo kế hoạch, thực hiện các tác vụ con tuần tự.
  • ReflectiveAgent: Vòng lặp tự phê bình với ngưỡng chất lượng có thể cấu hình.
  • DebateAgent: Tranh luận đối kháng giữa hai agent + tổng hợp.
  • TeamLeadAgent: Agent chính điều phối các chuyên gia với cân bằng tải.

Tăng cường cho doanh nghiệp (Enterprise Hardening)

  • Các điểm đánh dấu ổn định: Các decorator @stable, @beta, @deprecated(since, replacement) để tín hiệu hóa API công khai.
  • Trình xem Trace HTML: trace_to_html(trace) hiển thị bất kỳ AgentTrace nào dưới dạng dòng thác thời gian HTML độc lập, không cần framework JS hay phụ thuộc bên ngoài.
  • SBOM: Cung cấp tệp sbom.json (CycloneDX 1.6) với tất cả các phụ thuộc sản xuất cốt lõi.
  • Ma trận tương thích: Hỗ trợ Python 3.9-3.13 với các SDK nhà cung cấp và phụ thuộc tùy chọn.

Triển khai và Phục vụ (Serve & Deploy)

Lệnh selectools serve agent.yaml sẽ khởi động máy chủ ASGI Starlette kèm giao diện người dùng playground. Bạn có thể định nghĩa các agent trong YAML, chọn từ 5 mẫu có sẵn (hỗ trợ khách hàng, phân tích dữ liệu, trợ lý nghiên cứu, reviewer mã, chatbot RAG). Các tính năng sản xuất bao gồm PostgresCheckpointStore, TraceStore (3 backend), compose() để xích chuỗi công cụ, và các bao bọc đường ống retry() / cache_step().

Kiểm thử và Phủ mã

Dự án hiện có 4.612 bài kiểm thử (độ phủ 95%) trên Python 3.9-3.13, bao gồm các đánh giá API thực tế chống lại OpenAI, Anthropic và Gemini. Nó cũng bao gồm 28 bài kiểm tra dựa trên thuộc tính Hypothesis, 15 bài kiểm tra an toàn luồng và 16 mô phỏng tích hợp sản xuất.

Có gì mới trong v0.20.x

Một công cụ xây dựng đồ thị agent trực quan sớm đã có sẵn tại https://selectools.dev/builder/ (tệp HTML 49KB độc lập, xuất sang YAML hoặc Python). Tuy nhiên, tác giả vẫn đang hoàn thiện các chi tiết, nên pip install vẫn là đường dẫn được khuyến nghị tại thời điểm này.

Các liên kết:

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗