Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

Construye un agente profundo

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.

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.

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.

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.

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 AgentEngineToolSandboxBackend como entorno aislado predeterminado.

  • Envuelve el LLM de nivel superior y todos los modelos SubAgent en la clase SecureWrappedLLM para 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.

El método App.deep_agent() acepta los siguientes parámetros:

Parameter
Tipo
Requerido
Descripción

llm

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 SecureWrappedLLM.

tools

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.

subagents

Lista

No

Una lista de instancias de la clase SubAgent. Cada atributo SubAgent.model debe ser una instancia LLM, no una cadena. Las referencias a modelos basadas en cadenas omiten la clase SecureWrappedLLM y se rechazan durante la validación.

skills

list[str]

No

Lista de rutas a directorios de habilidades. Cada directorio debe contener un archivo SKILL.md válido. Cada ruta debe ser un objeto str, no un objeto pathlib.Path. Para obtener más información sobre los archivos SKILL.md, consulte la sección de manifiestos de habilidades.

system_prompt

string

No

Instrucciones personalizadas del sistema para el agente profundo. Si se omiten, el agente utiliza el mensaje predeterminado de la biblioteca deepagents.

middleware

Lista

No

Middleware adicional que se ejecuta después del middleware predeterminado de recuperación de interrupciones y anidamiento duradero del SDK.

checkpointer

any

No

Puntero de control LangGraph para la persistencia del estado. Por defecto es app.checkpointer(). Pase None para deshabilitar el uso de puntos de control, o una instancia de BaseCheckpointSaver para usar un puntero de control personalizado.

store

any

No

El almacén LangGraph se utiliza para almacenar habilidades y otros datos compartidos.

backend

any

No

Backend para operaciones de sistema de archivos y shell. Por defecto, utiliza la clase AgentEngineToolSandboxBackend. Un backend personalizado omite la ruta de E/S auditada de la plataforma. Para obtener más información, consulte el backend de Tool Sandbox.

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()
@app.entrypoint
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.

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 atributo SubAgent.model debe ser una instancia de LLM y no una cadena. Los nombres de modelos de cadena omiten la clase SecureWrappedLLM y 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 clase AgentEngineToolSandboxBackend como 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.

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.

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.

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

name

Sí

El nombre de la habilidad. Debe coincidir exactamente con el nombre del directorio principal.

description

Sí

El LLM utiliza esta breve descripción para decidir cuándo invocar la habilidad. Las habilidades que no incluyen description son omitidas por la plataforma con una advertencia al iniciar el agente y no están disponibles para este.

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.

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"],
)

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

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

ls

Enumera los archivos y directorios en una ruta determinada.

read

Lee el contenido de un archivo.

write

Escribe contenido en un archivo.

edit

Aplica una edición a un archivo existente.

glob

Encuentra archivos que coinciden con un patrón glob.

grep

Busca patrones dentro de los archivos.

execute

Ejecuta un comando de shell en el entorno aislado.

download_files

Descarga archivos desde el entorno aislado al programa que realiza la llamada.

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 ConnectionError, OSError o TimeoutError.

No se puede reintentar

PolicyDeniedExceptionLa operación fue rechazada por la política de seguridad de la plataforma. El agente no puede volver a intentar la operación.

RuntimeErrorEl backend se utilizó fuera de un contexto de entorno aislado de agente válido, como en un script o prueba local. Este error evita bucles de reintento infinitos en caso de configuración incorrecta.

La plataforma elimina todas las rutas internas del espacio de trabajo de todos los mensajes de error antes de que se muestren al agente.

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 ruta WORKSPACE_DIR/.sessions/<session-hash>/ para que las sesiones concurrentes permanezcan aisladas. Utilice rutas relativas o rutas dentro del directorio /tmp para los archivos generados.

  • Raíces de recursos de solo lectura (READONLY_RESOURCE_ROOTS): Se rellenan a partir de la variable de entorno AGENTIC_AGENT_WORKDIR y el directorio skills/. Esta capa permite al agente leer archivos SKILL.md dentro 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