Προγραμματιστής ιστού με AI: πώς η τεχνητή νοημοσύνη μεταμορφώνει την ανάπτυξη
Η τεχνητή νοημοσύνη δεν πρόκειται να αντικαταστήσει τον προγραμματιστή ιστού. Αλλά ο προγραμματιστής ιστού που θα χρησιμοποιεί AI θα αντικαταστήσει εκείνον που δεν θα την χρησιμοποιεί.
Το 2026, η γεννητική AI έχει μεταμορφώσει ριζικά το πώς αναπτύσσουμε εφαρμογές ιστού. Από βοηθούς κώδικα μέχρι ολοκληρωμένες εφαρμογές με ευφυείς δυνατότητες, η AI είναι ήδη παντού.
Σε αυτό το άρθρο, θα εξερευνήσω πώς η AI αλλάζει τον ρόλο του προγραμματιστή ιστού, ποιες νέες δεξιότητες απαιτούνται, πραγματικές περιπτώσεις χρήσης που ήδη υλοποιώ, και προς που κατευθυνόμαστε.
Η AI ως συμπιλότος ανάπτυξης
Ο πρώτος αντίκτυπος: AI ως βοηθός προγραμματισμού.
GitHub Copilot και εναλλακτικές λύσεις
Πώς λειτουργούν:
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Γράφετε σχόλιο ή υπογραφή συνάρτησης</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-comment"</span>></span>// function calculateShippingCost(<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-comment"</span>></span>// Και ο Copilot προτείνει πλήρη υλοποίηση:<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>function<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>calculateShippingCost<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-params"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>weight<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-built_in"</span>></span>number<span class="hljs-tag"></<span class="hljs-name">span</span>></span>,
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>destination<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-built_in"</span>></span>string<span class="hljs-tag"></<span class="hljs-name">span</span>></span>,
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>shippingMethod<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>standard<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span> | <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>express<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span> | <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>overnight<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span>
<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>): <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-built_in"</span>></span>number<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> baseRate = shippingMethod === <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>standard<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> ? <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
: shippingMethod === <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>express<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> ? <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>12<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>25<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> weightRate = weight * <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>0.5<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> destinationMultiplier =
destination === <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>national<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> ? <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>1<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
: destination === <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>europe<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> ? <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>1.5<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>2.5<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>return<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> (baseRate + weightRate) * destinationMultiplier
}
Αντίκτυπος στην παραγωγικότητα:
Σύμφωνα με την εμπειρία μου με το GitHub Copilot:
- +30-40% ταχύτητα στον κώδικα boilerplate
- +50% ταχύτητα στα unit tests
- +25% ταχύτητα σε κοινές συναρτήσεις
Αλλά: Απαιτεί κρίσιμη αναθεώρηση. Ο Copilot προτείνει, εσείς αποφασίζετε.
Τρέχουσες εναλλακτικές:
- GitHub Copilot: Το πιο ώριμο, τέλεια ενσωμάτωση VSCode
- Amazon CodeWhisperer: Δωρεάν για ατομική χρήση
- Tabnine: Εστίαση στην ιδιωτικότητα
- Codeium: Εναλλακτική open source
Η καθημερινή μου χρήση:
- Boilerplate: αποδεχόμαι ~80% προτάσεων
- Επιχειρηματική λογική: αποδεχόμαι ~30-40%
- Tests: αποδεχόμαι ~60-70%
- Τεκμηρίωση: αποδεχόμαι ~50%
Χρόνος αποταμίευσης: ~15-20 ώρες/εβδομάδα
ChatGPT και Claude ως τεχνικοί σύμβουλοι
Πέρα από το αυτόματο συμπλήρωμα, LLMs ως σύμβουλοι:
Καθημερινές περιπτώσεις χρήσης:
Σύνθετη αποσφαλμάτωση
- Επικολλώ σφάλμα + πλαίσιο
- Το LLM προτείνει πιθανές αιτίες
- Αποταμίευση: 30λ-2ώ ανά δύσκολο bug
Αρχιτεκτονική και patterns
- "Πώς θα δομήσω σύστημα real-time ειδοποιήσεων;"
- Λαμβάνω επιλογές: WebSockets, SSE, polling
- Με τα πλεονεκτήματα/μειονεκτήματα του καθενός
Βελτιστοποίηση κώδικα
- Επικολλώ αργή συνάρτηση
- Το LLM προτείνει βελτιώσεις απόδοσης
- Επαληθεύω με benchmarks
Τεκμηρίωση
- Δημιουργία JSDoc από κώδικα
- Γραφή ολοκληρωμένων README
- Δημιουργία οδηγών χρήστη
Σημαντικοί περιορισμοί:
⚠️ Τα LLMs αισθάνονται:
- Εφευρίσκουν APIs που δεν υπάρχουν
- Παραπέμπουν σε εσφαλμένη τεκμηρίωση
- Ανακατεύουν εκδόσεις βιβλιοθηκών
Χρυσό κανόνα: Πάντοτε επαληθεύστε τις προτάσεις, ιδίως στην παραγωγή.
Η ροή εργασίας μου:
- Συμβουλευτείτε το LLM για ιδέες/επιλογές
- Επαληθεύστε με την επίσημη τεκμηρίωση
- Δοκιμάστε εξαντλητικά πριν από την ενσωμάτωση
Εφαρμογές ιστού με δυνατότητες AI
Ο δεύτερος αντίκτυπος: AI μέσα στις εφαρμογές.
Έξυπνα chatbots
Τα chatbots έχουν εξελιχθεί από άκαμπτα σενάρια σε συμφραζόμενα βοηθητικά προγράμματα:
Πριν (2020):
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Chatbot με if/else</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>function<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>procesarMensaje<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-params"</span>></span>mensaje<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>if<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> (mensaje.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>includes<<span class="hljs-regexp">/span>(<span class="hljs-string">&#x27;horario&#x27;</</span>span>)) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>return<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>Abrimos de 9 a 18h<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
}
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">if</span><<span class="hljs-regexp">/span> (mensaje.<span class="hljs-title function_">includes</</span>span>(<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>precio<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>)) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>return<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>Nuestros precios empiezan en 100€<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
}
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">return</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;No entiendo tu pregunta&#x27;</</span>span>
}
Τώρα (2026):
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Chatbot με GPT-4 και RAG</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>import<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> { <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>ChatOpenAI<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;langchain/</span>chat_models&#x27;</span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>import<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> { loadQAChain } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;langchain/</span>chains&#x27;</span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>async<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>function<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>procesarMensaje<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-params"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>mensaje<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-built_in"</span>></span>string<span class="hljs-tag"></<span class="hljs-name">span</span>></span>,
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>historial<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>Message<span class="hljs-tag"></<span class="hljs-name">span</span>></span>[]
<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> llm = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>new<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>ChatOpenAI<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>({
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>modelName<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>gpt-4<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>temperature<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>0.3<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
})
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Αναζητήστε σχετικές πληροφορίες στη βάση γνώσης</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> context = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> vectorStore.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>similaritySearch<<span class="hljs-regexp">/span>(mensaje, <span class="hljs-number">3</</span>span>)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Δημιουργία συμφραζόμενης απάντησης</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> response = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> chain.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>call</span>({
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>question<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: mensaje,
context,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>chat_history<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: historial
})
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">return</span><<span class="hljs-regexp">/span> response.<span class="hljs-property">text</</span>span>
}
Διαφορά:
- Πριν: Απαντά μόνο ακριβώς προγραμματισμένες ερωτήσεις
- Τώρα: Κατανοεί την πρόθεση, συμβουλεύεται τη γνώση, απαντά φυσικά
Έχω υλοποιήσει chatbots με AI για:
- 24/7 εξυπηρέτηση πελατών: Επίλυση 70-80% ερωτημάτων
- Τεχνική υποστήριξη: Αναζήτηση στην τεκμηρίωση
- Συνομιλιακές πωλήσεις: Σύσταση προϊόντων
- Ενσωμάτωση χρηστών: Διαδραστικός οδηγός
Κόστος ανάπτυξης:
- Παραδοσιακό chatbot: 2-3 εβδομάδες, περιορισμένες δυνατότητες
- Chatbot με AI: 1-2 εβδομάδες, πολύ μεγαλύτερες δυνατότητες
Συστήματα RAG για γνώση της επιχείρησης
RAG (Retrieval Augmented Generation) = LLM + τις δικές σας πληροφορίες
Τυπική αρχιτεκτονική:
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// 1. Ευρετήριο τεκμηρίωσης της επιχείρησης</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>import<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> { <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>OpenAIEmbeddings<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;langchain/</span>embeddings&#x27;</span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>import<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> { <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>Chroma<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;langchain/</span>vectorstores&#x27;</span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>async<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>function<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>indexarDocumentos<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-params"</span>></span><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>docs<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>Document<span class="hljs-tag"></<span class="hljs-name">span</span>></span>[]<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> embeddings = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>new<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>OpenAIEmbeddings<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>()
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">const</span><<span class="hljs-regexp">/span> vectorStore = <span class="hljs-keyword">await</</span>span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>Chroma<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>fromDocuments</span>(
docs,
embeddings,
{ <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>collectionName<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>empresa-docs<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> }
)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">return</span></span> vectorStore
}
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// 2. Ερωτήστε με πλαίσιο</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>async<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>function<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>preguntarDocumentos<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-params"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>pregunta<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-built_in"</span>></span>string<span class="hljs-tag"></<span class="hljs-name">span</span>></span>,
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>vectorStore<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>Chroma<span class="hljs-tag"></<span class="hljs-name">span</span>></span>
<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> llm = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>new<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>ChatOpenAI<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>({ <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>modelName<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>gpt-4<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> })
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Αναζήτηση σχετικών εγγράφων</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> docsRelevantes = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> vectorStore
.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>similaritySearch<<span class="hljs-regexp">/span>(pregunta, <span class="hljs-number">4</</span>span>)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Το LLM απαντά με βάση πραγματικά έγγραφα</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> chain = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>loadQAChain<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(llm)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">const</span><<span class="hljs-regexp">/span> response = <span class="hljs-keyword">await</</span>span> chain.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>call</span>({
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>input_documents<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: docsRelevantes,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>question<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: pregunta
})
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">return</span></span> {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>respuesta<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: response.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-property"</span>>text</span>,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>fuentes<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: docsRelevantes.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>map<<span class="hljs-regexp">/span>(<span class="hljs-function"><span class="hljs-params">d</</span>span> =&gt;<<span class="hljs-regexp">/span> d.<span class="hljs-property">metadata</</span>span>.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-property"</span>>source</span>)
}
}
Πραγματικές περιπτώσεις χρήσης που υλοποιώ:
Ερωτήματα σχετικά με πολιτικές της εταιρείας
- "Ποια είναι η πολιτική επιστροφής μας για ψηφιακά προϊόντα;"
- Το σύστημα αναζητά σε έγγραφα, το LLM δημιουργεί απάντηση
- Περιλαμβάνει παραπομπές στα αρχικά έγγραφα
Τεχνική υποστήριξη με εγχειρίδια
- "Πώς να ρυθμίσω την ενσωμάτωση με Stripe;"
- Συμβουλεύεται την εσωτερική τεκμηρίωση
- Απάντηση βήμα προς βήμα προσαρμοσμένη
Knowledge base για ομάδες
- "Πώς αναπτύσσουμε σε παραγωγή;"
- Αναζητά σε wiki, runbooks, κλειστά tickets
- Απαντά με ενημερωμένες διαδικασίες
Ανάλυση νομικών εγγράφων
- "Τι λέει το συμβόλαιο για τις SLAs;"
- Εξάγει σχετικές ρήτρες
- Περιλήφθηκε σε σαφή γλώσσα
Πλεονεκτήματα έναντι παραδοσιακής αναζήτησης:
- Αναζήτηση: Επιστροφή εγγράφων, διαβάζετε και εξάγετε
- RAG: Επιστροφή άμεσης απάντησης με πηγές
Τα μου έργα συστήματα RAG τυπικά: 10.000-25.000€ ανάλογα με τον όγκο εγγράφων και τις ενσωματώσεις.
Αυτόνομοι πράκτορες
Το επόμενο επίπεδο: συστήματα που δρουν, όχι μόνο απαντούν.
Παράδειγμα: Πράκτορας έρευνας αγοράς
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span></span> langchain.agents <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">import</span></span> initialize_agent, Tool
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span></span> langchain.llms <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">import</span></span> OpenAI
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment"># Καθορίστε εργαλεία που μπορεί να χρησιμοποιήσει ο πράκτορας</span></span>
tools = [
Tool(
name=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;Google Search&quot;</span>,
func=google_search,
description=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;Αναζητά ενημερωμένες πληροφορίες στο Διαδίκτυο&quot;</span>
),
Tool(
name=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;Web Scraper&quot;</span>,
func=scrape_website,
description=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;Εξάγει περιεχόμενο από μια URL&quot;</span>
),
Tool(
name=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;Database Query&quot;</span>,
func=query_database,
description=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;Ερωτά τη βάση δεδομένων ανταγωνιστών&quot;</span>
)
]
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment"># Αρχικοποίηση πράκτορα</span></span>
agent = initialize_agent(
tools,
OpenAI(model=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;gpt-<span class="hljs-number">4</span>&quot;</span>),
agent=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;zero-shot-react-description&quot;</span>
)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment"># Εκτέλεση σύνθετης εργασίας</span></span>
result = agent.run(
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;Ερευνήστε τις τιμές των ανταγωνιστών για το προϊόν X &quot;</span>
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;στην ισπανική αγορά, δημιουργήστε συγκριτική έκθεση&quot;</span>
)
Ο πράκτορας:
- Σχεδιάζει ποια εργαλεία θα χρησιμοποιήσει
- Εκτελεί αναζητήσεις στο Google
- Εξάγει τιμές από ιστότοπους ανταγωνιστών
- Ερωτά το ιστορικό στη βάση δεδομένων
- Δημιουργεί συγκριτική έκθεση
Όλα αυτόνομα.
Περιπτώσεις χρήσης στην επιχείρηση:
- Έρευνα ανταγωνισμού: Τιμές, δυνατότητες, κριτικές
- Παρακολούθηση μάρκας: Αναφορές, συναίσθημα
- Ανάλυση τάσεων: Τι ψάχνουν οι χρήστες
- Due diligence: Έρευνα προμηθευτών/συνεργατών
- Content research: Θέματα trending, λέξεις-κλειδιά
Έχω αναπτύξει πράκτορες AI για:
- Αυτοματοποίηση έρευνας αγοράς (αποταμίευση 20h/εβδομάδα ανθρώπων)
- Παρακολούθηση αναφορών μάρκας 24/7
- Ανάλυση σχολίων πελατών σε πραγματικό χρόνο
Ανάλυση και δημιουργία περιεχομένου
Εφαρμοσμένη Επεξεργασία Φυσικής Γλώσσας:
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Αυτόματη ταξινόμηση εισιτηρίων υποστήριξης</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>import<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> { <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>OpenAI<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;openai&#x27;</</span>span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>async<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>function<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>clasificarTicket<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-params"</span>></span><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>contenido<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-built_in"</span>></span>string<span class="hljs-tag"></<span class="hljs-name">span</span>></span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> completion = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> openai.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-property"</span>>chat<<span class="hljs-regexp">/span>.<span class="hljs-property">completions</</span>span>.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>create</span>({
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>model<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>gpt-4<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>messages<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: [
{
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>role<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>system<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>content<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span>`Ταξινομήστε τα εισιτήρια σε κατηγορίες:
- bug_critico
- bug_menor
- solicitud_feature
- pregunta_uso
- queja_comercial
Απαντήστε μόνο με την κατηγορία.`<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
},
{
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>role<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>user<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>content<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: contenido
}
],
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>temperature<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>0<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
})
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">return</span><<span class="hljs-regexp">/span> completion.<span class="hljs-property">choices</</span>span>[<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>0<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>].<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-property"</span>>message<<span class="hljs-regexp">/span>.<span class="hljs-property">content</</span>span>
}
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Χρήση σε αγωγό υποστήριξης</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>async<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>function<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>procesarTicket<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-params"</span>></span><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>ticket<span class="hljs-tag"></<span class="hljs-name">span</span>></span>: <span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>Ticket<span class="hljs-tag"></<span class="hljs-name">span</span>></span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> categoria = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>clasificarTicket<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(ticket.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-property"</span>>contenido</span>)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Αυτόματη δρομολόγηση</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>if<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> (categoria === <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>bug_critico<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>notificarEquipoUrgente<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(ticket)
} <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">else</span><<span class="hljs-regexp">/span> <span class="hljs-keyword">if</</span>span> (categoria === <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>pregunta_uso<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>) {
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title function_"</span>></span>intentarRespuestaAutomatica<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(ticket)
}
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">await</span><<span class="hljs-regexp">/span> ticket.<span class="hljs-title function_">update</</span>span>({ categoria })
}
Άλλες περιπτώσεις που υλοποιώ:
- Ανάλυση συναισθήματος σε κριτικές/σχόλια
- Εξαγωγή οντοτήτων (ονόματα, ημερομηνίες, αναφερόμενα προϊόντα)
- Αυτόματη περίληψη μεγάλων εγγράφων
- Μετάφραση με διατήρηση τεχνικού πλαισίου
- Δημιουργία περιγραφών προϊόντων για SEO
Δείτε μο πλήρες χαρτοφυλάκιο λύσεων NLP.
Computer Vision για εφαρμογές ιστού
Ενσωμάτωση όρασης υπολογιστών:
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span></span> openai <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">import</span></span> OpenAI
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment"># Ανάλυση εικόνων με GPT-4 Vision</span></span>
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">def</span></span> <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>analizar_imagen</span>(<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-params"</span>>imagen_url: <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-built_in"</span>><span class="hljs-built_in">str</span></span></span>) -&gt; <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-built_in"</span>><span class="hljs-built_in">dict</span></span>:
response = client.chat.completions.create(
model=<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;gpt-<span class="hljs-number">4</span>-vision-preview&quot;</span>,
messages=[
{
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;role&quot;</span>: <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;user&quot;</span>,
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;content&quot;</span>: [
{
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;<span class="hljs-built_in">type</span>&quot;</span>: <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;text&quot;</span>,
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;text&quot;</span>: <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;Περιγράψτε λεπτομερώς αυτήν την εικόνα&quot;</span>
},
{
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;<span class="hljs-built_in">type</span>&quot;</span>: <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;image_url&quot;</span>,
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;image_url&quot;</span>: {<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&quot;url&quot;</span>: imagen_url}
}
]
}
]
)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">return</span></span> response.choices[<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-number"</span>><span class="hljs-number">0</span></span>].message.content
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment"># Περιπτώσεις χρήσης</span></span>
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">def</span></span> <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>moderacion_contenido</span>(<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-params"</span>>imagen_url: <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-built_in"</span>><span class="hljs-built_in">str</span></span></span>) -&gt; <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-built_in"</span>><span class="hljs-built_in">bool</span></span>:
descripcion = analizar_imagen(imagen_url)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment"># Ανίχνευση ακατάλληλου περιεχομένου</span></span>
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">return</span></span> <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">not</span></span> <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-built_in"</span>><span class="hljs-built_in">any</span></span>(word <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">in</span></span> descripcion.lower()
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">for</span></span> word <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">in</span></span> [<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-string"</span>>&<span class="hljs-comment">#x27;violencia&#x27;</span>, <span class="hljs-string">&#x27;desnudo&#x27;</span>, <span class="hljs-string">&#x27;inapropiado&#x27;</span>])</span>
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">def</span></span> <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>categorizar_producto</span>(<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-params"</span>>imagen_url: <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-built_in"</span>><span class="hljs-built_in">str</span></span></span>) -&gt; <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-built_in"</span>><span class="hljs-built_in">str</span></span>:
descripcion = analizar_imagen(imagen_url)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment"># Αυτόματη ταξινόμηση</span></span>
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment"># (ρούχα, ηλεκτρονικά, σπίτι, κλπ.)</span></span>
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">return</span></span> clasificar_por_descripcion(descripcion)
Πραγματικές εφαρμογές:
Ηλεκτρονικό εμπόριο
- Αυτόματη ταξινόμηση ανεβασμένων προϊόντων
- Ανίχνευση ποιότητας φωτογραφιών
- Αναζήτηση με ομοιότητα οπτική
Μετριασμός περιεχομένου
- Φιλτράρισμα ακατάλληλων εικόνων αυτόματα
- Ανίχνευση οπτικού spam
- Επαλήθευση κατευθυντήριων γραμμών κοινότητας
Προσβασιμότητα
- Αυτόματη δημιουργία alt text για εικόνες
- Περιγραφή οπτικού περιεχομένου για αναγνώστες οθόνης
Έλεγχος ποιότητας
- Ανίχνευση ελαττωματικών προϊόντων σε φωτογραφίες
- Επαλήθευση σωστής συσκευασίας
- Επικύρωση εγκαταστάσεων
Πλήρες χαρτοφυλάκιο: λύσεις Computer Vision.
Νέες δεξιότητες του προγραμματιστή ιστού
Για να αξιοποιήσετε την AI, ο προγραμματιστής ιστού χρειάζεται νέες δεξιότητες:
1. Prompt Engineering
Η γνώση πώς να επικοινωνείτε με LLMs είναι κρίσιμη:
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Κακό prompt (ασυνεπή αποτελέσματα)</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> prompt = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&quot;</span>Συνοψίστε αυτό το κείμενο<span class="hljs-symbol">&quot;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-comment"</span>></span>// Καλό prompt (συνεπή αποτελέσματα)<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> prompt = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span>`
Συνοψίστε το ακόλουθο κείμενο σε ακριβώς 3 βασικά σημεία.
Κάθε σημείο πρέπει:
- Να είναι μια ολοκληρωμένη πρόταση
- Να έχει μέγιστο 20 λέξεις
- Να ξεκινά με <span class="hljs-symbol">&quot;</span>•<span class="hljs-symbol">&quot;</span>
Κείμενο:
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-subst"</span>></span>${κείμενο}<span class="hljs-tag"></<span class="hljs-name">span</span>></span>
Σύνοψη:
`<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
Τεχνικές που κάθε προγραμματιστής ιστού πρέπει να γνωρίζει:
- Few-shot learning: Δώστε παραδείγματα εισόδου/εξόδου
- Chain-of-thought: Ζητήστε συλλογισμό βήμα προς βήμα
- Role prompting: "Ενεργήστε ως ειδικός στο X"
- Constraints: Καθορίστε μορφή, μήκος, στυλ
- Temperature tuning: Ελέγξτε δημιουργικότητα vs συνέπεια
2. Διανυσματικές Βάσεις Δεδομένων
Εργασία με embeddings και σημασιολογική αναζήτηση:
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">import</span><<span class="hljs-regexp">/span> { <span class="hljs-title class_">OpenAIEmbeddings</</span>span> } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;langchain/</span>embeddings&#x27;</span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>import<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> { <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>PineconeStore<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;langchain/</span>vectorstores&#x27;</span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-comment"</span>></span>// Δημιουργήστε embeddings κειμένου<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> embeddings = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>new<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>OpenAIEmbeddings<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>()
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">const</span><<span class="hljs-regexp">/span> textoVector = <span class="hljs-keyword">await</</span>span> embeddings.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>embedQuery</span>(
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&quot;</span>Προγραμματιστής ιστού ειδικευμένος σε Next.js<span class="hljs-symbol">&quot;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
)
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Αποτέλεσμα: [0.023, -0.891, 0.445, ...] // 1536 διαστάσεις</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-comment"</span>></span>// Αναζητήστε παρόμοια<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> resultados = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> pinecone.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>query</span>({
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>vector<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: textoVector,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>topK<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-number"</span>></span>5<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>includeMetadata<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-literal"</span>></span>true<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
})
Διανυσματικές βάσεις δεδομένων:
- Pinecone: Διαχειριζόμενη, εύκολη στη χρήση
- Weaviate: Open source, ισχυρή
- Chroma: Lightweight, καλή για ανάπτυξη
- Qdrant: Υψηλή απόδοση
3. LangChain και πλαίσια AI
Ορχήστρα σύνθετων εφαρμογών με LLMs:
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">import</span><<span class="hljs-regexp">/span> { <span class="hljs-title class_">PromptTemplate</</span>span> } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;langchain/</span>prompts&#x27;</span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>import<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> { <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>LLMChain<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> } <span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-keyword"</span>><span class="hljs-keyword">from</span><<span class="hljs-regexp">/span> <span class="hljs-string">&#x27;langchain/</span>chains&#x27;</span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-comment"</span>></span>// Επαναχρησιμοποιήσιμο πρότυπο<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> template = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>new<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>PromptTemplate<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>({
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>template<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span>`
Είσαι ένας βοηθός {ρόλος}.
Πλαίσιο: {πλαίσιο}
Ερώτηση χρήστη: {ερώτηση}
Δώστε μια απάντηση που είναι {τόνος}.
`<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>,
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>inputVariables<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: [<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>ρόλος<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>, <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>πλαίσιο<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>, <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>ερώτηση<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>, <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>τόνος<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>]
})
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Αλυσίδα που χρησιμοποιεί το πρότυπο</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> chain = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>new<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>LLMChain<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>({
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>llm<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>new<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-title class_"</span>></span>ChatOpenAI<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>(),
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-attr"</span>></span>prompt<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>: template
})
<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-comment"</span>><span class="hljs-comment">// Εκτέλεση</span></span>
<span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>const<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> response = <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-keyword"</span>></span>await<span class="hljs-tag"></<span class="hljs-name">span</span>></span></span> chain.<span <span class="hljs-keyword">class</span>=<span class="hljs-string">"hljs-title function_"</span>>call</span>({
ρόλος: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>ανώτερος προγραμματιστής ιστού<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>,
πλαίσιο: <span class="language-xml"><span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"hljs-string"</span>></span><span class="hljs-symbol">&#x27;</span>Ο χρήστης κατασκευάζει ένα ηλεκτρονικό κατάστημα<span class="hljs-symbol">&#x27;</span><span class="hljs-tag"></<span class="hljs-name">span</span>></span></span>,
ερώτηση: