Η κατανόηση του context είναι απαραίτητη για τη δημιουργία εφαρμογών AI που πραγματικά λειτουργούν. Αυτό το κεφάλαιο καλύπτει ό,τι χρειάζεται να ξέρεις για να δίνεις στο AI τη σωστή πληροφορία τη σωστή στιγμή.

<Callout type="info" title="Γιατί Έχει Σημασία το Context">
Τα μοντέλα AI είναι stateless. Δεν θυμούνται προηγούμενες συνομιλίες. Κάθε φορά που στέλνεις ένα μήνυμα, πρέπει να συμπεριλαμβάνεις ό,τι χρειάζεται να ξέρει το AI. Αυτό ονομάζεται "context engineering."
</Callout>

## Τι είναι το Context;

Το context είναι όλες οι πληροφορίες που δίνεις στο AI μαζί με την ερώτησή σου. Σκέψου το έτσι:

<Compare 
  before={{ label: "Χωρίς Context", content: "Ποια είναι η κατάσταση;" }}
  after={{ label: "Με Context", content: "Είσαι βοηθός διαχείρισης έργων. Ο χρήστης δουλεύει στο Project Alpha, που λήγει Παρασκευή. Η τελευταία ενημέρωση ήταν: 'Backend ολοκληρωμένο, frontend 80% έτοιμο.'\n\nΧρήστης: Ποια είναι η κατάσταση;" }}
/>

Χωρίς context, το AI δεν έχει ιδέα για ποια "κατάσταση" ρωτάς. Με context, μπορεί να δώσει χρήσιμη απάντηση.

### Το Παράθυρο Context

Θυμήσου από προηγούμενα κεφάλαια: το AI έχει περιορισμένο "παράθυρο context" - τη μέγιστη ποσότητα κειμένου που μπορεί να δει ταυτόχρονα. Αυτό περιλαμβάνει:

<InfoGrid items={[
  { label: "System Prompt", description: "Οδηγίες που ορίζουν τη συμπεριφορά AI", color: "purple" },
  { label: "Ιστορικό Συνομιλίας", description: "Προηγούμενα μηνύματα σε αυτό το chat", color: "blue" },
  { label: "Ανακτημένες Πληροφορίες", description: "Έγγραφα, δεδομένα, ή γνώση που ανακτήθηκαν για αυτό το ερώτημα", color: "green" },
  { label: "Τρέχον Ερώτημα", description: "Η πραγματική ερώτηση του χρήστη", color: "amber" },
  { label: "Απάντηση AI", description: "Η απάντηση (μετράει επίσης στο όριο!)", color: "rose" },
]} />

## Το AI είναι Stateless

<Callout type="warning" title="Σημαντική Έννοια">
Το AI δεν θυμάται τίποτα μεταξύ συνομιλιών. Κάθε κλήση API ξεκινά από την αρχή. Αν θέλεις το AI να "θυμάται" κάτι, ΕΣΕΙΣ πρέπει να το συμπεριλαμβάνεις στο context κάθε φορά.
</Callout>

Γι' αυτό τα chatbots στέλνουν ολόκληρο το ιστορικό συνομιλίας με κάθε μήνυμα. Δεν είναι ότι το AI θυμάται - είναι ότι η εφαρμογή ξαναστέλνει τα πάντα.

<TryIt compact prompt={`Προσποιήσου ότι αυτή είναι νέα συνομιλία χωρίς ιστορικό.

Τι μόλις σε ρώτησα;`} />

Το AI θα πει ότι δεν ξέρει γιατί πραγματικά δεν έχει πρόσβαση σε προηγούμενο context.

## RAG: Retrieval-Augmented Generation

Το RAG είναι μια τεχνική για να δίνεις στο AI πρόσβαση σε γνώση στην οποία δεν εκπαιδεύτηκε. Αντί να προσπαθείς να χωρέσεις τα πάντα στην εκπαίδευση του AI:

