AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

ディープエージェントの構築

MongoDB Atlas Agent Engine SDK は、ディープ エージェントを構築するための開発者向けのインターフェースを提供します。ディープ エージェントは、ファイルシステム操作、 シェル実行、および複数段階の理由付けが可能なAIエージェントであり、すべての入力と出力はプラットフォームの 監査されたセキュリティレイヤーを通じてルーティングされます。

Tip

ディープ エージェントの詳細については、 Lgachein ドキュメントの「 ディープ エージェントの概要 」を参照してください。

エージェント作成者は、次の 3 つのプライマリ SDK コンポーネントと対話します。

  • App.deep_agent(): ディープエージェントを定義および接続するためのファクトリー メソッド。

  • スキルマニフェスト:エージェントが実行時に検出して呼び出すことができる手順セット。

  • ツール サンドボックスバックエンド: すべてのツール呼び出しをプラットフォームの安全な実行パスでルーティングするバックエンド。

ディープエージェントを構築する 前に、deepagents の依存関係を pyproject.tomlファイルに追加し、agent.yamlファイルでディープエージェント機能を有効にする必要があります。

ディープエージェントを作成するには、deepagentsパッケージをプロジェクトの pyproject.tomlファイルに追加します。

dependencies = [
"deepagents==0.5.3",
... # other dependencies
]

deepagentsパッケージは、 agent-engine-sdk-langgraphパッケージのオプションの依存関係です。 SDK は、アプリがApp.deep_agent() 関数を呼び出すときにのみ deepagentsパッケージをインポートするため、プロジェクトで明示的に宣言する必要があります。

次のフラグを agent.yamlファイルに追加して、agent.yaml でディープエージェント機能を有効にします。

features:
deep_agent: true
... # other features

このフラグは、ディープ エージェントが依存する組み込みのファイルシステムとシェルハンドラーを登録するようにツール サンドボックスに指示します。

注意

TypeScript エージェントは、同等の app.deepAgent() ファクトリー メソッドを使用してディープ エージェントを構築します。これには、同じ features.deep_agent: true 設定が必要です。このページの例ではPythonを使用しています。

App.deep_agent() メソッドは、エージェント作成者のプライマリ エントリ点です。これにより、プラットフォームの gRPC および SSEストリーミングパス、 MongoDBベースのチェックポイント、およびサンドボックス ツール実行用の AgentEngineToolSandboxBackendクラスと統合する、コンパイル済み LgDBグラフが作成されます。

メソッドは、次のタスクを自動的に実行します。

  • デフォルトのサンドボックスとして AgentEngineToolSandboxBackendクラスを使用します

  • 最上位の LM とすべての SubAgent モデルを SecureWrappedLLMクラスでラップし、プラットフォームの監査された LM パスを強制します

  • 永続的な実行状態のためにMongoDBチェックポイントをスレッド化します

  • 既存の gRPC/SSEストリーミングパスと POST /api/v1/executions/{execution_id}/resume APIリクエストと互換性のあるコンパイルされたグラフを返します

App.deep_agent() メソッドは次のパラメーターを受け入れます:

Parameter
タイプ
必須
説明

llm

LLM

はい

エージェントのプライマリモデルとして使用する言語インスタンス。プラットフォームはこれを SecureWrappedLLMクラスで自動的にラップします。

tools

list

No

エージェントで使用できる Lgachein 互換のツール オブジェクトのリスト。 LgChuin ツールの詳細については、 Latchin ドキュメントを参照してください。

subagents

list

No

SubAgentクラスインスタンスの一覧。各 SubAgent.model 属性は、string ではなく LMインスタンスである必要があります。 string ベースのモデル参照は SecureWrappedLLMクラスをバイパスし、検証時に拒否されます。

skills

list[str]

No

アイテム ディレクトリへのパスのリスト。各ディレクトリには有効な ファイルが含まれている必要があります。各パスは である必要があり、 オブジェクト ではありませんSKILL.mdstr pathlib.Path。 KILL.md ファイルの詳細については、「 スキーマを説明する 」セクションを参照してください。

system_prompt

string

No

ディープエージェントのカスタム システム手順。省略した場合、エージェントはdeepagents ライブラリのデフォルトのプロンプトを使用します。

middleware

list

No

