DeepSeek Harness Aislamiento de servicios y ámbitos
En este capítulo veremos cómo, para un mismo servicio, diferentes grupos de plugins pueden ver distintas instancias.
Detrás de esto está el mecanismo de Cordis deaislamiento de servicios (service isolation)yámbito de agent (scope).
Aislamiento de servicios: isolate
cordis.yml admite aislamiento de servicios: un mismo servicio puede tener varias instancias, y diferentes grupos de plugins ven diferentes instancias.
La palabra clave esisolateconfiguración, combinada con el plugin group para dividir los plugins en grupos.
Instancias
# Define dos grupos de plugins group-a y group-b, cada uno con un servicio shell aislado
- id: group-a
name: '@deepseek-ai/cordis-plugin-group'
group: true
isolate:
shell: true # Hace que el servicio shell dentro de cada grupo se instancie de forma independiente
config:
- name: '@deepseek-ai/dsh-bash-local'
config:
timeoutMs: 5000 # El timeout de Bash de group-a es de 5 segundos
- name: './src/plugin-a.ts'
- id: group-b
name: '@deepseek-ai/cordis-plugin-group'
group: true
isolate:
shell: true
config:
- name: '@deepseek-ai/dsh-bash-local'
config:
timeoutMs: 60000 # El timeout de Bash de group-b es de 60 segundos
- name: './src/plugin-b.ts'
plugin-a y plugin-b ven cada uno la instancia de Bash de su propio grupo, sin afectarse mutuamente.
Los comandos Bash de group-a tienen un timeout de 5 segundos, los de group-b de 60 segundos, y ninguno sabe de la existencia del otro.
Por qué se necesita aislamiento
Diferentes tareas pueden tener necesidades completamente distintas de la misma capacidad.
Por ejemplo, las tareas de interacción rápida prefieren que Bash expire rápido, mientras que las tareas largas necesitan tiempo suficiente.
El aislamiento permite que un mismo servicio se configure y se aplique por grupos, en lugar de un enfoque único global.
Ámbito: scope
El scope es la unidad de registro dividida por agent (agente).
Una contribución (herramienta, segmento de prompt, variable, restricción, listener) es global o pertenece exactamente a un scope key.
| Concepto | Significado |
|---|---|
| scope | Unidad de registro dividida por agent; solo dos niveles, con estructura plana |
| scope key | Identificador opaco del scope; un agent activo es la key de su propio scope |
| agent.ctx | Contexto con ámbito del agent; el registro tiene visibilidad de scope y su ciclo de vida está vinculado a ese scope |
| shadowing | Resolución de nombres donde gana el más específico: las herramientas / fragmentos / variables con ámbito solo reemplazan a los homónimos globales dentro de su propio scope |
| restriction | tools.restrict filtra el conjunto de herramientas globales para un único scope; múltiples restrictions se combinan por intersección |
| lineage | Los hechos de relación padre-hijo transportados como datos (parentSession, delegationDepth, etc.) nunca afectan la visibilidad |
Los registros con ámbito no se heredan hacia abajo a los subagents.
El comportamiento del subárbol se expresa mediante datos de lineage, no mediante la estructura de scope.
shadowing: gana el más específico
shadowing es el mecanismo para personalizar la persona y las variantes de herramientas por agent.
Una herramienta con ámbito solo reemplaza a la herramienta global homónima dentro de ese scope; los demás agents siguen viendo la versión global.
restriction: filtrar herramientas globales
restriction usa tools.restrict para filtrar el conjunto de herramientas globales para un único scope.
Las herramientas globales filtradas no entran en el prompt y se niegan a ejecutarse, indistinguibles de herramientas inexistentes.
En otras palabras, restriction hace que los agents en un scope no puedan "ver" en absoluto ciertas herramientas globales, en lugar de rechazarlas al momento de la llamada.
Resumen y autoevaluación
isolate permite que un mismo servicio se instancie por grupos, scope divide el registro por agent, y shadowing y restriction implementan respectivamente el reemplazo de homónimos y el filtrado global.
Pruébate:
- isolate: { shell: true } hace que las instancias de Bash de group-a y group-b tengan ¿qué relación?
- ¿Los registros con ámbito se heredan a los subagents?
- ¿Qué problemas resuelven shadowing y restriction respectivamente?