|
| 1 | +--- |
| 2 | +title: "Optimierung der OpenSpec-Leistung in verschiedenen Phasen mit verschiedenen Agenten: HagiCode Praxiszusammenfassung" |
| 3 | +date: 2026-05-08 |
| 4 | +tags: [OpenSpec, AI, Agent, Prompt Engineering, HagiCode, Workflow-Optimierung] |
| 5 | +--- |
| 6 | + |
| 7 | +## Optimierung der OpenSpec-Leistung in verschiedenen Phasen mit verschiedenen Agenten: HagiCode Praxiszusammenfassung |
| 8 | + |
| 9 | +> Generische Prompts können den spezifischen Anforderungen verschiedener Entwicklungsphasen nicht gerecht werden. Durch phasenspezifische Agenten und ein parametrisiertes Template-System kann die KI in jedem Schritt hochwertige Inhalte liefern. |
| 10 | +
|
| 11 | +## Hintergrund |
| 12 | + |
| 13 | +OpenSpec ist ein antriebsgesteuertes Entwicklungssystem, das die Erstellung, Prüfung und Implementierung technischer Vorschläge durch einen strukturierten Workflow verwaltet. Die Idee an sich ist gut, aber in der praktischen Anwendung haben wir festgestellt, dass ein einzelner generischer KI-Prompt deutliche Probleme aufweist. |
| 14 | + |
| 15 | +Die Explore-Phase fehlt an Kontextverankerung, die KI-Exploration weicht leicht vom Vorschlagsbereich ab; die Artefakterzeugungsqualität ist instabil, design.md fehlen visuelle Elemente, proposal.md fehlen Codeänderungstabellen, tasks.md enthalten sogar Git-Operationen, die nicht enthalten sein sollten; Verantwortungsgrenzen sind verschwommen, es ist unklar, welche Inhalte verschiedenen Dokumenttypen enthalten sollten; Prompts fehlen Flexibilität und können das KI-Verhalten nicht dynamisch an verschiedene Szenarien anpassen. |
| 16 | + |
| 17 | +Diese Probleme wirken sich direkt auf die Effizienz und Ausgabequalität des OpenSpec-Workflows aus. Eigentlich gibt es keinen anderen Weg, als die Prompt-Templates manuell zu ändern. Dieser Artikel ist eine Aufzeichnung aus dieser Zeit. |
| 18 | + |
| 19 | +## Über HagiCode |
| 20 | + |
| 21 | +Die in diesem Artikel vorgestellte Lösung stammt aus unserer praktischen Erfahrung im [HagiCode](https://hagicode.com)-Projekt. HagiCode ist ein KI-gesteuerter Code-Assistent, und während der Entwicklung nutzen wir extensiv den OpenSpec-Workflow zur Verwaltung technischer Vorschläge. Die in diesem Artikel vorgestellte Agent-Schichtungsstrategie ist genau die Optimierungslösung, die wir aus der praktischen Nutzung abgeleitet haben. |
| 22 | + |
| 23 | +Wenn Sie diese Lösung als wertvoll empfinden, bedeutet das, dass unsere technische Praxis recht gut ist – HagiCode selbst verdient ebenfalls Beachtung. |
| 24 | + |
| 25 | +## OpenSpec-Workflow-Analyse |
| 26 | + |
| 27 | +Das OpenSpec-System umfasst mehrere Kernphasen, jede mit spezifischen Zielen und Randbedingungen. Das Verständnis der Verantwortungsgrenzen dieser Phasen ist die Grundlage für die Entwicklung einer effektiven Agent-Strategie. |
| 28 | + |
| 29 | +``` |
| 30 | +┌─────────────────────────────────────────────────────────────────────┐ |
| 31 | +│ OpenSpec-Workflow-Phasen │ |
| 32 | +├─────────────────────────────────────────────────────────────────────┤ |
| 33 | +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ |
| 34 | +│ │ Explore │ -> │ New │ -> │ FF │ -> │ Apply │ │ |
| 35 | +│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ |
| 36 | +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ |
| 37 | +│ │ Archive │ │ Sync │ │ Verify │ │ Status │ │ |
| 38 | +│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ |
| 39 | +└─────────────────────────────────────────────────────────────────────┘ |
| 40 | +``` |
| 41 | + |
| 42 | +Die Ziele jeder Phase unterscheiden sich vollständig: Die Explore-Phase erfordert eine Denkhaltung, konzentriert auf die Informationssammlung; die New-Phase soll auf die Bedarfsanalyse und Lösungsentwicklung fokussieren; die FF-Phase erstellt Artefakte massenhaft in Abhängigkeitsreihenfolge; die Apply-Phase verwandelt Vorschläge in tatsächlichen Code. Dieselbe Prompt-Vorlage für diese sehr unterschiedlichen Aufgaben einzusetzen, ist offensichtlich nicht angemessen. |
| 43 | + |
| 44 | +## Prompt-Systemarchitektur |
| 45 | + |
| 46 | +OpenSpec nutzt ein templatbasiertes Prompt-System, was die technische Grundlage für die Agent-Schichtung bietet. Die Template-Dateien verwenden das `.hbs`-Format (Handlebars/Scriban), zusammen mit `.json`-Metadatendateien zur Definition von Parametern und Validierungsregeln, und unterstützen zweisprachigen Chinesisch-Englisch-Betrieb. |
| 47 | + |
| 48 | +Die zentrale Entwurfsentscheidung ist die `PromptScenario`-Enumeration, die verschiedene Phasen-definierte Prompt-Szenarien festlegt: |
| 49 | + |
| 50 | +```csharp |
| 51 | +public enum PromptScenario |
| 52 | +{ |
| 53 | + OpenspecV1Explore, // Erkundungsphase |
| 54 | + OpenspecV1New, // Neuer Vorschlag |
| 55 | + OpenspecV1Ff, // Schnelle Generierung |
| 56 | + OpenspecV1Apply, // Änderungen anwenden |
| 57 | + OpenspecV1Archive // Archivieren |
| 58 | +} |
| 59 | +``` |
| 60 | + |
| 61 | +Jedes Szenario verfügt über eine entsprechende unabhängige Template-Datei, wie beispielsweise `openspec-v1-explore.zh-CN.hbs` und `openspec-v1-ff.zh-CN.hbs`, die es ermöglicht, phasenspezifische Randbedingungen und Anleitungen einzufügen. |
| 62 | + |
| 63 | +## Parametrisiertes Prompt-Laden |
| 64 | + |
| 65 | +Die Implementierung der dynamischen Parameterinjektion ist der Kern des gesamten Systems. Der `FilePromptProvider` ist verantwortlich für das Laden von Prompts basierend auf Szenarien und Parametern: |
| 66 | + |
| 67 | +```csharp |
| 68 | +public async Task<string> GetOpenspecV1FfPromptAsync( |
| 69 | + string changeName, |
| 70 | + string changeDescription, |
| 71 | + string locale = "en-US", |
| 72 | + string? planningDirectionInstructions = null, |
| 73 | + CancellationToken cancellationToken = default) |
| 74 | +{ |
| 75 | + var parameters = new Dictionary<string, object> |
| 76 | + { |
| 77 | + { "planningDirectionInstructions", |
| 78 | + ResolvePlanningDirectionInstructions(locale, planningDirectionInstructions) } |
| 79 | + }; |
| 80 | + |
| 81 | + if (!string.IsNullOrWhiteSpace(changeName)) |
| 82 | + { |
| 83 | + parameters["changeName"] = changeName; |
| 84 | + } |
| 85 | + |
| 86 | + return await GetPromptWithParametersAsync( |
| 87 | + PromptScenario.OpenspecV1Ff, |
| 88 | + locale, |
| 89 | + cancellationToken, |
| 90 | + parameters); |
| 91 | +} |
| 92 | +``` |
| 93 | + |
| 94 | +Dieser Ansatz ermöglicht es uns, zur Laufzeit dynamisch Parameter wie `changeName` und `planningDirectionInstructions` zu injizieren, ohne die Template-Datei selbst ändern zu müssen. |
| 95 | + |
| 96 | +## Dynamische Konfiguration der Planungsrichtung |
| 97 | + |
| 98 | +HagiCode implementiert ein flexibles Planungsrichtungssystem, das es den Benutzern ermöglicht, für jede Generierung eine andere Richtung zu wählen. Jede Richtung verfügt über eine unabhängige ID, Beschreibung und Prompt-Fragment: |
| 99 | + |
| 100 | +```csharp |
| 101 | +public static class ProposalPlanningDirections |
| 102 | +{ |
| 103 | + private static readonly ProposalPlanningDirectionDefinition[] Catalog = |
| 104 | + [ |
| 105 | + new( |
| 106 | + ExploreId, |
| 107 | + "Erkundungsmodus", |
| 108 | + DefaultEnabled: true, |
| 109 | + EnglishPromptFragment: |
| 110 | + "- Erkundungsmodus: Füge eine explizite Erkundungsrunde hinzu...", |
| 111 | + ChinesePromptFragment: |
| 112 | + "- 探索模式:在定稿工件之前增加明确的探索阶段..."), |
| 113 | + // ... change-map, flowchart, prototype, architecture, sequence |
| 114 | + ]; |
| 115 | + |
| 116 | + public static NormalizedProposalPlanningDirections Normalize( |
| 117 | + bool? enableExploreMode, |
| 118 | + IReadOnlyList<PlanningDirectionOptionDto>? planningDirections) |
| 119 | + { |
| 120 | + // Standardkonfiguration und benutzerdefinierte Konfiguration zusammenführen |
| 121 | + } |
| 122 | +} |
| 123 | +``` |
| 124 | + |
| 125 | +Unterstützte Richtungen umfassen: `explore` (Erkundungsmodus), `change-map` (Änderungskarte), `flowchart` (Interaktionsflussdiagramm), `prototype` (UI-Prototyp), `architecture` (Architekturdiagramm), `sequence` (API-Sequenzdiagramm). Benutzer können diese Richtungen nach Belieben aktivieren oder deaktivieren, und das System generiert dynamisch entsprechende Prompt-Anweisungsblöcke. |
| 126 | + |
| 127 | +In Handlebars-Templates werden bedingte Anweisungen verwendet, um diese Anweisungen einzufügen: |
| 128 | + |
| 129 | +```handlebars |
| 130 | +{{#if planningDirectionInstructions}} |
| 131 | +## Planungsrichtung für diese Generierung |
| 132 | +
|
| 133 | +{{{planningDirectionInstructions}}} |
| 134 | +{{/if}} |
| 135 | +``` |
| 136 | + |
| 137 | +## Klare Inhaltsbereichsbeschränkungen |
| 138 | + |
| 139 | +Die wichtigste Verbesserung ist die Klarstellung der Inhaltsbereichsbeschränkungen für verschiedene Dokumenttypen, insbesondere tasks.md. Wir haben strenge Randbedingungen in den Prompt aufgenommen: |
| 140 | + |
| 141 | +```markdown |
| 142 | +### tasks.md Inhaltsbereichsbeschränkungen |
| 143 | + |
| 144 | +Bei der Erstellung von `tasks.md`-Artefakten müssen die folgenden Inhaltsbereichsbeschränkungen beachtet werden: |
| 145 | + |
| 146 | +**Muss enthalten**: |
| 147 | +- Geschäftslogikaufgaben (Code-Implementierung, Funktionsentwicklung) |
| 148 | +- Technische Implementierungsaufgaben (Komponentenintegration, API-Entwicklung) |
| 149 | +- Testaufgaben (Unit-Tests, Integrationstests) |
| 150 | +- Dokumentationsaufgaben (Dokumentation aktualisieren, Kommentare hinzufügen) |
| 151 | + |
| 152 | +**Darf nicht enthalten**: |
| 153 | +- Git-Commit-Operationen (git add, git commit, git push) |
| 154 | +- Versionskontrollverwaltungsworkflows |
| 155 | +- Bereitstellungs- und Veröffentlichungsoperationen |
| 156 | +``` |
| 157 | + |
| 158 | +Die Verwendung von normativer Sprache (MUST/SHALL) statt empfehlender Sprache stellt sicher, dass die KI diese Randbedingungen strikt versteht. Für proposal.md und design.md haben wir ebenfalls ihre jeweiligen Verantwortungsgrenzen geklärt: proposal.md muss Codeänderungstabellen und UI-Prototypdiagramme enthalten (wenn UI-Änderungen betroffen sind), während design.md Architekturdiagramme und Datenflussdiagramme enthalten muss. |
| 159 | + |
| 160 | +## Kontextverankerung in der Erkundungsphase |
| 161 | + |
| 162 | +Das Problem der Explore-Phase wird am leichtesten übersehen – die KI-Erkundung könnte vollständig vom Vorschlagsbereich abweichen. Wir haben dies durch Prompt-Verbesserungen gelöst: |
| 163 | + |
| 164 | +```markdown |
| 165 | +## Explore-Ausführungsprinzipien |
| 166 | + |
| 167 | +- **Keine Dokumentation erforderlich** - Erkundungsergebnisse müssen nicht als unabhängiges Dokument gespeichert werden |
| 168 | +- **Informationsübermittlung** - Nach Abschluss der Erkundung werden die gesammelten Informationen an die Proposal-Erstellungsphase übermittelt |
| 169 | +- **Fokus auf Nachdenken** - Der Wert der Erkundung liegt in der Informationssammlung, nicht in der Dokumentproduktion |
| 170 | + |
| 171 | +## Verbindung mit Proposal-Erstellung |
| 172 | + |
| 173 | +Die Explore-Phase findet statt, nachdem der Vorschlag erstellt wurde, aber bevor der Projektcode geschrieben wurde. Nach Abschluss der Erkundung |
| 174 | +wird das System Sie zur Erstellung oder Auffüllung der Datei `proposal.md` leiten, und die durch Erkundung gesammelten Informationen dienen als Grundlage für den Vorschlagsinhalt. |
| 175 | +``` |
| 176 | + |
| 177 | +Dies klärt die Positionierung der Explore-Phase: Sie ist ein vorbereitender Informationssammlungsschritt, kein unabhängiger Dokumentproduktionsabschnitt. Nachdem die KI dies versteht, kann sie sich stärker auf vorschlagsbezogene Wissenserkundung konzentrieren. |
| 178 | + |
| 179 | +## Implementierungsleitfaden |
| 180 | + |
| 181 | +Wenn Sie diese Lösung in HagiCode anwenden möchten, können Sie die folgenden Schritte durchführen: |
| 182 | + |
| 183 | +1. **Planungsrichtungen definieren**: Definieren Sie Richtungs-ID, Standardstatus und Prompt-Fragmente in `ProposalPlanningDirections.cs` |
| 184 | +2. **Template-Parameterisierung**: Verwenden Sie bedingte Anweisungen und Variableninjektion in `.hbs`-Templates |
| 185 | +3. **Ausgabe validieren**: Überprüfen Sie, ob entsprechende Artefakte die erwarteten Inhalte enthalten, wenn bestimmte Richtungen aktiviert sind |
| 186 | +4. **Grenzen testen**: Validieren Sie, dass bei deaktivierten Richtungen keine entsprechenden Inhalte generiert werden und andere Richtungen nicht beeinträchtigt werden |
| 187 | + |
| 188 | +Beachten Sie, dass Template-Änderungen mit Upstream synchron gehalten werden sollten und die Struktur der chinesischen und englischen Templates konsistent sein sollte. Das Rendern der Planungsrichtungen sollte im Mikrosekundenbereich abgeschlossen werden, um Auswirkungen auf die Leistung zu vermeiden. |
| 189 | + |
| 190 | +## Zusammenfassung |
| 191 | + |
| 192 | +Die Leistungsoptimierung des OpenSpec-Workflows liegt im Verständnis der differenzierten Anforderungen verschiedener Phasen. Durch phasenspezifische Agenten, parametrisierte Templates und klare Inhaltsrandbedingungen ermöglichen wir der KI, in jedem Schritt hochwertige Inhalte zu liefern. |
| 193 | + |
| 194 | +Diese Lösung wurde in der Praxis von HagiCode validiert – sie verbesserte nicht nur die Dokumentqualität, sondern reduzierte auch den Aufwand für manuelle Änderungen. Wenn Ihr Team einen ähnlichen vorschlagsgetriebenen Workflow verwendet, hoffe ich, dass diese Erfahrungen für Sie inspirierend sind. |
| 195 | + |
| 196 | +Am Ende ist es nur das Zerlegen von Problemen. Jede Phase hat ihre eigenen Besonderheiten, wenn die richtige Methode angewendet wird, werden Probleme natürlich einfacher. |
| 197 | + |
| 198 | +## Referenzmaterialien |
| 199 | + |
| 200 | +- HagiCode-Projektadresse: [github.com/HagiCode-org/site](https://github.com/HagiCode-org/site) |
| 201 | +- HagiCode-Website: [hagicode.com](https://hagicode.com) |
| 202 | +- Demo-Video der offiziellen Version: [www.bilibili.com/video/BV1z4oWB3EpY/](https://www.bilibili.com/video/BV1z4oWB3EpY/) |
| 203 | +- Ein-Klick-Installation zum Erleben: [docs.hagicode.com/installation/docker-compose](https://docs.hagicode.com/installation/docker-compose) |
| 204 | +- Desktop-Client schnelle Installation: [hagicode.com/desktop/](https://hagicode.com/desktop/) |
| 205 | + |
| 206 | +--- |
| 207 | + |
| 208 | +Wenn dieser Artikel für Sie hilfreich ist: |
| 209 | +- Geben Sie ein Like, damit mehr Personen es sehen |
| 210 | +- Kommen Sie zu GitHub und geben Sie einen Star |
| 211 | +- Besuchen Sie die Website für weitere Informationen |
| 212 | +- Schauen Sie sich das Demo-Video an, um die vollständigen Funktionen zu verstehen |
| 213 | +- Ein-Klick-Installation starten, um zu erleben |
| 214 | + |
| 215 | +Die öffentliche Beta hat begonnen, willkommen zur Installation und zum Erleben! |
0 commit comments