Cứ vài tháng lại có một AI agent framework mới hứa hẹn giải quyết bài toán phức tạp. LangChain chất abstraction lên abstraction. CrewAI đưa vào role-playing orchestration. AutoGen thêm multi-agent conversation. Mỗi layer đều xuất phát từ ý định tốt; phần lớn trở thành nguồn mới của debugging friction.

NOOA (Native Object-Oriented Agents) của NVIDIA, phát hành ngày 30 tháng 7 năm 2026 dưới dạng research preview, chọn hướng đi khác: thay vì xây framework trên Python, nó làm Python class trở thành framework.

Insight Cốt Lõi: Agent Của Bạn Đã Là Một Python Class

Luận điểm trung tâm của NOOA: mọi thành phần của một AI agent đều map tự nhiên vào các construct của Python class:

Khái niệm agentPython construct
Agent có thể làm gìClass methods
Memory và stateInstance fields
Instructions cho modelDocstrings
Input/output contractsType annotations

Đây không chỉ là lựa chọn thẩm mỹ — nó có hệ quả kỹ thuật thực tế.

from nooa import Agent

class CodeReviewer(Agent):
    """
    You are an expert Python code reviewer.
    Focus on: correctness, performance, security, readability.
    Always explain WHY something is a problem, not just that it is.
    Be direct and specific. Skip praise unless exceptional.
    """

    recent_files: list[str] = []
    severity_threshold: str = "medium"

    def review_file(self, path: str, content: str) -> str:
        """Review a single Python file. Return structured feedback."""
        ...

    def check_security(self, code: str) -> list[str]:
        """Scan for common security vulnerabilities. Return list of issues found."""
        ...

    def summarize_session(self) -> str:
        """Summarize all files reviewed this session with overall recommendations."""
        ...

Docstring trở thành system prompt. Method docstrings trở thành tool descriptions. Type annotations được runtime validation. Instance fields là agent state tồn tại qua các lần gọi. Không cần đăng ký tool riêng, không có prompt template trong dict, không có schema declaration — class declaration chính là agent specification.

Cài đặt và chạy:

pip install nooa  # v0.0.8, Python 3.12-3.13
import asyncio
from nooa import Agent

class ResearchAgent(Agent):
    """
    Bạn là technical research agent. Khi được hỏi về một chủ đề,
    hãy tìm thông tin hiện tại, phân tích có tư duy, và tóm tắt
    những phát hiện chính kèm nhận định của bạn.
    """

    sources_consulted: list[str] = []

    def search_web(self, query: str) -> str:
        """Tìm kiếm web để lấy thông tin hiện tại về một chủ đề."""
        ...

    def fetch_url(self, url: str) -> str:
        """Fetch và trích xuất nội dung chính từ một URL."""
        ...

async def main():
    agent = ResearchAgent(model="claude-opus-5")
    result = await agent.run("Sự khác biệt chính giữa NOOA và LangGraph là gì?")
    print(result)

asyncio.run(main())

Models plug in qua LiteLLM — Claude, GPT-5.6, Gemini, Ollama local, vLLM đều chạy với cùng code.

Benchmark: Tốt, Nhưng Cần Đọc Kỹ

NVIDIA công bố 82.2% trên SWE-bench Verified, 86.8% trên CyberGym L1, và 85.1% trên ARC-AGI-3. Đây là những con số tốt, nhưng cần đọc kỹ: NOOA là harness, không phải model — performance phụ thuộc nhiều vào LLM bạn dùng bên dưới và cách bạn viết class docstrings.

Cách đọc benchmark trung thực hơn: cách NOOA tổ chức tool definition và prompt construction (qua docstrings và type annotations) giúp giảm prompt inconsistency đủ để cải thiện độ tin cậy trên structured tasks. Agent không thông minh hơn; instructions rõ ràng hơn.

Điều Này Thay Đổi Gì Trong Production Agent Development

Tôi đã trải qua ba thế hệ agent framework — từ hand-rolled tool-calling loops, LangChain v0.x, đến LangGraph. Trải nghiệm debugging đã cải thiện dần, nhưng vấn đề cốt lõi vẫn còn: khi có gì đó sai, bạn đang debug framework abstractions không kém gì debug code của mình.

