LLM WikiAccess-protected knowledge portal

WIKI

AG2 1.0 Beta: AutoGen classic 이후 에이전트 런타임을 ACP·Tool Search·NLIP로 재구성하는 법

왜 지금 봐야 하나 AG2 v1.0.0b0은 2026년 7월 3일에 공개됐다. 이 릴리스가 중요한 이유는 새 모델 하나를 붙이거나 툴을 조금 늘린 정도가 아니라, 에이전트 런타임의 경계 자체를 다시 그었기 때문 이다. 패키지 기준이 autogen 에서 ag2 로 넘어간다. ConversableAgent , GroupChat 같은 classic 표면은 더 이상 소스 트리의 중심이 아니다. 외부 CLI 코딩 에이전트는 ACP Ag

경로human/study/content/ai-frontier/34-ag2-1-0-beta-classic-removal-acp-tool-search-nlip.md
카테고리Study
태그#acp #ai-review #infra #nlip #removal #search #study #tool

왜 지금 봐야 하나

AG2 v1.0.0b0은 2026년 7월 3일에 공개됐다. 이 릴리스가 중요한 이유는 새 모델 하나를 붙이거나 툴을 조금 늘린 정도가 아니라, 에이전트 런타임의 경계 자체를 다시 그었기 때문이다.

즉, 이 릴리스는 "에이전트를 하나 더 만든다"가 아니라 에이전트 프로세스·도구·원격 통신을 어떤 경계로 나눌지를 새로 결정하게 만든다. 기존 AutoGen 계열 코드베이스를 운영 중이거나, Codex/Claude Code 같은 외부 코딩 에이전트를 오케스트레이션하려는 팀이라면 이 변화는 API 취향 문제가 아니라 배포 구조 문제다.


핵심 변화 한눈에 보기

표면이번 릴리스에서 달라진 점운영자가 바로 받는 영향
패키지/런타임 경계top-level import가 ag2로 이동, classic 표면은 제거 방향설치 패키지, import 경로, 예제 코드, 마이그레이션 문서 버전 고정 필요
오케스트레이션GroupChat 대신 ag2.network + TransitionGraph 중심handoff 규칙을 코드보다 데이터로 옮기게 됨
CLI 코딩 에이전트 연동ACPConfig / ClaudeCodeConfig / CodexConfig / OpenCodeConfig 추가Codex/Claude Code/OpenCode를 AG2의 "모델 슬롯" 뒤에 붙일 수 있음
툴 컨텍스트 관리Tool Search + defer_loading=True수십 개 툴을 upfront로 넣지 않고 검색 후 확장 가능
원격 에이전트 통신NLIP Server / NLIP ConfigHTTP 경계 밖의 에이전트를 로컬 모델처럼 연결 가능

AG2 1.0 Beta의 새 경계

AG2 1.0 Beta: 프로세스·툴·원격 에이전트 경계를 다시 나누는 구조 Classic AutoGen 세계 `autogen` import ConversableAgent / GroupChat 인프로세스 turn manager 중심 v1.0 beta에서 유지보수/이관 대상 AG2 1.0 Beta core `import ag2` Agent + ag2.network + TransitionGraph Hub / workflow channel / serializable graph 새 오케스트레이션 기준면 Provider / Remote surfaces Tool Search (server-side expand) NLIP Server / NlipConfig Built-in provider tools 로컬이 아닌 실행면을 분리 ACP bridge AG2 한 model turn = ACP 한 `session/prompt` 세션 재사용 / permission_policy / fs_root / terminal Codex / Claude Code / OpenCode adapter preset 외부 CLI 에이전트를 AG2가 감싼다 Tool Search 툴 정의 전체를 upfront로 넣지 않음 이름/설명만 노출 후 provider가 server-side로 확장 prompt cache 보존이 목적 NLIP ASGI endpoint로 agent 노출 또는 remote endpoint를 ModelConfig처럼 연결 HTTP 경계 밖으로 분리 운영 해석 이 릴리스의 핵심은 모델 기능 추가가 아니라 에이전트 실행면을 local Python / external CLI / provider-side tools / remote HTTP agent로 분리한 점이다. 따라서 업그레이드 검증도 답변 품질보다 import 경계, 세션 수명주기, 권한 정책, provider 호환성, 상태 전달 방식을 먼저 봐야 한다.
AG2 1.0 Beta 아키텍처: classic 제거 이후의 실행 경계

1. classic 제거는 import rename이 아니다

AG2의 README는 분명하게 말한다. protocol-driven framework가 이제 top-level package이고 import는 ag2를 써야 하며, classic framework(ConversableAgent, GroupChat 등)는 제거됐다.

그런데 운영자 관점에서 더 중요한 신호는 두 번째다.

