개요
이 가이드 에서는 MongoDB Atlas Agent Engine에서 에이전트 실행 위한 최소 요구 사항에 대해 학습 수 있습니다. 이 가이드 에서는 Atlas Agent Engine이 에이전트, agent.yaml 스키마 , 호환되는 프레임워크 및 LLM 제공자를 검색하고 실행 데 필요한 파일을 다룹니다.
에이전트는 자체 HTTP 엔드포인트를 구현 하지 않습니다. Atlas Agent Engine은 에이전트 샌드박스와 동일한 프로세스 내에서 에이전트 가져옵니다.
최소 배포 가능 에이전트
최소 배포 가능 에이전트 두 개의 파일로 구성됩니다.
my_agent/main.py:App객체 와 그래프 정의합니다.agent.yaml:my_agent/main.py에 정의된App객체 가리킵니다.
다음 예시 my-agent라는 App 객체 정의하고 에이전트 그래프 를 빌드하는 최소한의 main.py 파일 보여줍니다.
from agent_engine_sdk_langgraph import App from langgraph.graph import StateGraph, MessagesState from langgraph.prebuilt import ToolNode from langchain_openai import ChatOpenAI app = App(app_name="my-agent") def lookup(query: str) -> str: """Search the knowledge base.""" return f"result for {query}" def build_agent(): llm = app.llm(ChatOpenAI(model="gpt-4o-mini")) tools = app.get_tools() def call_model(state: MessagesState): return {"messages": [llm.invoke(state["messages"])]} graph = StateGraph(MessagesState) graph.add_node("agent", call_model) graph.add_node("tools", ToolNode(tools)) graph.set_entry_point("agent") graph.add_edge("tools", "agent") return graph.compile(checkpointer=app.checkpointer()) app.run()
다음 예시 최소한의 agent.yaml 파일 보여줍니다.
entrypoint: my_agent.main:app
main.py 파일 에서 다음 구성 요소를 실행해야 합니다.
모듈 수준에서
App객체 정의하며, 일반적으로 이름은app입니다.@app.entrypoint함수를 사용하여 앱 에 진입점을 등록합니다.@app.tool(...)함수로 도구를 등록합니다.모듈 하단에서
app.run()함수를 호출합니다.
agent.yaml 파일 에서 <module.path>:<attribute> 형식을 사용하여 entrypoint YAML 키를 App 객체 로 설정하다 해야 합니다.
상담원 가이드라인
다음 가이드라인에 따라 에이전트 감사 로깅, 정책 시행, 에이전트 실행 일시 중단 또는 재개와 같은 플랫폼 기능과 함께 올바르게 작동하는지 확인하세요.
app.tool(...)및app.llm(...)함수를 통해 도구 및 LLM 호출을 라우팅합니다.Atlas Agent Engine은 일시 중단된 실행을 재개할 때 감사 로깅, 정책 시행, 재생 도구 및 LLM 호출에 이러한 래퍼를 사용합니다. 이러한 래퍼 외부에서 이루어진 호출은 Atlas Agent Engine에 의해 감사되지 않으며 실행을 재개한 후 올바르게 재생되지 않습니다.
그래프 상태 를 JSON/ BSON-serializable로 유지합니다.
에이전트 샌드박스는 일시적이므로 Atlas Agent Engine은 일시 중단과 재개 작업 사이에 체크포인트 상태를 MongoDB 에 저장합니다. 체크포인트 성공하려면 그래프 상태 의 모든 값(예: 프리미티브, 목록, 딕셔너리,
datetime,Enum및 LangChainBaseMessage하위 클래스)이 JSON 또는 BSON 으로 직렬화 가능해야 합니다. 직렬화 지원 없는 그래프 상태 에 Lambda, 클로저, 파일 핸들, 데이터베이스 연결 또는 사용자 지정 클래스를 저장 하지 마세요.다음을 호출합니다.
app.llm(...)진입점이 호출 스택 에 있는 동안에만 함수를 사용할 수 있습니다.모듈 최상위 코드, 도구 본문 또는 엔트리포인트가 호출하지 않는 기타 함수에서
app.llm(...)을(를) 호출하면 Atlas Agent Engine이 잘못된 호출이 있는 파일 과 줄을 식별하는 오류를 생성합니다.자세한 학습 은 실행 수명 주기를 참조하세요.
실행 수명 주기
Atlas Agent Engine은 다음 프로세스 수명 주기의 정의된 지점에서 에이전트 코드를 로드하고 실행합니다.
Agent Sandbox는 에이전트 코드를 실행하고 그래프 빌드합니다.
도구 샌드박스는 에이전트 샌드박스와 별도의 프로세스 에서 원격 도구 본문을 실행합니다.
참고
이 실행 수명 주기는 Python 및 TypeScript SDK에서 동일합니다.
이 섹션에서는 에이전트 코드의 개별 부분이 각 프로세스 에서 실행 경우를 설명하고 다음 용어를 사용합니다.
모듈 최상위 코드는 가져오기 시 함수 본문 외부에서 실행되는 에이전트의 소스 파일에 있는 코드입니다.
진입점은
@app.entrypoint로 장식하는 함수입니다.로컬 도구는 에이전트 샌드박스의 자체 프로세스 내에서만 실행됩니다. 기본값 으로
@app.tool()데코레이터로 등록하는 모든 도구는 로컬 도구입니다.원격 도구는
agent.yaml파일 의sandboxes.tool.tools필드 에 도구 샌드박스를 나열하여 할당하는 도구입니다. 에이전트 샌드박스는 원격 도구를 해석하지만 원격 도구 본문은 도구 샌드박스에서 실행 .
시작
에이전트 샌드박스 프로세스와 도구 샌드박스 프로세스 모두에서 Atlas Agent Engine은 스타트업 시 다음 작업을 수행합니다.
에이전트의 소스 파일을 로드합니다.
모듈의 최상위 코드를 실행합니다.
플랫폼은 스타트업 시 다음 조치를 수행하지 않습니다.
진입점을 실행합니다.
도구 본문을 실행합니다. Atlas Agent Engine은 도구 정의를 해석하여 서명을 등록하지만 실행 하지는 않습니다.
모듈 최상위 코드는 MONGODB_URI 및 MCP OAuth 자격 증명 과 같은 프로세스 전체의 시크릿 액세스 할 수 있는데, 이러한 값은 프로세스 의 수명 동안 사용할 수 있기 때문입니다. Atlas Agent Engine은 샌드박스가 시작될 때 LLM API 키를 포함하여 샌드박스에 대해 선언하는 비밀도 설정합니다. 결과적으로 샌드박스의 모듈 최상위 코드는 해당 샌드박스의 비밀에 액세스 할 수 있습니다.
에이전트 샌드박스 호출
에이전트 샌드박스에서 Atlas Agent Engine은 호출 중에 다음 조치를 수행합니다.
진입점을 한 번 실행합니다.
에이전트 샌드박스의 자체 프로세스 에서 로컬 도구 본문을 실행합니다.
플랫폼은 에이전트 샌드박스 호출 중에 다음 작업을 수행하지 않습니다.
- 원격 도구 본문을 실행합니다. 에이전트 샌드박스가 이를 해석한 다음 호출을 도구 샌드박스에 전달합니다.
도구 샌드박스 호출
도구 샌드박스에서 Atlas Agent Engine은 호출 중에 다음 조치를 수행합니다.
첫 번째
invoke_llm호출에 의해 트리거되며, 샌드박스 수명당 정확히 한 번씩 진입점을 느리게 로드합니다. 이 로딩은app.llm(...)등록만 검색합니다.원격 도구 본문을 해석한 다음 오케스트레이션 엔진이 도구 호출을 샌드박스로 라우팅할 때 필요에 따라 실행합니다.
Atlas Agent Engine은 도구 샌드박스 호출 중에 다음 작업을 수행하지 않습니다.
그래프 실행합니다.
로컬 도구 본문을 실행합니다.
Atlas Agent Engine은 sandboxes.tool.secrets 필드 에서 선언한 시크릿을 도구 샌드박스의 환경 변수로 전달합니다. 도구 샌드박스에서 실행되는 모든 원격 도구 본문은 이러한 환경 변수를 읽을 수 있습니다. 샌드박스가 도구 간에 비밀을 주식 방법에 대해 자세히 학습 MongoDB Atlas 에이전트 엔진 제한을 참조하세요.
수명 주기 요약
다음 표에는 각 실행 프로세스 및 단계에서 코드의 각 부분이 실행되는 시점이 요약되어 있습니다.
단계 | 프로세스 | 최상위 코드 | 진입점 | 원격 도구 본체 | 로컬 도구 본문 |
|---|---|---|---|---|---|
시작 | Agent Sandbox | 실행 | 실행되지 않음 | 해석 전용 | 해석 전용 |
시작 | 도구 샌드박스 | 실행 | 실행되지 않음 | 해석 전용 | 해석 전용 |
호출당 | Agent Sandbox | 실행되지 않음 | 한 번 실행됨 | 해석, 도구 샌드박스로 전달 | 실행 |
첫 번째 | 도구 샌드박스 | 실행되지 않음 | 한 번 실행하여 | 실행되지 않음 | 실행되지 않음 |
도구 호출당 | 도구 샌드박스 | 실행되지 않음 | 실행되지 않음 | 온디맨드 실행 | 실행되지 않음 |
에이전트 YAML 스키마
agent.yaml 파일 Atlas Agent Engine이 에이전트 검색하고 실행하는 방법을 구성합니다. 두 가지 형식, 즉 하나의 에이전트 포함된 리포지토리를 위한 단일 에이전트 매니페스트와 여러 에이전트가 포함된 리포지토리를 위한 단일 리포지토리 매니페스트의 두 가지 형식을 지원합니다.
단일 에이전트 매니페스트
다음 표에서는 단일 에이전트 agent.yaml 파일 에 사용할 수 있는 필드에 대해 설명합니다. Required 열은 최소 agent.yaml 파일 에 필드 필요한지 여부를 나타냅니다.
필드 | 유형 | 필수 사항 | 설명 및 제한 사항 |
|---|---|---|---|
| 문자열 | 네 |
|
| 문자열 | no | 에이전트 의 이름입니다. 소문자 영숫자 및 하이픈 문자만 포함해야 합니다. 선행 또는 후행 하이픈이 없습니다. |
| 문자열 | no | 에이전트 에 대한 설명입니다. 최대 500자 |
| 문자열 | no | 에이전트의 목적에 대한 요약입니다. UI 에 표시됩니다. |
| list[string] | no | 에이전트 수행할 수 있는 작업을 설명하는 레이블입니다. UI 에 표시됩니다. |
| 부울 | no |
|
| 부울 | no |
|
| 부울 | no |
|
| 부울 | no |
|
| 부울 | no |
|
| 문자열 |
| 원격 MCP 서버 연결을 위한 전송 프로토콜 . 허용되는 값: |
| 문자열 |
| 원격 MCP 서버 엔드포인트의 URL . |
| map[문자열, 문자열] | no | MCP 서버 에 대한 모든 요청 과 함께 전송되는 정적 HTTP headers . |
| 문자열 | 네 | 인증 유형입니다. 허용되는 값은 |
| 문자열 |
| 베어러 토큰을 보유하는 환경 변수의 이름입니다. 변수는 |
| 문자열 |
| 권한 부여 흐름 중에 요청 공백으로 구분된 OAuth 범위입니다. |
| 문자열 | no | 동의 화면에 표시되는 OAuth 클라이언트 의 사람이 읽을 수 있는 이름입니다. |
| list[string] | no | 에이전트 에 노출할 원격 MCP 도구 이름의 허용 목록입니다. 설정하다 하면 플랫폼은 나열된 도구만 등록하고 서버 반환하는 다른 모든 도구는 무시합니다. 생략하면 플랫폼은 서버 반환하는 모든 도구를 노출합니다. 이 필드 사용하여 도구 표면을 에이전트 에 필요한 도구로만 제한할 수 있습니다. |
| int | no | 각 MCP 도구 호출에 대한 요청 시간 제한(초)입니다. 기본값은 |
| int | no | 배포서버 에 대한 정적 포드 수입니다. Atlas Agent Engine은 이 값을 에이전트 샌드박스와 도구 샌드박스에 별도로 적용합니다. 각 세션은 하나의 에이전트 샌드박스와 하나의 도구 샌드박스(구성된 경우)를 예약하므로 이 값은 배포서버 에서 제공 할 수 있는 동시 세션의 수입니다. 1에서 512 사이의 값을 허용합니다. 생략하면 기본값은 4입니다. |
| int | no | Atlas Agent Engine이 다른 세션을 위해 예약된 에이전트 샌드박스를 회수하기 전에 유휴 세션이 예약된 에이전트 샌드박스를 유지하는 시간(초)입니다. 1에서 86400 사이의 값을 허용합니다. 생략하면 기본값은 600입니다. |
| int | no | Atlas Agent Engine이 회수하기 전에 유휴 세션에서 예약된 도구 샌드박스를 유지하는 시간(초)입니다. 1에서 86400 사이의 값을 허용합니다. 기본값은 |
| 매핑 | 네 | 에이전트 와 해당 도구를 실행 명명된 샌드박스를 구성합니다. Atlas Agent Engine은 |
| 매핑 | 네 | 에이전트 코드를 실행하는 하드웨어 격리 샌드박스인 에이전트 샌드박스에 대한 구성입니다. |
| list[string] | no | 에이전트 샌드박스에서 사용할 수 있는 시크릿 이름 또는 시크릿 이름과 일치하는 glob 패턴의 목록입니다. |
| list[string] | no | 에이전트 샌드박스에서 실행 도구 이름 또는 도구 이름과 일치하는 glob 패턴의 목록입니다. |
| 매핑 | no | 에이전트 샌드박스에 대한 아웃바운드 이그레스 규칙을 포함한 네트워크 정책입니다. 자세히 학습 네트워크 이그레스 정책 관리를 참조하세요. |
| 매핑 | no | 원격 도구 본문을 실행하는 하드웨어 격리 샌드박스인 도구 샌드박스에 대한 구성입니다. |
| list[string] | no | 도구 샌드박스에서 사용할 수 있는 시크릿 이름 또는 시크릿 이름과 일치하는 glob 패턴의 목록입니다. |
| list[string] | no | 도구 샌드박스에서 실행 도구 이름 또는 도구 이름과 일치하는 glob 패턴의 목록입니다. |
| list[mapping] | no | managed 빌드에 대한 비공개 패키지 레지스트리를 선언합니다. 각 항목은 레지스트리 인덱스 이름을 자격 증명을 보유하는 Atlas Agent Engine 시크릿에 매핑합니다. Atlas Agent Engine은 빌드 시에만 자격 증명을 삽입하고 실행 Pod에 노출하지 않습니다. 레지스트리 URL은 이 차단 아닌 프로젝트 도구( |
| 문자열 | 네 | 항목의 고유 식별자입니다. PyPI 항목의 경우 |
| 문자열 | 네 | 리포지토리 유형입니다. 허용되는 값은 |
| 문자열 | 네 | 자격 증명을 보유한 Atlas Agent Engine 시크릿의 이름입니다. |
| 문자열 | no | 시크릿 범위. 허용되는 값은 |
| 문자열 | no | 인증 방법. 허용되는 값은 |
| 문자열 | no | 레지스트리 인증 위한 사용자 이름입니다. |
| 문자열 | no | 이 레지스트리에 매핑되는 npm 범위(예: |
artifact_repositories 자격 증명 빌드 타임에만 확인됩니다. cloud 빌드 및 로컬 개발에서 비공개 아티팩트 리포지토리가 작동하는 방식을 학습 에이전트 이미지 빌드 및 로컬에서 에이전트 실행을 참조하세요.
각 세션은 수명 동안 자체 에이전트 및 도구 샌드박스를 예약하며, Atlas Agent Engine은 새 세션에 샌드박스를 할당하기 전에 샌드박스를 재설정합니다. 따라서 한 세션이 샌드박스에 쓰는 아티팩트는 이후 세션에서 볼 수 없습니다.
Atlas Agent Engine은 빌드 시 scaling 값을 스냅샷하므로 다음 빌드 및 배포 시 변경 사항이 적용됩니다. 플랫폼 기본값 을 변경해도 이미 배포된 작업 공간의 크기는 조정되지 않습니다. 작업 공간은 다시 빌드 하고 배포 때까지 가장 최근 빌드 의 하드웨어 격리 샌드박스 수를 유지합니다. 유휴 TTL(time-to-live) 값은 프로젝트 전체에 적용 . 한 프로젝트 의 여러 에이전트가 서로 다른 값을 설정하다 경우 프로젝트 가장 최근에 배포된 에이전트 의 값을 적용합니다.
참고
로컬 개발 설정은 agent.yaml 자체가 아닌 agent.yaml 파일 과 동일한 디렉토리 에 있는 별도의 dev.yaml 파일 에서 구성해야 합니다. 자세한 학습 은 로컬 개발 설정 구성을 참조하세요.
다음 예시 서비스 포트 재정의, 기능 플래그, 시크릿 액세스 제한 및 비공개 아티팩트 리포지토리 가 포함된 agent.yaml 파일 보여줍니다.
name: my-agent entrypoint: my_agent.main:app features: guardrails: true scaling: replicas: 4 agent_idle_ttl_seconds: 900 tool_idle_ttl_seconds: 300 sandboxes: agent: secrets: ["*"] tools: [] tool: secrets: - SEARCH_API_KEY - ANTHROPIC_API_KEY tools: - my_search_tool - invoke_llm artifact_repositories: - name: corps-pypi type: pypi secret: ARTIFACT_REPO_CORPS_PYPI_TOKEN username: aws scope: project
Monorepo 매니페스트
리포지토리 여러 에이전트가 포함되어 있는 경우 최상위 agents: 목록을 사용하여 단일 agent.yaml 파일 에 정의합니다. Atlas Agent Engine은 이 목록을 감지하고 파일 단일 에이전트 구성이 아닌 단일 리포지토리 매니페스트로 처리합니다. 다음 agent.yaml 파일 여러 에이전트가 있는 단일 리포지토리 매니페스트의 예시 입니다.
agents: - name: chat path: agents/chat - name: research path: agents/research
필드 | 유형 | 필수 사항 | 설명 |
|---|---|---|---|
| 문자열 | 네 | 에이전트 의 이름입니다. 소문자 영숫자 및 하이픈 문자만 포함해야 합니다. 선행 또는 후행 하이픈이 없습니다. 목록 내에서 고유해야 합니다. |
| 문자열 | 네 | 리포지토리 루트를 기준으로 한 에이전트의 하위 디렉토리 경로입니다. 경로는 리포지토리 외부의 위치를 참조할 수 없습니다. |
각 에이전트 하위 디렉토리에는 자체 단일 에이전트 agent.yaml 파일 포함되어야 합니다.
.env 요구 사항
You must set the MONGODB_URI environment variable in your .env file to deploy your agent successfully, if services.mongodb.local is set to false in your dev.yaml file.
또한 에이전트 런타임에 요청을 프로세스 하려면 .env 파일 에 LLM API 키가 있어야 합니다. 플랫폼 자체는 특정 LLM 자격 증명 유효성을 검사하거나 요구하지 않지만, 이 자격 증명이 없으면 에이전트 런타임에 실패합니다. <PROVIDER>_API_KEY 구문을 사용하여 LLM 제공자 에 대한 환경 변수를 설정하다 .
프레임워크 및 LLM 제공자
이 섹션에서는 Atlas Agent Engine과 함께 사용할 수 있는 프레임워크 및 LLM 제공자에 대해 설명합니다.
프레임워크
Atlas Agent Engine은 agent-engine-sdk-langgraph 패키지 통해 LangGraph 및 LangChain을 지원합니다. 프레임워크 어댑터는 다음과 같은 통합 지점을 처리합니다.
interrupt()계속하기 전에 인적 검토 위해 에이전트 실행을 일시 중지합니다.MongoDBSaver일시 중단된 실행이 다시 시작될 때 복원할 수 있도록 에이전트의 그래프 상태 MongoDB 에 저장합니다.LangChainInstrumentor디버깅 및 모니터링 위해 실행 중 LLM 및 도구 호출을 기록합니다.
LLM 제공자
에이전트 와 함께 모든 LLM 제공자 사용할 수 있습니다. 모델을 사용하려면 제공자 에 대한 LangChain BaseChatModel를 구성하고 이를 app.llm() 메서드에 전달합니다. Atlas Agent Engine은 오케스트레이션 엔진을 통해 해당 호출을 라우팅합니다.
다음 표는 환경 키 및 LangChain 클래스가 있는 일반적인 제공자 예시를 보여줍니다.
제공자 | 환경 키 | LangChain 클래스 |
|---|---|---|
OpenAI |
|
|
인간의 |
|
|
Gemini |
|
|
Cerebras |
|
|
다음 코드 예시는 app.llm() 메서드에 대해 각 제공자 구성하는 방법을 보여줍니다.
# OpenAI from langchain_openai import ChatOpenAI llm = app.llm(ChatOpenAI(model="gpt-4o-mini")) # Anthropic from langchain_anthropic import ChatAnthropic llm = app.llm(ChatAnthropic(model="claude-sonnet-4-5")) # Gemini from langchain_google_genai import ChatGoogleGenerativeAI llm = app.llm(ChatGoogleGenerativeAI(model="gemini-2.5-flash-lite")) # Cerebras from langchain_cerebras import ChatCerebras llm = app.llm(ChatCerebras(model="qwen-3-235b-a22b-instruct-2507"))
다음 단계
배포된 에이전트 인증하고 호출하는 방법을 학습 에이전트 호출 가이드 참조하세요.