Cách tiếp cận của NOOA có lợi thế cụ thể: agent specification sống trong Python thuần, đọc được bởi bất kỳ IDE nào, tìm kiếm được bởi bất kỳ code analysis tool nào, debug được với standard Python debugger. Khi tool call fail, traceback chỉ vào code của bạn, không phải framework callback.

Đánh đổi là bạn mất các tính năng orchestration cao cấp. NOOA không có multi-agent coordination built-in, memory stores, hay RAG pipeline integration. Nếu workflow agent của bạn cần những thứ đó, bạn kết hợp NOOA với các tool khác.

NOOA phù hợp khi:

Single-purpose agents với state rõ ràng. Code reviewer, data extractor, document processor — những task có scope định nghĩa rõ, agent state nhỏ, tools được xác định tốt. Class model tỏa sáng ở đây.

Team muốn agent code dễ đọc. Onboard engineer mới vào codebase agent viết bằng NOOA rất dễ: class là specification. Không có prompt file riêng, không có tool registry documentation cần maintain.

Môi trường multi-model. Nếu bạn đang hedge giữa Claude, GPT-5.6, và open-source models, LiteLLM bên dưới nghĩa là bạn swap model string mà không cần đụng đến agent logic.

NOOA không phù hợp khi:

Complex multi-agent workflows. NOOA không có orchestration primitives. Nếu bạn cần agent A spawn agents B và C và coordinate outputs, bạn phải tự viết hoặc dùng cùng với orchestration framework khác.

Long-horizon memory. Instance fields là in-memory state; chúng không persist qua process restarts. Production systems cần durable agent memory phải wire thêm bên ngoài.

Pattern Lớn Hơn

NOOA là ví dụ mới nhất của một trend tôi đã theo dõi 18 tháng qua: hệ sinh thái AI tooling đang chuyển từ framework-centric sang primitive-centric. Các framework đầu tiên làm tất cả, kém hiệu quả. Các framework hiện tại thu hẹp scope và làm tốt phần cụ thể của mình.

NOOA sở hữu bài toán “agent as a unit of code”. Bạn vẫn cần kết hợp nó với orchestration layer, memory system, observability stack. Nhưng các seam kết hợp sạch hơn vì surface area của NOOA nhỏ hơn và contracts được biểu đạt bằng Python thuần.

Apache 2.0 license và research preview status có nghĩa API sẽ thay đổi. Tôi sẽ không đặt critical path production vào đây ngay hôm nay — nhưng tôi sẽ chạy proof-of-concept đáng kể. Conceptual model là đúng đắn, và nếu team NVIDIA Labs tiếp tục iterate, cách tiếp cận này có thể đơn giản hóa đáng kể cách teams lý luận về agent code.

Bắt Đầu

pip install nooa
from nooa import Agent

class SummaryAgent(Agent):
    """
    Tóm tắt tài liệu kỹ thuật rõ ràng và súc tích.
    Đối tượng: engineering managers cần executive summaries.
    Format: tối đa 3 bullet points, mỗi cái dưới 25 từ.
    """

    def summarize(self, text: str) -> str:
        """Tóm tắt tài liệu kỹ thuật được cung cấp."""
        ...

import asyncio

async def main():
    agent = SummaryAgent(model="gpt-4o")  # hoặc claude-opus-5, gemini-2.0-flash
    summary = await agent.run("Tóm tắt tài liệu này", text=long_doc)
    print(summary)

asyncio.run(main())

GitHub repo tại NVIDIA-NeMo/labs-OO-Agents. Paper arxiv (2607.20709) đề cập chi tiết các harness engineering concepts nếu bạn muốn hiểu rõ performance claims.


Thuận Lương là Tech Lead với hơn 15 năm kinh nghiệm .NET, kiến trúc cloud và hệ thống AI. Anh viết về những bài học thực tế từ việc xây dựng production systems.

Xuất nội dung

Bình luận