1. **Αποθήκευσε** τα έγγραφά σου σε αναζητήσιμη βάση δεδομένων
2. **Αναζήτησε** σχετικά έγγραφα όταν ένας χρήστης κάνει ερώτηση
3. **Ανάκτησε** τα πιο σχετικά τμήματα
4. **Ενίσχυσε** το prompt σου με αυτά τα τμήματα
5. **Δημιούργησε** απάντηση χρησιμοποιώντας αυτό το context

<div className="my-6 p-4 border rounded-lg bg-muted/30">
  <p className="font-semibold mb-3">Πώς Λειτουργεί το RAG:</p>
  <div className="flex flex-col gap-2 text-sm">
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">1</span>
      <span>Ο χρήστης ρωτά: "Ποια είναι η πολιτική επιστροφών;"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">2</span>
      <span>Το σύστημα αναζητά στα έγγραφά σου για "πολιτική επιστροφών"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">3</span>
      <span>Βρίσκει σχετικό τμήμα από το έγγραφο πολιτικής σου</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">4</span>
      <span>Στέλνει στο AI: "Βάσει αυτής της πολιτικής: [κείμενο], απάντησε: Ποια είναι η πολιτική επιστροφών;"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-green-100 dark:bg-green-900 flex items-center justify-center text-green-600 font-bold">5</span>
      <span>Το AI δημιουργεί ακριβή απάντηση χρησιμοποιώντας την πραγματική σου πολιτική</span>
    </div>
  </div>
</div>

### Γιατί RAG;

<div className="my-6 grid md:grid-cols-2 gap-4">
  <div className="p-4 border rounded-lg">
    <p className="font-semibold text-green-600 dark:text-green-400 mb-2 flex items-center gap-2"><IconCheck className="text-green-600" /> Πλεονεκτήματα RAG</p>
    <ul className="text-sm space-y-1 text-muted-foreground">
      <li>Χρησιμοποιεί τα πραγματικά, τρέχοντα δεδομένα σου</li>
      <li>Μειώνει τις ψευδαισθήσεις</li>
      <li>Μπορεί να αναφέρει πηγές</li>
      <li>Εύκολη ενημέρωση (απλά ενημέρωσε τα έγγραφα)</li>
      <li>Δεν χρειάζεται ακριβό fine-tuning</li>
    </ul>
  </div>
  <div className="p-4 border rounded-lg">
    <p className="font-semibold text-amber-600 dark:text-amber-400 mb-2 flex items-center gap-2"><IconLightbulb className="text-amber-600" /> Πότε να Χρησιμοποιήσεις RAG</p>
    <ul className="text-sm space-y-1 text-muted-foreground">
      <li>Bots υποστήριξης πελατών</li>
      <li>Αναζήτηση τεκμηρίωσης</li>
      <li>Εσωτερικές βάσεις γνώσης</li>
      <li>Οποιοδήποτε Q&A ειδικού τομέα</li>
      <li>Όταν η ακρίβεια έχει σημασία</li>
    </ul>
  </div>
</div>

## Embeddings: Πώς Λειτουργεί η Αναζήτηση

Πώς ξέρει το RAG ποια έγγραφα είναι "σχετικά"; Χρησιμοποιεί **embeddings** - έναν τρόπο να μετατρέπει κείμενο σε αριθμούς που αποτυπώνουν νόημα.

### Τι Είναι τα Embeddings;

Ένα embedding είναι μια λίστα αριθμών (ένα "διάνυσμα") που αντιπροσωπεύει το νόημα κειμένου. Παρόμοια νοήματα = παρόμοιοι αριθμοί.

<EmbeddingsDemo />

### Σημασιολογική Αναζήτηση

Με embeddings, μπορείς να αναζητάς με νόημα, όχι μόνο λέξεις-κλειδιά:

