Wie man riesige Prompts aufteilt, um Token-Verschwendung bei Agenten zu reduzieren
Eine monolithische Architektur, die alle möglichen Richtlinien und Tools in einen einzigen System-Prompt presst, stößt schnell an ihre Grenzen. Schon bei etwas längeren Konversationen vergisst der Agent die Anweisungen, die mitten im Prompt standen. Da bei jeder Anfrage zigtausend Tokens redundant übertragen werden, schießen die Inferenzkosten in die Höhe und man muss lange warten, bis das erste Token generiert wird.
In der Praxis wird dieses Problem durch eine schrittweise Kontextlade-Struktur gelöst, die auf der offenen Spezifikation von agentskills.io basiert. Dabei handelt es sich um einen Ansatz, bei dem die entsprechenden Skills nur im Bedarfsfall geladen werden, um Tokens zu sparen.
Kriterien für die Aufteilung in unabhängige Markdown-Skill-Dateien
Monolithische System-Prompts sollten anhand von Domänengrenzen, Tool-Ausführungsrechten und der Ausführungshäufigkeit aufgeteilt werden. Um zu verhindern, dass sich Skills bei der Einbettungs-Ähnlichkeitssuche gegenseitig behindern, sollten in einer einzigen Sitzung maximal 3 Skills gleichzeitig aktiv sein.
Am Anfang der ausgelagerten Skill-Datei sollte ein YAML-Frontmatter stehen, das einen Identifier (der nur aus Bindestrichen, englischen Kleinbuchstaben und Zahlen besteht) sowie den Zweck der Ausführung angibt.
`yaml
name: backend-api-generator
description: Generates Spring Boot REST API controller and service boilerplate code. Use when the user asks to create API endpoints, build REST controllers, or define DTO mappings for backend services.
when_to_use:
- User requests new REST API endpoint creation
- User provides database schema and asks for controller layer implementation
- Do NOT use for: database migration SQL, frontend component generation
allowed-tools:
- read_file
- write_file
- list_directory
effort: medium
`
Der Prozess zum Erstellen einer schrittweisen Ladestruktur ist einfach:
- Bei der Initialisierung des Agenten werden nur die YAML-Frontmatter-Metadaten aller Skills im Verzeichnis (ca. 100 Tokens pro Skill) in den Prompt geladen.
- Wenn eine Benutzeranfrage eingeht, wird deren semantische Ähnlichkeit mit den Skill-Beschreibungen verglichen, um nur den benötigten Skill-Inhalt dynamisch abzurufen.
- In der Ausführungsphase werden gemäß den Anweisungen im Hauptteil die erforderlichen Hilfsskripte ausgeführt und nur die Ergebnisse in den Kontext einbezogen.
Wenn man eine monolithische Struktur, die ständig 15.000 bis 30.000 Tokens belegt, auf eine SKILL.md-Struktur mit Lazy Loading umstellt, sinkt der anfängliche Token-Overhead um über 90 %. Basierend auf internen Testdaten von Anthropic lässt sich die p95-Latenz um 12 % bis 40 % verkürzen und der durchschnittliche Token-Verbrauch pro Konversation um 29,6 % senken.
Interne Einschränkungen zur Verhinderung von Kontextkontamination
Wenn mehrere Skills nacheinander geladen werden, verbleiben die Anweisungen des vorherigen Skills oft in der Sitzung und verfälschen die nächste Aufgabe. Bei risikoreichen Prüfungen oder Vorgängen, die viele Protokolle hinterlassen, sollte im YAML-Frontmatter eine Unterkontext-Verzweigung (context: fork) eingerichtet werden, um eine Isolierung auf Prozessebene zu erreichen.
`yaml
name: security-vulnerability-auditor
description: Audits backend source code for OWASP top 10 security flaws. Use when auditing code security or checking for SQL injection vulnerabilities.
context: fork
model: claude-sonnet-4-20250514
effort: high
`
Auch die klare Definition von Ein- und Ausgabedatenverträgen (Data Contracts) darf nicht fehlen.
- Durch die Deklaration von Argument-Strukturen und der Liste erlaubter Tools (
allowed-tools) in den YAML-Metadaten werden beliebige Bash-Ausführungen oder unüberlegte Netzwerkaufrufe verhindert.
- Im Hauptteil werden Regeln für ein reines JSON-Ausgabeschema ohne Markdown-Wrapping festgelegt.
- Die Anweisungen werden so eingeschränkt, dass nur das Endergebnis an die Konversationssitzung zurückgegeben wird.
`markdown
Output Schema Contract
All responses must strictly adhere to the following JSON structure without markdown wrapping:
{
"status": "SUCCESS" | "FAILED",
"generated_files": [
{
"path": "string",
"content": "string"
}
],
"error_message": "string | null"
}
`
Die Isolierung in einen Subprozess verhindert, dass Tool-Aufrufprotokolle die Hauptsitzung überfluten. Da die Hauptkonversationssitzung sauber bleibt, sinkt auch die Fehlerwahrscheinlichkeit beim Datenaustausch zwischen Sub-Agenten.
Entwicklung von Schutzmechanismen zur Blockierung von Endlosschleifen
Wenn Anforderungen unklar sind oder Tool-Aufrufe wiederholt fehlschlagen, gerät der Agent in eine Endlosschleife von Wiederholungen. Das ist der Moment, in dem innerhalb weniger Minuten API-Kosten in Höhe von Dutzenden von US-Dollar verbrannt werden. Wenn man am Ende des Skill-Dateitextes eine schrittweise statische Überprüfungscheckliste (Verification Checklist) einfügt, führt der Agent vor Beendigung der Aufgabe eine Selbstüberprüfung durch.
`markdown
Execution & Self-Testing Protocol
Before declaring the task finished, you MUST sequentially execute the following verification checklist:
- [Pre-check] Verify that all required input parameters are present. If mandatory arguments are missing, STOP immediately and ask the developer for input.
- [Generation] Write the requested implementation code.
- [Syntax Verification] Check the written code for missing imports, unresolved symbols, and syntax errors.
- [Self-Correction] If a syntax error is identified, attempt correction ONCE. Do not re-run the file write tool more than twice for the same error.
`
Auch das Schreiben eines Circuit Breakers, der die Schleife physisch unterbricht, ist unkompliziert:
- Oben im Skill wird die maximale Anzahl von Tool-Aufrufen (
MAXIMUM_TOOL_CALL_LIMIT: 3) angegeben.
- Es wird eine Einschränkung formuliert, dass bei zweimaligem aufeinanderfolgendem Auftreten desselben Fehlercodes keine weiteren Tool-Aufrufe mehr getätigt werden.
- Es wird angewiesen, die Ausführung bei Erreichen der Abbruchbedingung sofort zu stoppen und ein Benachrichtigungsformat auszugeben.
`markdown
[SKILL EXECUTION HALTED]
Skill Name: backend-api-generator
Failure Reason: [Brief error description]
Attempts Made: [Number of retries]
Suggested Action: [Action required by backend developer]
`
Bei riskanten Aktionen wie dem Löschen von Dateien oder dem Drop von Datenbanken ist es sicherer, die Option disable-model-invocation: true zu aktivieren. Damit wird verhindert, dass der Agent diese eigenständig aufruft, und es wird eingeschränkt, dass sie nur ausgeführt werden, wenn der Entwickler einen Slash-Befehl (/skill-name) direkt eingibt.
Versionsverwaltung und Bereitstellung in teamweiten Repositories
Wenn Teamkollegen gemeinsam Skills schreiben, sollten sie der Standard-Verzeichnisarchitektur von agentskills.io folgen, um Konflikte mit Markdown-Dateien zu vermeiden. Im Hauptordner werden Hauptteil, CLI-Skripte, Referenzdokumente und statische Vorlagenressourcen klar voneinander getrennt platziert.
| Verzeichnis- und Dateipfad |
Rolle |
Erstellungsrichtlinie |
| skills/api-generator/SKILL.md |
Pflicht-Einstiegsdokument |
Enthält YAML-Frontmatter und zentrale Prozessrichtlinien (innerhalb von 500 Zeilen) |
| skills/api-generator/scripts/ |
Ordner für ausführbaren Code |
Speicherort für Python/Bash-CLI-Skripte, die der Agent bei Bedarf aufruft |
| skills/api-generator/references/ |
Ordner für Hilfsreferenzdokumente |
Enthält umfangreiche API-Spezifikationen, DB-Schemata und Styleguides |
| skills/api-generator/assets/ |
Ordner für statische Ressourcen-Templates |
Speichert generierten Code-Boilerplate und Konfigurationsdateibeispiele |
Zur Überprüfung der Skill-Qualität wird das Evaluierungs-Framework promptfoo verwendet.
- Im Dateinamen
promptfooconfig.yaml werden der Pfad zur zu testenden SKILL.md und das LLM-Modell angegeben.
- Es werden Testfälle geschrieben, die das Intent-Matching und die Einhaltung des JSON-Formats überprüfen.
- Im Terminal wird der Befehl
npx promptfoo@latest eval ausgeführt, um die Einhaltung der Richtlinien zu messen.
`yaml
description: "Backend Agent Skills Validation Suite"
prompts:
- "file://skills/api-generator/SKILL.md"
providers:
- id: "anthropic:messages:claude-3-5-sonnet-20241022"
tests:
- description: "Test automatic skill activation for REST API generation query"
vars:
user_query: "Create a Spring Boot REST Controller for User Management."
assert:
- type: icontains
value: "backend-api-generator"
- type: javascript
value: "output.includes('@RestController') && output.includes('ResponseEntity')"
`
Für die Bereitstellung wird eine Trunk-Based-Development-Strategie mit kurzlebigen Branches und Git-Tags (v1.2.0) kombiniert. Wenn sich ein Agent in der Produktion fehlerhaft verhält, kann man mit dem Befehl git checkout tags/v1.1.0 -b hotfix/rollback sofort auf den Stand des vorherigen Tags zurückrollen.