MongoDB Atlas Agent Engine SDK용 Google ADK 2 어댑터입니다.
어댑터는 AER 모드 에서만 내구성을 갖습니다. agent.yaml에서 features.durable_workflow: true를 설정합니다. 생략되거나 false는 네이티브 ADK 세션으로 대체되지 않습니다. 첫 번째 호출이 실패합니다. 오케스트레이션 엔진은 교차 회전 상태 소유하고 각 시도에 이를 제공합니다. 어댑터는 별도의 ADK 세션 데이터베이스 유지 관리하지 않습니다. 토폴로지 제한 이면의 플랫폼 개념, 활성화 및 ID 규칙은 다음과 같습니다: Durable Workflow. Atlas Agent Engine ctx.resume은(는) ADK 체크포인트 재개가 아닙니다. 병렬 ADK 경로가 함께 일시 중단될 수 있습니다. 어댑터는 러너 정지를 통해 이를 수집하고 하나의 원자성 OE 대기 프론티어를 커밋합니다. 해당 프론티어에 대한 답변이 완료되면 해당 단계가 커밋되고 ADK는 다른 직렬 또는 병렬 프론티어로 계속될 수 있습니다.
일시 중단 및 재개
작성자는 공식 생성자 `FunctionTool(..., require_confirmation=True) <를 사용하여 에이전트 빌더에서 네이티브 ADK 대기를 구성합니다.https://adk.dev/graphs/man-input/#tool-confirmation-approval-prompts-in-llm-agents >`__ 및 LongRunningFunctionTool. 원시 @app.tool 함수가 아닌 app.tools()에서 콜러블을 전달합니다: @app.tool은(는) 도구만 등록합니다. app.tools()는 Atlas Agent Engine 보안 래퍼를 적용합니다. Atlas Agent Engine은 각 대기를 하나의 OE 활동으로 기록하고 하나의 명령으로 전체 경계를 확정합니다. Atlas Agent Engine 인터럽트 ID는 해당 활동 ID이며, ADK 함수 호출 ID가 아닙니다. 계속하려면 전체 resume_map 하나가 필요합니다. 원본 사용자 메시지를 다시 탐색하는 새로운 시도입니다. OE는 기록된 답변 반환합니다. 어댑터는 이 실행의 함수 호출 ID로 키가 지정된 한 개의 FunctionResponse 부분 배치 를 ADK에 공급합니다. Atlas Agent Engine app.suspend()이(가) 없습니다. 확인 답변 은 ADK의 {confirmed: true|false} 객체 입니다. RequestInput 답변 ADK의 FunctionResponse.response 딕셔너리가 허용하는 모든 것, 즉 JSON 객체 또는 어댑터가 {result: ...}로 래핑하는 null이 아닌 스칼라/ 배열 입니다. JSON null 은 (답변 아닙니다.
attempt 1: original message → ADK runs to quiescence → OE frontier 1 SUSPENDED attempt 2: replay frontier 1 → COMPLETED → commit step 1 → continue ADK → frontier 2 SUSPENDED attempt 3: replay step 1 → replay frontier 2 → COMPLETED → commit step 2 → continue
사이트 | 역할 |
|---|---|
|
|
| 안정적인 공개 ADK 러너 및 변경 불가능한 |
| OE 시도를 바인딩하고, 원본 메시지를 다시 작성하고, 현재 재개 경계를 식별합니다. |
|
|
| 다음 새로운 대기 또는 완료 시까지 해결된 프론티어를 계속 진행합니다. |
| 표준 ADK 노드 경로를 공유된 지속형 작업 경로에 바인딩 |
| 표준 상위 경로 아래에 구성된 하위 에이전트 전송 예약 |
| 네이티브 하나의 순서가 지정된 프론티어에 매핑하고 응답 배치 빌드 . |
| 모든 대기를 원자 단위로 마무리하고 지속형 형 위치로 OE 결과를 일치시킵니다. |
|
|
| 접두사 LLM 및 도구는 Atlas Agent Engine 활동이므로 계속은 해당 부작용을 다시 실행하지 않습니다. |
어댑터는 ADK BaseAgent 또는 ADK 2 Workflow를 허용합니다. ADK는 LangGraph 스타일의 슈퍼스탭 수명 주기를 정의하지 않습니다. 따라서 Atlas Agent Engine은 조용한 조정 프론티어에서만 단계를 도입합니다: 해당 프론티어의 모든 대기는 원자적으로 조인되고, 해결된 프론티어가 해당 단계를 커밋하고, 다음 Runner.run_async 연속이 다음 단계를 시작합니다.
워크플로 및 에이전트 경로
ADK는 다양한 구성 API를 통해 Workflow 구성 및 에이전트 협업을 노출하지만, 구성된 실행은 동일한 런타임 프리미티브에서 충족됩니다: 워크플로 노드와 에이전트는 모두 BaseNode 인스턴스이며, ADK는 각 실행 하나의 표준 Context.node_path를 할당합니다. 어댑터는 해당 경로 하나를 OE 작업 경로에 매핑합니다. 모델 텍스트나 세션 이벤트에서 에이전트 조상을 재구성하지 않습니다.
지속형 형 어댑터를 사용하려면 애플리케이션 구성 시 전체 워크플로 및 에이전트 토폴로지 필요합니다. 이는 지속형 LangGraph 그래프 어댑터와 동일한 정적 토폴로지 제약 조건으로, 외부 작업이 이미 시작된 후에는 임의의 런타임 제어 흐름을 지속형 그래프 경계로 처리할 수 없습니다.
ADK 기능 | 내구성 지원 |
|---|---|
일반 | 지원됨 |
정적으로 구성된 | 지원됨 |
중첩된 직렬 및 병렬 | 지원됨 |
| 지원됨 |
전송이 구성된 워크 에이전트 노드 | 소유 에이전트 사용할 때 지원됩니다. |
공개 | 실행 전에 거부되었습니다. 구성된 |
구성된 노드 내부의 모델링, 도구 및 대기 활동 | 지원됨 |
런타임에 | 동적 하위 항목이 실행되기 전에 거부됨 |
| 하위 항목이 실행되기 전에 거부됨 |
런타임 생성 대상 전달 대상 | 동적 하위 항목이 실행되기 전에 거부됨 |
일반 | 지원됨 해결된 |
ADK는 노드 를 실행 전에 표준 Context.node_path을(를) 할당합니다. ADK는 동일한 값을 워크플로 부기에 사용하고 방출된 이벤트에 Event.node_info.path로 기록합니다. 어댑터는 공개 BaseNode.run 경계를 래핑하여 모델 및 도구 활동 허용이 이벤트 존재하기 전에 경로를 사용할 수 있도록 합니다.
ADK node path: outer@1/inner@1/review@1 OE path: agent -> inner -> review
구성된 ADK 루트(outer@1)는 OE의 기존 agent 루트에 매핑됩니다. 나머지 세그먼트는 하위 경계가 되며 전체 ADK 접두사는 어커런스 키로 유지됩니다.
inner occurrence: outer@1/inner@1 review occurrence: outer@1/inner@1/review@1
병렬 left 및 right의 경우, 각 노드 래퍼는 요청-로컬 컨텍스트에서 자체 표준 경로를 바인딩하므로 완료 순서가 OE ID를 교환할 수 없습니다. review가 호출한 도구는 review 범위를 상속합니다. review가 대기를 내보내면 해당 이벤트 동일한 경로를 전달하며 일시 중단은 라이브 노드 범위가 종료된 후 동일한 경계를 기록합니다. ID는 전역 이름 조회가 아닌 전체 경로에서 가져오기 때문에 서로 다른 워크플로 상위 항목 아래에 있는 동일한 리프 이름도 구별됩니다. 잘못된 노드 경로와 노드 경로가 없는 대기 이벤트는 명시적으로 실패합니다.
구성된 하위 에이전트
전송은 이미 구성된 sub_agents 에지의 런타임 선택입니다. 모델 응답은 실행 하위 항목을 ADK에 알려주지만 어댑터는 ADK가 해당 하위 항목에 들어갈 때까지 기다렸다가 실행에 할당된 표준 경로 ADK를 사용합니다. 예시 들면 다음과 같습니다.
configured: router -> reviewer -> specialist ADK path: router@1/reviewer@1/specialist@1 OE path: agent -> reviewer -> specialist
반복된 전송은 새 ADK 실행 ID를 받습니다. 어댑터는 ADK가 들어갈 때 선택한 하위 경계를 예약하므로, specialist에 대한 두 번의 방문은 구성된 동일한 에이전트 객체 두 번 실행되더라도 specialist 서수 1 및 2가 됩니다.
구성된 에이전트 트리는 애플리케이션 루트 또는 워크플로 노드 내에서 지원됩니다. sub_agents를 소유한 워크플로 에이전트 는 mode="chat"을 명시적으로 사용해야 합니다. 그렇지 않으면 ADK는 해당 노드 기본값을 single_turn로 설정하며, 이 노드는 에이전트 내부에서 한 번 전송을 실행하고 포함된 워크플로에서 다시 전송합니다. 어댑터는 중복 하위 효과를 허용하는 대신 지속형 세션 구성 중에 해당 수명 주기를 거부합니다. 로컬 개발에서 이 오류는 모델 또는 도구 활동이 시작되기 전에 첫 번째 플레이그라운드 호출에 나타납니다.
채팅 모드 에서는 구성된 모든 전송이 ADK의 1개 공개 노드 수명 주기에 유지됩니다. 어댑터는 모델, 도구 또는 일시 중단 활동이 시작되기 전에 워크플로 조상 및 활성 에이전트 체인을 포함한 전체 표준 노드 경로를 바인딩합니다. ADK는 워크플로에 들어가는 동안 에이전트 노드를 복제하므로 라우팅은 공용 BaseNode.run 경계에 설치되고 요청-로컬 어댑터 상태 통해 선택됩니다. 구성된 템플릿은 ADK가 복제본에 복사하는 불투명한 출처만 전달하므로 어댑터가 런타임에 동적으로 생성된 동일한 이름, 동일한 유형의 노드 거부할 수 있습니다.
재개 시 캐시된 구성된 전송은 ADK의 전송 루프 내에 유지되고 해결된 대기 중인 전송 대상은 완료될 때까지 실행됩니다. 이렇게 하면 원시 재개 값을 워크플로 출력으로 노출하는 대신 최종 에이전트 응답을 보존합니다.
에이전트 협업 트리는 중첩, 직렬 또는 병렬 워크플로 그래프 의 정적으로 구성된 모든 에이전트 노드 에서 시작할 수 있습니다. 이는 Context.run_node()를 통해 동적으로 생성된 에이전트 또는 기타 노드를 허용하지 않습니다. 즉, 실행이 시작되기 전에 거부된 상태로 유지됩니다.
agent root: router agent -> reviewer -> specialist composed: outer Workflow -> router agent -> reviewer -> specialist
전송은 ADK의 에이전트 전송 규칙에 따라 해당 워크플로 노드 루트로 하는 구성된 에이전트 트리 내에 유지됩니다. 워크플로가 전송 대상이 아닙니다. 에이전트 트리가 완료되면 제어가 워크플로 스케줄러로 돌아가서 구성된 그래프 따라 계속됩니다.
AgentTool 은(는) 의도적으로 이 기능 벗어납니다. ADK는 비공개 러너를 통해 하위 항목을 실행하므로 하위 항목은 호출자의 표준 노드 경로나 외부 대기 경계를 상속하지 않습니다. 해당 라이프사이클을 지원하려면 별도의 지속형 브리지가 필요합니다. 현재 어댑터는 경로를 유추하는 대신 실행 전에 실패합니다.
턴 레벨 되감기
App.runner Atlas Agent Engine의 안정적인 공개 ADK 러너입니다. rewind_async() 메서드는 Google의 문서화된 인수 이름을 유지하고 rewind_before_invocation_id를 OE 세션 브랜치에 직접 매핑합니다.
branch = await app.runner.rewind_async( user_id="user-1", session_id="session-1", rewind_before_invocation_id="execution-3", )
한 번의 ADK 호출은 한 번의 OE 실행이므로 되감기는 전체 턴만 대상으로 합니다. 호출은 활성 지속형 형 호출 내에서 실행 되어야 하며, session_id는 해당 호출의 세션에 이름을 지정해야 합니다. SDK는 OE의 기존 실행 콜백 경로를 통해 현재 실행 ID 전송합니다. OE는 해당 실행을 로드하여 조직, 프로젝트, 작업 공간 및 세션을 파생합니다. 클라이언트 해당 좌표를 보내거나 자격 증명 시도하지 않습니다. 실행 ID 스트림 , 도구 결과 및 실행기 콜백에 대해 갖는 것과 동일한 역할 가집니다. 즉, 이미 워크로드-OE 콜백 신뢰 경계 내에 있는 요청 라우팅하며 공개 관리 자격 증명이 아닙니다. 한 트랜잭션 에서 OE는 실행에 여전히 활성 지속형 형 임대가 있는지 확인하고, 동일한 세션에서 제외할 첫 번째 실행을 해결하며, 이전 턴의 종료 상태 새로운 휴면 세션으로 복사합니다. 앤세스터 세션에서 턴을 되돌리려면 해당 앤세스터 세션을 호출하고 포크를 직접 요청 . 하위 세션은 조상 기록을 수정할 수 있는 권한을 상속하지 않습니다. 응답에는 새로운 session_id 및 보류 중인 execution_id가 포함됩니다. 해당 세션에 대한 다음 일반 호출은 대체 사용자 요청 으로 보류 중인 실행을 요청합니다.
이는 의도적으로 ADK의 반환 계약을 확장합니다. 네이티브 ADK는 지정된 세션을 변경하고 None을 반환합니다. Atlas Agent Engine은 해당 세션을 변경 불가 상태로 유지하고 SessionForkResponse을 반환하여 호출자가 새로운 session_id 및 execution_id를 계속 사용할 수 있도록 합니다. 메서드 이름과 인수는 ADK의 문서화된 인터페이스로 남아 있지만, app.runner는 올바른 반환 주석이 있는 Atlas Agent Engine 소유 유형입니다. Google의 Runner는 비공개의 시도 범위 실행 세부 정보로 유지됩니다. 일반 회전은 여전히 플랫폼 호출 인터페이스를 통해 시작됩니다. 퍼블릭 러너는 대체 실행 경로를 생성하지 않습니다.
어댑터는 ADK 이벤트를 스캔하거나, 실행 카탈로그를 유지하거나, 단계 서수를 계산하거나, 스냅샷 바이트를 제출 , 분기 키를 선택하지 않습니다. 첫 번째 턴 전에 되감거나, 이벤트 ID에 이름을 지정하거나, 다른 세션이 소유한 턴을 대상으로 지정하면 실패합니다. 활성 지속형 형 호출 외부에서 rewind_async()를 호출하는 것도 실패합니다. 즉, 순서가 맞지 않는 관리 되감기는 지원되지 않습니다. 각 재시도는 새로운 분기 요청 입니다. 클라이언트 멱등 키가 없습니다.
빠른 시작
설치
pip install agent-engine-sdk-adk
또는 uv 프로젝트 에서 :
uv add agent-engine-sdk-adk
개발
요구 사항:
Python >= 3.11
Google ADK >= 2.4.0, < 3
개발자 설정
uv sync --extra dev
테스트
./scripts/test.sh agent-engine-sdk-adk
리포지토리 소유 제품군은 작업 공간 패키지 동기화하고 CI와 동일한 경로를 사용하여 Ruff, Pyright 및 pytest를 실행합니다.
저작권 2026 MongoDB, Inc. Apache 라이선스, 버전 2.0에 따라 라이선스가 부여됩니다.