<Compare 
  before={{ label: "Αναζήτηση Λέξεων-Κλειδιών", content: "Ερώτημα: 'πολιτική επιστροφών'\nΒρίσκει: Έγγραφα που περιέχουν 'επιστροφή' και 'πολιτική'\nΧάνει: 'Πώς να πάρεις επιστροφή χρημάτων'" }}
  after={{ label: "Σημασιολογική Αναζήτηση", content: "Ερώτημα: 'πολιτική επιστροφών'\nΒρίσκει: Όλα τα σχετικά έγγραφα συμπεριλαμβανομένων:\n- 'Οδηγίες επιστροφής χρημάτων'\n- 'Πώς να στείλεις πίσω αντικείμενα'\n- 'Εγγύηση επιστροφής χρημάτων'" }}
/>

Γι' αυτό το RAG είναι τόσο ισχυρό - βρίσκει σχετικές πληροφορίες ακόμα κι όταν οι ακριβείς λέξεις δεν ταιριάζουν.

## Function Calling / Χρήση Εργαλείων

Το function calling επιτρέπει στο AI να χρησιμοποιεί εξωτερικά εργαλεία - όπως αναζήτηση στο web, έλεγχο βάσης δεδομένων, ή κλήση API.

<Callout type="tip" title="Επίσης Ονομάζεται">
Διαφορετικοί πάροχοι AI το ονομάζουν διαφορετικά: "function calling" (OpenAI), "tool use" (Anthropic/Claude), ή "tools" (γενικός όρος). Όλα σημαίνουν το ίδιο.
</Callout>

### Πώς Λειτουργεί

1. Λες στο AI ποια εργαλεία είναι διαθέσιμα
2. Το AI αποφασίζει αν χρειάζεται εργαλείο για να απαντήσει
3. Το AI εξάγει δομημένο αίτημα για το εργαλείο
4. Ο κώδικάς σου εκτελεί το εργαλείο και επιστρέφει αποτελέσματα
5. Το AI χρησιμοποιεί τα αποτελέσματα για να διαμορφώσει την απάντησή του

<TryIt 
  title="Παράδειγμα Function Calling"
  description="Αυτό το prompt δείχνει πώς το AI αποφασίζει να χρησιμοποιήσει εργαλείο:"
  prompt={`Έχεις πρόσβαση σε αυτά τα εργαλεία:

1. get_weather(city: string) - Λάβε τρέχοντα καιρό για πόλη
2. search_web(query: string) - Αναζήτησε στο internet
3. calculate(expression: string) - Κάνε μαθηματικούς υπολογισμούς

Χρήστης: Πώς είναι ο καιρός στο Τόκιο τώρα;

Σκέψου βήμα-βήμα: Χρειάζεσαι εργαλείο; Ποιο; Ποιες παραμέτρους;`}
/>

## Σύνοψη: Διαχείριση Μακρών Συνομιλιών

Καθώς οι συνομιλίες γίνονται μεγαλύτερες, θα φτάσεις το όριο του παραθύρου context. Δεδομένου ότι το AI είναι stateless (δεν θυμάται τίποτα), μακριές συνομιλίες μπορούν να υπερχειλίσουν. Η λύση; **Σύνοψη**.

### Το Πρόβλημα

<Compare 
  before={{ label: "Χωρίς Σύνοψη", content: "Μήνυμα 1 (500 tokens)\nΜήνυμα 2 (800 tokens)\nΜήνυμα 3 (600 tokens)\n... 50 ακόμα μηνύματα ...\n────────────────────\n= 40,000+ tokens\n= ΥΠΕΡΒΑΣΗ ΟΡΙΟΥ!" }}
  after={{ label: "Με Σύνοψη", content: "[Σύνοψη]: 200 tokens\nΠρόσφατα μηνύματα: 2,000 tokens\nΤρέχον ερώτημα: 100 tokens\n────────────────────\n= 2,300 tokens\n= Χωράει τέλεια!" }}
/>

### Στρατηγικές Σύνοψης

Διαφορετικές προσεγγίσεις λειτουργούν για διαφορετικές περιπτώσεις χρήσης. Κάνε κλικ σε κάθε στρατηγική για να δεις πώς επεξεργάζεται την ίδια συνομιλία:

<SummarizationDemo />

### Τι να Αποτυπώνεις στις Συνόψεις

Μια καλή σύνοψη συνομιλίας διατηρεί ό,τι έχει σημασία:

