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

# Ruta del archivo: scratch-plugin/cordis.yml
# 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.

ConceptoSignificado
scopeUnidad de registro dividida por agent; solo dos niveles, con estructura plana
scope keyIdentificador opaco del scope; un agent activo es la key de su propio scope
agent.ctxContexto con ámbito del agent; el registro tiene visibilidad de scope y su ciclo de vida está vinculado a ese scope
shadowingResolució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
restrictiontools.restrict filtra el conjunto de herramientas globales para un único scope; múltiples restrictions se combinan por intersección
lineageLos 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:

  1. isolate: { shell: true } hace que las instancias de Bash de group-a y group-b tengan ¿qué relación?
  2. ¿Los registros con ámbito se heredan a los subagents?
  3. ¿Qué problemas resuelven shadowing y restriction respectivamente?
Otras extensiones