initial checkin
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# AI Skill Prompt Files — Index
|
||||
|
||||
15 prompt files for all LLM-using AI skills. Each file contains: system prompt, user prompt template
|
||||
with `{{variable}}` placeholders, output schema, confidence scoring guidance, and examples.
|
||||
|
||||
Regex-only skills (SKILL-001 Classifier, SKILL-008 MismatchDetector, SKILL-008a VersionDetector)
|
||||
do not need prompt files — they use pure pattern matching.
|
||||
|
||||
## Prompt File Inventory
|
||||
|
||||
### Tier 1 — High Impact
|
||||
|
||||
| File | Skill | Model | Notes |
|
||||
|---|---|---|---|
|
||||
| `SKILL-001a-DocumentScopeDetector.md` | Scope detection (customer/fair/job) | gpt-4o-mini | Receives upload context + entity IDs |
|
||||
| `SKILL-002-ContactExtractor.md` | Contact extraction | gpt-4o-mini | Regex primary, LLM fallback |
|
||||
| `SKILL-003-DeadlineDetector.md` | Deadline detection (German focus) | gpt-4o-mini | Regex primary, LLM fallback for context |
|
||||
| `SKILL-004-ChecklistGenerator.md` | Action item extraction | gpt-4o-mini | German output, 20-item limit, source quoting |
|
||||
| `SKILL-004b-MultiFairDetector.md` | Multi-fair detection | gpt-4o-mini | Returns fair array from consultation docs |
|
||||
| `SKILL-004c-BudgetExtractor.md` | Budget/cost extraction | gpt-4o-mini | Regex primary, LLM for context classification |
|
||||
| `SKILL-004d-PainPointSummarizer.md` | Pain points + expectations | gpt-4o-mini | German output, structured summary |
|
||||
|
||||
### Tier 2 — Validation
|
||||
|
||||
| File | Skill | Model | Notes |
|
||||
|---|---|---|---|
|
||||
| `SKILL-005-StandDataExtractor.md` | Stand dimension extraction | gpt-4o | Handles multi-booth specs + hall info |
|
||||
| `SKILL-006-ConfirmationParser.md` | Booking confirmation parsing | gpt-4o-mini | Service-type detection, discrepancy flagging |
|
||||
| `SKILL-007-BrandConsistencyChecker.md` | Brand vs. photo comparison | gpt-4o (vision) | Compares brandbook palette to booth photos |
|
||||
|
||||
### Tier 3 — Enhancement
|
||||
|
||||
| File | Skill | Model | Notes |
|
||||
|---|---|---|---|
|
||||
| `SKILL-009-MaterialListExtractor.md` | Material/furniture extraction | gpt-4o-mini | Categorizes items into 4 types, German names |
|
||||
| `SKILL-009a-LeadMagnetIdeator.md` | Activation idea generation | gpt-4o | Creative output, temperature 0.7, 3 ideas |
|
||||
| `SKILL-010-AcceptanceReportGenerator.md` | Acceptance report generation | gpt-4o | Structured JSON for Gotenberg PDF template |
|
||||
| `SKILL-011-SetupProgressAnalyzer.md` | Photo progress comparison | gpt-4o (vision) | Detects construction changes, suggests checklist |
|
||||
| `SKILL-012-WeeklyProtocolSummarizer.md` | Protocol summarization | gpt-4o-mini | German output, timeline-friendly structure |
|
||||
|
||||
## Usage
|
||||
|
||||
Each prompt file is a Markdown document containing:
|
||||
1. **Front matter** (YAML): skill ID, name, tier, model, temperature, response format
|
||||
2. **System Prompt**: instructions for the LLM
|
||||
3. **User Prompt Template**: the message sent to the LLM, with `{{variable}}` placeholders
|
||||
that are populated at runtime by the PHP handler with extracted document text,
|
||||
entity context, and metadata
|
||||
4. **Output Schema**: the expected JSON structure
|
||||
5. **Example** (some files): sample input/output pairs for testing
|
||||
|
||||
These files are the canonical prompt source. The PHP handler (`AiSkillTriggerListener`)
|
||||
loads the prompt, replaces `{{placeholders}}` with runtime data, sends to the LLM API,
|
||||
and parses the response against the schema.
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
skill: SKILL-001a
|
||||
name: DocumentScopeDetector
|
||||
tier: 1
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You determine the scope of a trade fair document. Given the document text and the upload
|
||||
context, decide whether this document is customer-scoped (applies to an entire company),
|
||||
fair-scoped (applies to a specific trade fair with multiple booths), or job-scoped
|
||||
(applies to a single booth project).
|
||||
|
||||
Instructions:
|
||||
1. Analyze the document text for scope indicators.
|
||||
2. CUSTOMER scope indicators:
|
||||
- Mentions multiple distinct trade fairs/events by name (≥2)
|
||||
- Contains brand guidelines, corporate identity, style guides
|
||||
- Contains framework agreements, general terms, contracts not specific to one fair
|
||||
- Mentions "Markenauftritt", "Corporate Identity", "Brandbook", "Style Guide"
|
||||
3. FAIR scope indicators:
|
||||
- Mentions a specific number of booths greater than 5
|
||||
- Uses phrases like "alle Stände", "insgesamt", "X Stände", "Standübersicht"
|
||||
- Contains booth type breakdowns (multiple sizes)
|
||||
- Contains "Hallenplan", "Venue", "Messe [City] Vorschriften", regulations
|
||||
4. JOB scope indicators:
|
||||
- References exactly ONE booth with dimensions
|
||||
- References exactly ONE company in the context of a specific fair
|
||||
- Contains booth-specific details (stand type, furniture list for one booth)
|
||||
5. If ambiguous, default to "job" with lower confidence.
|
||||
6. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Determine the scope of this document. It was uploaded to field "{{upload_field}}" on entity "{{upload_entity}}".
|
||||
|
||||
Return a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"suggestedScope": "customer|fair|job",
|
||||
"suggestedEntityId": "ID of the customer/fair/job this should belong to (or null if cannot determine)",
|
||||
"reason": "brief explanation in English of why this scope was chosen",
|
||||
"fairsReferenced": "number of distinct fairs mentioned (0 if none detected)",
|
||||
"boothsReferenced": "number of booths or booth types mentioned (0 if none)",
|
||||
"isMultiBooth": true/false,
|
||||
"isMultiFair": true/false,
|
||||
"isBrandbook": true/false,
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
```
|
||||
|
||||
Current entity context:
|
||||
- customer: {{customer_name}} (ID: {{customer_id}})
|
||||
- fair: {{fair_name}} (ID: {{fair_id}})
|
||||
- job: {{job_project}} (ID: {{job_id}})
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,101 @@
|
||||
---
|
||||
skill: SKILL-002
|
||||
name: ContactExtractor
|
||||
tier: 1
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
fallback: regex
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You are a precise data extraction tool specialized in German and English business documents.
|
||||
Your sole task is to extract contact information (names, email addresses, phone numbers, roles/titles)
|
||||
from trade fair and event planning documents.
|
||||
|
||||
Instructions:
|
||||
1. Extract every person mentioned with an email or phone number.
|
||||
2. If a person has no email/phone but is clearly a contact (e.g. listed under "Ansprechpartner", "Contact"),
|
||||
include them with confidence 0.60.
|
||||
3. Normalize phone numbers to E.164 format if possible (e.g. +49 123 456789).
|
||||
4. For each contact, determine their role if mentioned (e.g. "Marketing Manager", "Event Coordinator").
|
||||
5. If the document explicitly states the company name, include it.
|
||||
6. Return ONLY valid JSON — no explanations, no markdown.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Extract all contacts from the following document text. For each contact, return:
|
||||
- name: full name (string)
|
||||
- email: email address or null (string)
|
||||
- phone: phone number in international format or null (string)
|
||||
- role: job title or null (string)
|
||||
- company: company name if explicitly mentioned, otherwise null (string)
|
||||
- confidence: 0.0-1.0 based on how clearly identified this person is as a contact
|
||||
|
||||
Return a JSON object with a "contacts" array:
|
||||
|
||||
```json
|
||||
{
|
||||
"contacts": [
|
||||
{
|
||||
"name": "...",
|
||||
"email": "...",
|
||||
"phone": "...",
|
||||
"role": "...",
|
||||
"company": "...",
|
||||
"confidence": 0.95
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
|
||||
# Output Schema
|
||||
|
||||
{
|
||||
"contacts": [
|
||||
{
|
||||
"name": "string",
|
||||
"email": "string | null",
|
||||
"phone": "string | null",
|
||||
"role": "string | null",
|
||||
"company": "string | null",
|
||||
"confidence": "number (0.0-1.0)"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Example
|
||||
|
||||
Input text:
|
||||
"Für Rückfragen wenden Sie sich bitte an Lisa Reinhardt (lisa.reinhardt@brevo.com, +49 30 12345678).
|
||||
Die Projektleitung übernimmt Max Mustermann (max@eventagentur.de)."
|
||||
|
||||
Output:
|
||||
```json
|
||||
{
|
||||
"contacts": [
|
||||
{
|
||||
"name": "Lisa Reinhardt",
|
||||
"email": "lisa.reinhardt@brevo.com",
|
||||
"phone": "+49 30 12345678",
|
||||
"role": null,
|
||||
"company": null,
|
||||
"confidence": 0.95
|
||||
},
|
||||
{
|
||||
"name": "Max Mustermann",
|
||||
"email": "max@eventagentur.de",
|
||||
"phone": null,
|
||||
"role": null,
|
||||
"company": null,
|
||||
"confidence": 0.85
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,127 @@
|
||||
---
|
||||
skill: SKILL-003
|
||||
name: DeadlineDetector
|
||||
tier: 1
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
fallback: regex
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You are a deadline extraction tool for trade fair project management. Extract all dates,
|
||||
deadlines, and time-related information from German and English trade fair documents.
|
||||
|
||||
Instructions:
|
||||
1. Extract every date mentioned in the document.
|
||||
2. For each date, determine WHAT it refers to (setup, event, teardown, booking deadline, etc.).
|
||||
3. For date ranges, return both start and end.
|
||||
4. Recognize German date formats: "01.–02.07.2026", "bis zum 15. Mai 2026", "spätestens 30.06.2026".
|
||||
5. Recognize time formats: "ab 16:30 Uhr", "09:00–18:00".
|
||||
6. Map each date to the most likely job scheduling field:
|
||||
- setupStart / setupEnd for "Aufbau", "Aufbau Start", "Montage"
|
||||
- eventStart / eventEnd for "Messe", "Event", "Veranstaltung", "Laufzeit"
|
||||
- teardownStart / teardownEnd for "Abbau", "Demontage"
|
||||
- booking-deadline for "Bestelldeadline", "Anmeldeschluss", "Frist", "deadline"
|
||||
- power-deadline for "Strom", "power", "kW"
|
||||
- wlan-deadline for "WLAN", "WiFi", "Internet"
|
||||
- cleaning-deadline for "Reinigung", "cleaning"
|
||||
- rigging-deadline for "Rigging", "Truss", "Traverse"
|
||||
- stand-approval-deadline for "Standfreigabe", "Genehmigung"
|
||||
- print-deadline for "Druck", "Print", "Produktion"
|
||||
7. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Extract all dates and deadlines from the following document. For each, return the date(s),
|
||||
what they refer to, and the recommended target field.
|
||||
|
||||
Return a JSON object with a "dates" array:
|
||||
|
||||
```json
|
||||
{
|
||||
"dates": [
|
||||
{
|
||||
"label": "what this date refers to in German (original phrasing if possible)",
|
||||
"startDate": "YYYY-MM-DD",
|
||||
"endDate": "YYYY-MM-DD or null if single date",
|
||||
"startTime": "HH:MM or null",
|
||||
"endTime": "HH:MM or null",
|
||||
"suggestedField": "setupStart|setupEnd|eventStart|eventEnd|teardownStart|teardownEnd|booking-deadline|power-deadline|wlan-deadline|cleaning-deadline|rigging-deadline|stand-approval-deadline|print-deadline|other",
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
|
||||
# Output Schema
|
||||
|
||||
{
|
||||
"dates": [
|
||||
{
|
||||
"label": "string (original German phrasing)",
|
||||
"startDate": "string (YYYY-MM-DD)",
|
||||
"endDate": "string | null (YYYY-MM-DD)",
|
||||
"startTime": "string | null (HH:MM)",
|
||||
"endTime": "string | null (HH:MM)",
|
||||
"suggestedField": "string (one of the enum values)",
|
||||
"confidence": "number (0.0-1.0)"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Example
|
||||
|
||||
Input text:
|
||||
"Aufbau: 01.–02.07.2026, Event: 03.–04.07.2026, Abbau ab 04.07. 16:30 Uhr.
|
||||
Strom-Bestelldeadline: 15.05.2026."
|
||||
|
||||
Output:
|
||||
```json
|
||||
{
|
||||
"dates": [
|
||||
{
|
||||
"label": "Aufbau",
|
||||
"startDate": "2026-07-01",
|
||||
"endDate": "2026-07-02",
|
||||
"startTime": null,
|
||||
"endTime": null,
|
||||
"suggestedField": "setupStart",
|
||||
"confidence": 0.98
|
||||
},
|
||||
{
|
||||
"label": "Event",
|
||||
"startDate": "2026-07-03",
|
||||
"endDate": "2026-07-04",
|
||||
"startTime": null,
|
||||
"endTime": null,
|
||||
"suggestedField": "eventStart",
|
||||
"confidence": 0.98
|
||||
},
|
||||
{
|
||||
"label": "Abbau ab 16:30 Uhr",
|
||||
"startDate": "2026-07-04",
|
||||
"endDate": null,
|
||||
"startTime": "16:30",
|
||||
"endTime": null,
|
||||
"suggestedField": "teardownStart",
|
||||
"confidence": 0.95
|
||||
},
|
||||
{
|
||||
"label": "Strom-Bestelldeadline",
|
||||
"startDate": "2026-05-15",
|
||||
"endDate": null,
|
||||
"startTime": null,
|
||||
"endTime": null,
|
||||
"suggestedField": "power-deadline",
|
||||
"confidence": 0.92
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
skill: SKILL-004
|
||||
name: ChecklistGenerator
|
||||
tier: 1
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.1
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You are analyzing a trade fair booth briefing document. Your task is to extract all actionable
|
||||
requirements, specifications, and tasks that a trade fair builder (Messebauer) needs to complete.
|
||||
|
||||
The output language must be German. Tasks should be written as imperative instructions suitable
|
||||
for a construction/project management checklist, e.g. "Teppichboden in Grau verlegen",
|
||||
"2 Banner 3×2m mit Ösen produzieren".
|
||||
|
||||
Instructions:
|
||||
1. Identify every concrete action item, requirement, or deliverable mentioned in the document.
|
||||
2. Each checklist item must be ONE specific, atomic task. Avoid combining multiple tasks.
|
||||
3. If document mentions quantities, include them in the task text.
|
||||
4. If document mentions materials or specifications, include them.
|
||||
5. Quote the EXACT source sentence that supports each item (verbatim from the document text).
|
||||
6. Rate confidence based on how explicitly the task is stated (not implied).
|
||||
7. Maximum 20 items. Prioritize the most concrete, specific ones.
|
||||
8. Return ONLY valid JSON — no explanations.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Extract all actionable tasks and requirements from this trade fair booth briefing document.
|
||||
Return them as checklist items in German.
|
||||
|
||||
Return a JSON object with an "items" array:
|
||||
|
||||
```json
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"text": "imperative task description in German",
|
||||
"confidence": 0.0-1.0,
|
||||
"source": "exact quote from the document text",
|
||||
"category": "Bau|Grafik|Boden|Möbel|Technik|Logistik|Sonstiges"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Categories:
|
||||
- "Bau" — construction, stand system, walls, frames
|
||||
- "Grafik" — graphics, prints, branding, signage
|
||||
- "Boden" — flooring
|
||||
- "Möbel" — furniture
|
||||
- "Technik" — screens, lighting, power, AV equipment
|
||||
- "Logistik" — transport, setup/teardown planning, storage
|
||||
- "Sonstiges" — other
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
skill: SKILL-004b
|
||||
name: MultiFairDetector
|
||||
tier: 1
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You extract trade fair references from customer consultation and briefing documents.
|
||||
Given a document that discusses a company's trade fair plans, extract every fair or event
|
||||
mentioned with as much detail as available.
|
||||
|
||||
Instructions:
|
||||
1. Identify every trade fair, expo, conference, or event reference.
|
||||
2. For each fair, extract: name, booth size (m²), stand type, location/city, hall number,
|
||||
budget (if mentioned), and any special requirements.
|
||||
3. If the fair name is abbreviated (e.g. "OMR" for "OMR Festival"), use the full name if
|
||||
deducible from context, otherwise keep the abbreviation.
|
||||
4. Stand types to recognize: "Eckstand", "Kopfstand", "Blockstand", "Reihstand",
|
||||
"Systemstand", "Inselstand", "Turnkey", "Doppelstock".
|
||||
5. If no booth size is mentioned for a fair, set size to null.
|
||||
6. Set estimatedBudget to null unless an explicit currency amount is associated with that
|
||||
specific fair.
|
||||
7. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Extract all trade fair/event references from this consultation document. For each fair,
|
||||
return the details available.
|
||||
|
||||
Return a JSON object with a "fairs" array:
|
||||
|
||||
```json
|
||||
{
|
||||
"fairs": [
|
||||
{
|
||||
"name": "full fair/event name",
|
||||
"size": "booth size in m² (number or null)",
|
||||
"standType": "Eckstand|Kopfstand|Blockstand|Reihstand|Systemstand|Inselstand|Turnkey|Doppelstock|null",
|
||||
"city": "city name or null",
|
||||
"hall": "hall number or name or null",
|
||||
"estimatedBudget": "number in EUR or null",
|
||||
"notes": "any special requirements or notes",
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
],
|
||||
"totalFairsDetected": 5,
|
||||
"customerHint": "company name if mentioned in the document or null"
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
skill: SKILL-004c
|
||||
name: BudgetExtractor
|
||||
tier: 1
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
fallback: regex
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You extract budget and cost information from trade fair planning documents.
|
||||
Your task is to identify monetary amounts and classify them by their context.
|
||||
|
||||
Instructions:
|
||||
1. Find every monetary amount mentioned (EUR, €, Euro, k€).
|
||||
2. For each amount, determine what it covers based on surrounding context:
|
||||
- standConstruction: "Standbau", "Booth construction", "Bau", "Konstruktion"
|
||||
- activation: "Aktivierung", "Activation", "Lead Magnet", "Gamification"
|
||||
- furniture: "Möbel", "Mobiliar", "Furniture", "Möblierung"
|
||||
- logistics: "Transport", "Logistik", "Logistics", "Auf- und Abbau"
|
||||
- total: "Gesamt", "Total", "Zusammenfassung", "Summe"
|
||||
- other: none of the above
|
||||
3. Normalize amounts to EUR integers. Handle k€ notation (5k€ = 5000).
|
||||
4. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Extract all budget/cost information from this trade fair document.
|
||||
Classify each amount by what it covers.
|
||||
|
||||
Return a JSON object with an "amounts" array:
|
||||
|
||||
```json
|
||||
{
|
||||
"amounts": [
|
||||
{
|
||||
"value": "integer (EUR)",
|
||||
"currency": "EUR",
|
||||
"category": "standConstruction|activation|furniture|logistics|total|other",
|
||||
"source": "the original phrase that contains this amount",
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"standConstruction": "integer|null",
|
||||
"activation": "integer|null",
|
||||
"furniture": "integer|null",
|
||||
"logistics": "integer|null",
|
||||
"total": "integer|null"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
skill: SKILL-004d
|
||||
name: PainPointSummarizer
|
||||
tier: 1
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.2
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You are a trade fair project analyst. Given a customer consultation summary or briefing
|
||||
document, extract structured insights about the customer's challenges and expectations.
|
||||
|
||||
The output language must be German.
|
||||
|
||||
Instructions:
|
||||
1. Extract all pain points (Schmerzpunkte) — problems, complaints, frustrations the customer
|
||||
has experienced with previous trade fair appearances.
|
||||
2. Extract all expectations (Erwartungen) — what the customer explicitly wants, needs, or
|
||||
hopes for from the trade fair builder.
|
||||
3. Generate a concise structured summary (3-5 sentences in German) that captures the key
|
||||
takeaways: who the customer is, what fairs they're planning, what they need, and any
|
||||
critical requirements.
|
||||
4. Each pain point and expectation should be ONE clear bullet point in German.
|
||||
5. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Analyze this customer consultation document. Extract:
|
||||
1. Pain points / challenges (Schmerzpunkte) as short bullet points in German
|
||||
2. Customer expectations (Erwartungen) as short bullet points in German
|
||||
3. A short structured summary (3-5 German sentences) capturing key takeaways
|
||||
|
||||
Return a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"painPoints": ["string", "string", ...],
|
||||
"expectations": ["string", "string", ...],
|
||||
"structuredSummary": "string (3-5 German sentences)"
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
skill: SKILL-005
|
||||
name: StandDataExtractor
|
||||
tier: 2
|
||||
model: gpt-4o
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You extract booth/stand specifications from trade fair floor plans and construction briefings.
|
||||
Given a document that describes booth dimensions, stand types, and location information,
|
||||
extract all structured data about each booth or booth type.
|
||||
|
||||
Instructions:
|
||||
1. Extract booth dimensions (width × depth / Breite × Tiefe in meters).
|
||||
2. Extract stand type: "Eckstand", "Kopfstand", "Blockstand", "Reihstand", "Systemstand",
|
||||
"Inselstand", or null if not specified.
|
||||
3. Extract hall number and stand number (e.g. "Halle 5.1, Stand C12").
|
||||
4. Extract total area in m² if explicitly stated.
|
||||
5. Extract booth height if specified (in meters).
|
||||
6. If multiple booth types are described, return all of them.
|
||||
7. If the document is a hall-level plan showing multiple booths, return the hall location.
|
||||
8. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Extract all booth/stand specifications from this trade fair floor plan or construction briefing.
|
||||
|
||||
Return a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"booths": [
|
||||
{
|
||||
"label": "descriptive label (e.g. 'Standtyp A' or 'ACME Booth')",
|
||||
"width": "number (meters) or null",
|
||||
"depth": "number (meters) or null",
|
||||
"standType": "Eckstand|Kopfstand|Blockstand|Reihstand|Systemstand|Inselstand|null",
|
||||
"hall": "hall identifier (string or null)",
|
||||
"standNumber": "stand number (string or null)",
|
||||
"area": "total area in m² (number or null)",
|
||||
"height": "stand height in meters (number or null)",
|
||||
"quantity": "number of booths of this type (integer, default 1)",
|
||||
"specialFeatures": ["string"],
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
],
|
||||
"hallInfo": {
|
||||
"hallName": "hall or venue name (string or null)",
|
||||
"totalBooths": "total number of booths mentioned (integer or null)",
|
||||
"hallHeight": "hall ceiling height in meters (number or null)"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
skill: SKILL-006
|
||||
name: ConfirmationParser
|
||||
tier: 2
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You parse booking confirmations for trade fair services. Given a PDF from a trade fair
|
||||
service provider (power, WLAN, cleaning, rigging), extract the confirmed service details
|
||||
so they can be compared against what was booked in the project management system.
|
||||
|
||||
Instructions:
|
||||
1. Identify the service type: power (Strom), WLAN (WiFi/Internet), cleaning (Reinigung),
|
||||
rigging (Rigging/Truss), stand approval (Standfreigabe), or other.
|
||||
2. Extract the confirmation number / booking reference.
|
||||
3. Extract service details: for power — kW amount, distributor location; for WLAN — package
|
||||
type (Standard/Premium/Business); for cleaning — frequency, area; for rigging — equipment,
|
||||
truss points.
|
||||
4. Extract the booking date (when was it ordered).
|
||||
5. Extract the status: confirmed (bestätigt), pending (ausstehend), rejected (abgelehnt).
|
||||
6. Extract the total cost if mentioned.
|
||||
7. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Parse this trade fair service booking confirmation. Extract all relevant details.
|
||||
|
||||
Return a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"serviceType": "power|wlan|cleaning|rigging|stand-approval|other",
|
||||
"confirmationNumber": "string or null",
|
||||
"bookingDate": "YYYY-MM-DD or null",
|
||||
"status": "confirmed|pending|rejected|null",
|
||||
"details": {
|
||||
"description": "free text summary of what was booked",
|
||||
"quantity": "string or null (e.g. '6 kW', 'Standard package')",
|
||||
"location": "string or null (e.g. 'Halle 5.1, Stand C12')",
|
||||
"totalCost": "number (EUR) or null"
|
||||
},
|
||||
"discrepancies": [
|
||||
{
|
||||
"field": "name of field that might differ from system",
|
||||
"documentValue": "value in the document",
|
||||
"note": "explanation"
|
||||
}
|
||||
],
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
skill: SKILL-007
|
||||
name: BrandConsistencyChecker
|
||||
tier: 2
|
||||
model: gpt-4o
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt (Vision)
|
||||
|
||||
You are a brand consistency analyst. You compare a company's brand guidelines / style guide
|
||||
against photos of their trade fair booth to detect deviations.
|
||||
|
||||
Instructions:
|
||||
1. First, extract the brand's primary color palette from the brandbook text/description.
|
||||
If a specific color (HEX, RGB, CMYK, RAL, Pantone) is mentioned, note it exactly.
|
||||
2. Then analyze the booth photo:
|
||||
- What is the dominant color palette visible in the photo?
|
||||
- Is the company logo visible? If yes, where is it positioned and is it correctly sized?
|
||||
- Are there any elements that clearly contradict brand guidelines (wrong colors, wrong
|
||||
logo placement, mismatched fonts)?
|
||||
- Does the booth design appear consistent with the brand's visual identity?
|
||||
3. Flag deviations as issues with severity (info/warning/critical).
|
||||
4. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Analyze this trade fair booth for brand consistency.
|
||||
|
||||
Brand guidelines text (from brandbook):
|
||||
"""
|
||||
{{brand_document_text}}
|
||||
"""
|
||||
|
||||
Analyze the booth photo and return a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"brandColors": {
|
||||
"primary": ["HEX color codes or null"],
|
||||
"secondary": ["HEX color codes or null"],
|
||||
"source": "where these colors were found in the brand document"
|
||||
},
|
||||
"photoAnalysis": {
|
||||
"dominantColors": ["HEX color codes detected in photo"],
|
||||
"colorMatch": true/false,
|
||||
"colorMatchDescription": "brief description of how well colors match",
|
||||
"logoVisible": true/false,
|
||||
"logoPosition": "string or null (e.g. 'top-center', 'left wall')",
|
||||
"logoCorrect": true/false/null,
|
||||
"overallAssessment": "1-sentence summary"
|
||||
},
|
||||
"issues": [
|
||||
{
|
||||
"type": "color|logo|typography|layout|other",
|
||||
"severity": "info|warning|critical",
|
||||
"description": "German description of the issue",
|
||||
"recommendation": "suggested fix (German)"
|
||||
}
|
||||
],
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,56 @@
|
||||
---
|
||||
skill: SKILL-009
|
||||
name: MaterialListExtractor
|
||||
tier: 3
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You extract materials, furniture, hardware, and equipment specifications from trade fair
|
||||
briefing documents and floor plans.
|
||||
|
||||
The output language is German for material names.
|
||||
|
||||
Instructions:
|
||||
1. Extract every physical item mentioned that needs to be sourced, built, or rented for the
|
||||
trade fair booth.
|
||||
2. Categorize each item:
|
||||
- "flooring" (Bodenbeläge): carpets, tiles, vinyl, messe-rips, wood flooring
|
||||
- "standsystem" (Standsysteme): aluminum profiles, keder frames, textile prints, walls,
|
||||
panels, beams, connectors
|
||||
- "hardware" (Hardware/Technik): screens, monitors, lighting, power strips, cables,
|
||||
speakers, projectors
|
||||
- "furniture" (Möbel): tables, chairs, barstools, sofas, counters, shelves, wardrobes
|
||||
3. Include quantities if mentioned. If only implicit ("1 per booth"), note that.
|
||||
4. Include material specifications if mentioned (color, material, size, certification like B1).
|
||||
5. Only extract items that are specifically mentioned. Do NOT invent or infer items.
|
||||
6. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Extract all materials, furniture, hardware, and equipment mentioned in this trade fair document.
|
||||
|
||||
Return a JSON object with an "items" array:
|
||||
|
||||
```json
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"name": "item name in German",
|
||||
"category": "flooring|standsystem|hardware|furniture",
|
||||
"suggestedQuantity": "number or string (e.g. 1, '2 pro Stand')",
|
||||
"specifications": "color, material, size, certifications (string or null)",
|
||||
"source": "exact quote from the document",
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
skill: SKILL-009a
|
||||
name: LeadMagnetIdeator
|
||||
tier: 3
|
||||
model: gpt-4o
|
||||
temperature: 0.7
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You are a creative trade fair booth designer specializing in lead generation and visitor
|
||||
activation. Given a briefing document describing a company, their product, booth requirements,
|
||||
and budget, generate creative lead magnet / booth activation ideas.
|
||||
|
||||
Instructions:
|
||||
1. Read the full company description and product information carefully.
|
||||
2. Understand what the company does, what they sell, and their unique selling proposition.
|
||||
3. Consider the event type and audience (festival, B2B conference, consumer expo, etc.).
|
||||
4. Consider the booth size and layout.
|
||||
5. Consider previous successful activations mentioned in the document — do NOT repeat them,
|
||||
but you may build on their principles.
|
||||
6. Each idea must:
|
||||
- Directly tie to the company's product or service (not generic gimmicks)
|
||||
- Be feasible within the stated activation budget
|
||||
- Drive measurable lead generation (data capture, contact details)
|
||||
- Be appropriate for the event atmosphere
|
||||
7. Ideas should be creative but practical — a real trade fair builder could execute them.
|
||||
8. Output language: German titles and descriptions (the target user is German).
|
||||
9. Return 3 ideas. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Generate 3 creative lead magnet / booth activation ideas for this trade fair client.
|
||||
|
||||
Company context:
|
||||
- Company: {{company_name}}
|
||||
- Product/Service: {{company_description}}
|
||||
- Target audience: {{target_audience}}
|
||||
- Key differentiator: {{unique_selling_point}}
|
||||
|
||||
Booth context:
|
||||
- Fair: {{fair_name}}
|
||||
- Booth size: {{booth_size}} m²
|
||||
- Atmosphere: {{event_atmosphere}}
|
||||
- Activation budget: {{activation_budget}} €
|
||||
- Previous activations: {{previous_activations}}
|
||||
|
||||
Return a JSON object with an "ideas" array:
|
||||
|
||||
```json
|
||||
{
|
||||
"ideas": [
|
||||
{
|
||||
"title": "catchy name for the idea in German",
|
||||
"description": "2-3 sentences in German describing how it works",
|
||||
"productLink": "how this connects to the company's product/service",
|
||||
"leadCapture": "how contact data is collected",
|
||||
"relevance": 0.0-1.0,
|
||||
"estimatedBudgetMin": "minimum €",
|
||||
"estimatedBudgetMax": "maximum €",
|
||||
"difficulty": "easy|medium|hard",
|
||||
"instagramPotential": "high|medium|low"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Full document text for context:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
skill: SKILL-010
|
||||
name: AcceptanceReportGenerator
|
||||
tier: 3
|
||||
model: gpt-4o
|
||||
temperature: 0.1
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You generate a structured trade fair booth acceptance report (Standabnahme-Protokoll).
|
||||
Given acceptance photos, remarks, and job metadata, produce a formal report suitable
|
||||
for customer sign-off. The output language is German.
|
||||
|
||||
Instructions:
|
||||
1. Analyze each acceptance photo. Describe what is visible and note any issues.
|
||||
2. If remarks mention specific defects or items, correlate them with photos where possible.
|
||||
3. Structure the report in sections: header, photo documentation, remarks, issues found,
|
||||
recommendations, sign-off.
|
||||
4. Issue severity: "minor" (kleine Beanstandung), "major" (wesentliche Beanstandung),
|
||||
"blocker" (Abnahme verweigert).
|
||||
5. Be professional and factual. Do not invent issues that aren't visible or mentioned.
|
||||
6. Return ONLY valid JSON — this will be rendered into a PDF template.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Generate a structured acceptance report for this trade fair booth.
|
||||
|
||||
Job information:
|
||||
- Customer: {{customer_company}}
|
||||
- Fair: {{fair_name}}
|
||||
- Booth: {{booth_hall_and_stand}}, {{booth_size}} m², {{stand_type}}
|
||||
- Acceptance date: {{acceptance_date}}
|
||||
- Signed by customer: {{signed | "yes" | "no"}}
|
||||
|
||||
Photos available: {{photo_count}} photos
|
||||
|
||||
Remarks from project manager:
|
||||
"""
|
||||
{{acceptance_remarks}}
|
||||
"""
|
||||
|
||||
Return a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"header": {
|
||||
"title": "Standabnahme-Protokoll",
|
||||
"customer": "string",
|
||||
"fair": "string",
|
||||
"booth": "string",
|
||||
"date": "string",
|
||||
"conductedBy": "24HRS Messebau"
|
||||
},
|
||||
"summary": "1-sentence overall assessment in German",
|
||||
"photoDocumentation": [
|
||||
{
|
||||
"photoIndex": 0,
|
||||
"description": "German description of what the photo shows",
|
||||
"annotations": ["German annotation of visible element 1", "..."]
|
||||
}
|
||||
],
|
||||
"remarks": {
|
||||
"original": "raw remarks text",
|
||||
"structured": "structured version of remarks"
|
||||
},
|
||||
"issues": [
|
||||
{
|
||||
"description": "German description of the issue",
|
||||
"severity": "minor|major|blocker",
|
||||
"relatedPhotoIndex": "number or null",
|
||||
"requiresAction": true/false,
|
||||
"action": "what needs to be done (German)"
|
||||
}
|
||||
],
|
||||
"signOff": {
|
||||
"ready": true/false,
|
||||
"statement": "German sign-off statement",
|
||||
"customerSignaturePresent": true/false
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
skill: SKILL-011
|
||||
name: SetupProgressAnalyzer
|
||||
tier: 3
|
||||
model: gpt-4o
|
||||
temperature: 0.0
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt (Vision)
|
||||
|
||||
You compare trade fair booth construction progress photos to detect what has changed
|
||||
between two time points. This helps automatically update the construction checklist.
|
||||
|
||||
Instructions:
|
||||
1. You will receive two photos: an earlier one (Photo A) and a later one (Photo B).
|
||||
2. Identify structural changes between the two photos. Focus on construction-relevant
|
||||
changes only. Categories:
|
||||
- "walls" — wall frames, panels, backwalls erected or changed
|
||||
- "flooring" — flooring laid, changed, or completed
|
||||
- "graphics" — printed graphics, banners, signage mounted
|
||||
- "furniture" — furniture placed or rearranged
|
||||
- "lighting" — lighting fixtures installed or changed
|
||||
- "av_equipment" — screens, monitors, speakers installed
|
||||
- "cleaning" — booth cleaned, packaging removed
|
||||
- "decoration" — decorative elements, plants, props added
|
||||
- "no_change" — no significant structural change detected
|
||||
3. For each detected change, suggest which checklist item might be auto-checked.
|
||||
4. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Compare these two trade fair booth construction photos. Photo A is older, Photo B is newer.
|
||||
|
||||
Booth context:
|
||||
- Job: {{customer_company}} at {{fair_name}}
|
||||
- Booth: {{booth_info}}
|
||||
- Phase: {{current_workflow_phase}}
|
||||
|
||||
Describe what structural changes are visible between Photo A and Photo B.
|
||||
|
||||
Return a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"changes": [
|
||||
{
|
||||
"category": "walls|flooring|graphics|furniture|lighting|av_equipment|cleaning|decoration|no_change",
|
||||
"description": "German description of what changed",
|
||||
"suggestedChecklistItem": "German checklist item text that could be auto-checked, or null",
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
],
|
||||
"overallProgress": "1-sentence summary in German (e.g. 'Wände stehen, Grafiken fehlen noch')",
|
||||
"estimatedCompletionPercent": 0-100
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
skill: SKILL-012
|
||||
name: WeeklyProtocolSummarizer
|
||||
tier: 3
|
||||
model: gpt-4o-mini
|
||||
temperature: 0.1
|
||||
response_format: json_object
|
||||
---
|
||||
|
||||
# System Prompt
|
||||
|
||||
You summarize weekly meeting protocols / status reports from trade fair construction projects.
|
||||
Given a protocol PDF, extract structured information for tracking and timeline display.
|
||||
The output language is German.
|
||||
|
||||
Instructions:
|
||||
1. Extract the meeting/protocol date if mentioned. If not, use the document metadata date.
|
||||
2. Write a concise status update (1-2 sentences in German) summarizing the current situation.
|
||||
3. List all open items / action items / to-dos as a string array.
|
||||
4. List all decisions made in this meeting as a string array.
|
||||
5. List next steps / upcoming tasks as a string array.
|
||||
6. If participants are mentioned, list them.
|
||||
7. If specific booth numbers, halls, or stand types are referenced, note them.
|
||||
8. Do NOT invent information. Only extract what is explicitly stated.
|
||||
9. Return ONLY valid JSON.
|
||||
|
||||
# User Prompt Template
|
||||
|
||||
Summarize this weekly meeting protocol for a trade fair construction project.
|
||||
|
||||
Return a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"meetingDate": "YYYY-MM-DD or null if not found",
|
||||
"meetingTitle": "string or null",
|
||||
"participants": ["name strings or empty array"],
|
||||
"statusUpdate": "1-2 sentences in German",
|
||||
"openItems": ["string"],
|
||||
"decisions": ["string"],
|
||||
"nextSteps": ["string"],
|
||||
"boothsReferenced": ["hall/stand references"],
|
||||
"confidence": 0.0-1.0
|
||||
}
|
||||
```
|
||||
|
||||
Document text:
|
||||
"""
|
||||
{{document_text}}
|
||||
"""
|
||||
Reference in New Issue
Block a user