<Checklist 
  title="Λίστα Ελέγχου Σύνοψης"
  items={[
    { text: "Βασικές αποφάσεις που λήφθηκαν" },
    { text: "Σημαντικά γεγονότα που αναφέρθηκαν" },
    { text: "Προτιμήσεις χρήστη που ανακαλύφθηκαν" },
    { text: "Τρέχουσα εργασία ή στόχος" },
    { text: "Εκκρεμείς ερωτήσεις" },
    { text: "Τόνος και επίπεδο τυπικότητας" }
  ]}
/>

### Δοκίμασέ το: Δημιούργησε μια Σύνοψη

<TryIt 
  title="Συνοψιστής Συνομιλίας"
  description="Εξάσκησε τη δημιουργία σύνοψης που διατηρεί context από αυτή τη συνομιλία:"
  prompt={`Συνόψισε αυτή τη συνομιλία για διαχείριση context. Η σύνοψη θα αντικαταστήσει την πλήρη συνομιλία στη μνήμη του AI.

ΣΥΝΟΜΙΛΙΑ:
Χρήστης: Γεια, μαθαίνω Python για ανάλυση δεδομένων
Βοηθός: Καλωσόρισες! Η Python είναι εξαιρετική για ανάλυση δεδομένων. Ποιο είναι το τρέχον επίπεδο εμπειρίας σου;
Χρήστης: Ξέρω βασικό Excel. Εντελώς αρχάριος στον προγραμματισμό.
Βοηθός: Τέλεια αφετηρία! Ας ξεκινήσουμε με τις μεταβλητές - είναι σαν κελιά Excel που αποθηκεύουν δεδομένα.
Χρήστης: Μπορείς να εξηγήσεις τις μεταβλητές;
Βοηθός: Οι μεταβλητές είναι δοχεία για αποθήκευση δεδομένων. Στην Python: name = "Alice" ή age = 25
Χρήστης: Τι γίνεται με τις λίστες; Χρειάζομαι να χειριστώ πολλαπλές τιμές.
Βοηθός: Οι λίστες είναι σαν στήλες Excel! Δημιούργησε μια ως: prices = [10, 20, 30]. Πρόσβαση στοιχείων με prices[0].
Χρήστης: Μπορώ να κάνω υπολογισμούς σε λίστες;
Βοηθός: Ναι! Χρησιμοποίησε sum(prices), len(prices), ή max(prices). Για σύνθετη ανάλυση, θα χρησιμοποιήσουμε pandas αργότερα.
Χρήστης: Τι είναι το pandas;
Βοηθός: Το Pandas είναι βιβλιοθήκη για ανάλυση δεδομένων - σκέψου "Excel on steroids". Έχει DataFrames (σαν υπολογιστικά φύλλα).

ΔΗΜΙΟΥΡΓΗΣΕ ΣΥΝΟΨΗ που αποτυπώνει:
1. Στόχο και υπόβαθρο χρήστη (1 πρόταση)
2. Θέματα που καλύφθηκαν μέχρι στιγμής (1 πρόταση)  
3. Στυλ μάθησης/προτιμήσεις χρήστη (1 πρόταση)
4. Τι να καλυφθεί στη συνέχεια (1 πρόταση)`}
/>

### Πότε να Συνοψίζεις

<TryIt compact prompt={`Διαχειρίζεσαι το παράθυρο context μιας συνομιλίας. Δεδομένων αυτών των συνθηκών, αποφάσισε πότε να ενεργοποιήσεις σύνοψη:

ΠΑΡΑΘΥΡΟ CONTEXT: μέγ. 8,000 tokens
ΤΡΕΧΟΥΣΑ ΧΡΗΣΗ:
- System prompt: 500 tokens
- Ιστορικό συνομιλίας: 6,200 tokens  
- Buffer για απάντηση: 1,500 tokens

ΚΑΝΟΝΕΣ:
- Σύνοψη όταν το ιστορικό υπερβαίνει 70% του διαθέσιμου χώρου
- Κράτα τα τελευταία 5 μηνύματα άθικτα
- Διατήρησε όλες τις προτιμήσεις και αποφάσεις χρήστη

Πρέπει να συνοψίσεις τώρα; Αν ναι, ποια μηνύματα πρέπει να συνοψιστούν vs να μείνουν άθικτα;`} />

