LangChain BlogActualizado el

Renovación de skills en Deep Agents

Puntos clave Ahora puedes vincular tools a skills. Los esquemas de las tools permanecen fuera del contexto hasta que el agente lee la skill a la que están vinculados, y en los modelos que aceptan nuev

Only a skill's name and description are always in context. The agent reads the instructions on demand, and loads scripts, references, and assets only when needed.
Fuente de la imagen · LangChain Blog

Puntos clave

  • Ahora puedes vincular tools a skills. Los esquemas de las tools permanecen fuera del contexto hasta que el agente lee la skill a la que están vinculados, y en los modelos que aceptan nuevas tools a mitad de conversación, añadirlas mantiene intacta la caché del prompt.
  • Las apps pueden fijar skills en tiempo de ejecución, de modo que las instrucciones están en el contexto antes de la primera llamada al modelo, sin read_file viajes de ida y vuelta.
  • Las skills pueden recargarse a mitad de hilo, de modo que un agente de larga duración incorpora skills añadidas, editadas o eliminadas sin iniciar un nuevo hilo.

Las skills son una de las mejores formas de dotar de conocimiento de dominio a un agente. Una skill es una carpeta de instrucciones, scripts y archivos de referencia que enseña a un agente cómo hacer cosas, como preparar una reunión con un cliente o revisar transcripciones de llamadas como lo haría tu equipo de ventas. Agent Skills es un estándar abierto que funciona con cualquier modelo y está soportado por docenas de productos de agentes. Tampoco necesitas ser técnico para escribir una: en esencia, una skill es un archivo markdown.

Las skills funcionan gracias a la divulgación progresiva. El agente ve al principio solo el nombre y la descripción de cada skill, y lee las instrucciones completas solo cuando una tarea las necesita. Eso mantiene el contexto pequeño, y la ingeniería de contexto es la clave para construir agentes eficaces.

A medida que se escala el uso, lo que los equipos necesitan de las skills está cambiando. Estamos viendo registros empresariales de skills crecer hasta miles de skills, compartidas entre equipos y agentes. Hemos renovado el soporte de skills en Deep Agents para responder a algunas peticiones comunes:

  • Vinculación de tools a skills: las tools vinculadas a una skill se cargan solo cuando el agente lee esa skill.
  • Skills fijadas: cuando un usuario solicita explícitamente una skill, como /meeting-prep, tu app puede cargarla antes de la siguiente llamada al modelo.
  • Recarga de skills: un hilo de larga duración puede incorporar skills nuevas o modificadas sin empezar de cero.

Cómo funcionan las skills

Una skill es un directorio con un SKILL.md archivo: frontmatter YAML con un name y description, seguido de las instrucciones que sigue el agente. Una skill también puede incluir archivos de soporte bajo scripts/, references/y assets/ (spec).

Only a skill's name and description are always in context. The agent reads the instructions on demand, and loads scripts, references, and assets only when needed.
Solo el nombre y la descripción de una skill están siempre en el contexto. El agente lee las instrucciones a demanda y carga scripts, referencias y assets solo cuando son necesarios.

A lo largo de esta publicación usaremos nuestro agente GTM como ejemplo recurrente. Está construido sobre Deep Agents, y su biblioteca de más de 50 skills cubre el trabajo recurrente de un representante de ventas, como meeting-prep, call-transcriptsy competitive-intel-card.

Las skills se cargan en tres niveles:

  1. Descubrimiento. Al arrancar, el agente ve el name y description de cada skill en su prompt de sistema.
  2. Activación. Cuando una tarea coincide con una skill, el agente lee el SKILL.md completo con read_file.
  3. Ejecución. El agente sigue las instrucciones y lee scripts o archivos de referencia solo cuando estos los requieren.
