NVIDIA NOOA 공개, 에이전트가 파이썬 클래스 1개
NVIDIA Labs가 AI 에이전트를 파이썬 클래스 하나로 작성하는 프레임워크 NOOA를 아파치 2.0 라이선스로 공개했습니다.
NVIDIA Labs가 공개한 NOOA. 에이전트를 파이썬 클래스 하나로 표현하는 프레임워크입니다. (이미지: MarkTechPost)
프롬프트 템플릿과 도구 스키마, 콜백 코드, 워크플로 그래프로 흩어져 있던 것을 클래스 한 곳에 모은 것이 핵심입니다. 메서드는 모델이 취할 수 있는 행동이 되고, 필드는 에이전트가 들고 있는 상태, 독스트링은 프롬프트, 타입 어노테이션은 런타임이 실제로 강제하는 계약이 됩니다. NVIDIA는 253줄짜리 에이전트 하나로 SWE-bench Verified 82.2%를 기록했고, 비교 대상이 된 오픈 하니스들의 절반 수준 토큰만 썼다고 밝혔습니다.
한눈에 보기
· 이름은 NOOA(NVIDIA Object-Oriented Agents), 아파치 2.0 라이선스이고 `pip install nooa`로 설치합니다.
· 현재 버전은 v0.0.8이며 2026년 7월 30일에 올라왔습니다. 요구 사양은 파이썬 3.12에서 3.13 사이입니다.
· 본문이 `...`인 메서드는 실행 시점에 LLM 루프가 채우고, 본문이 있는 메서드는 그대로 결정론적 파이썬으로 남습니다.
· 벤치마크는 SWE-bench Verified 82.2%, CyberGym L1 86.8%, ARC-AGI-3 평균 RHAE 85.1%를 보고했습니다.
· PyPI 분류는 alpha이고 NVIDIA 스스로 리서치 프리뷰라고 못 박았습니다. 생성된 코드는 컨테이너나 VM 안에서만 돌려야 합니다.
메서드는 도구, 독스트링은 프롬프트
지금 에이전트를 하나 만들려면 손대야 할 파일이 여럿입니다. 프롬프트는 템플릿 파일에 있고, 도구 정의는 JSON 스키마에 따로 있고, 흐름 제어는 그래프 설정에 들어갑니다. 기능 하나를 고칠 때마다 세 군데를 같이 맞춰야 하는데, 어긋나도 에러가 나지 않고 그냥 이상하게 동작합니다. 에이전트 디버깅이 유독 답답한 이유가 여기에 있습니다.
NOOA는 이걸 클래스 하나로 눌러 담습니다. 모델이 호출할 수 있는 행동은 메서드로 적고, 에이전트가 유지해야 할 상태는 필드로 적습니다. 그 메서드가 무엇을 하는지 설명하는 독스트링이 그대로 모델에게 전달되는 프롬프트가 됩니다. 반환 타입을 지정해 두면 런타임이 실제로 그 형태인지 검사하고, 어긋나면 통과시키지 않습니다.
가장 눈에 띄는 문법은 메서드 본문을 생략 기호 `...` 하나로 두는 방식입니다. 본문이 비어 있으면 그 메서드는 에이전틱 메서드가 되어, 실행 시점에 LLM이 도는 루프가 채웁니다. 반대로 본문을 제대로 써두면 평범한 파이썬 함수로 남고, 모델은 그것을 도구처럼 불러 씁니다. 사람이 짤 부분과 모델이 채울 부분이 같은 파일 안에서 한 줄 차이로 갈리는 셈입니다.
효과는 코드 관리 쪽에서 먼저 나타납니다. 에이전트가 평범한 파이썬 객체이므로 테스트를 붙이고, 실행을 추적하고, 리팩터링하고, 깃으로 이력을 관리하는 일이 특별한 도구 없이 됩니다. 개발자와 모델이 같은 인터페이스를 보고 일한다는 점도 중요합니다. 사람이 읽는 문서와 모델이 받는 프롬프트가 따로 놀다가 서서히 어긋나는 문제가 구조적으로 사라집니다.
두 가지 실행 전략
기본으로 두 가지가 들어 있습니다. 성격이 꽤 다릅니다.
전략
동작 방식
검증
PredictStrategy
타입이 지정된 LLM 호출 1회
실패하면 로컬 재시도 루프
CodeActStrategy
파이썬 REPL을 반복하며 코드 실행
제출값을 반환 어노테이션과 대조
PredictStrategy는 한 번 물어보고 답을 받는 쪽에 가깝습니다. 분류나 추출처럼 결과 모양이 정해진 작업에 맞습니다. CodeActStrategy는 모델이 파이썬 REPL 안에서 코드를 실행해 가며 문제를 풀고, 다 됐다고 판단하면 결과를 제출합니다. 그 값은 반환 어노테이션과 대조를 거칩니다.
참조 전달이 토큰을 줄이는 방식
NVIDIA 연구팀은 모델을 향한 여섯 가지 설계를 자신들이 처음으로 한자리에 모았다고 주장합니다. 타입이 붙은 입출력, 살아 있는 객체의 참조 전달, 행동으로서의 코드, 프로그래밍 가능한 루프 엔지니어링, 명시적인 객체 상태, 그리고 모델이 직접 부를 수 있는 하니스 API입니다. LangGraph, Google ADK, PydanticAI, smolagents, Claude Agent SDK, OpenAI Codex, OpenHands를 포함한 14개 프레임워크와 하니스를 같은 기준으로 채점했고, 나머지는 전부 부분적으로만 충족했다는 결과를 내놨습니다.
이 중 실제로 무게를 지탱하는 건 참조 전달입니다. 인자가 문자열로 직렬화되어 넘어가는 대신, 살아 있는 파이썬 객체 그대로 도착합니다. 모델에게 보이는 것은 구체적인 타입과 실제 길이, 그리고 앞뒤 일부를 잘라낸 미리보기뿐입니다. 원소 100개짜리 리스트가 30토큰 남짓으로 표현되고, 진짜 데이터는 REPL 안에 그대로 남아 있습니다.
기존 방식에서는 큰 데이터를 다루려면 결국 컨텍스트에 통째로 밀어 넣거나, 잘게 잘라 요약하며 왔다 갔다 해야 했습니다. 둘 다 토큰을 먹습니다. 참조 전달은 그 왕복 자체를 없앱니다.
컨텍스트를 쌓는 순서에도 계산이 들어가 있습니다. 캐시할 수 있는 고정 프리픽스, 뒤에만 덧붙는 타입 이벤트 기록, 그리고 꼬리에 놓인 동적 블록으로 나눠 놨습니다. 앞부분이 턴마다 바뀌지 않으니 KV 캐시를 계속 재사용할 수 있습니다. SWE-bench를 도는 동안 컨텍스트 압축이 한 번도 필요 없었다는 결과도 여기서 나옵니다.
메모리는 선택 사항으로 붙습니다. 이미 만들어 둔 에이전트를 고치지 않고 그대로 얹을 수 있고, 모델이 부를 수 있는 도구 7개로 기록을 쓰고 불러옵니다. 순위는 인지심리학의 ACT-R 활성화 값으로 매기고, 저장은 사람이 직접 열어볼 수 있는 SQLite 파일 하나입니다. 별도의 벡터 데이터베이스를 세우고 운영할 필요가 없다는 뜻이라, 소규모 팀에게는 이 부분이 꽤 실용적입니다.
SWE-bench 82.2%와 토큰 절반
먼저 기능 단위 시험입니다. 88개 테스트를 10개 모델에 대해 5회씩 돌려 4,400건 중 4,309건이 통과했습니다. 97.9%입니다. 다만 배치 처리와 오류 복구, 문제 분해 같은 여섯 계열을 모은 스트레스 세트에서는 84.7%로 떨어졌습니다. 이때 작은 모델과 프론티어 모델의 격차가 3.2포인트에서 23포인트로 벌어졌습니다. 프레임워크 설계가 좋아도 어려운 작업에서는 모델 체급이 그대로 드러난다는 이야기입니다.
전 구간 시험은 벤치마크에 맞춰 튜닝하지 않은 253줄짜리 에이전트 하나로 측정했습니다.
벤치마크
NOOA
비교 대상
조건
SWE-bench Verified
82.2%
OpenCode 78.6%, PI 78.2%
GPT-5.5 xhigh
SWE-bench Verified
79.8%
—
Opus 4.6
Terminal-Bench 2.0
73.0%
60.7% / 68.5%
high, PI는 xhigh에서 75.3%
CyberGym L1
86.8%
보고된 오픈소스 최고
네트워크 차단
ARC-AGI-3
85.1%
GPT-5.5로는 50.2%
평균 RHAE, GPT-5.6-sol
정직하게 보면 NOOA가 전부 이긴 것은 아닙니다. Terminal-Bench 2.0의 xhigh 설정에서는 PI가 75.3%로 앞섭니다. NVIDIA도 이 숫자를 그대로 실었습니다.
숫자보다 흥미로운 쪽은 비용입니다. NOOA는 82.2%를 태스크당 약 110만 토큰, 모델 호출 28회 정도로 냈습니다. 같은 벤치마크에서 PI는 220만 토큰과 66회를 쓰고 78.2%에 머물렀습니다. 점수는 4포인트 높은데 토큰은 절반입니다. 에이전트를 실제로 굴려본 팀이라면 이 대목이 벤치마크 1위보다 더 크게 와닿을 겁니다.
트레이스를 뜯어본 결과, 차이를 만든 요인 중 하나로 종료 조건이 꼽혔습니다. OpenCode는 모델이 도구 호출 없이 답만 내놓으면 거기서 작업을 끝냅니다. NOOA는 증거와 검증 명령을 담은 타입 지정 TaskResult가 나와야 종료로 인정합니다. 모델이 "다 했습니다"라고 말하는 것과 실제로 끝난 것을 구분하는 장치입니다. 헛돌다 끝나는 실행이 줄면 점수와 비용이 동시에 개선됩니다.
알파 버전이라는 전제 조건
설치 자체는 간단합니다. `pip install nooa` 한 줄이고 라이선스는 아파치 2.0이라 상업적 이용에 제약이 적습니다. 모델은 LiteLLM을 통해 갈아 끼우는 구조라서 상용 API도, 로컬에 띄운 Ollama도, vLLM 엔드포인트도 붙습니다. 특정 모델에 묶이지 않는다는 점은 NVIDIA가 만든 도구치고는 의외로 열려 있는 선택입니다.
문제는 성숙도입니다. PyPI에 올라간 분류가 alpha이고, NVIDIA 역시 리서치 프리뷰라고 표현했습니다. 버전 번호가 v0.0.8이라는 사실도 그대로 받아들이는 편이 좋습니다. API가 조용히 바뀔 수 있는 단계입니다.
보안 쪽은 더 분명하게 선을 그었습니다. 에이전트가 LLM이 만들어낸 코드를 실제로 실행하는 구조이기 때문에, NVIDIA는 AST 검사와 모듈 차단 목록이 방어를 겹겹이 쌓는 장치일 뿐 격리 경계는 아니라고 직접 밝혔습니다. 진짜 경계는 컨테이너나 가상 머신, 또는 NVIDIA OpenShell입니다. 이 문장은 문서 구석의 주의사항이 아니라 배포 조건으로 읽어야 합니다.
쓸 만한 자리로는 저장소 이슈 분류와 패치, 터미널과 인프라 자동화, 취약점 검증 파이프라인, 메모리에 올린 데이터의 대량 분류와 추출, 타입이 붙은 멀티 에이전트 오케스트레이션이 제시됐습니다. 업종으로는 개발자 도구, 보안, 클라우드와 데브옵스, 데이터 분석, 금융 운영, 고객 지원 쪽입니다. 규제를 받는 프로덕션 워크로드라면 정식 릴리스를 기다리는 편이 안전합니다.
그래서 무엇이 달라지나
당장 바뀌는 것은 에이전트를 다루는 방식입니다. 프롬프트를 YAML에 두고 도구를 JSON으로 선언하던 구성에서, 클래스 파일 하나만 읽으면 에이전트 전체가 파악되는 구성으로 옮겨갑니다. 코드 리뷰와 테스트 자동화가 곧바로 붙는다는 점이 실무에서는 가장 큽니다. 신입이 들어와도 설정 파일 순회부터 시작하지 않아도 됩니다.
토큰 비용 쪽은 조금 더 조심해서 봐야 합니다. 절반이라는 수치는 NVIDIA가 직접 측정해 발표한 값이고, 벤치마크 조건과 모델이 달라지면 재현 결과도 달라질 수 있습니다. 다만 참조 전달과 캐시 친화적인 컨텍스트 배치는 원리상 토큰을 아끼는 방향이 맞습니다. 비슷한 아이디어가 다른 프레임워크로 번질 가능성이 높다고 봅니다.
반대로 지금 운영 중인 스택을 갈아엎을 이유는 없습니다. alpha 딱지가 붙어 있고 인터페이스가 바뀔 여지도 큽니다. 사내 도구나 파일럿 과제에서 컨테이너 안에 넣고 돌려보며 감을 잡는 정도가 현실적인 선택으로 보입니다. 이 부분은 어디까지나 현재 버전 상태를 근거로 한 판단입니다.
NOOA는 에이전트를 설정 뭉치에서 다시 파이썬 코드로 되돌리려는 시도입니다. 벤치마크 순위보다 절반의 토큰이라는 결과가 더 오래 남을 지점입니다. 다만 v0.0.8이라는 숫자를 잊지 말고, 격리된 환경 밖에서는 실행하지 않는 게 좋습니다.