

Δημιουργήστε έναν AI Presentation Agent: Πλήρης Οδηγός για Προγραμματιστές
Οι AI agents μετασχηματίζουν τον τρόπο με τον οποίο το λογισμικό δημιουργεί περιεχόμενο. Ένας AI presentation agent μπορεί να δημιουργήσει, να προσαρμόσει και να παραδώσει επαγγελματικές παρουσιάσεις ως μέρος αυτοματοποιημένων ροών εργασίας — από CRM pipelines έως εσωτερικά εργαλεία αναφορών.
Αυτός ο οδηγός σας καθοδηγεί στη δημιουργία ενός production-ready presentation agent χρησιμοποιώντας το 2Slides API.
Επισκόπηση Αρχιτεκτονικής
Ένας presentation agent συνήθως ακολουθεί αυτή τη ροή:
User Request → Agent Logic → 2Slides API → Poll Job → Deliver Result ↓ Context Gathering (data, templates, brand assets)
Βασικά Στοιχεία
- Input Handler — λαμβάνει αιτήματα παρουσίασης (κείμενο, δεδομένα, αρχεία)
- Context Builder — εμπλουτίζει αιτήματα με templates, πληροφορίες brand, δεδομένα
- Generation Engine — καλεί το 2Slides API για τη δημιουργία slides
- Status Monitor — ελέγχει την κατάσταση της εργασίας μέχρι την ολοκλήρωση
- Delivery Layer — επιστρέφει links λήψης, αποστέλλει μέσω email, δημοσιεύει στο Slack
Ξεκινώντας
1. Αποκτήστε το API Key σας
Εγγραφείτε στο 2slides.com και δημιουργήστε ένα API key στο 2slides.com/api.
2. Εγκαταστήστε τις Εξαρτήσεις
npm install node-fetch dotenv
3. Βασική Υλοποίηση Agent
import fetch from 'node-fetch'; class PresentationAgent { constructor(apiKey) { this.apiKey = apiKey; this.baseUrl = 'https://2slides.com/api/v1'; } async generateSlides({ topic, themeId, language = 'en', resolution = '2K' }) { // Βήμα 1: Έναρξη δημιουργίας const response = await fetch(`${this.baseUrl}/slides/generate`, { method: 'POST', headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ userInput: topic, themeId, responseLanguage: language, resolution, mode: 'async' }) }); const job = await response.json(); if (!response.ok) throw new Error(job.error || 'Generation failed'); // Βήμα 2: Έλεγχος μέχρι την ολοκλήρωση return await this.waitForCompletion(job.jobId); } async waitForCompletion(jobId, maxWait = 300000) { const start = Date.now(); while (Date.now() - start < maxWait) { const response = await fetch(`${this.baseUrl}/jobs/${jobId}`, { headers: { 'Authorization': `Bearer ${this.apiKey}` } }); const status = await response.json(); if (status.status === 'success') return status; if (status.status === 'failed') throw new Error('Generation failed'); await new Promise(r => setTimeout(r, 3000)); } throw new Error('Generation timed out'); } async generateFromFile({ fileUrl, prompt, themeId }) { const response = await fetch(`${this.baseUrl}/slides/create-pdf-slides`, { method: 'POST', headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ fileUrl, userInput: prompt, themeId, mode: 'async' }) }); const job = await response.json(); return await this.waitForCompletion(job.jobId); } async generateWithDesign({ topic, referenceImageUrl, resolution = '2K' }) { const response = await fetch(`${this.baseUrl}/slides/create-like-this`, { method: 'POST', headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ userInput: topic, designStyle: { global: { referenceImageUrl } }, resolution, mode: 'async' }) }); const job = await response.json(); return await this.waitForCompletion(job.jobId); } async addNarration({ jobId, mode = 'single', voice = 'Charon' }) { const response = await fetch(`${this.baseUrl}/slides/generate-narration`, { method: 'POST', headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ jobId, mode, voice, contentMode: 'concise' }) }); return await response.json(); } } // Χρήση const agent = new PresentationAgent('sk-2slides-xxx'); const result = await agent.generateSlides({ topic: 'Επιχειρηματική Ανασκόπηση Α' Τριμήνου 2026', themeId: 'mckinsey-theme-id', resolution: '2K' }); console.log('Λήψη:', result.downloadUrl);
Υλοποίηση σε Python
import requests import time class PresentationAgent: def __init__(self, api_key): self.api_key = api_key self.base_url = 'https://2slides.com/api/v1' self.headers = { 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json' } def generate_slides(self, topic, theme_id=None, language='en', resolution='2K'): response = requests.post( f'{self.base_url}/slides/generate', headers=self.headers, json={ 'userInput': topic, 'themeId': theme_id, 'responseLanguage': language, 'resolution': resolution, 'mode': 'async' } ) response.raise_for_status() job = response.json() return self._wait_for_completion(job['jobId']) def generate_from_file(self, file_url, prompt, theme_id=None): response = requests.post( f'{self.base_url}/slides/create-pdf-slides', headers=self.headers, json={ 'fileUrl': file_url, 'userInput': prompt, 'themeId': theme_id, 'mode': 'async' } ) response.raise_for_status() job = response.json() return self._wait_for_completion(job['jobId']) def _wait_for_completion(self, job_id, max_wait=300): start = time.time() while time.time() - start < max_wait: response = requests.get( f'{self.base_url}/jobs/{job_id}', headers=self.headers ) status = response.json() if status['status'] == 'success': return status if status['status'] == 'failed': raise Exception('Η δημιουργία απέτυχε') time.sleep(3) raise TimeoutError('Η δημιουργία έληξε λόγω χρονικού ορίου') # Χρήση agent = PresentationAgent('sk-2slides-xxx') result = agent.generate_slides('Τάσεις AI 2026', resolution='4K') print(f"Λήψη: {result['downloadUrl']}")
Προηγμένα Μοτίβα
Μοτίβο 1: Δημιουργία Βασισμένη σε Πρότυπα
Προδιαμορφώστε θέματα για διαφορετικές περιπτώσεις χρήσης:
const TEMPLATES = { 'pitch-deck': { themeId: 'apple-id', resolution: '2K' }, 'quarterly-review': { themeId: 'mckinsey-id', resolution: '2K' }, 'training': { themeId: 'corporate-id', resolution: '1K' }, 'social-media': { themeId: 'saul-bass-id', resolution: '4K', aspectRatio: '1:1' }, }; async function generateByType(type, topic) { const config = TEMPLATES[type]; return agent.generateSlides({ topic, ...config }); }
Μοτίβο 2: Ενσωμάτωση Αγωγού Δεδομένων
Συνδεθείτε με τις πηγές δεδομένων σας:
async function weeklyReport(dataSource) { // 1. Ανάκτηση τελευταίων δεδομένων const data = await dataSource.getWeeklyMetrics(); // 2. Μορφοποίηση ως είσοδος παρουσίασης const topic = `Εβδομαδιαία Αναφορά: Έσοδα $${data.revenue}, Χρήστες ${data.users}, Απώλειες ${data.churn}%`; // 3. Δημιουργία slides const result = await agent.generateSlides({ topic, themeId: 'mckinsey-id' }); // 4. Παράδοση await slackBot.postMessage('#team-updates', `Εβδομαδιαία αναφορά έτοιμη: ${result.downloadUrl}`); }
Μοτίβο 3: Έξοδος Πολλαπλών Μορφών
Δημιουργήστε slides + αφήγηση + βίντεο σε έναν αγωγό:
async function fullPresentation(topic) { // 1. Δημιουργία slides const slides = await agent.generateSlides({ topic }); // 2. Προσθήκη φωνητικής αφήγησης await agent.addNarration({ jobId: slides.jobId, mode: 'multi', voice: 'Charon' }); // 3. Λήψη με ήχο const download = await fetch(`${agent.baseUrl}/slides/download-slides-pages-voices`, { method: 'POST', headers: agent.headers, body: JSON.stringify({ jobId: slides.jobId }) }); return download.json(); }
Παράγοντες Παραγωγής
Περιορισμός Ρυθμού
- Προεπιλογή: 60 αιτήματα/λεπτό
- Διαχειριστείτε απαντήσεις 429 με εκθετική υποχώρηση
- Χρησιμοποιήστε ασύγχρονη λειτουργία για δέσμες λειτουργιών
Διαχείριση Σφαλμάτων
- Τυλίξτε όλες τις κλήσεις API σε try/catch
- Εφαρμόστε λογική επανάληψης για παροδικές αποτυχίες
- Καταγράψτε job IDs για αποσφαλμάτωση
Διαχείριση Κόστους
- Παρακολουθήστε τη χρήση πιστώσεων ανά δημιουργία
- Ορίστε ειδοποιήσεις προϋπολογισμού στον πίνακα ελέγχου 2Slides
- Χρησιμοποιήστε χαμηλότερες αναλύσεις για εσωτερικό/προσχέδιο περιεχόμενο
Ασφάλεια
- Αποθηκεύστε κλειδιά API σε μεταβλητές περιβάλλοντος, ποτέ στον κώδικα
- Χρησιμοποιήστε κλήσεις API μόνο από την πλευρά του διακομιστή — ποτέ μην εκθέτετε κλειδιά σε πελάτες
- Εφαρμόστε υπογραφή αιτημάτων για webhook callbacks
Συχνές Ερωτήσεις
Μπορώ να δημιουργήσω ένα προϊόν SaaS πάνω στο 2Slides API;
Ναι — το API έχει σχεδιαστεί για χρήση σε παραγωγή. Δεν υπάρχουν περιορισμοί σε εμπορικές εφαρμογές.
Ποιο είναι το μέγιστο όριο ταυτόχρονης δημιουργίας;
Το API διαχειρίζεται ταυτόχρονα αιτήματα μέσω περιορισμού ρυθμού. Για ανάγκες μεγάλου όγκου, επικοινωνήστε με την ομάδα 2Slides για εταιρικά όρια.
Υπάρχει webhook για ολοκλήρωση εργασίας;
Προς το παρόν, χρησιμοποιήστε polling μέσω του jobs endpoint. Η υποστήριξη webhook βρίσκεται στο roadmap.
Δημιουργήστε τον δικό σας agent παρουσιάσεων — αποκτήστε το API key σας στο 2Slides και ξεκινήστε να δημιουργείτε slides προγραμματιστικά.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free