
AI가 작성한 코드를 도구 호출마다 일회용 VM으로 격리하는 CodeAct
요약
Microsoft의 CodeAct는 AI 에이전트가 도구를 호출할 때마다 발생하는 토큰 소모와 레이턴시 문제를 해결하기 위해 모델이 직접 코드를 작성하여 실행하는 방식을 제안합니다. 이를 안전하게 구현하기 위해 Rust 기반의 micro-VM 매니저인 Hyperlight를 사용하여 일회용 격리 환경을 초고속으로 생성하고 폐기합니다.
핵심 포인트
- CodeAct는 JSON 기반 도구 호출 대신 Python 코드를 실행하여 워크로드 효율을 높임
- 기존 방식 대비 실행 시간 약 52%, 토큰 사용량 약 64% 절감 효과
- 코드 실행 시 발생하는 보안 위협을 방지하기 위해 강력한 샌드박스 격리 필요
- Hyperlight를 통해 1~2ms 수준의 초고속 micro-VM 생성으로 보안과 성능 동시 확보
도구를 사용하는 AI 에이전트의 내부 구조는 의외로 단순한 루프로 이루어져 있다. 모델이 "이 함수를 이 인수로 호출하라"는 JSON을 내뱉으면, 하네스(Harness, 모델을 둘러싼 실행 기반)가 이를 실행하고 그 결과를 다시 문맥(Context)으로 돌려준다. 그다음 단계를 모델이 생각하게 하고, 다시 호출한다. 이를 끊임없이 반복한다.
문제는 작업 단계가 많아질수록 이 왕복 과정이 부담이 된다는 점이다. 5개 도시의 날씨를 조회하고, 비가 오는 도시만 골라내어 평균 기온을 계산하는 작업을 가정해보자. 인간이라면 코드로 한 번에 작성할 처리를, 기존의 도구 호출(Tool Calling) 방식은 1단계당 1회의 왕복으로 분해한다. 왕복할 때마다 도구의 스키마(Schema)와 중간 결과가 문맥에 계속 쌓이므로, 토큰(Token) 사용량은 늘어나고 레이턴시(Latency)도 길어진다.
Microsoft가 Agent Framework에 탑재한 CodeAct는 이 왕복 과정 자체를 압축하려는 발상이다. 단계마다 JSON을 반환하게 하는 대신, 모델에게 짧은 Python 프로그램을 한 편 쓰게 한다. 루프(Loop)도 조건 분기(Conditional Branching)도 변수도 그 프로그램 안에서 처리하며, 도구는 call_tool(...)을 통해 호출한다. 이를 샌드박스(Sandbox)에서 단 한 번 실행하여 정리된 결과를 반환한다. BUILD 2026에서 발표된 해당 회사의 대표적인 멀티 스텝 워크로드(Multi-step Workload) 수치는 다음과 같다.
| 기존 도구 호출 | CodeAct |
|---|---|
| 실행 시간 | 27.81초 |
| 소비 토큰 | 6,890 |
출처는 Microsoft 자체 측정값이므로, 액면 그대로의 "2배 속도"를 맹신할 수는 없다. 다만 왕복을 줄이면 토큰과 시간 모두에 이득이 된다는 방향성은 타당하다.
CodeAct라는 아이디어 자체는 새롭지 않다. 학계에서 제안되었고 여러 에이전트가 채택해 왔다. 까다로운 점은 언제나 동일한 지점, 즉 모델이 작성한 임의의 코드를 실행한다는 사실이다. 이는 하네스 입장에서 최대의 공격 표면(Attack Surface)이 된다. 프롬프트 인젝션(Prompt Injection)을 통해 외부에서 악의적인 지시가 섞여 들어오면, 모델은 파일을 삭제하는 코드나 인증 정보를 전송하는 코드를 아무렇지 않게 작성할 수 있다.
정석적인 대책은 "호출할 때마다 새로운 샌드박스를 준비하고, 끝나면 버리는 것"이다. 하지만 구현 수단이 고민거리다. 컨테이너(Container)는 커널(Kernel)을 공유하므로 격리 수준이 낮다. 제대로 된 VM은 견고하지만 구동 시간이 길다. 도구 실행 한 번마다 VM을 생성하고 폐기하는 것은 비용 측면에서 비현실적이라고 여겨져 왔다.
여기서 빛을 발하는 것이 Hyperlight다. Microsoft가 Rust로 작성한 micro-VM 매니저로, 2025년 3월에 오픈 소스화되었으며 같은 해 2월에 CNCF Sandbox에 합류했다. 일반적인 VM과 달리 게스트(Guest)에게는 메모리의 한 구역과 CPU만을 보여준다. 커널도 OS도 가상 디바이스도 탑재하지 않는다.
all it exposes to its VM guests is a linear slice of memory and a CPU. No virtual devices. No operating system.
OS를 부팅하지 않기 때문에 구동 속도가 압도적으로 빠르다. 해당 회사의 설명에 따르면 기존형 VM의 부팅이 약 125ms인 것에 비해, Hyperlight는 1~2ms이며, 1ms 미만을 목표로 개발이 계속되고 있다. 하드웨어 격리(Hypervisor)를 유지하면서도 컨테이너 수준의 가벼움으로 일회용 사용이 가능하다. 비유하자면 계산할 때마다 새 컴퓨터를 건네주고, 끝나면 통째로 파쇄하는 것과 같다.
agent-framework-hyperlight (현재 알파 버전)는 이 두 가지를 연결한다. CodeAct가 생성한 프로그램을 호출 시마다 완전히 새로운 Hyperlight micro-VM 안에서 실행한다. 블로그의 표현을 빌리자면 "도구 호출 1회라는 입도(Granularity)로, 강력한 격리를 사실상 무료로 얻을 수 있다".
사용법은 도구를 정의하여 프로바이더(Provider)에 전달하기만 하면 된다.
from agent_framework import Agent, tool
from agent_framework_hyperlight import HyperlightCodeActProvider
@tool
...
@tool로 일반적인 Python 함수를 선언하고, HyperlightCodeActProvider에 목록으로 전달한다. 모델이 get_weather를 필요한 횟수만큼 호출하는 프로그램을 작성하면, 그것이 격리된 VM 안에서 실행된다. approval_mode는 위험한 작업에 인간의 승인을 거칠지 여부를 결정하는 옵션인데, 여기서는 "항상 불필요(Always off)\
내가 흥미롭다고 생각하는 점은 보안 모델의 중심축이 이동하고 있다는 점이다. 기존에는 "모델이 호출할 도구를 미리 제한하는" 방향으로 방어해 왔다. CodeAct는 반대로, 임의의 오케스트레이션 (Orchestration) 코드를 작성하도록 허용하는 대신, 단 1회의 실행에 대해 폭발 반경 (Blast radius)을 봉쇄한다. 효율화 패턴 (CodeAct)에 격리 프리미티브 (Isolation primitive, Hyperlight)를 적용함으로써 비로소 실무 투입이 가능한 형태로 구성한 것이다. 같은 "코드로 도구를 호출하게 하는" 노선이라도 OpenAI의 Programmatic Tool Calling은 효율에 주안점을 두는 반면, Microsoft의 이 한 수는 격리를 우선적으로 세웠다는 점에서 차별점이 드러난다.
주의사항도 솔직하게 적어둔다. Hyperlight Wasm에서 Python을 실행하려면 언어 런타임 (Language runtime)을 Wasm 이미지에 포함해야 하며, wasm32-wasip2를 타겟으로 하는 특성상 순수 CPython이 그대로 전부 동작하는 것은 아니다. 패키지가 알파 (Alpha) 단계인 만큼, API와 수치 모두 동작한다는 전제하에 읽어야 한다. 그럼에도 불구하고, "에이전트가 작성한 코드를 어떻게 안전하게 실행할 것인가"라는, 에이전트 시대의 미미하지만 피할 수 없는 과제에 대해 기존의 보안 기반을 가져와 정면으로 대응하고 있다는 점은 높게 평가할 만하다. 왕복 시간을 줄여 빠르고 저렴하게 만드는 것보다, 그 속도를 실무에서 사용할 수 있는 안전성과 세트로 제공했다는 점이 실무에서는 더 무게감이 있다.
1차 소스는 다음과 같다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기