Overview
El SDK de MongoDB Atlas Agent Engine proporciona una interfaz para desarrolladores que permite crear agentes avanzados. Estos agentes de IA son capaces de realizar operaciones en el sistema de archivos, ejecutar comandos de shell y llevar a cabo razonamientos de varios pasos, con todas las entradas y salidas canalizadas a través de la capa de seguridad auditada de la plataforma.
Tip
Para obtener más información sobre los agentes profundos, consulte la descripción general de los agentes profundos en la documentación de LangChain.
Los autores de agentes interactúan con tres componentes principales del SDK:
App.deep_agent(): El método de fábrica para definir y configurar un agente profundo.
Manifestaciones de habilidades: Conjuntos de instrucciones que el agente puede descubrir e invocar en tiempo de ejecución.
Backend de entorno aislado de herramientas: El backend que enruta todas las llamadas a las herramientas a través de la ruta de ejecución segura de la plataforma.
Requisitos previos
Antes de crear un agente profundo, debe agregar la dependencia deepagents a su archivo pyproject.toml y habilitar las funciones del agente profundo en su archivo agent.yaml.
Actualizar dependencias
Para crear un agente profundo, agregue el paquete deepagents al archivo pyproject.toml de su proyecto:
dependencies = [ "deepagents==0.5.3", ... # other dependencies ]
El paquete deepagents es una dependencia opcional del paquete agent-engine-sdk-langgraph. El SDK importa el paquete deepagents solo cuando la aplicación llama a la función App.deep_agent(), por lo que debe declararlo explícitamente en su proyecto.
Actualizar indicadores de características
Habilite las funciones avanzadas del agente en su agent.yaml agregando la siguiente bandera a su archivo agent.yaml:
features: deep_agent: true ... # other features
Esta bandera indica al entorno aislado de la herramienta que registre el sistema de archivos integrado y los controladores de shell en los que se basan los agentes profundos.
Nota
Los agentes de TypeScript crean agentes profundos con el método de fábrica app.deepAgent() equivalente, que requiere la misma configuración features.deep_agent: true. Los ejemplos de esta página utilizan Python.
Método deep_agent()
El método App.deep_agent() es el punto de entrada principal para los autores de agentes. Crea un gráfico LangChain compilado que se integra con la ruta de transmisión gRPC y SSE de la plataforma, el punto de control respaldado por MongoDB y la clase AgentEngineToolSandboxBackend para la ejecución de herramientas en el entorno aislado.
El método realiza automáticamente las siguientes tareas:
Utiliza la clase
AgentEngineToolSandboxBackendcomo entorno aislado predeterminado.Envuelve el LLM de nivel superior y todos los modelos
SubAgenten la claseSecureWrappedLLMpara garantizar la ruta LLM auditada de la plataforma.Hilos del puntero de control de MongoDB para un estado de ejecución duradero
Devuelve un gráfico compilado compatible con la ruta de transmisión gRPC/SSE existente y la solicitud de API
POST /api/v1/executions/{execution_id}/resume.
Parámetros
El método App.deep_agent() acepta los siguientes parámetros:
Parameter | Tipo | Requerido | Descripción |
|---|---|---|---|
| LLM | Sí | La instancia del modelo de lenguaje que se utilizará como modelo principal del agente. La plataforma la encapsula automáticamente en la clase |
| Lista | No | Lista de objetos de herramientas compatibles con LangChain disponibles para el agente. Para obtener más información sobre las herramientas de LangChain, consulte la documentación de LangChain. |
| Lista | No | Una lista de instancias de la clase |
| list[str] | No | Lista de rutas a directorios de habilidades. Cada directorio debe contener un archivo |
| string | No | Instrucciones personalizadas del sistema para el agente profundo. Si se omiten, el agente utiliza el mensaje predeterminado de la biblioteca |
| Lista | No | Middleware adicional que se ejecuta después del middleware predeterminado de recuperación de interrupciones y anidamiento duradero del SDK. |
| any | No | Puntero de control LangGraph para la persistencia del estado. Por defecto es |
| any | No | El almacén LangGraph se utiliza para almacenar habilidades y otros datos compartidos. |
| any | No | Backend para operaciones de sistema de archivos y shell. Por defecto, utiliza la clase |
Crea un agente profundo con habilidades
Para crear un agente profundo que invoque habilidades, pase una lista de rutas de directorios de habilidades al parámetro skills del método App.deep_agent().
El siguiente ejemplo modifica la función decorada con @app.entrypoint para crear un agente profundo con una sola herramienta y un directorio de habilidades:
from agent_engine_sdk_langgraph import App app = App() def build_agent(): return app.deep_agent( llm=my_llm, tools=[my_tool], subagents=[], skills=["skills/security-review"], )
Importante
No envuelva su instancia LLM con el método app.llm() antes de pasarla al método app.deep_agent(). El método deep_agent() envuelve internamente la instancia LLM de la clase SecureWrappedLLM. Si llama primero al método app.llm(), el ID de LLM __default__ se registra dos veces y el agente no se inicia.
Validaciones de seguridad
En el momento de la inicialización, el método App.deep_agent() ejecuta las siguientes comprobaciones y genera un error si alguna de ellas falla:
Comprueba si hay referencias a modelos de cadena en la clase
SubAgent: Cada atributoSubAgent.modeldebe ser una instancia de LLM y no una cadena. Los nombres de modelos de cadena omiten la claseSecureWrappedLLMy la plataforma rechaza al agente. El método comprueba hasta 10 niveles de anidamiento.Comprueba si se ha proporcionado manualmente el parámetro
backend: La plataforma es propietaria del entorno aislado y aplica la claseAgentEngineToolSandboxBackendcomo backend. Proporcionar un backend personalizado omite el entorno aislado de la plataforma y esta lo rechaza.
Nota
El método App.deep_agent() ejecuta las comprobaciones previas antes de que la biblioteca LangChain deepagents compile el grafo del agente. Si alguna de las comprobaciones falla, el agente no se inicia.
Además de estas comprobaciones, el método App.deep_agent() envuelve automáticamente la instancia LLM pasada al parámetro llm y todos los atributos SubAgent.model en la clase SecureWrappedLLM antes de que la biblioteca deepagents compile el gráfico.
La habilidad se manifiesta
Las habilidades son conjuntos de instrucciones reutilizables que se proporcionan a un agente profundo. Cada habilidad reside en su propio subdirectorio y se describe mediante un archivo SKILL.md con metadatos YAML. La plataforma lee estos metadatos al iniciar el agente para validar la habilidad y exponerla al LLM.
Estructura del directorio de habilidades
Las habilidades se encuentran dentro de la siguiente estructura de directorios, donde el nombre del directorio coincide con el campo name en el frontmatter:
<workspace-directory>/ └── skills/ └── <skill-name>/ └── SKILL.md
Las rutas de habilidades que se pasan al parámetro skills son relativas al directorio del espacio de trabajo de su agente, que es el directorio que contiene su archivo agent.yaml.
Formato SKILL.md
Un archivo SKILL.md válido debe comenzar con un encabezado YAML. El siguiente ejemplo es una plantilla para un archivo SKILL.md válido:
name: <skill-name> description: <one-sentence description for LLM discovery> # Skill Title Detailed instructions or reference material for the agent...
Debe incluir los siguientes campos en el encabezado YAML:
Campo | Requerido | Descripción |
|---|---|---|
| Sí | El nombre de la habilidad. Debe coincidir exactamente con el nombre del directorio principal. |
| Sí | El LLM utiliza esta breve descripción para decidir cuándo invocar la habilidad. Las habilidades que no incluyen |
Nota
El archivo SKILL.md debe contener únicamente caracteres UTF-8 válidos. Los archivos que la plataforma no puede leer como UTF-8 se omiten al iniciar el agente sin provocar un fallo.
Transmitir habilidades al agente
El siguiente ejemplo pasa una lista de rutas de directorios de habilidades al método App.deep_agent():
agent = app.deep_agent( llm=my_llm, tools=[], skills=["skills/security-review", "skills/style-guide"], )
Backend de la herramienta Sandbox
La clase AgentEngineToolSandboxBackend implementa el protocolo SandboxBackendProtocol. El backend enruta todas las llamadas a herramientas del sistema de archivos y de la línea de comandos desde el gráfico de agentes profundo a través del controlador de entorno aislado de herramientas de la plataforma mediante la clase SecureToolWrapper. No es necesario instanciar ni configurar la clase AgentEngineToolSandboxBackend directamente, ya que el método App.deep_agent() la inyecta automáticamente.
Nota
La clase AgentEngineToolSandboxBackend es una dependencia opcional y no se reexporta desde la raíz del paquete. Si necesita hacer referencia a ella directamente, impórtela explícitamente. El siguiente ejemplo muestra cómo importar la clase:
from agent_engine_sdk_langgraph.backends.tool_sandbox import AgentEngineToolSandboxBackend
Operaciones compatibles
Las operaciones de la clase AgentEngineToolSandboxBackend son invocadas automáticamente por el agente en tiempo de ejecución y no son llamadas directamente por los autores del agente. La clase AgentEngineToolSandboxBackend admite las siguientes operaciones, cada una expuesta al LLM como una herramienta filesystem_* o shell_execute correspondiente:
Operación | Descripción |
|---|---|
| Enumera los archivos y directorios en una ruta determinada. |
| Lee el contenido de un archivo. |
| Escribe contenido en un archivo. |
| Aplica una edición a un archivo existente. |
| Encuentra archivos que coinciden con un patrón glob. |
| Busca patrones dentro de los archivos. |
| Ejecuta un comando de shell en el entorno aislado. |
| Descarga archivos desde el entorno aislado al programa que realiza la llamada. |
Error Handling
El sistema backend clasifica todos los errores antes de mostrarlos al gráfico del agente para que este pueda decidir si reintentar la operación. La siguiente tabla muestra las posibles clasificaciones de errores y sus causas:
Clasificación | Ejemplos de causas |
|---|---|
Reintentar | Errores transitorios de red o de entrada y salida, como |
No se puede reintentar |
|
La plataforma elimina todas las rutas internas del espacio de trabajo de todos los mensajes de error antes de que se muestren al agente.
Filesystem Sandbox
Los agentes profundos operan dentro de un sistema de archivos aislado. El entorno aislado contiene las siguientes capas:
Espacio de trabajo editable (
WORKSPACE_DIR): Por defecto, utiliza el directorio/tmp/agent-workspace. Durante las sesiones de la zona de pruebas del agente, esta limita el acceso del agente a la rutaWORKSPACE_DIR/.sessions/<session-hash>/para que las sesiones concurrentes permanezcan aisladas. Utilice rutas relativas o rutas dentro del directorio/tmppara los archivos generados.Raíces de recursos de solo lectura (
READONLY_RESOURCE_ROOTS): Se rellenan a partir de la variable de entornoAGENTIC_AGENT_WORKDIRy el directorioskills/. Esta capa permite al agente leer archivosSKILL.mddentro y fuera del espacio de trabajo de cada sesión, de modo que pueda cargar contenido de habilidades bajo demanda.
Importante
No configure la variable de entorno WORKSPACE_DIR con la ruta del directorio de origen de su agente, como por ejemplo el directorio /app. Si configura la variable WORKSPACE_DIR con la ruta del directorio de origen de su agente, este hará que los archivos de habilidades sean inaccesibles durante la ejecución y generará un error Path escapes workspace sandbox.
Para cambiar el directorio del espacio de trabajo, configure la variable de entorno AGENTIC_AGENT_WORKDIR:
# .env AGENTIC_AGENT_WORKDIR=/app # Do NOT add: WORKSPACE_DIR=/app