SDK のデフォルトの割り込み回復と耐久性のあるネスト ミドルウェアの後に実行される追加のミドルウェア。

checkpointer

any

No

状態永続性のための LingGraph チェックポイント。デフォルトは app.checkpointer() です。チェックポイントを無効にするには None を渡します。カスタム チェックポイントを使用するには BaseCheckpointSaverインスタンスを渡します。

store

any

No

特権やその他の共有データに使用される LanguageGraph ストア。

backend

any

No

ファイルシステムとシェル操作のバックエンド。デフォルトはAgentEngineToolSandboxBackend クラスです。カスタムバックエンドは、プラットフォームの監査された I/O パスをバイパスします。詳しくは、「 ツール サンドボックス バックエンド 」を参照してください。

特権を呼び出すディープエージェントを作成するには、特権ディレクトリのパスのリストを App.deep_agent() メソッドの skills パラメーターに渡します。

次の例では、 @app.entrypoint宣言された関数を変更して、単一のツールと スキームディレクトリ を持つディープエージェントを作成します。

from agent_engine_sdk_langgraph import App
app = App()
@app.entrypoint
def build_agent():
return app.deep_agent(
llm=my_llm,
tools=[my_tool],
subagents=[],
skills=["skills/security-review"],
)

重要

LMインスタンスを app.deep_agent() メソッドに渡す前に、app.llm() メソッドでラップしないでください。 deep_agent() メソッドは、SecureWrappedLLMクラスの LM を内部的にラップします。 app.llm() メソッドを呼び出すと、まず __default__ LM ID が2 回登録され、エージェントの起動は失敗します。

初期化時に、App.deep_agent() メソッドは次のチェックを実行し、いずれかが失敗した場合はエラーを発生させます。

  • SubAgentクラスで string モデル参照を確認します。各 SubAgent.model 属性は、string ではなく LMインスタンスである必要があります。 string モデル名は SecureWrappedLLMクラスをバイパスし、プラットフォームはエージェントを拒否します。このメソッドは最大 10 レベルのネストをチェックします。

  • 手動指定された backend パラメータを確認します。 プラットフォームはサンドボックスを所有し、AgentEngineToolSandboxBackendクラスをバックエンドとして強制します。カスタムバックエンドを指定すると、プラットフォームのサンドボックスがバイパスされ、プラットフォームはバックエンド を拒否します。

注意

App.deep_agent() メソッドは、Lgachein deepagents ライブラリがエージェントグラフをコンパイルする前に、前述のチェックを実行します。いずれかのチェックに失敗した場合、エージェントは起動しません。

これらのチェックに加えて、App.deep_agent() メソッドは、deepagents ライブラリがグラフをコンパイルする前に、llm パラメータと SecureWrappedLLMクラスのすべての SubAgent.model 属性に渡される LMインスタンスを自動的にラップします。

スキームは、 ディープエージェントに提供する再利用可能な命令セットです。各特権は独自のサブディレクトリに存在し、YAML フロントマ ターを持つ SKILL.mdファイルによって記述されます。プラットフォームは、エージェントのスタートアップにフロントマッパーを読み取り、ツールを検証し、LM に公開します。

特権は次のディレクトリ構造内にあります。ディレクトリ名はフロントマッパーの nameフィールドと一致します。

<workspace-directory>/
└── skills/
└── <skill-name>/
└── SKILL.md

skills パラメータに渡されるルール パスは、エージェントの ワークスペースディレクトリに相対的です。これは、agent.yamlファイルを含むディレクトリです。

有効な SKILL.mdファイルはYAML フロントマで始まる必要があります。次の例は、有効な SKILL.mdファイルのテンプレートです。

---
name: <skill-name>
description: <one-sentence description for LLM discovery>
---
# Skill Title
Detailed instructions or reference material for the agent...

YAML フロントマに次のフィールドを含める必要があります。

フィールド
必須
説明

name

はい

特権の名前。親ディレクトリ名と完全に一致する必要があります。

description

はい

LM はこの短い説明を使用して、特権を呼び出すタイミングを決定します。 description がない特権は、エージェントのスタートアップ時に警告とともにプラットフォームによってスキップされ、エージェントは使用できません。

注意

SKILL.mdファイルには有効な UTF-8 文字のみが含まれている必要があります。プラットフォームによって UTF-8 として読み取れないファイルは、クラッシュを発生させることなくエージェントのスタートアップ時にスキップされます。

