Overview
このガイドでは、 MongoDB Atlas Agent Engine でエージェントを実行中ための最小要件を学習できます。このガイドでは、Atlas Agent Engine がエージェント、 agent.yamlスキーマ、互換性のあるフレームワークと LM プロバイダーを検出して実行するために必要なファイルについて説明します。
エージェントは独自のHTTPエンドポイントを実装しません。 Atlas Agent Engine は、エージェントサンドボックスと同じプロセス内にエージェントをインポートします。
配置可能な最小エージェント
配置可能な最小のエージェントは、次の 2 つのファイルで構成されています。
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(...)LMapp.llm(...)の呼び出しをルーティングします。Atlas Agent Engine は、中断された実行を再開するときに、監査するログ、ポリシーの適用、リプレイ ツールと LM 呼び出しにこれらのラッパーを使用します。これらのラッパー外で行われた呼び出しは Atlas Agent Engine によって監査されず、実行再開後に正しく再生されません。
グラフの状態をJSON/ BSON-シリアル化可能な状態に維持します。
エージェント サンドボックスはエフェメラルであるため、Atlas Agent Engine は一時停止アクションと再開アクションの間にあるMongoDBへのチェックポイントポイント状態を保存します。チェックポイントを成功させるには、グラフ状態内のすべての値がJSONまたはBSONにシリアル化可能である必要があります。たとえば、プリミティブ、リスト、ディレクティブ、
datetime、Enum、ラングチェーンBaseMessageサブクラスなどです。直列化サポートのないグラフ状態に、ラムダ、クローニング、ファイル処理、データベース接続、またはカスタム クラスを保存しないでください。を呼び出す
app.llm(...)エントリポイントが 呼び出しスタックにある間のみ、 関数を実行します。app.llm(...)モジュールの最上位コード、ツール本体、またはエントリポイントが呼び出していないその他の関数から を呼び出すと、Atlas Agent Engine は無効な呼び出しを含むファイルと行を識別するエラーを生成します。詳細については、「 実行ライフサイクル 」を参照してください。
実行ライフサイクル
Atlas Agent Engine は、次のプロセスのライフサイクルの定義された時点でエージェントコードをロードして実行します。
Agent Sandbox は、エージェントコードを実行し、グラフを構築します。
ツール サンドボックス。エージェントサンドボックスとは別のプロセスでリモート ツールを実行します。
注意
この実行ライフサイクルはPythonと TypeScript SDK で同じです。
このセクションでは、エージェントコードの個々の部分が各プロセスで実行されるタイミングについて説明し、次の用語を使用します。
モジュール最上位コードは、関数本体の外部でインポート時に実行されるエージェントのソースファイル内のコードです。
エントリポイントは、
@app.entrypointで修飾する関数です。ローカル ツールは、エージェントサンドボックスの独自の プロセス内でのみ実行されます。デフォルトでは 、
@app.tool()修飾子に登録するすべてのツールはローカル ツールです。リモート ツールは、
sandboxes.tool.toolsagent.yamlファイルの フィールドにリストすることで、ツール サンドボックスに割り当てるツールです。エージェントサンドボックスはリモート ツールを解釈しますが、リモート ツール ボディはツール サンドボックスで実行されます。
スタートアップ
エージェントサンドボックス プロセスと ツール サンドボックス プロセスの両方で、Atlas Agent Engine はスタートアップ時に次のアクションを実行します 。
エージェントのソース ファイルを読み込みます。
モジュールの最上位コードを実行します。
プラットフォームは、スタートアップ時に次のアクションを実行しません 。
エントリポイントを実行します。
ツール本体を実行します。 Atlas Agent Engine は、署名を登録するためにツール定義を解釈しますが、実行はありません。
エージェント サンドボックスの呼び出し
エージェントサンドボックスでは、Atlas エージェント エンジンは 呼び出し中に次のアクションを実行します。
エントリポイントを 1 回実行します。
エージェントサンドボックスの独自の プロセスでローカル ツール本体を実行します。
プラットフォームは、エージェントサンドボックスの呼び出し中に次のアクションを実行しません。
- リモート ツール ボディを実行します。エージェントサンドボックスはこれらを解釈し、 ツール サンドボックスに呼び出しをディスパッチします。
ツール サンドボックスの呼び出し
ツール サンドボックスでは、Atlas Agent Engine は 呼び出し中に次のアクションを実行します。
最初の
invoke_llm呼び出しによってトリガーされる、サンドボックスの有効期間ごとに 1 回だけエントリポイントを遅延して読み込みます。この読み込みでは、app.llm(...)登録のみが検出されます。リモート ツール ボディを解釈し、オーケストレーション エンジンがツール呼び出しをサンドボックスにルーティングするときに、それらをオンデマンドで実行します。
Atlas Agent Engine は、ツール サンドボックスの呼び出し中に次のアクションを実行しません。
グラフを実行します。
ローカル ツール ボディを実行します。
Atlas Agent は、 フィールドで宣言したシークレットを、ツールsandboxes.tool.secrets サンドボックスの環境変数として配信します。ツール サンドボックスで実行されるすべてのリモート ツール ボディは、これらの環境変数を読み取ることができます。サンドボックスがツール間でシークレットを共有する方法の詳細については、 「 MongoDB Atlas Agent エンジンの制限 」を参照してください。
ライフサイクルの概要
次の表は、コードの各部分が各実行プロセスとフェーズでいつ実行されるかをまとめたものです。
段階 | プロセス | 最上位コード | エントリポイント | リモート ツール本体 | ローカル ツール本体 |
|---|---|---|---|---|---|
スタートアップ | Agent Sandbox | 実行済み | 実行されない | 解釈のみ | 解釈のみ |
スタートアップ | ツール サンドボックス | 実行済み | 実行されない | 解釈のみ | 解釈のみ |
呼び出しごと | Agent Sandbox | 実行されない | 1 回実行 | 解釈され、ツール サンドボックスにディスパッチされます | 実行済み |
最初の | ツール サンドボックス | 実行されない |
| 実行されない | 実行されない |
ツール呼び出しごと | ツール サンドボックス | 実行されない | 実行されない | オンデマンドで実行 | 実行されない |
エージェント YAML スキーマ
agent.yamlファイルは、Atlas Agent Engine がエージェントを検出して実行する方法を構成します。これは、1 つのエージェントを含むリポジトリの 単一エージェント マニフェスト と、複数のエージェントを含むリポジトリの MongoDB Atlas の 2 つの形式をサポートしています。
単一エージェントマニフェスト
次の表では、単一エージェントの agent.yamlファイルで使用できるフィールドを説明しています。 Required 列は、最小の agent.yamlファイルにフィールドが必要かどうかを示します。
フィールド | タイプ | 必須 | 説明と制限 |
|---|---|---|---|
| string | はい |
|
| string | no | エージェントの名前 。小文字の英数字とハイフン文字のみを含める必要があります。先頭または末尾にはハイフンを使用しません。 |
| string | no | エージェントの説明。最大 500 文字。 |
| string | no | エージェントの目的の概要。 UIに表示されます。 |
| list[string] | no | エージェントが実行できる操作を説明するラベル。 UIに表示されます。 |
| ブール | no |
|
| ブール | no |
|
| ブール | no |
|
| ブール | no |
|
| ブール | no | の場合、カスタム ストリーム出力が有効になります。 修飾子に登録された |
| string |
| リモート MCPサーバー接続のトランスポートプロトコル。使用可能な値は です。詳細については、「 リモート MCP |
| string |
| リモート MCPサーバーエンドポイントのURL 。 |
| map[string, string] | no | MCPサーバーへのすべてのリクエストで送信される静的HTTPヘッダー。 |
| string | はい | 認証タイプ。指定可能な値は |
| string |
| Bearer トークンを保持する環境変数の名前。変数は |
| string |
| 認可フロー中にリクエストスペース区切りの OAuth スコープ。 |
| string | no | 同意画面に表示される、人間が判読可能な OAuthクライアントの名前。 |
| list[string] | no | エージェントに公開するリモート MCP ツール名の許可リスト。これを設定すると、プラットフォームはリストされているツールのみを登録し、サーバーが返す他のすべてのツールを無視します。省略した場合、プラットフォームはサーバーが返すすべてのツールを公開します。このフィールドを使用して、ツール画面をエージェントが必要とするツールのみに制限します。 |
| 整数 | no | MCP ツール呼び出しごとのリクエスト タイムアウト(秒単位)。デフォルトは |
| 整数 | no | 配置の静的ポッド数。 Atlas Agent Engine は、この値をエージェントサンドボックスとツール サンドボックスに個別に適用します。各セッションでは、1 つのエージェントサンドボックスと、構成されている場合は 1 つのツール サンドボックスが予約されるため、この値は配置で提供できる同時セッションの数になります。 1 から 512 までの値を受け入れます。省略した場合、デフォルトは 4 になります。 |
| 整数 | no | Atlas Agent Engine が他のセッションで再利用する前に、アイドル セッションが予約済みエージェントサンドボックスを保持する時間(秒単位)。 1 から 86400 までの値を受け入れます。省略した場合、デフォルトは 600 になります。 |
| 整数 | no | Atlas Agent Engine が再利用する前に、アイドル セッションが予約済みのツール サンドボックスを保持する時間(秒単位)。 1 から 86400 までの値を受け入れます。デフォルトは |
| マッピング | はい | エージェントとそのツールを実行する名前付きサンドボックスを構成します。 Atlas Agent Engine は、 |
| マッピング | はい | エージェントサンドボックス(エージェントコードを実行するハードウェア分離されたサンドボックス)の構成。 |
| list[string] | no | エージェントサンドボックスで使用可能なシークレット名のリスト、またはシークレット名と一致するグローバル パターン。すべてのシークレットを一致させるには、 |
| list[string] | no | エージェントサンドボックスで実行するツール名のリスト、またはツール名と一致するグローバル パターン。すべてのツールに一致させるには、 |
| マッピング | no | エージェントサンドボックスのネットワーク ポリシー(アウトバウンド Egress ルールを含む)。詳細については、「 ネットワーク Egress ポリシーの管理 」を参照してください。 |
| マッピング | no | リモート ツール ボディを実行するハードウェア分離されたサンドボックスであるツール サンドボックスの構成。 |
| list[string] | no | ツール サンドボックスで使用できるシークレット名のリスト、またはシークレット名と一致するグローバル パターン。すべてのシークレットを一致させるには、 を使用します。 |
| list[string] | no | ツール サンドボックスで実行するツール名のリスト、またはツール名と一致するグローバル パターン。すべてのツールに一致させるには、 |
| list[mapping] | no | マネージド ビルドのプライベートパッケージレジストリを宣言します。各エントリは、レジストリインデックス名を、その認証情報を保持する Atlas Agent Engine のシークレットにマッピングします。 Atlas Agent Engine はビルド時にのみ認証情報を入力し、実行中のポッドには公開しません。レジストリ URL は、このブロックではなくプロジェクトツールに存在します( |
| string | はい | エントリのユニーク識別子。 PyPI エントリの場合、 は |
| string | はい | リポジトリ タイプ。指定可能な値は |
| string | はい | 認証情報を保持する Atlas Agent Engine シークレットの名前。 |
| string | no | シークレット スコープ。指定可能な値は |
| string | no | 認証方法。指定可能な値は |
| string | no | レジストリ認証のユーザー名。 |
| string | no | このレジストリにマッピングするnpmスコープ( |
artifact_repositories 認証情報はビルド時にのみ解決されます。プライベート アーティファクト リポジトリがクラウドビルドとローカル開発でどのように機能するかについては、「 エージェント イメージのビルド 」と「 エージェントをローカルで実行 」を参照してください。
各セッションは有効期間中、独自のエージェントとツールのサンドボックスを予約し、Atlas Agent Engine はサンドボックスを新しいセッションに割り当てる前にサンドボックスをリセットします。その結果、1 つのセッションがサンドボックスに書き込むアーティファクトは、後のセッションには表示されません。
Atlas Agent Engine はビルド時に scaling の値をスナップショットするため、変更は次回のビルドと配置で有効になります。プラットフォームのデフォルトを変更しても、すでに配置されているワークスペースのサイズは変更されません。ワークスペースは、再度ビルドして配置するまで、最新のビルドからハードウェア分離されたサンドボックスのカウントを保持します。アイドル時間ライブ(TTL)の値はプロジェクト全体に適用されます。 1 つのプロジェクト内の複数のエージェントが異なる 値を設定する場合、プロジェクトは最後に配置されたエージェントの値を適用します。
注意
ローカル開発設定は、dev.yaml agent.yaml自体ではなく、 ファイルと同じディレクトリ内の別のagent.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
MongoDB Manifest
リポジトリに複数のエージェントが含まれている場合は、最上位の agents: リストを使用して、単一の agent.yamlファイルでそれらを定義します。 Atlas Agent Engine はこのリストを検出し、ファイルを単一エージェント構成ではなく MongoDB マニフェストとして扱います。次の agent.yamlファイルは、複数のエージェントを含む MongoDB マニフェストの例です。
agents: - name: chat path: agents/chat - name: research path: agents/research
フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | エージェントの名前 。小文字の英数字とハイフン文字のみを含める必要があります。先頭または末尾にはハイフンを使用しません。リスト内では一意である必要があります。 |
| string | はい | リポジトリルートに対するエージェントのサブディレクトリへのパス。パスはリポジトリ以外のロケーションを参照はできません。 |
各エージェントサブディレクトリには、独自の単一エージェント agent.yamlファイルが含まれている必要があります。
.env の要件
dev.yamlファイルで services.mongodb.local が false に設定されている場合、エージェントを正常に配置するには、.envファイルで MONGODB_URI 環境変数を設定する必要があります。
また、実行時にリクエストを処理するには、{ファイルにLM APIキーが必要です。プラットフォーム自体は特定の.env LM 認証情報を検証したり要求したりしませんが、エージェントはその認証情報なしでは実行時に失敗します。<PROVIDER>_API_KEY LM プロバイダーの環境変数を設定するには、 構文を使用します。
フレームワークと LM プロバイダー
このセクションでは、Atlas Agent Engine で使用できるフレームワークと LM プロバイダーについて説明します。
フレームワーク
Atlas Agent Engine は、 agent-engine-sdk-langgraphパッケージを通じて LagGraph と Lgachein をサポートします。フレームワークアダプターは、次の統合ポイントを処理します。
interrupt()続行する前に人間によるレビューのためにエージェントの実行を一時停止するためMongoDBSaverエージェントのグラフ状態をMongoDBに保存し、中断された実行が再開されたときに復元できるようにするためLangChainInstrumentorデバッグとモニタリングのために実行中に LVM とツールの呼び出しを記録するため
LM プロバイダー
エージェントでは任意の LVM プロバイダーを使用できます。モデルを使用するには、プロバイダー用に Lgachein BaseChatModel を構築し、それを app.llm() メソッドに渡します。 Atlas エージェント エンジンは、オーケストレーション エンジンを介して呼び出しをルーティングします。
次の表は、環境キーと LgDBクラスを含む一般的なプロバイダーの例を示しています。
プロバイダー | 環境キー | ラングチェーン クラス |
|---|---|---|
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"))