## MCP: Model Context Protocol

Το MCP (Model Context Protocol) είναι ένας τυποποιημένος τρόπος για σύνδεση του AI με εξωτερικά δεδομένα και εργαλεία. Αντί να χτίζεις προσαρμοσμένες ενσωματώσεις για κάθε πάροχο AI, το MCP παρέχει καθολική διεπαφή.

### Γιατί MCP;

<InfoGrid columns={2} items={[
  { label: "Χωρίς MCP", description: "Χτίσε ξεχωριστές ενσωματώσεις για ChatGPT, Claude, Gemini... Συντήρησε πολλαπλές βάσεις κώδικα. Σπάνε όταν αλλάζουν τα APIs.", color: "red" },
  { label: "Με MCP", description: "Χτίσε μια φορά, δουλεύει παντού. Τυποποιημένο πρωτόκολλο. Το AI μπορεί να ανακαλύψει και να χρησιμοποιήσει τα εργαλεία σου αυτόματα.", color: "green" },
]} />

### Το MCP Παρέχει

- **Resources**: Δεδομένα που μπορεί να διαβάσει το AI (αρχεία, εγγραφές βάσης δεδομένων, απαντήσεις API)
- **Tools**: Ενέργειες που μπορεί να κάνει το AI (αναζήτηση, δημιουργία, ενημέρωση, διαγραφή)
- **Prompts**: Προκατασκευασμένα templates prompts

<Callout type="info" title="Το prompts.chat Χρησιμοποιεί MCP">
Αυτή η πλατφόρμα έχει MCP server! Μπορείς να τον συνδέσεις με το Claude Desktop ή άλλους MCP-συμβατούς clients για να αναζητήσεις και να χρησιμοποιήσεις prompts απευθείας από τον AI βοηθό σου.
</Callout>

## Χτίζοντας Context: Η Πλήρης Εικόνα

<ContextPlayground />

## Βέλτιστες Πρακτικές

<Checklist 
  title="Λίστα Ελέγχου Context Engineering"
  items={[
    { text: "Κράτα τα system prompts συνοπτικά αλλά πλήρη" },
    { text: "Συμπεριέλαβε μόνο σχετικό context (όχι τα πάντα)" },
    { text: "Συνόψισε μακριές συνομιλίες" },
    { text: "Χρησιμοποίησε RAG για γνώση ειδικού τομέα" },
    { text: "Δώσε στο AI εργαλεία για δεδομένα πραγματικού χρόνου" },
    { text: "Παρακολούθησε τη χρήση tokens για να μένεις εντός ορίων" },
    { text: "Δοκίμασε με ακραίες περιπτώσεις (πολύ μεγάλες εισόδους, κλπ.)" }
  ]}
/>

## Σύνοψη

Το context engineering αφορά το να δίνεις στο AI τη σωστή πληροφορία:

- **Το AI είναι stateless** - συμπεριέλαβε ό,τι χρειάζεται κάθε φορά
- **Το RAG** ανακτά σχετικά έγγραφα για ενίσχυση prompts
- **Τα Embeddings** επιτρέπουν σημασιολογική αναζήτηση (νόημα, όχι μόνο λέξεις-κλειδιά)
- **Το Function calling** επιτρέπει στο AI να χρησιμοποιεί εξωτερικά εργαλεία
- **Η Σύνοψη** διαχειρίζεται μακριές συνομιλίες
- **Το MCP** τυποποιεί πώς το AI συνδέεται με δεδομένα και εργαλεία

<Callout type="tip" title="Θυμήσου">
Η ποιότητα της εξόδου AI εξαρτάται από την ποιότητα του context που παρέχεις. Καλύτερο context = καλύτερες απαντήσεις.
</Callout>