次の例では、ツールディレクトリパスのリストを App.deep_agent() メソッドに渡します。

agent = app.deep_agent(
llm=my_llm,
tools=[],
skills=["skills/security-review", "skills/style-guide"],
)

AgentEngineToolSandboxBackendクラスはSandboxBackendProtocolプロトコルを実装します。バックエンドは、SecureToolWrapperクラスを使用して、ディープエージェントグラフからのすべてのファイルシステムとシェルツールの呼び出しをプラットフォームのツール サンドボックス ハンドラーを介してルーティングします。 App.deep_agent() メソッドはそれを自動的にインスタンス化するため、AgentEngineToolSandboxBackendクラスを直接インスタンス化したり構成したりする必要はありません。

注意

AgentEngineToolSandboxBackendクラスは任意の依存関係であり、パッケージルートから再エクスポートされることはありません。直接参照必要がある場合は、明示的にインポートします。次の例は、クラスをインポートする方法を示しています。

from agent_engine_sdk_langgraph.backends.tool_sandbox import AgentEngineToolSandboxBackend

AgentEngineToolSandboxBackendクラス操作は実行時にエージェントによって自動的に呼び出され、エージェント作成者によって直接呼び出されることはありません。 AgentEngineToolSandboxBackendクラスは次の操作をサポートしており、それぞれが対応する filesystem_* または shell_execute ツールとして LM に公開されます。

操作
説明

ls

指定されたパスにあるファイルとディレクトリを一覧表示

read

ファイルの内容を読み取ります

write

コンテンツをファイルに書込み

edit

既存のファイルに編集を適用します

glob

グローバル パターンに一致するファイルを検索

grep

ファイル内のパターンを検索します

execute

サンドボックスでシェルコマンドを実行します

download_files

サンドボックスから呼び出し元にファイルをダウンロード

バックエンドはすべてのエラーをエージェントグラフに表示する前にクラス化するため、エージェントは操作を再試行するかどうかを決定できます 。次の表は、利用可能なエラー分類とその原因を示しています。

分類
原因の例

再試行可能

ConnectionErrorOSErrorTimeoutError一時的なネットワークエラーや入力エラー、出力エラーなど。

再試行不可

PolicyDeniedException:操作はプラットフォームのセキュリティ ポリシーによって拒否されました。エージェントは操作を再試行できません。

RuntimeError:バックエンドが、ローカルスクリプトやテストなど、有効なエージェントサンドボックス コンテキストの外部で使用されました。このエラーにより、構成ミスによる無限の再試行ループが防止されます。

プラットフォームは、エージェントに表示される前に、すべてのエラーメッセージからすべての内部ワークスペース パスを削除します。

ディープ エージェントはサンドボックス化されたファイルシステム内で動作します。サンドボックスには次のレイヤーが含まれています。

  • 書き込み可能なワークスペース(WORKSPACE_DIR ):/tmp/agent-workspace デフォルトは ディレクトリです。エージェントサンドボックス セッション中、サンドボックスはエージェントの パスへのアクセスを制限し、同時セッションが分離されるようにします。生成されたファイルには、相対パスまたはWORKSPACE_DIR/.sessions/<session-hash>/ /tmpディレクトリ配下パスを使用します。

  • 読み取り専用リソースルート(READONLY_RESOURCE_ROOTS ):AGENTIC_AGENT_WORKDIR 環境変数とskills/ ディレクトリから入力されます。このレイヤーでは、エージェントはセッションごとのワークスペース内と外のSKILL.md ファイルを読み取ることができるため、オンデマンドでスキップ コンテンツを読み込むことができます。

重要

WORKSPACE_DIR 環境変数をエージェントソースディレクトリ(/appディレクトリなど)に設定しないでください。 WORKSPACE_DIR 変数をエージェントのソースディレクトリに設定すると、エージェントは実行時に特権ファイルにアクセスできなくなり、Path escapes workspace sandbox エラーがスローされます。

ワークスペースディレクトリを変更するには、代わりに AGENTIC_AGENT_WORKDIR 環境変数を設定します。

# .env
AGENTIC_AGENT_WORKDIR=/app
# Do NOT add: WORKSPACE_DIR=/app