Some checks failed
Test Suite / lint-backend (push) Waiting to run
Test Suite / build-frontend (push) Waiting to run
Test Suite / k6 /health Baseline (push) Waiting to run
Test Suite / playwright-tests (push) Waiting to run
Deploy Development / deploy (push) Failing after 0s
Test Suite / pytest-backend (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
5.8 KiB
5.8 KiB
AI Prompt Runtime – Designprinzipien (Extraktion)
Status: Analyse / Arbeitspapier
Stand: 2026-07-04
Geltungsbereich: Modul „AI Prompt Runtime“ — Shinkan-KI-Schicht, keine Planungs-Gesamtarchitektur
Serie: Designprinzipien für Produktfamilie · Shinkan Dokument 5 von 15
Mitai-Vergleich: PROMPT_ENGINE_DESIGN_PRINCIPLES.md (#1)
Kernkomponenten:
| Bereich | Pfade |
|---|---|
| Laufzeit | backend/ai_prompt_runtime.py, backend/prompt_resolver.py |
| Domänen-Orchestrierung | backend/exercise_ai.py, backend/planning_exercise_*.py |
| OpenRouter | backend/openrouter_chat.py |
| Admin | backend/routers/ai_prompts_admin.py |
| Zielbild | .claude/docs/technical/AI_PROMPT_TARGET_ARCHITECTURE.md |
| Job-Kontext | backend/ai_prompt_job.py, backend/ai_prompt_context.py |
Modul
AI Prompt Runtime
Schmale Ausführungsschicht für admin-konfigurierbare Prompts in ai_prompts: Laden, Mustache-Rendering, Kontext-Arten, OpenRouter-Aufruf. Kein vollständiges Unified Prompt System wie Mitai (keine Workflows/Pipelines in Produktion).
Fachliche Verantwortung
- Prompt-Laden aus DB —
load_ai_prompt_row,load_and_render_ai_prompt - Platzhalter-Ersetzung — Mustache
{{key}}viaprompt_resolver.py - Kontext-Arten —
AiPromptContextKindtrennt Übungs-KI vs. Planungs-KI - Domänen-Builder —
exercise_ai, Planungs-Pipelines bauen Variablen-Maps - Admin CRUD + Preview — ohne LLM in Preview-Pfaden wo vorgesehen
Designprinzipien
1. Eine Laufzeit-Fassade für DB-Prompts
| Prinzip | Produktive Aufrufe laden Slugs über ai_prompt_runtime — nicht Roh-SQL auf ai_prompts in Routern. |
| Begründung | Einheitliches inactive-Handling, Modell-Feld, Render-Metadaten. |
| Quelle | AI_PROMPT_TARGET_ARCHITECTURE.md §2.1; ai_prompt_runtime.py |
| Tragfähigkeit | hoch (Zielrichtung) |
| Einschränkung | Planungs-KI hat noch verteilte Orchestratoren; kein einzelner execute_prompt wie Mitai. |
2. Konfigurierbare Bibliothek in ai_prompts
| Prinzip | Template-Texte in DB; Admins ändern ohne Deploy (ai_prompts_admin). |
| Begründung | Gleiches Familien-Muster wie Mitai Prompt-Bibliothek. |
| Quelle | Migration 069+; Admin-UI |
| Tragfähigkeit | hoch |
| Einschränkung | Keine Pipeline/Workflow-Typen; Slugs hardcoded in context_kind_for_slug. |
3. Kontext-Namespaces statt globaler Platzhalter-Soup
| Prinzip | AiPromptContextKind (z. B. exercise_form_ai, planning_exercise_search) begrenzt erlaubte Builder. |
| Begründung | Planungs-Kontext wächst ohne Kollision mit Übungs-Keys. |
| Quelle | AI_PROMPT_TARGET_ARCHITECTURE.md §2.3 |
| Tragfähigkeit | hoch |
| Einschränkung | Noch keine zentrale Platzhalter-Registry wie Mitai — Mustache ad hoc pro Builder. |
4. Trennung Template vs. Domänen-Kontext
| Prinzip | UI/Router liefern Pydantic-DTOs → Builder erzeugen variables-Map → render_mustache_template. |
| Begründung | Prompt-Autoren ändern Text, nicht Python in Routern. |
| Quelle | prompt_resolver.py; ExerciseFormAiPromptContext |
| Tragfähigkeit | hoch |
| Einschränkung | Große Planungs-Kontexte noch nicht vollständig über DTOs. |
5. Transport (OpenRouter) getrennt von Semantik
| Prinzip | openrouter_chat.py für HTTP; Validierung/JSON-Parsing in Domänen-Schicht. |
| Begründung | Modellwechsel ohne Router-Anpassung. |
| Quelle | AI_PROMPT_TARGET_ARCHITECTURE.md §2.2 |
| Tragfähigkeit | hoch |
| Einschränkung | Modell teils global Env, teils Spalte openrouter_model — Konvergenz offen. |
6. Reset-to-default für System-Prompts
| Prinzip | default_template + Admin-Reset — kein vollständiges Versionsmodell. |
| Begründung | Familien-Muster aus Mitai; Schutz vor Fehlkonfiguration. |
| Quelle | Migration 069 |
| Tragfähigkeit | mittel |
| Einschränkung | Keine Historie benutzerdefinierter Änderungen. |
7. Admin-only Schreiben, authentifiziertes Ausführen
| Prinzip | Prompt-CRUD nur Admin; Ausführung mit Capability + Feature-Kontingent. |
| Begründung | Systemkonfiguration vs. Nutzung; Kostenkontrolle. |
| Quelle | ai_prompts_admin.py; exercises.ai.suggest |
| Tragfähigkeit | hoch |
| Einschränkung | Enforcement teils noch Probe-Phase. |
8. Skill-Retrieval orthogonal zu Prompts
| Prinzip | ai_skill_retrieval_profiles steuert Katalog für {{skills_catalog}} — unabhängig vom Prompt-Text. |
| Begründung | Anweisung vs. Kontextfenster trennbar konfigurierbar. |
| Quelle | AI_PROMPT_TARGET_ARCHITECTURE.md §3.3 |
| Tragfähigkeit | hoch |
| Einschränkung | — |
Nicht übernehmen (Shinkan-Ist / Mitai-Vermeidung)
- Direkte OpenRouter-Calls in Routern ohne Laufzeit-Schicht — historische Schuld, abbauen.
- Hardcodierte Prompt-Strings in Produktion — nur Fallback/Dev.
- Mitai-Workflow-Graph vorreifen — Shinkan braucht erst Planungs-Kontext-Reife.
- Globale Platzhalter-Map ohne Namespace — Mitai-Lektion
PLACEHOLDER_MAP-Duplikat. - Fehlende JSON-Schema-Validierung bei
output_format=json— Mitai-TODO übernehmen vermeiden.