DeepSeek-Harness: Dienstisolation und Scopes
In diesem Abschnitt stellen wir vor, wie verschiedene Plugin-Gruppen verschiedene Instanzen desselben Dienstes sehen können.
Dahinter steckt Cordis'Service-IsolierungundAgent-Scope (scope)Mechanismus.
Service-Isolierung: isolate
cordis.yml unterstützt Service-Isolierung: Derselbe Dienst kann mehrere Instanzen haben, und verschiedene Plugin-Gruppen sehen unterschiedliche Instanzen.
Das Schlüsselwort istisolateKonfiguration, die mit dem Group-Plugin verwendet wird, um Plugins in Gruppen aufzuteilen.
Beispiel
# Definiere zwei Plugin-Gruppen group-a und group-b, die jeweils einen Shell-Dienst isolieren
- id: group-a
name: '@deepseek-ai/cordis-plugin-group'
group: true
isolate:
shell: true # Die Shell-Dienste in dieser Gruppe unabhängig instanziieren lassen
config:
- name: '@deepseek-ai/dsh-bash-local'
config:
timeoutMs: 5000 # Bash-Timeout von group-a: 5 Sekunden
- 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 # Bash-Timeout von group-b: 60 Sekunden
- name: './src/plugin-b.ts'
plugin-a und plugin-b sehen jeweils die Bash-Instanz innerhalb ihrer eigenen Gruppe, ohne sich gegenseitig zu beeinflussen.
Bash-Befehle von group-a laufen nach 5 Sekunden in einen Timeout, die von group-b nach 60 Sekunden; die beiden Seiten wissen nichts von der Existenz der jeweils anderen.
Warum Isolation erforderlich ist
Verschiedene Aufgaben können ganz unterschiedliche Anforderungen an dieselbe Fähigkeit haben.
Zum Beispiel möchten schnell interagierende Aufgaben, dass Bash schnell in einen Timeout läuft, während lang laufende Aufgaben genügend Zeit bekommen sollen.
Isolation ermöglicht es, denselben Dienst pro Gruppe zu konfigurieren und wirksam werden zu lassen, anstatt einen globalen Einheitsansatz zu verwenden.
Scope: scope
Scope ist eine Registrierungseinheit, die nach Agent aufgeteilt ist.
Ein Beitrag (Tool, Prompt-Segment, Variable, Einschränkung, Listener) ist entweder global oder gehört zu genau einem Scope-Schlüssel.
| Konzepte | Bedeutung |
|---|---|
| scope | Registrierungseinheiten nach Agent aufgeteilt; nur zwei Ebenen, mit flacher Struktur. |
| Scope-Schlüssel | Opaker Bezeichner eines Scopes; ein aktiver Agent ist der Schlüssel seines eigenen Scopes. |
| agent.ctx | Der Scope-Kontext des Agenten; die Registrierung hat Scope-Sichtbarkeit, und ihr Lebenszyklus ist ebenfalls an diesen Scope gebunden. |
| Überdeckung | Namensauflösung nach dem Most-specific-wins-Prinzip: scope-gebundene Tools/Segmente/Variablen ersetzen globale Elemente mit demselben Namen nur innerhalb ihres eigenen Scopes. |
| Einschränkung | tools.restrict filtert die globale Toolmenge für einen einzelnen Scope; mehrere Einschränkungen werden durch Schnittmengenbildung kombiniert. |
| Abstammung | Fakten zu Eltern-Kind-Beziehungen, die als Daten mitgeführt werden (parentSession, delegationDepth usw.), haben niemals Einfluss auf die Sichtbarkeit. |
Scope-gebundene Registrierungen werden nicht nach unten an Subagenten vererbt.
Das Verhalten von Teilbäumen wird durch Abstammungsdaten ausgedrückt, nicht durch die Scope-Struktur.
Shadowing: Die spezifischste Variante gewinnt.
Shadowing ist ein Mechanismus zum Anpassen von Persona- und Tool-Varianten pro Agent.
Ein bereichsbezogenes Tool ersetzt das globale Tool mit demselben Namen nur innerhalb dieses Bereichs; andere Agenten sehen weiterhin die globale Version.
Restriktion: Filtern globaler Tools
Restriktion verwendet tools.restrict, um die globale Tool-Menge für einen einzelnen Bereich zu filtern.
Herausgefilterte globale Tools gelangen weder in den Prompt noch dürfen sie ausgeführt werden, wodurch sie nicht von nicht existierenden Tools zu unterscheiden sind.
Mit anderen Worten: Die Restriktion macht Agenten in einem Bereich vollständig "unfähig, bestimmte globale Tools zu sehen", anstatt sie zum Aufrufzeitpunkt abzulehnen.
Zusammenfassung Selbsttest
isolate instanziiert denselben Dienst pro Gruppe, scope teilt die Registrierung pro Agent auf, während Shadowing und Restriktion jeweils gleichnamige Ersetzung und globales Filtern implementieren.
Testen Sie sich selbst:
- In welcher Beziehung stehen bei isolate: { shell: true } die Bash-Instanzen von group-a und group-b?
- Werden bereichsbezogene Registrierungen von Subagenten geerbt?
- Welche Probleme lösen Shadowing und Restriktion jeweils?