Trustworthy AI / Cybersecurity

AI 모델 성능을 끌어올리는 에이전트 하네스스의 6가지 핵심 기능

Reading Time: 6 minutes

훌륭한 AI 에이전트를 만들 때 좋은 모델을 고르는 건 시작에 불과합니다. 진짜 핵심은 모델을 감싸고 있는 아키텍처, 즉 ‘하네스(Harness)’에 있습니다. 컨텍스트를 어떻게 구성해 전달할지, 액션을 어떻게 실행할지, 상태를 어떻게 관리하고 작업 완료 시점을 어떻게 판단할지 같은 요소들이 모델 성능 못지않게 결과물에 결정적인 영향을 미치기 때문입니다. 실제로 잘 만든 하네스 구조 하나만으로도 같은 기본 모델에서 벤치마크 점수가 두 자릿수 이상 벌어지거나 토큰 비용이 크게 절감되기도 합니다.

NVIDIA Labs의 NOOA(NVIDIA Labs Object-Oriented Agents)는 바로 이러한 문제의식에서 출발한 오픈소스 연구 프로젝트입니다. 파이썬 프레임워크부터 메모리 시스템, 역량 평가, 벤치마크 에이전트까지 두루 갖추고 있으며, 개발자 커뮤니티가 직접 결과를 재현하고 검증하며 발전시켜 나갈 수 있도록 전체 코드와 데이터, 평가 방법론을 모두 공개하고 있습니다.

파이썬 객체로서의 에이전트

그동안 에이전트를 개발하려면 프롬프트 템플릿부터 툴 스키마, 콜백 코드, 워크플로우 그래프까지 수많은 요소들을 복잡하게 엮어야 했습니다. 하지만 NOOA는 훨씬 단순한 방식을 취합니다. 에이전트를 단 하나의 파이썬 클래스로 정의하는 것이죠. 클래스의 메서드가 곧 에이전트의 기능이 되고, 필드는 상태가 되며, 독스트링(docstring)은 프롬프트 역할을 합니다. 타입 힌트(type annotation)는 에이전트가 지켜야 할 엄격한 규칙이 됩니다. 본문이 생략기호(...)로 비어 있는 표준 파이썬 메서드는 실행 시점에 LLM 루프가 알아서 내용을 채워 넣고, 일반적인 코드가 작성된 메서드는 기존처럼 정해진 로직대로 동작합니다.

class SupportAgent(Agent):
    """You are a support agent for a customer service system."""

    order_db: OrderDB  # object state: model-visible, passed by reference

    def is_refund_eligible(self, order: Order) -> bool:
        """Return whether an order is eligible for a refund."""
        return order.delivered and order.days_since_delivery <= 30

    @strategy(PredictStrategy())
    async def classify(self, message: str) -> TicketKind:
        """Classify the customer message into the best ticket kind."""
        ...

    async def triage(self, message: str, photo: Image | None,
                     order: Order | None) -> Ticket:
        """Triage a customer message and create a support ticket."""
        ...

이 방식의 가장 큰 장점은 에이전트 개발이 기존 소프트웨어 개발과 똑같아진다는 것입니다. 덕분에 에이전트 코드를 일반 코드처럼 변경 사항(diff) 비교, 코드 리뷰, 유닛 테스트, 트레이싱, 버전 관리, 리팩토링까지 그대로 적용할 수 있습니다. 개발자든 AI 코딩 에이전트든 가릴 것 없이, 이미 익숙하게 사용하던 개발 도구로 이 모든 작업을 처리하면 됩니다.

6가지 핵심 아이디어, 하나의 인터페이스

NOOA 아키텍처는 에이전트의 성능을 끌어올리는 6가지 핵심 모델 인터페이스를 제시합니다.

  1. 타입 입출력(Typed input/output): 에이전틱 호출에는 자유 텍스트가 아니라 타입이 지정된 인수와 검증된 반환 값이 있습니다.
  2. 참조에 의한 전달(Pass by reference): 모델은 직렬화된 덤프(dump) 대신 제한된 미리 보기를 통해 라이브 Python 객체를 직접 다룹니다.
  3. 액션으로서의 코드(Code as action): 모델은 제어 흐름과 인라인 메서드 호출이 포함된 Python을 작성하는 방식으로 액션을 수행합니다.
  4. 프로그래밍 가능한 루프 엔지니어링(Programmable loop engineering): 오케스트레이션 루프는 개발자와 모델 모두가 작성 가능한 일반 Python 코드입니다.
  5. 명시적 객체 상태(Explicit object state): 지속적인 타입 지정 상태는 대화 기록이 아니라 에이전트 객체에 저장됩니다.
  6. 모델 호출 가능 하네스 API(Model-callable harness APIs): 컨텍스트 블록과 이벤트 기록은 모델이 검사하고 관리할 수 있는 API입니다.

