Audit-Checklist
Aufgeteilt nach Caller-Typ. Vor Live-Gang eines neuen Callers oder bei wiederkehrendem Audit: Liste durchgehen, jeden Punkt mit ✅ / ⚠️ / ❌ markieren.
Typ A — ECS-Service mit LiteLLM-Proxy (Pattern: Open-WebUI VF)
- Modell-Liste in LiteLLM-Config enthaelt nur die Modelle die User-facing sind (sichtbar im Dropdown). Background-Modelle (Haiku) bleiben in
model_listaber sind nicht inDEFAULT_MODELSenv. - TASK_MODEL + TASK_MODEL_EXTERNAL sind auf das billigste verfuegbare Modell gesetzt (Haiku 4.5, nicht Sonnet). Background-Tasks (Title-Gen, Tag-Gen, Search-Query-Gen, Follow-up-Gen) sind oft 60-70% der Calls.
- DEFAULT_MODEL_PARAMS.max_tokens ist auf einen sinnvollen Cap gesetzt (z.B. 2000 fuer Chat, nicht 8192).
- DEFAULT_MODEL_PARAMS.thinking ist
{"type":"disabled"}oderbudget_tokens <= 500ausser Extended-Thinking ist explizit gewollt. - ENABLE_SEARCH_QUERY_GENERATION ist false wenn Web-Search wenig genutzt wird.
- BYPASS_WEB_SEARCH_EMBEDDING_AND_RETRIEVAL ist false wenn Web-Search aktiv (sonst gehen Roh-Results in den Prompt).
- RAG Top-K ≤ 4, Chunk-Size ≤ 500 Tokens.
- Prompt-Caching konfiguriert UND verifiziert (CloudWatch
CacheReadInputTokenCount> 0 nach 24h). - Application Inference Profile angelegt + ARN in LiteLLM-Config-
model_list[].litellm_params.model. - Cost-Allocation-Tags
Application,Owner,Environmentsind am AIP.
Typ B — Lambda mit boto3 + Bedrock (Pattern: receptionist-brain, daily-briefing, beleg-pipeline)
-
BEDROCK_MODEL_IDenv-var ist auf Haiku 4.5 gesetzt (nicht Sonnet), ausser Task braucht explizit Sonnet-Qualitaet. -
inferenceConfig.maxTokensexplizit gesetzt im Code (nicht Default-Wert). -
inferenceConfig.stopSequenceswo strukturierter Output (JSON, Tool-Use). - System-Prompt < 2000 Tokens (chars/3.5 fuer DE). Wenn groesser: pruefen ob Komprimierung moeglich.
-
MAX_TOOL_ITERATIONSenv-var gesetzt (z.B. 5) damit Tool-Use-Loops nicht endlos laufen. - AIP-ARN als
modelIdstatt direkter System-Inference-Profile-ARN. - Tool-Use: pro MCP-Tool das gerufen wird, Token-Footprint dokumentiert in
intern/capabilities/mcps/<slug>.md.
Typ C — FastAPI/ECS mit eigenem Bedrock-Client (Pattern: a-icking inference-service)
- Bedrock-Modell-ID explizit als Konstante, nicht Default-Argument irgendwo (siehe
bedrock_claude.pyCLAUDE_HAIKU_4_5_EU). -
max_tokensKonstruktor-Default sicher (z.B. 1024). - System-Prompt-Generator ist deterministisch / hat keinen Zeitstempel oder Random-Wert (sonst kein Caching moeglich).
- RAG-Top-K + Chunk-Size in Config, default ⇐ 5 / ⇐ 500 Tokens.
- Embedding-Modell-Wahl dokumentiert: Titan v2 wenn DE-only, Cohere wenn Cross-Lingual.
Typ D — MCP-Server (Pattern: mcp-papierkram, mcp-whatsapp, mcp-vf-hosted)
Beachte: MCP-Server selbst rufen meist KEIN Bedrock — sie sind Tools. Aber ihre Tool-Descriptions landen im System-Prompt jedes Callers der sie nutzt!
- Tool-Description-Token-Footprint pro Tool gemessen (siehe
templates/tool-description-audit.py). - Pro MCP gesamt ≤ 3000 Tokens an Tool-Descriptions (bei MCPs mit > 30 Tools: bis 5000 ok).
- Selten genutzte Tools (< 1x pro Woche in CloudTrail/Logs) sind
disabled: truemarkiert oder entfernt. - JSON-Schema ohne
examples-Felder (sind Tokens, Modell braucht’s nicht). - Property-
descriptionnur wo nicht-trivial. - MCP-Eintrag in _index hat
token-cost-tier(A/B/C) Spalte gefuellt.
Cross-Cutting (jeder Caller)
- AWS Budget + Alarm existiert fuer den Account.
- Bedrock Service-Quotas in den genutzten Regionen sind nicht auf Max-Default sondern auf Normal-Last + 20% Puffer.
- Bedrock Model-Invocation-Logging ist aktiviert (CloudWatch oder S3-Sink).
- CloudTrail-Trail loggt Management-Events (fuer AIP-Aenderungen Audit-Spur).
- Run-Log Eintrag in
intern/runs/<jahr>-<monat>.mdbeim ersten Live-Gang.
Wann den Audit fahren
- Pflicht: vor Live-Gang eines neuen MCP, einer neuen Lambda-Routine, eines neuen ECS-Services.
- Empfohlen: monatlich auf bestehende Caller (Cost-Drift detektieren).
- Trigger-getrieben: bei Cost-Spike-Alarm aus Budget-Notification.
Verknuepfung zu anderen Skills
mcp-eigenbauSKILL muss diesen Audit als Final-Check vorcdk deployreferenzieren.routine-anlegenSKILL muss die Typ-B-Checkliste als Brief-Bestandteil haben.qa-stagingSKILL kann optional Tool-Description-Token-Audit als Post-Deploy-Check einbauen.