The agent's context grows only by what the task needs: every skill's name and description at startup, then one skill's instructions, then one reference file.
El contexto del agente crece solo con lo que la tarea necesita: el nombre y la descripción de cada skill al arrancar, luego las instrucciones de una skill, luego un archivo de referencia.

Hasta que se usa una skill, cuesta una línea en el prompt de sistema, por lo que una biblioteca puede contener referencias a una abundancia de skills sin saturar el contexto. Ahora veamos las mejoras que hicimos en Deep Agents.

Vincular herramientas a skills

Las skills a menudo le indican a un agente cómo usar herramientas específicas, y algunas herramientas solo funcionan bien una vez que el agente ha leído esas instrucciones. Hasta ahora, las skills y las herramientas se mostraban por separado. Podías mantener los esquemas de herramientas fuera del contexto con tool search, pero nada vinculaba una herramienta a la skill que la explica: el agente podía encontrar y llamar a una herramienta sin leer su skill, o leer la skill y aun así tener que buscar sus herramientas.

Ahora puedes vincular herramientas a una skill, por lo que una skill y sus herramientas se revelan juntas. Una herramienta vinculada no se agrega al contexto hasta que el agente lee su skill, y una llamada a ella antes de eso falla como herramienta desconocida. Eso mantiene el contexto ligero, y significa que el agente ha leído cómo usar una herramienta antes de poder llamarla. En nuestro agente GTM, call-transcripts se explica cómo buscar llamadas y leer transcripciones, por lo que es el lugar natural para vincular esas herramientas.

Enumera las herramientas en el frontmatter de la skill bajo metadata.include_tools:

call-transcripts SKILL.md frontmatter listing include_tools: search_calls get_transcript

Pase esas herramientas a SkillsMiddleware en lugar de al agente:

Python: create_deep_agent with SkillsMiddleware(tools=[search_calls, get_transcript])
Reading call-transcripts unlocks search_calls and get_transcript. They arrive in a new system message, so the cached prefix above it stays unchanged.
Leer call-transcripts desbloquea search_calls y get_transcript. Llegan en un nuevo mensaje de sistema, por lo que el prefijo cacheado encima de él permanece sin cambios.

Añadir herramientas a mitad de una conversación solía significar editar la lista de herramientas de la solicitud, lo que invalida la caché del prompt. Anthropic y OpenAI ahora permiten que los modelos más recientes acepten herramientas a mitad de la conversación, así que en esos modelos, Deep Agents añade las herramientas vinculadas de una habilidad justo después de leer la habilidad y el prefijo cacheado permanece intacto (Anthropic y OpenAI documentación de integración). En otros modelos, las herramientas se añaden a la solicitud como antes.

Una lista cubre la mayoría de las habilidades. Para un mayor control, una habilidad puede listar una etiqueta en lugar de nombres de herramientas, y una función que pase a SkillsMiddleware convierte cada etiqueta en herramientas. Eso le permite:

  • Divulgar un grupo completo de herramientas, como todas las herramientas de un servidor MCP, bajo un solo nombre, sin listar cada herramienta en la habilidad.
  • Restringir herramientas según permisos en tiempo de ejecución. La función recibe el runtime del grafo, por lo que puede verificar quién es el usuario y devolver solo las herramientas que tiene permitido usar.

Aquí, call-transcripts obtiene todas las herramientas del servidor MCP de llamadas, y pipeline-forecast obtiene herramientas de CRM, pero solo los gerentes pueden actualizar el pronóstico:

SKILL.md frontmatter for call-transcripts (include_tools: call_tools) and pipeline-forecast (include_tools: crm_tools)
Python: resolve_skill_tools returns every calls MCP tool for call_tools, and update_forecast only for managers

Consulte Add tools to skills para más información.

Habilidades fijadas