에이전트가 직접 관리하는 메모리 시스템

NOOA는 장기 메모리 서브시스템을 포함합니다. 자동 백그라운드 요약 파이프라인 대신, 메모리는 에이전트가 직접 큐레이션하는 저장소입니다. 에이전트는 모델 호출 가능 도구를 통해 작업의 일환으로 기록을 의도적으로 작성하고, 조회하고, 수정합니다. 동시에 현재 턴과 관련된 자발적 메모리가 자동으로 컨텍스트에 노출됩니다. 기록에는 유형, 중요도, 태그가 부여됩니다. “지지”, “반박”, “파생” 같은 타입 관계를 통해 기록들이 단순한 로그가 아닌 지식 그래프로 연결됩니다. 백그라운드 반성(reflection) 과정을 통해 중복 기록을 병합하고, 관련 기록을 연결하고, 에피소드를 인사이트로 압축하고, 더 이상 관련 없는 정보를 정리함으로써 저장소를 최적화합니다.

에이전트는 재학습 없이 세션 전반에 걸쳐 지식을 축적합니다. 모든 정보는 팀이 표준적인 방법으로 검사, 백업, 검토할 수 있는 사람이 읽을 수 있는 SQLite 파일 하나에 저장됩니다. 저장된 메모리는 라이브 에이전트 상태를 참조할 수 있어 지식을 최신 상태로 유지합니다. 여러 에이전트가 별도의 소유권을 유지하면서 동일한 저장소를 공유할 수 있습니다. 아래 ARC-AGI-3 평가에서 이 시스템은 파일 기반 메모를 사용하는 동일한 에이전트 대비 RHAE를 +11.8점 향상시켰습니다.

같은 모델로 이끌어낸 더 강력한 성능

여섯 가지 역량은 동일한 범용 인터페이스를 사용해 여러 다른 도메인에서 측정 가능한 성과를 보여줍니다.

소프트웨어 엔지니어링

SWE-bench Verified에서 NOOA는 GPT-5.5로 82.2%를 달성해, 제출 당시 공개 리더보드 SOTA인 79.2%를 상회했습니다. Opus 4.6으로는 79.8%를 기록했으며, 이는 벤치마크 특화 프롬프트 없이 253줄의 범용 에이전트를 사용한 결과입니다.

사이버 보안

CyberGym L1에서 NOOA는 GPT-5.5로 86.8%를 해결했습니다. 최고 점수를 기록한 오픈소스 에이전트로, 대다수의 주요 클로즈드소스 시스템을 앞질렀습니다. 네트워크 접근이 차단된 상태에서 실행됐으며, 모든 궤적에 규칙 기반 “치트 검사”가 적용됐습니다. 따라서 결과는 공개된 취약점을 조회한 것이 아니라 코드 자체를 추론한 결과입니다. 사이버 보안 특화 조정은 전혀 사용하지 않았습니다.

범용 추론

ARC-AGI-3에서 단일 NOOA 에이전트는 GPT-5.5로 평균 RHAE(Relative Human-level ARC Evaluation) 50.2%를 달성했습니다(스킬: 가설 기반 베이스라인 대비 +8.5점; 메모리: 파일 기반 메모 대비 +11.8점). GPT-5.6-sol로는 85.1%를 달성해 게임당 20달러 미만으로 벤치마크의 점수-비용 파레토 프론티어(Pareto frontier)를 개선했습니다($17.85 및 $13.3; 스코어카드: GPT-5.5, GPT-5.6-sol).

동일한 성능, 절반의 토큰, 압축 없는 컨텍스트