이 말은 예전처럼 "파이썬 객체를 서로 연결해 두고 인프로세스 turn manager가 굴린다"는 사고방식에서, 채널 + 그래프 + 허브가 권한을 갖는 구조로 넘어간다는 뜻이다.

왜 이게 중요한가

기존 classic 코드는 handoff와 종료 조건이 에이전트 객체와 콜백에 섞여 있을 가능성이 높다. AG2 1.0 beta의 방향은 그 규칙을 채널 레벨의 데이터로 끄집어내는 것이다. 그래서 migration은 다음 순서로 생각하는 편이 맞다.

  1. GroupChat을 복제하려 하지 말고, 어떤 전이 규칙이 필요한지 먼저 적는다.
  2. 그 규칙을 TransitionGraph로 표현한다.
  3. 에이전트는 점점 얇아지고, 허브와 채널이 turn-taking과 audit를 맡는다.

문서 드리프트도 함께 봐야 한다

재미있는 점은 같은 tag의 README 아래쪽에는 아직 ConversableAgent, GroupChat 예제가 남아 있다는 것이다. 즉, 릴리스 방향은 이미 classic 이후를 가리키지만, 문서 표면은 완전히 정리되지 않았다.

운영자가 이 신호를 어떻게 읽어야 하냐면 간단하다.


2. ACP는 "외부 CLI 에이전트"를 AG2의 모델 슬롯으로 끌어들인다

이번 릴리스에서 가장 실무적인 변화는 ACP다. ACPConfigModelConfig를 구현하고, create()ACPClient를 반환한다. 즉 AG2 입장에서는 외부 CLI 코딩 에이전트도 결국 하나의 LLM client처럼 보인다.

구조적으로 어떻게 동작하나

ACPClient의 주석은 핵심을 명확하게 설명한다.

이건 단순한 래퍼가 아니다. 외부 CLI 에이전트의 프로세스 수명주기와 권한 정책을 AG2가 중재하는 브리지다.

ACP에서 바로 보이는 운영 포인트

