

System Prompts για AI Presentation Agents: Οδηγός Developer (2026)
Τα system prompts για AI presentation agents είναι διαφορετικά από τα user prompts — κωδικοποιούν τον ρόλο, τους περιορισμούς και το συμβόλαιο εξόδου του agent αντί για τη συγκεκριμένη εργασία. Ένα καλοφτιαγμένο system prompt μετατρέπει ένα γενικού σκοπού LLM σε αξιόπιστο slide-generation agent: συνεπή φωνή, προβλέψιμη δομή, και callable tool use. Αυτός ο οδηγός developer καλύπτει το template system prompt 7 ενοτήτων που χρησιμοποιείται σε production από το pipeline agent του ίδιου του 2Slides, ένα έτοιμο για επικόλληση system prompt για το χτίσιμο slide agent με Claude, GPT-4o ή DeepSeek, τα τρία anti-patterns που παράγουν αναξιόπιστη έξοδο, και πώς να ενσωματώσετε ένα system prompt με το 2Slides V1 API (generate, create-pdf-slides, create-like-this, generate-narration, jobs/:id, themes/search). Ο οδηγός τελειώνει με τρία παραδείγματα εργασίας: ένα pitch-deck agent που μετατρέπει σημειώσεις ιδρυτή σε decks επενδυτών, ένα board-deck agent που μορφοποιεί τριμηνιαίες μετρικές για εκτελεστικά κοινά, και ένα ingestion agent που μετατρέπει PDFs σε παρουσιάσεις.
Αν χτίζετε chatbot, coding assistant που αποστέλλει slide output, ή εσωτερικό εργαλείο που αυτοματοποιεί αναφορές, η διαφορά μεταξύ demo και production είναι σχεδόν εξ ολοκλήρου στο system prompt. Αυτός ο οδηγός είναι γραμμένος για κοινό developer: χωρίς marketing fluff, πραγματικός κώδικας, πραγματικά endpoints.
System Prompts vs User Prompts: Ποια είναι η πραγματική διαφορά;
Ένα user prompt είναι η εργασία. Ένα system prompt είναι το εγχειρίδιο λειτουργίας.
Όταν ένας product manager πληκτρολογεί «φτιάξε μου 10 διαφάνειες για τα έσοδα Q3», αυτό είναι user prompt. Όταν ο agent σας επιστρέφει σταθερά έγκυρο JSON, ποτέ δεν υπερβαίνει τον προϋπολογισμό διαφανειών σας, πάντα αναφέρει πηγές στις σημειώσεις ομιλητή, και καλεί το endpoint
create-pdf-slidesΣτα APIs OpenAI, Anthropic και Google, το system prompt είναι ξεχωριστό πεδίο (
systemsystemsystemInstruction- Ορισμό ρόλου — τι είδους agent είναι αυτός
- Συμβόλαια εξόδου — JSON schema, markdown format, ή σχήμα tool-call
- Σκληρούς περιορισμούς — όρια λέξεων, κανόνες τόνου, απαγορευμένο περιεχόμενο
- Inventory εργαλείων/API — ποιες συναρτήσεις μπορούν να κληθούν και πότε
- Κανόνες escalation — πότε να αρνηθεί, να ζητήσει διευκρίνιση, ή να περάσει τη δουλειά αλλού
Τα user prompts που προσπαθούν να κωδικοποιήσουν όλα αυτά σπάνε τη στιγμή που το κείμενο εργασίας του χρήστη γίνεται μεγάλο. Τα system prompts επιβιώνουν κάθε turn.
Το template system prompt 7 ενοτήτων
Κάθε αξιόπιστος slide-generation agent που έχουμε αποστείλει ή ελέγξει στο 2Slides χρησιμοποιεί κάποια παραλλαγή αυτής της δομής επτά ενοτήτων. Η σειρά έχει σημασία — τα LLMs ζυγίζουν βαρύτερα τις προγενέστερες οδηγίες, οπότε ο ρόλος και το συμβόλαιο έρχονται πρώτα, τα παραδείγματα εργασίας έρχονται τελευταία.
- Ταυτότητα & Ρόλος — μονο-παραγραφική περιγραφή του ποιος είναι ο agent και τι κάνει
- Συμβόλαιο εξόδου — ακριβές schema ή μορφή που ο agent πρέπει να επιστρέψει
- Σκληροί περιορισμοί — μη διαπραγματεύσιμοι κανόνες (μήκος, τόνος, απαγορευμένα μοτίβα)
- Inventory εργαλείων — κάθε διαθέσιμο API ή συνάρτηση, με καθοδήγηση when-to-call
- Πολιτική συλλογισμού — πώς ο agent πρέπει να σκέφτεται (chain-of-thought, self-check, escalation)
- Χειρισμός αποτυχιών — τι να κάνει όταν η είσοδος είναι ασαφής, κακοδιατυπωμένη ή εκτός θέματος
- Παραδείγματα εργασίας — δύο έως τέσσερα πλήρη ζεύγη input/output που δείχνουν τη σωστή συμπεριφορά
Το template είναι σκόπιμα επιδεικτικό. Όταν ελέγχουμε agents που συμπεριφέρονται κακώς σε production, η αιτία είναι σχεδόν πάντα μια ενότητα που λείπει και όχι μια κακή. Agents χωρίς inventory εργαλείων παραισθάνονται endpoints. Agents χωρίς ενότητα χειρισμού αποτυχιών εφευρίσκουν δεδομένα όταν οι είσοδοι είναι αραιές. Agents χωρίς παραδείγματα εργασίας παρεκκλίνουν τον τόνο σε μακρές συνομιλίες.
Production-Ready System Prompt (έτοιμο για επικόλληση)
Εδώ είναι το πλήρες template, συμπληρωμένο για slide-generation agent που χρησιμοποιεί το 2Slides V1 API ως backend. Επικολλήστε το στο πεδίο
system# Identity & Role You are SlideAgent, a presentation-generation assistant. Your job is to take unstructured user input (notes, transcripts, PDFs, raw data) and return a structured slide deck specification that can be rendered by the 2Slides V1 API. You are not a general-purpose chatbot. You do not answer trivia, write code, or hold long conversations. You produce slide decks, then stop. # Output Contract For every user turn that describes a deck to be built, you MUST output a single JSON object matching this schema: { "title": string, // 3-10 words, title case "audience": string, // e.g. "series-a investors", "exec staff" "tone": "formal" | "conversational" | "technical", "slide_count": integer, // 5 <= n <= 40 "language": string, // ISO 639-1 code, default "en" "theme_hint": string, // free-text, will be passed to themes/search "slides": [ { "layout": "title" | "content" | "two-column" | "quote" | "chart" | "image", "heading": string, // <= 12 words "bullets": string[], // 0-5 items, each <= 18 words "speaker_notes": string, // 30-80 words, full sentences "image_prompt": string?, // optional, for image layouts "chart_data": object? // optional, for chart layouts } ], "api_call": { "endpoint": "generate" | "create-pdf-slides" | "create-like-this", "reasoning": string // one sentence: why this endpoint } } No prose before or after the JSON. No markdown fences around the JSON. If the user asks a question that is not a deck request, return: { "error": "not_a_deck_request", "suggestion": string } # Hard Constraints - Never exceed 40 slides. If the user asks for more, cap at 40 and note it in speaker_notes of slide 1. - Every slide must have speaker_notes. Empty speaker_notes is a bug. - Bullets must be parallel grammatically (all start with verb, or all noun phrases — never mixed). - Do not invent statistics. If the user did not provide a number, do not write one. Use "[source needed]" as a placeholder. - Do not include contact information, phone numbers, or email addresses unless the user explicitly provided them. - Titles are title case. Bullets are sentence case. No ALL CAPS. - Refuse to produce content that is defamatory, or that makes medical, legal, or financial claims the user did not source. # Tool Inventory (2Slides V1 API) You may direct the calling code to invoke these endpoints. You do not call them yourself; you name them in the "api_call" field. - generate — Default. Text-in, deck-out. Use for most requests. - create-pdf-slides — When the user uploaded or pasted a PDF URL. Pass the PDF URL in the user prompt. - create-like-this — When the user said "like my last deck" or provided a reference deck URL. Reuses theme + structure. - generate-narration — After a deck is built, to add TTS voiceover to each slide. Only call when user asks for video or narration explicitly. - download-slides-pages-voices — Batch download rendered pages and audio. Call at the end of a video workflow. - jobs/:id — Poll for async job status. The calling code handles polling; you do not. - themes/search — Find a theme by keyword. Your "theme_hint" field will be passed here by the calling code. # Reasoning Policy Before emitting JSON, think step by step inside <thinking> tags: 1. Parse the user input. What is the actual deck about? 2. Identify the audience. Investors? Engineers? Board? Sales team? 3. Choose slide_count based on content density, not user flattery. 4. Select endpoint: generate (default) | create-pdf-slides | create-like-this. 5. Draft the outline, then self-check: are bullets parallel? Are numbers sourced? After </thinking>, emit the JSON object. Do not include the thinking in the final output — the calling code strips <thinking> blocks before rendering. # Failure Handling - Ambiguous topic: ask ONE clarifying question in the "suggestion" field of an error response. Do not ask multiple questions. - Malformed input (user pasted gibberish): return { "error": "unintelligible_input", "suggestion": "..." }. - Conflicting instructions (user wants 50 slides in 5 minutes): honor the hard constraint (max 40) and note the conflict in slide 1 speaker_notes. - PDF URL that looks invalid: still emit the JSON with api_call = create-pdf-slides; the backend will return a clear error if the URL cannot be fetched. # Worked Examples ## Example 1: Minimal input User: "make me a deck about our Q3 revenue, we hit $4.2M, up 30% YoY, audience is the board" <thinking> Board audience -> formal tone. Revenue deck -> 8-12 slides is standard. Numbers are sourced (user provided them). Endpoint: generate. </thinking> { "title": "Q3 Revenue Review", "audience": "board of directors", "tone": "formal", "slide_count": 10, "language": "en", "theme_hint": "minimal corporate finance", "slides": [ { "layout": "title", "heading": "Q3 Revenue Review", "bullets": [], "speaker_notes": "Opening slide. ..." }, ... ], "api_call": { "endpoint": "generate", "reasoning": "Text-only input, no reference deck or PDF." } } ## Example 2: PDF ingestion User: "turn this whitepaper into a 12-slide summary for engineers: https://example.com/whitepaper.pdf" <thinking> PDF URL present -> create-pdf-slides. Engineer audience -> technical tone. User specified 12 slides -> honor it. </thinking> { "title": "Whitepaper Summary", "audience": "software engineers", "tone": "technical", "slide_count": 12, "language": "en", "theme_hint": "technical documentation dark", "slides": [ ... ], "api_call": { "endpoint": "create-pdf-slides", "reasoning": "User supplied PDF URL." } } ## Example 3: Not a deck request User: "what is the capital of France?" { "error": "not_a_deck_request", "suggestion": "I build slide decks. Try: 'make a 5-slide briefing on France'." }
Το παραπάνω prompt είναι περίπου 1.800 tokens. Αυτό είναι το ανώτατο όριο που συνιστούμε — οτιδήποτε μακρύτερο αρχίζει να συνωστίζει την πραγματική είσοδο του χρήστη σε μοντέλα με παράθυρο context 8k ή 16k. Για μοντέλα context 200k μπορείτε με ασφάλεια να επεκτείνετε τα παραδείγματα εργασίας για να καλύψετε περισσότερες ακραίες περιπτώσεις.
Ενσωμάτωση με το 2Slides V1 API
Το system prompt κατονομάζει endpoints· ο κώδικας κλήσης τα καλεί. Εδώ είναι τι κάνει κάθε endpoint και πότε ο agent σας πρέπει να το φτάσει.
- — Το workhorse. Δέχεται text prompt συν προαιρετικά δομημένα hints (αριθμό διαφανειών, γλώσσα, theme ID) και επιστρέφει job ID. Το ενενήντα τοις εκατό της κίνησης agent χτυπάει αυτό το endpoint.
POST /api/v1/slides/generate - — Δέχεται PDF URL και το μετατρέπει σε deck. Χρησιμοποιήστε όταν ο χρήστης ανεβάζει έγγραφο. Χειρίζεται εξαγωγή, chunking και σύνοψη server-side ώστε ο agent σας να μη χρειάζεται PDF parser.
POST /api/v1/slides/create-pdf-slides - — Δέχεται URL αναφοράς deck ή ID και νέο θέμα. Επαναχρησιμοποιεί το οπτικό theme και τον δομικό ρυθμό της αναφοράς. Χρησιμοποιήστε για ροές εργασίας «κάν' το να μοιάζει με το τελευταίο μας board deck».
POST /api/v1/slides/create-like-this - — Προσθέτει TTS voiceover σε υπάρχον deck. Επιστρέφει URLs ήχου ανά διαφάνεια. Αλυσιδώστε το μετά το
POST /api/v1/slides/generate-narrationόταν η κατάντη έξοδος είναι video.generate - — Endpoint batch που επιστρέφει rendered page images και ήχο narration σε μία απόκριση. Χρησιμοποιήστε στο τελικό βήμα ενός pipeline εξαγωγής video.
GET /api/v1/slides/download-slides-pages-voices - — Endpoint polling. Ο agent σας δεν το καλεί· ο κώδικας κλήσης σας το κάνει. Επιστρέφει
GET /api/v1/jobs/:id,pending,processingήsuccessσυν το τελικό URL deck κατά την ολοκλήρωση.failed - — Αναζήτηση λέξης-κλειδιού στη δημόσια βιβλιοθήκη theme. Περάστε το πεδίο
GET /api/v1/themes/search?q=...από την έξοδο του system-prompt σας εδώ για να το μεταφράσετε σε συγκεκριμένο theme ID πριν καλέσετε τοtheme_hint.generate
Ένα πλήρες loop agent μοιάζει έτσι σε pseudocode:
const completion = await llm.messages.create({ system: SYSTEM_PROMPT, // the 7-section template above messages: [{ role: "user", content: userInput }], }); const spec = JSON.parse(stripThinking(completion.content)); if (spec.error) return handleError(spec); const theme = await fetch(`/api/v1/themes/search?q=${spec.theme_hint}`); const job = await fetch(`/api/v1/slides/${spec.api_call.endpoint}`, { method: "POST", body: JSON.stringify({ ...spec, themeId: theme.id }), }); const result = await pollJob(job.id); // hits /api/v1/jobs/:id return result.deckUrl;
Αν είστε νέοι στο σχήμα του API, ο οδηγός developer για το χτίσιμο AI presentation agent διατρέχει την πλήρη ροή με λειτουργικό TypeScript. Για υψηλότερου επιπέδου αρχιτεκτονική βασισμένη σε skill — όπου το system prompt είναι απλά ένα skill μεταξύ πολλών — δείτε την επισκόπηση skills AI slide agent.
3 Anti-Patterns που σπάνε τους Slide Agents
Αφού αναθεωρήσαμε δεκάδες agents production — από εσωτερικά εργαλεία analytics έως δημόσιους sales copilots — οι ίδιοι τρεις τρόποι αποτυχίας εμφανίζονται ξανά και ξανά.
Anti-Pattern 1: Το αδέσμευτο συμβόλαιο εξόδου
Σύμπτωμα: Ο agent μερικές φορές επιστρέφει JSON, άλλες φορές markdown, άλλες φορές ευγενική παράγραφο. Ο parser σας πετάει
SyntaxError: Unexpected tokenΑιτία: Το system prompt λέει «επιστρέψτε slide deck» χωρίς να καθορίζει το ακριβές σχήμα, ή καθορίζει σχήμα αλλά επιτρέπει πρόζα γύρω του.
Διόρθωση: Γράψτε το schema στο system prompt. Πείτε ρητά: «Χωρίς πρόζα πριν ή μετά το JSON. Χωρίς markdown fences γύρω από το JSON». Έπειτα τρέξτε κάθε έξοδο μέσα από validator (Zod, Pydantic, io-ts) και κάντε retry σε αποτυχία. Αντιμετωπίστε τη συμμόρφωση schema ως σκληρή απαίτηση προϊόντος, όχι ως nice-to-have.
Anti-Pattern 2: Παρέκκλιση Tool Inventory
Σύμπτωμα: Ο agent λέει αυτοπεποίθητα στον χρήστη «Θα καλέσω το endpoint
refine-deckΑιτία: Το system prompt αναφέρει εργαλεία σε πρόζα παρά σε δομημένο inventory, οπότε το μοντέλο παραισθάνεται παραλλαγές. Ή το inventory είναι out of date αφού λανσαρίσατε νέα endpoints.
Διόρθωση: Διατηρήστε ενιαίο κανονικό inventory εργαλείων στο system prompt, ανανεωμένο κάθε φορά που αλλάζει το API. Αν το API σας έχει 7 endpoints, παραθέστε ακριβώς 7, το καθένα με μία γραμμή που περιγράφει πότε να κληθεί. Απαγορεύστε στο μοντέλο να κατονομάζει οτιδήποτε άλλο — «Αν κανένα από τα παραπάνω endpoints δεν εφαρμόζεται, επιστρέψτε
api_call: nullAnti-Pattern 3: Παραίσθηση στατιστικών
Σύμπτωμα: Ο χρήστης λέει «φτιάξε deck για τους αριθμούς μας Q3» χωρίς να παρέχει αριθμούς. Ο agent χαρούμενα γράφει «Τα έσοδα αυξήθηκαν 47,3% σε 8,2 εκατ. $». Ο CFO εξοργίζεται.
Αιτία: Κανένας σκληρός περιορισμός δεν απαγορεύει την εφεύρεση δεδομένων. Το μοντέλο προεπιλέγει εύλογης ακοής φαντασία επειδή αυτό κάνουν τα περισσότερα LLMs όταν υπο-καθορίζονται.
Διόρθωση: Προσθέστε ρητό κανόνα: «Μην εφεύρεις στατιστικά. Αν ο χρήστης δεν παρείχε αριθμό, χρησιμοποιήστε
[source needed]Παράδειγμα εργασίας 1: Pitch-Deck Agent
Ο pitch-deck agent μετατρέπει σημειώσεις ιδρυτή σε 10-σλιδο deck επενδυτών. Προσθέστε αυτές τις γραμμές στο βασικό system prompt:
# Specialization: Pitch-Deck Mode When building a pitch deck, use exactly this structure: 1. Title 2. Problem 3. Solution 4. Market size (TAM/SAM/SOM) 5. Product demo / screenshot 6. Traction metrics 7. Business model 8. Competition 9. Team 10. Ask (funding amount + use of funds) Force slide_count = 10. Force tone = "conversational but confident." If the user did not provide a number for market size, traction, or ask, use "[source needed]" — do not invent.
Δείγμα εισόδου: «B2B SaaS για οδοντιατρικά γραφεία, τους βοηθάμε να αυτοματοποιήσουν τις απαιτήσεις ασφάλισης, έχουμε 12 πελάτες που πληρώνουν, αντλούμε 1,5 εκατ. $ seed».
Δείγμα εξόδου (συντομευμένο): JSON δέκα διαφανειών με τη σταθερή δομή,
api_call.endpoint = "generate"theme_hint = "pitch deck modern gradient"["12 οδοντιατρικά γραφεία που πληρώνουν", "[source needed] — MRR", "[source needed] — διατήρηση"]Παράδειγμα εργασίας 2: Board-Deck Agent
Τα board decks έχουν διαφορετικό συμβόλαιο: formal τόνος, πυκνοί πίνακες, μηδέν emoji, συγκεκριμένη σειρά διαφανειών που περιμένουν οι CFOs. Προσθέστε:
# Specialization: Board-Deck Mode Use exactly this structure for board meetings: 1. Executive summary (3 bullets) 2. Financials (revenue, margin, runway) 3. KPI scorecard (table layout) 4. Strategic initiatives (status + risk) 5. Hiring plan 6. Risks & mitigations 7. Asks from the board Force tone = "formal." Force language to match user locale. Every number must have a source in speaker_notes. No image slides — board decks are text and tables.
Ο board-deck agent συνεργάζεται καλά με το
create-like-thisΠαράδειγμα εργασίας 3: Agent ingestion PDF-σε-Deck
Αυτός ο agent μετατρέπει whitepapers πελατών, PDFs έρευνας ή RFPs σε εύπεπτα decks σύνοψης. Είναι το απλούστερο για να χτίσετε επειδή το endpoint
create-pdf-slides# Specialization: PDF Ingestion Mode Trigger: user provides a URL ending in .pdf OR explicitly says "turn this PDF/whitepaper/report into slides." Always set api_call.endpoint = "create-pdf-slides". Set slide_count based on PDF length: - < 5 pages -> 5 slides - 5-20 pages -> 8-12 slides - 20-50 pages -> 15-20 slides - > 50 pages -> 25-30 slides (cap at 30) Extract the PDF title for the deck title. If the user specified an audience different from the PDF's original audience, flag that in slide 1 speaker_notes so the renderer knows to adapt tone.
Για agents που ζουν εντός Claude Desktop ή παρόμοιου MCP host, η ροή ingestion PDF μπορεί να συνδεθεί σε λιγότερο από μία ώρα — δείτε πώς να χρησιμοποιήσετε Claude MCP για να παράγετε παρουσιάσεις για το πλήρες walkthrough.
Συχνές ερωτήσεις
Πρέπει να βάλω το system prompt σε κώδικα ή σε βάση δεδομένων;
Για production agents, βάλτε το σε version control (ως αρχείο
.mdΠόσο μακρύ πρέπει να είναι ένα system prompt;
Για slide-generation agents, 1.500 έως 2.500 tokens είναι το γλυκό σημείο. Συντομότερα prompts παραλείπουν περιορισμούς και αποτυγχάνουν σε ακραίες περιπτώσεις. Μακρύτερα prompts συνωστίζουν την πραγματική είσοδο του χρήστη σε μοντέλα μικρότερου context και συχνά επαναλαμβάνουν τον εαυτό τους. Αν είστε πάνω από 3.000 tokens, ελέγξτε για πλεονασμό — ο ίδιος κανόνας πιθανώς δηλώνεται δύο φορές.
Χρειάζομαι διαφορετικά system prompts για Claude vs GPT-4o vs DeepSeek;
Μικρές προσαρμογές μόνο. Το template 7 ενοτήτων δουλεύει και στα τρία. Το Claude ανταποκρίνεται καλά σε XML-tag scaffolding (
<thinking><output>Μπορώ να ενημερώσω το system prompt χωρίς redeploying;
Ναι — και θα πρέπει να μπορείτε, για γρήγορη επανάληψη. Αποθηκεύστε το prompt σε environment variable ή σε feature-flag service ώστε το SRE να μπορεί να κάνει rollback κακό prompt σε δευτερόλεπτα. Αντιμετωπίστε ένα κακό prompt όπως κακό deploy: είναι συμβάν production και χρειάζεται τους ίδιους ελέγχους blast-radius.
Πώς δοκιμάζω ένα system prompt;
Χτίστε regression set 50 έως 200 ζευγαριών input/output που καλύπτει την πραγματική κατανομή χρηστών σας: happy-path decks, επιθετικές εισόδους, προσπάθειες malformed JSON, αιτήματα εκτός θέματος. Τρέξτε το πλήρες set σε κάθε αλλαγή prompt και βαθμολογήστε συμμόρφωση schema συν ανθρώπινα-βαθμολογημένη ποιότητα. Αυτή είναι η μοναδική υψηλότερης μόχλευσης μηχανική επένδυση για αξιοπιστία agent.
Το συμπέρασμα
Ένα system prompt είναι υποδομή, όχι copy. Είναι το πράγμα που μετατρέπει ένα γενικόλογο LLM σε αξιόπιστο slide-generation agent με γνωστό συμβόλαιο εξόδου, σταθερό inventory εργαλείων και προβλέψιμους τρόπους αποτυχίας. Οι developers που αντιμετωπίζουν το system prompt ως product artifact — versioned, tested, monitored — αποστέλλουν agents που επιβιώνουν επαφής με πραγματικούς χρήστες. Οι developers που το αντιμετωπίζουν ως one-time άσκηση prompt-engineering αποστέλλουν demos.
Το template 7 ενοτήτων και το έτοιμο-για-production παράδειγμα σε αυτόν τον οδηγό είναι η αφετηρία, όχι το τέλος. Κάντε fork, εξειδικεύστε τα για την περίπτωση χρήσης σας, συνδέστε τα στο 2Slides V1 API και — πιο σημαντικό — χτίστε το regression harness πριν λανσάρετε. Οι agents που κερδίζουν το 2026 είναι αυτοί των οποίων τα prompts είναι σχεδιασμένα με την ίδια αυστηρότητα όπως ο κώδικάς τους.
Λανσάρετε το slide agent σας σε production — αποκτήστε ένα 2Slides API key ή εξερευνήστε τον MCP server.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free