하네스 엔지니어링은 정확도만 올려주는 것이 아니라 효율성까지 함께 챙겨줍니다. GPT-5.5를 사용한 NOOA는 작업당 평균 29회의 LLM 호출과 약 110만 토큰만으로 SWE-bench Verified에서 82.2%의 점수를 달성했습니다. 반면 비교 대상이 된 다른 하네스들은 78.2%를 얻는 데 66회 호출과 220만 토큰을 썼고, 78.6%를 얻는 데 29회 호출과 130만 토큰을 소모했습니다. 즉, 비용을 절반 가까이 아끼면서도 동등하거나 더 뛰어난 성능을 낸 것입니다.

이러한 효율성은 주로 두 가지 메커니즘 덕분에 가능했습니다.

첫째, 레퍼런스에 의한 전달(Pass by reference)입니다. 툴 수행 결과가 텍스트 형태로 컨텍스트 윈도우를 오가는 대신, 파이썬 코드 안에서 곧바로 조합 가능한 실제 변수로 전달됩니다. 모델에게는 타입이 지정된 크기 제한적 프리뷰만 보여주고, 전체 데이터는 실행 환경 내에 라이브 상태로 그대로 유지합니다.

둘째, 이러한 특징 덕분에 NOOA는 최신 모델로 SWE-bench 과제를 해결할 때 별도의 컨텍스트 압축이 필요 없습니다. 20만~40만 토큰 크기의 컨텍스트 윈도우 환경에서, 에이전트 세션의 프롬프트 토큰 사용량 중간값은 2만 2천~7만 2천 토큰 수준에서 안정적으로 최고점을 형성합니다. 툴 결과를 컨텍스트 윈도우에 직렬화해 집어넣지 않고 참조로 전달하기 때문에, 대화 기록은 세션 내내 뒤에 붙이기만 하는 방식으로 관리되며 캐시 유효성도 일정하게 유지됩니다. 별도의 요약 과정을 거칠 필요가 없어, 전체 작업 과정 동안 프리필 캐시 히트(Prefill Cache Hit) 효과가 계속 누적됩니다.

게임당 20달러 미만의 비용으로 ARC-AGI-3 RHAE 85.1% 달성

ARC-AGI-3는 에이전트를 미지의 그리드 게임 환경에 배치합니다. 규칙, 목표, 조작법은 직접 행동하며 발견해야 합니다. NOOA 예시는 6명의 전문화된 에이전트가 공유 실행 가능 세계 모델을 중심으로 협력하는 동반 DreamTeam 아키텍처를 단일 에이전트와 45줄 스킬 하나로 포팅한 것입니다. 게임은 추가 전용 파일을 통해 상태와 액션을 교환하는 별도의 하네스 프로세스에서 실행됩니다.

스킬은 에이전트가 관찰된 상태를 인코딩하고 다음 상태를 예측하는 Python 프로그램 집합으로 세계 모델을 작업 공간에 구축하도록 지시합니다. 매 턴마다 에이전트는 소급 예측(retrodiction)을 수행합니다. 즉, 자신의 예측과 실제로 일어난 일을 비교하고, 불일치 시 모델과 가설을 수정합니다.

2시간 제한의 경쟁 모드에서 GPT-5.5 플릿(fleet)은 평균 RHAE 50.2%를 달성했습니다(스코어카드). 세계 모델링 스킬은 가설 기반 베이스라인 대비 +8.5점을, 메모리 서브시스템은 파일 기반 메모 대비 +11.8점을 기여했습니다. GPT-5.6-sol 플릿은 게임당 약 13.3달러로 85.1%를 달성해(스코어카드) 벤치마크의 점수-비용 파레토 프론티어를 개선했으며, 25개 게임 중 19개를 완전히 해결했습니다.

두 플릿 모두 게임당 평균 20달러 미만의 비용을 유지했습니다. 모든 실행 환경은 인프로세스 셀 가드, 실행 단위별 OS 권한 제한, 게임 식별 정보의 종단 간(E2E) 익명화, 커널 수준의 셀별 샌드박스 등 다중 레이어 샌드박싱 구조로 철저히 보호되었습니다. 두 환경에 대해 실시한 레드팀 감사(GPT-5.5 라이브 실행 대상 18회 감사, GPT-5.6-sol 실행 대상 9개 스캐너 감사 / 각각 13,335개 및 10,107개의 로그 검토) 결과, 단 한 건의 규칙 누출도 발생하지 않은 것으로 확인되었습니다. 실제 프로덕션 환경에 배포할 때는 NOOA를 NVIDIA OpenShell 보안 런타임과 결합하여 운영합니다.