설정의미운영 메모
cwdACP 세션의 작업 루트repo 경계를 명확히 해야 함
fs_rootfs/* 파일 접근 루트기본값은 cwd; path escape는 PermissionError
permission_policyask / auto / deny초반에는 ask, 자동화 후 auto 검토
allow_terminalterminal capability 노출 여부읽기/쓰기만 필요한 에이전트면 꺼도 됨
turn_timeout, cancel_timeout장기 실행 turn 중단 정책무한 대기 대신 cooperative cancel → hard-stop 순서
additional_directories추가 workspace roots멀티 repo 작업일 때만 제한적으로 사용

preset이 주는 의미와 함정

AG2는 세 가지 preset을 넣었다.

좋은 점은 launch command와 기본 정책을 바로 제공한다는 것이다. 하지만 운영자가 놓치기 쉬운 함정도 있다.

  1. model 필드는 실제 launch flag가 아닐 수 있다.

- CodexConfig는 실제 모델 선택을 adapter의 MODEL_PROVIDER 환경변수에 둔다. - OpenCodeConfig는 아예 opencode.json 쪽 설정을 따르며, model 필드는 response metadata에만 남는다. - ClaudeCodeConfig도 실제 선택은 ANTHROPIC_MODEL 환경변수 쪽이다.

  1. ACP adapter binary는 별도 설치 대상이다.

- Python 패키지 ag2[acp]만으로 끝나는 구조가 아니다. - Claude/Codex는 ACP adapter executable 또는 npx 경로를 준비해야 한다.

  1. 권한 정책을 자동화하기 전에 파일/터미널 경계를 먼저 줄여야 한다.

- permission_policy="auto"가 편한 건 맞지만, fs_root를 느슨하게 두면 에이전트에 너무 넓은 작업면을 주게 된다.

최소 예시

from ag2 import Agent
from ag2.acp import CodexConfig

agent = Agent(
    "repo_coder",
    config=CodexConfig(
        cwd="/srv/work/repo",
        permission_policy="ask",
        turn_timeout=120,
        cancel_timeout=5,
    ),
)

이 예시의 진짜 의미는 "Codex를 붙였다"가 아니라, Codex 프로세스를 AG2가 승인·취소·파일 경계와 함께 관리한다는 데 있다.


3. Tool Search는 "툴을 어떻게 context에 싣는가"를 바꾼다

ToolSearchTool의 docstring은 의도를 직설적으로 설명한다.

이건 RAG처럼 문서를 검색하는 기능이 아니다. 툴 정의 자체를 지연 로딩하는 메커니즘이다.

중요한 세부 동작

  1. wrapper는 원본 툴을 변형하지 않는다.

- 테스트는 원본 get_weather.schema.defer_loading이 계속 False로 남는다는 점을 확인한다. - 즉, deferred는 emitted copy에만 붙는다.

  1. Anthropic과 OpenAI의 표면이 다르다.

- Anthropic은 regexbm25 두 variant를 구분한다. - OpenAI는 단일 tool_search 타입으로 노출된다.

  1. OpenAI Chat Completions API에는 이 기능이 없다.

- mapper는 deferred tool을 Chat Completions에 보내려 하면 fast-fail 한다. - Responses API를 써야만 deferred loading이 성립한다.

언제 유용한가

언제 아직 조심해야 하나

최소 예시

from ag2.tools import tool
from ag2.tools.builtin import ToolSearchTool

@tool
def get_weather(location: str) -> str:
    """Return current weather for a location."""
    return "sunny"

@tool
def echo(text: str) -> str:
    """Echo text."""
    return text

# get_weather는 필요할 때만 provider가 확장하고,
# echo는 즉시 로딩된다.
tools = [ToolSearchTool(get_weather), echo]

운영 관점에서는 이 기능을 켜기 전에 먼저 provider별 도구 호출 로그, 캐시 적중률, 잘못 검색된 툴 비율을 보아야 한다.


4. NLIP는 원격 에이전트를 HTTP 경계 밖으로 뺀다

NLIP 문서는 이 기능을 두 문장으로 정리한다.

  1. NlipServer로 AG2 Agent를 표준 NLIP endpoint로 노출할 수 있다.
  2. NlipConfig로 원격 NLIP endpoint를 로컬 Agent의 ModelConfig처럼 붙일 수 있다.

즉, ACP가 "외부 CLI 에이전트를 로컬 프로세스 안으로 감싼다"라면, NLIP는 반대로 에이전트를 HTTP 경계 밖으로 뺀 다음 다시 provider처럼 연결하는 방식이다.

이 표면이 실무에서 중요한 이유

문서에 따르면 NLIP 서버는 요청마다 독립 세션을 만든다.

이 구조는 다음처럼 해석해야 한다.

설치도 별도로 봐야 한다

NLIP는 ag2 extra로 묶여 있지 않다. 문서가 권장하는 설치는 다음과 같다.

pip install "ag2[openai]" "nlip-sdk>=0.1.0,<1" "nlip-server>=0.1.3,<1"
pip install uvicorn

즉 ACP와 마찬가지로, 패키지 extra 하나로 모든 실행면이 해결되는 구조가 아니다. 프로토콜 계층의 런타임 의존성을 분리해서 들고 가야 한다.


5. 이 릴리스를 운영자가 해석하는 방법

AG2 1.0 beta를 "AutoGen의 다음 버전" 정도로 보면 실수를 한다. 이 릴리스는 더 가깝게 말하면 에이전트 운영체제의 표면을 재배치한 것이다.

1) classic 코드베이스는 먼저 분리 보관한다

기존 autogen/GroupChat 흐름이 있다면, 바로 같은 브랜치에서 import를 바꾸지 말고 다음을 분리한다.

이번 변화는 단일 diff로 다루기엔 경계가 너무 넓다.

2) ACP는 승인 정책부터 보수적으로 시작한다

초기에는 다음이 안전하다.

3) Tool Search는 "툴이 많을 때만" 켠다

툴이 5개인 환경에서는 의미가 작다. 반대로 30개, 50개 이상이 되면 fixed context와 prompt cache 손실이 커지므로 가치가 커진다. 즉 이 기능은 범용 default라기보다 툴 수가 많은 환경을 위한 scaling knob로 보는 편이 맞다.

4) NLIP는 stateful chat보다 service boundary에 더 잘 맞는다

요청마다 세션을 만들고 full history를 보내는 구조라서, 긴 대화 메모리를 서버 쪽에 두는 패턴과는 결이 다르다. 대신 사내 검색 에이전트, 날씨/사내 운영 API 에이전트, 규정 검증 에이전트처럼 도메인 기능을 HTTP 서비스로 분리하는 용도엔 잘 맞는다.


6. 가장 먼저 돌려볼 검증 체크리스트

ACP 검증

Tool Search 검증

NLIP 검증

문서 드리프트 검증


결론

AG2 1.0 beta의 핵심은 기능 수가 아니라 경계의 재배치다.

이런 구조 변화는 데모에서는 잘 안 보이지만, 운영에서는 바로 드러난다. import 변경, subprocess 수명주기, 승인 정책, provider 호환성, state 전달 방식이 한 번에 바뀌기 때문이다. 그래서 이 릴리스를 도입할 때는 성능 수치보다 먼저 런타임 경계가 의도대로 통제되는지를 확인하는 편이 맞다.

References