A veces el usuario ya sabe qué habilidad quiere. En nuestro agente GTM, un representante puede escribir /meeting-prep for my Acme call tomorrow. Sin fijación, el modelo solo ve la descripción de la habilidad y tiene que leerla. Eso añade un viaje de ida y vuelta antes de que comience el trabajo, y no se garantiza que el modelo cargue la habilidad correcta. Con habilidades fijadas, su aplicación encuentra los nombres de las habilidades en el mensaje (o los analiza desde una interfaz de usuario) y los pasa en pinned_skills, y el middleware añade las instrucciones de cada habilidad a la conversación antes de la siguiente llamada al modelo. Deep Agents no analiza los mensajes por sí mismo, así que usted elige la sintaxis:

Typing /meeting-prep names the skill, so the app can pin it for the agent's next model call.
Escribir /meeting-prep nombra la habilidad, de modo que la aplicación puede fijarla para la próxima llamada al modelo del agente.
Python: parse /meeting-prep from the message and pass it as pinned_skills to agent.invoke
A pinned skill's instructions are already in the conversation, so the agent starts the work on model call 1 instead of model call 2.
Las instrucciones de una habilidad fijada ya están en la conversación, por lo que el agente comienza el trabajo en la llamada al modelo 1 en lugar de en la llamada al modelo 2.

Eso reduce la latencia y hace el comportamiento más predecible: las instrucciones están garantizadas en el contexto, y las herramientas vinculadas a una skill fijada vienen con ella. Cada skill fijada se añade una vez como un mensaje etiquetado, por lo que los mensajes anteriores nunca cambian, la caché del prompt sigue siendo válida y una interfaz de chat puede mostrar la skill como una etiqueta en lugar de su texto completo.

Recargar skills a mitad de un hilo

Las skills se cargan al inicio de cada hilo y se mantienen en el estado del agente, por lo que cada turno posterior reutiliza el mismo conjunto de skills. Ahora puedes invalidar esta lista estableciendo skills_metadata en None al invocar al agente. Si un compañero de equipo añade una competitive-intel-card skill a la biblioteca, la aplicación puede optar por invalidar la lista de skills y la siguiente ejecución reescaneará cada fuente:

Python: agent.invoke with skills_metadata set to None
Setting skills_metadata to None makes the next run rescan the skill library and pick up a skill added since the last run.
Establecer skills_metadata en None hace que la siguiente ejecución reescanee la biblioteca de skills y detecte una skill añadida desde la última ejecución.

Una recarga que encuentra nuevas skills cambia el system prompt, lo que invalida la caché del prompt. Para un hilo que ha estado inactivo, ese costo normalmente ya está pagado: las cachés de los proveedores suelen expirar entre minutos y una hora de inactividad (Anthropic, OpenAI), por lo que la caché está fría para cuando el representante regresa.

Como el reinicio es simplemente una entrada de la ejecución, también puedes entregar el control a los usuarios. Por ejemplo, un /reload comando en el lado del cliente:

También puedes reiniciar desde update_state o desde middleware, de modo que tu aplicación controle cuándo se produce una recarga de skills. Consulta Reload skills.

Get started

Las skills son el mecanismo estándar de la industria para dotar a un agente de conocimiento organizado de dominio. Estas actualizaciones las hacen más fáciles de ejecutar a escala: las herramientas se cargan solo cuando una skill las necesita, las skills que un flujo de trabajo necesita se cargan por adelantado y los hilos de larga duración se mantienen actualizados a medida que cambia tu biblioteca. Y como las skills son un estándar abierto, las que escribe tu equipo funcionan en todos los modelos y agentes.

Todo esto está disponible en la última deepagents. Lea la documentación de skills para empezar, y cuéntenos qué piensa a través de los issues de GitHub, el foro, o en X.

Agradecimientos

Gracias a Rich Scarrott por liderar el desarrollo de estas nuevas funciones y a Hunter Lovell por la revisión de la función y del blog!

Fuente original

LangChain Blog

Notas sobre el contenido

La publicación original y los derechos pertenecen a la fuente.

Traducción automática · Consulte el original