취약점 탐지에 NOOA 적용하기

취약점 탐지는 에이전트 프레임워크의 성능을 검증하기에 매우 까다로운 영역입니다. 에이전트가 대규모 코드베이스에서 취약점 후보를 발견한 뒤, 실제 크래시를 유발하는 입력을 생성해 그 버그가 진짜임을 증명해 내야 하기 때문입니다. 이 증명 단계는 대단히 엄격합니다. 정확한 크래시여야 하고 재현까지 가능해야만 비로소 의미 있는 발견으로 인정받습니다. NOOA는 이러한 워크플로우를 훨씬 쉽게 구축할 수 있도록 돕습니다. 정적 검증 로직과 모델의 추론 과정이 단 하나의 타입 객체에 함께 존재하므로, 각 검증 단계가 모델이 따를 수도 안 따를 수도 있는 모호한 프롬프트 지시가 아니라 반드시 실행되는 엄격한 코드로 작동합니다.

최근 NVIDIA 내부 연구에서는 검증 파이프라인을 단일 NOOA 객체로 구현했습니다. 모델은 에이전트 자체 메서드를 호출하는 Python을 작성하고 실행함으로써, 탐색과 검사를 고정된 도구 메뉴를 통해 라우팅하지 않고 한 곳에 유지합니다. 그 중 세 개의 메서드는 결정론적 게이트입니다. 첫 번째는 검증기의 원시 출력을 명확한 크래시 여부 판정으로 변환합니다. 두 번째는 크래시가 보고된 취약점과 일치하는지 확인합니다. 세 번째는 입력을 재실행해 재현되는지 검사합니다. 게이트가 별도 프로세스 간에 자유 형식 텍스트로 전달되지 않고 일반 타입 지정 메서드이기 때문에, 코드가 그렇다고 판단할 때만 발견이 승인됩니다. 전체 실행은 검사하고 테스트할 수 있는 단일 트레이스(trace)입니다.

실제 취약점 재발견 벤치마크인 CyberGym L1에서, NOOA 보강 연구 하네스는 범용 모델과 네트워크 접근 없이 86.8%의 작업을 해결했습니다.

오픈 에이전트 생태계를 위한 연구 프리뷰

오늘날 에이전트 생태계는 다양한 오픈소스 및 자체 구축 시스템을 바탕으로 오케스트레이션, 툴, 메모리, 모델 인터페이스, 평가 방식 등 전반에서 눈부시게 발전해 왔습니다. NOOA 역시 이러한 흐름에 발맞추어 공개된 연구 프로젝트입니다. 객체 지향 에이전트 프레임워크라는 구조를 통해 소프트웨어 엔지니어링, 사이버 보안, 추론 벤치마크 전반에서 최고 수준(SOTA)의 성과를 이끌어냈습니다. NVIDIA는 이 프레임워크와 테스트 환경, 벤치마크 에이전트, 그리고 평가 방법론 전체를 커뮤니티에 전면 공개합니다.

실제 코드를 오픈소스로 공개하는 것은 매우 중요합니다. 그래야 개발팀이 단순히 결과를 무작정 신뢰하는 데 그치지 않고, 그 내부 작동 방식을 직접 검증해 볼 수 있기 때문입니다. 또한, 단일 저장소 기반의 가독성 높은 상태 관리, 자유롭게 조회할 수 있는 이벤트 기록, 기존 보안 검토나 접근 제어, 관찰 가능성(Observability) 체계와 매끄럽게 연결되는 표준 인터페이스를 바탕으로 투명하고 검증 가능한 에이전트를 직접 구축해 나갈 수 있습니다.

NOOA는 기존 하네스를 대체하기보다 개방된 실험적 환경을 제공하는 데 목적이 있습니다. 보고서에 담긴 모든 기법은 완벽히 문서화되어 있으므로, 어떤 프로젝트든 이를 자유롭게 도입하고 다각도로 검증하며 한층 더 발전시켜 나갈 수 있습니다.

시작하기

  • 기술 보고서를 읽어보세요.
  • 프레임워크, 역량 테스트, 벤치마크 에이전트가 포함된 코드를 확인하세요.
  • examples/arc_agi_3에서 플릿 러너(fleet runner)와 함께 세계 모델 솔버를 실행해 보세요.
  • NVIDIA OpenShell로 안전하게 배포하세요.
Discuss (0)

Tags