Prompt engineering
Από το Μηδέν στο Προηγμένο Prompt Engineering με Langchain σε Python

Ένας σημαντικός аспект των Μεγάλων Μοντέλων Γλώσσας (LLMs) είναι ο αριθμός των παραμέτρων που αυτά τα μοντέλα χρησιμοποιούν για την εκμάθηση. Όσο περισσότερες παραμέτρες έχει ένα μοντέλο, τόσο καλύτερα μπορεί να κατανοήσει τη σχέση μεταξύ λέξεων και φράσεων. Αυτό σημαίνει ότι τα μοντέλα με δισεκατομμύρια παραμέτρους έχουν την ικανότητα να παράγουν διάφορους δημιουργικούς μορφούς κειμένου και να απαντήσουν σε ανοιχτές και απαιτητικές ερωτήσεις με ενημερωτικό τρόπο.
Τα LLMs, όπως το ChatGPT, που χρησιμοποιούν το μοντέλο Transformer, είναι ικανά να κατανοούν και να παράγουν ανθρώπινη γλώσσα, καθιστώντας τα χρήσιμα για εφαρμογές που απαιτούν φυσική γλώσσα. Ωστόσο, δεν είναι χωρίς τους περιορισμούς τους, οι οποίοι περιλαμβάνουν παλιά γνώση, αδυναμία να αλληλεπιδράσουν με εξωτερικά συστήματα, έλλειψη κατανόησης του контекστού και μερικές φορές παράγουν πιθανές αλλά λανθασμένες ή ανοησίες απαντήσεις, μεταξύ άλλων.
Η αντιμετώπιση αυτών των περιορισμών απαιτεί την ενσωμάτωση των LLMs με εξωτερικές πηγές δεδομένων και ικανότητες, οι οποίες μπορούν να παρουσιάσουν πολυπλοκότητες και να απαιτούν εκτεταμένες ικανότητες κωδικοποίησης και χειρισμού δεδομένων. Αυτό, σε συνδυασμό με τις προκλήσεις της κατανόησης των εννοιών του AI και των σύνθετων αλγορίθμων, συνεισφέρει στην κривή εκμάθησης που σχετίζεται με την ανάπτυξη εφαρμογών που χρησιμοποιούν LLMs.
Ωστόσο, η ενσωμάτωση των LLMs με άλλα εργαλεία για τη δημιουργία εφαρμογών που βασίζονται σε LLMs θα μπορούσε να αναδιαμορφώσει το ψηφιακό τοπίο μας. Το потенциάλ των τέτοιων εφαρμογών είναι τεράστιο, συμπεριλαμβανομένης της βελτίωσης της αποδοτικότητας και της παραγωγικότητας, της απλοποίησης των εργασιών, της ενίσχυσης της λήψης αποφάσεων και της παροχής προσωποποιημένων εμπειριών.
Σε αυτό το άρθρο, θα εμβαθύνουμε πιο sâuτά στα αυτά τα ζητήματα, εξερευνώντας τις προηγμένες τεχνικές του prompt engineering με Langchain, προσφέροντας σαφείς εξηγήσεις, πρακτικά παραδείγματα και βήμα-βήμα οδηγίες για το πώς να τις εφαρμόσουμε.
Langchain, μια βιβλιοθήκη στο επίπεδο κράτους της τέχνης, φέρνει ευκολία και ευελιξία στο σχεδιασμό, την υλοποίηση και την επιμέλεια των prompts. Όσο ξεδιπλώνουμε τις αρχές και τις πρακτικές του prompt engineering, θα μάθετε πώς να χρησιμοποιήσετε τις ισχυρές λειτουργίες του Langchain για να εκμεταλλευτείτε τις δυνατότητες των μοντέλων Generative AI όπως το GPT-4.
Κατανόηση των Prompts
Πριν βουτήξουμε στις τεχνικές λεπτομέρειες του prompt engineering, είναι απαραίτητο να κατανοήσουμε την έννοια των prompts και τη σημασία τους.
Ένα ‘prompt‘ είναι eine σειρά από tokens που χρησιμοποιούνται ως είσοδος σε ένα μοντέλο γλώσσας, οδηγώντας το να παράγει ένα συγκεκριμένο είδος απάντησης. Τα prompts παίζουν einen κρίσιμο ρόλο στη διεύθυνση της συμπεριφοράς του μοντέλου. Μπορούν να επηρεάσουν την ποιότητα του παραγμένου κειμένου και, όταν σχεδιαστούν σωστά, possono βοηθήσει το μοντέλο να παράγει ενημερωτικές, ακριβείς και контекστο-ειδικές απαντήσεις. Στην πράξη, αυτό περιλαμβάνει την επιμέλεια των εισοδικών φράσεων για να ανταποκριθούν στις προκαταλήψεις εκπαίδευσης και δομής του μοντέλου.
Η σοφία του prompt engineering κυμαίνεται από απλές τεχνικές, όπως η τροφοδοσία του μοντέλου με σχετικές λέξεις-κλειδιά, σε πιο προηγμένες μεθόδους που涉ňují το σχεδιασμό σύνθετων, δομημένων prompts που χρησιμοποιούν τα εσωτερικά μηχανικά του μοντέλου προς όφελός τους.
Langchain: Το Γρηγορότερα Εξελισσόμενο Εργαλείο Prompt
LangChain, που εκκινήθηκε τον Οκτώβριο του 2022 από τον Harrison Chase, έχει γίνει ένα από τα πιο υψηλά βαθμολογημένα ανοιχτά framework στο GitHub το 2023. Προσφέρει ένα απλοποιημένο και стандαρδποιημένο διεπαφή για την ενσωμάτωση των Μεγάλων Μοντέλων Γλώσσας (LLMs) σε εφαρμογές. Επίσης, παρέχει ένα πλούσιο διεπαφή για το prompt engineering, επιτρέποντας στους développers να πειραματίζονται με διαφορετικές στρατηγικές και να αξιολογούν τα αποτελέσματά τους. Χρησιμοποιώντας το Langchain, μπορείτε να εκτελέσετε εργασίες prompt engineering πιο αποτελεσματικά και με πιο直截ιο τρόπο.
LangFlow χρησιμεύει ως διεπαφή χρήστη για την ορχήστρωση των συνιστωσών του LangChain σε ένα εκτελέσιμο διαγράμμα, ermögνοντας γρήγορη προτυποποίηση και πειραματισμό.

Το LangChain γεμίζει ένα κρίσιμο κενό στην ανάπτυξη του AI για τις μάζες. Επιτρέπει μια σειρά από εφαρμογές NLP, όπως εικονικοί βοηθοί, γεννήτορες περιεχομένου, συστήματα ερωτήσεων και απαντήσεων, και πολλά άλλα, για να λύσουν μια σειρά από πραγματικά προβλήματα.
Παρά το ότι δεν είναι ένα αυτόνομο μοντέλο ή πάροχος, το LangChain απλοποιεί την αλληλεπίδραση με διάφορα μοντέλα, επεκτείνοντας τις ικανότητες των εφαρμογών LLMs πέρα από τις περιορισμοί ενός απλού API κλήσης.
Η Αρχιτεκτονική του LangChain
Τα κύρια συστατικά του LangChain περιλαμβάνουν Model I/O, Prompt Templates, Memory, Agents, και Chains.
Model I/O
Το LangChain διευκολύνει μια αβίαστη σύνδεση με διάφορα μοντέλα γλώσσας, περιβάλλοντάς τα με ένα стандαρδποιημένο διεπαφή γνωστό ως Model I/O. Αυτό διευκολύνει μια άνετη αλλαγή μοντέλου για βελτίωση ή καλύτερη απόδοση. Το LangChain υποστηρίζει διάφορους παρόχους μοντέλων γλώσσας, συμπεριλαμβανομένων OpenAI, HuggingFace, Azure, Fireworks, και πολλά άλλα.
Prompt Templates
Αυτά χρησιμοποιούνται για τη διαχείριση και την βελτίωση των αλληλεπιδράσεων με τα LLMs, παρέχοντας συντομές οδηγίες ή παραδείγματα. Η βελτίωση των prompts βελτιώνει την απόδοση του μοντέλου, και η ευελιξία τους συμβάλλει σημαντικά στη διαδικασία εισαγωγής.
Ένα απλό παράδειγμα ενός prompt template:
<p>from langchain.prompts import PromptTemplate
prompt = PromptTemplate(input_variables=[&quot;subject&quot;],
template=&quot;What are the recent advancements in the field of {subject}?&quot;)
print(prompt.format(subject=&quot;Natural Language Processing&quot;))</p>
Όσο προχωράμε σε πολυπλοκότητα, συναντάμε πιο σύνθετα μοτίβα στο LangChain, όπως το μοτίβο Reason and Act (ReAct). Το ReAct είναι ένα κρίσιμο μοτίβο για την εκτέλεση ενεργειών, όπου ο πράκτορας αναθέτει μια εργασία σε ένα κατάλληλο εργαλείο, προσαρμόζει την είσοδο για αυτό και αναλύει την έξοδο για να ολοκληρώσει την εργασία. Το παρακάτω παράδειγμα Python δείχνει ένα ReAct μοτίβο. Δείχνει πώς ένα prompt είναι δομημένο στο LangChain, χρησιμοποιώντας μια σειρά από σκέψεις και ενέργειες για να συλλογιστεί ένα πρόβλημα και να παράγει μια τελική απάντηση:
PREFIX = &quot;&quot;&quot;Answer the following question using the given tools:&quot;&quot;&quot;
FORMAT_INSTRUCTIONS = &quot;&quot;&quot;Follow this format:
Question: {input_question}
Thought: your initial thought on the question
Action: your chosen action from [{tool_names}]
Action Input: your input for the action
Observation: the action's outcome&quot;&quot;&quot;
SUFFIX = &quot;&quot;&quot;Start!
Question: {input}
Thought:{agent_scratchpad}&quot;&quot;&quot;
Memory
Η μνήμη είναι μια κρίσιμη έννοια στο LangChain, ermögνώντας στα LLMs και στα εργαλεία να διατηρούν πληροφορίες με τον καιρό. Αυτή η συμπεριφορά με staatful βελτιώνει την απόδοση των εφαρμογών του LangChain, αποθηκεύοντας προηγούμενες απαντήσεις, αλληλεπιδράσεις χρήστη, την κατάσταση του περιβάλλοντος και τους στόχους του πράκτορα. Οι στρατηγικές ConversationBufferMemory και ConversationBufferWindowMemory βοηθούν στην διατήρηση του πλήρους ή των πρόσφατων μερών μιας συνομιλίας, αντίστοιχα. Για μια πιο σύνθετη προσέγγιση, η στρατηγική ConversationKGMemory επιτρέπει την κωδικοποίηση της συνομιλίας ως γράφο γνώσεων, ο οποίος μπορεί να τροφοδοτηθεί πίσω στα prompts ή να χρησιμοποιηθεί για την πρόβλεψη απαντήσεων χωρίς να καλείται το LLM.
Agents
Ένας πράκτορας αλληλεπιδρά με τον κόσμο, εκτελώντας ενέργειες και εργασίες. Στο LangChain, οι πράκτορες συνδυάζουν εργαλεία και chains για την εκτέλεση εργασιών. Μπορούν να καθιερώσουν μια σύνδεση με τον εξωτερικό κόσμο για την ανάκτηση πληροφοριών για να εμπλουτίσουν τις γνώσεις των LLMs, υπερβαίνοντας τις εγγενείς τους περιορισμούς. Μπορούν να αποφασίσουν να περάσουν υπολογισμούς σε einen υπολογιστή ή Python ερμηνευτή, ανάλογα με την περίπτωση.
Οι πράκτορες είναι εξοπλισμένοι με υπο-συστατικά:
- Εργαλεία: Αυτά είναι λειτουργικά συστατικά.
- Εργαλειοθήκες: Συλλογές εργαλείων.
- Εκτελεστές Πράκτορα: Αυτό είναι το μηχανισμό εκτέλεσης που επιτρέπει την επιλογή μεταξύ εργαλείων.
Οι πράκτορες στο LangChain ακολουθούν επίσης το μοτίβο Zero-shot ReAct, όπου η απόφαση βασίζεται μόνο στην περιγραφή του εργαλείου. Αυτό το μηχανισμό μπορεί να επεκταθεί με μνήμη για να ληφθούν υπόψη η πλήρης ιστορία της συνομιλίας. Με το ReAct, αντί να ζητήσετε από ένα LLM να ολοκληρώσει το κείμενό σας, μπορείτε να το προτροπήσετε να απαντήσει σε einen βρόχο σκέψης/ενέργειας/παρατήρησης.
Chains
Οι chains, όπως ορίζεται ο όρος, είναι σειρές από εργασίες που επιτρέπουν στη βιβλιοθήκη του LangChain να επεξεργαστεί τις εισόδους και τις εξόδους των μοντέλων γλώσσας χωρίς προβλήματα. Αυτά τα βασικά συστατικά του LangChain αποτελούνται ουσιαστικά από links, τα οποία μπορούν να είναι άλλες chains ή primitives όπως prompts, μοντέλα γλώσσας ή utilities.
Φανταστείτε μια chain ως μια μεταφορική ταινία σε ένα εργοστάσιο. Κάθε βήμα σε αυτή την ταινία αντιπροσωπεύει μια συγκεκριμένη εργασία, η οποία μπορεί να είναι η κλήση ενός μοντέλου γλώσσας, η εφαρμογή μιας Python συνάρτησης σε ένα κείμενο ή ακόμη και η προτροπή του μοντέλου με συγκεκριμένο τρόπο.
Το LangChain κατηγοριοποιεί τις chains του σε τρεις τύπους: Utility chains, Generic chains και Combine Documents chains. Θα εμβαθύνουμε στις Utility και Generic chains για την συζήτησή μας.
- Utility Chains είναι ειδικά σχεδιασμένες για να εξαγάγουν ακριβείς απαντήσεις από μοντέλα γλώσσας για στενά ορισμένες εργασίες. Για παράδειγμα, ας δούμε το LLMMathChain. Αυτή η utility chain ermögνίζει στα μοντέλα γλώσσας να εκτελούν μαθηματικές υπολογισμούς. Αποδέχεται μια ερώτηση σε φυσική γλώσσα και το μοντέλο γλώσσας παράγει ένα τμήμα κώδικα Python, το οποίο στη συνέχεια εκτελείται για να παράγει την απάντηση.
- Generic Chains, από την άλλη πλευρά, χρησιμεύουν ως κτίρια για άλλες chains αλλά δεν μπορούν να χρησιμοποιηθούν αυτόνομα. Αυτές οι chains, όπως η LLMChain, είναι θεμελιώδεις και συχνά συνδυάζονται με άλλες chains για να επιτύχουν σύνθετες εργασίες. Για παράδειγμα, η LLMChain χρησιμοποιείται συχνά για να ζητήσει από ένα μοντέλο γλώσσας να διαμορφώσει την είσοδο με βάση ένα παρεχόμενο prompt template και στη συνέχεια να το περάσει στο μοντέλο γλώσσας.
Βήμα-Βήμα Υλοποίηση του Prompt Engineering με Langchain
Θα σας οδηγήσουμε через τη διαδικασία υλοποίησης του prompt engineering με Langchain. Πριν προχωρήσετε, βεβαιωθείτε ότι έχετε εγκαταστήσει τα απαραίτητα λογισμικά και πακέτα.
Μπορείτε να επωφεληθείτε από δημοφιλή εργαλεία όπως Docker, Conda, Pip και Poetry για τη ρύθμιση του LangChain. Τα σχετικά αρχεία εγκατάστασης για κάθε μια από αυτές τις μεθόδους μπορούν να βρεθούν στο αποθετήριο του LangChain στο https://github.com/benman1/generative_ai_with_langchain. Αυτό περιλαμβάνει ένα Dockerfile για Docker, ένα requirements.txt για Pip, ένα pyproject.toml για Poetry και ένα langchain_ai.yml αρχείο για Conda.
Σε αυτό το άρθρο, θα χρησιμοποιήσουμε το Pip, τον τυπικό διαχειριστή πακέτων Python, για τη διευκόλυνση της εγκατάστασης και της διαχείρισης των τρίτων βιβλιοθηκών. Αν δεν περιλαμβάνεται στην κατανομή Python σας, μπορείτε να εγκαταστήσετε το Pip ακολουθώντας τις οδηγίες στο https://pip.pypa.io/.
Για να εγκαταστήσετε μια βιβλιοθήκη με Pip, χρησιμοποιήστε την εντολή pip install library_name.
Ωστόσο, το Pip δεν διαχειρίζεται περιβάλλοντα από μόνο του. Για να χειριστείτε διαφορετικά περιβάλλοντα, χρησιμοποιούμε το εργαλείο virtualenv.
Στην επόμενη ενότητα, θα συζητήσουμε τις ενσωματώσεις μοντέλων.
Βήμα 1: Ρύθμιση του Langchain
Πρώτα, πρέπει να εγκαταστήσετε το πακέτο Langchain. Χρησιμοποιούμε το λειτουργικό σύστημα Windows. Εκτελέστε την ακόλουθη εντολή στο τερματικό σας για να το εγκαταστήσετε:
pip install langchain
Βήμα 2: Εισαγωγή του Langchain και άλλων απαραίτητων модουλών
Επόμενο, εισαγάγετε το Langchain μαζί με άλλα απαραίτητα модούλ. Εδώ, εισαγάγετε επίσης τη βιβλιοθήκη transformers, η οποία χρησιμοποιείται εκτενώς σε εργασίες NLP.
<p>import langchain from transformers import AutoModelWithLMHead, AutoTokenizer
Βήμα 3: Φόρτωση Προ-Εκπαιδευμένου Μοντέλου
Open AI
OpenAI μοντέλα μπορούν να αλληλεπιδράσουν με τη βιβλιοθήκη LangChain ή τη βιβλιοθήκη πελάτη OpenAI Python. Ιδιαίτερα, το OpenAI παρέχει μια κλάση Embedding για μοντέλα κωδικοποίησης κειμένου. Δύο κρίσιμα μοντέλα LLM είναι το GPT-3.5 και το GPT-4, που διαφέρουν κυρίως στο μήκος των tokens. Η τιμολόγηση για κάθε μοντέλο μπορεί να βρεθεί στην ιστοσελίδα του OpenAI. Ενώ υπάρχουν πιο σύνθετα μοντέλα όπως το GPT-4-32K που έχουν υψηλότερη αποδοχή tokens, η διαθεσιμότητά τους μέσω API δεν είναι πάντα εγγυημένη.

Η πρόσβαση σε αυτά τα μοντέλα απαιτεί ένα κλειδί API OpenAI. Αυτό μπορεί να γίνει δημιουργώντας ένα λογαριασμό στην πλατφόρμα του OpenAI, ρυθμίζοντας πληροφορίες χρέωσης και δημιουργώντας einen νέο μυστικό κλειδί.
<p>import os os.environ[&quot;OPENAI_API_KEY&quot;] = 'your-openai-token'</p>
Μετά την επιτυχή δημιουργία του κλειδιού, μπορείτε να το ορίσετε ως μια μεταβλητή περιβάλλοντος (OPENAI_API_KEY) ή να το περάσετε ως παράμετρο κατά τη διάρκεια της δημιουργίας της κλάσης για κλήσεις OpenAI.
Σκεφτείτε ένα σενάριο LangChain για να δείξουμε την αλληλεπίδραση με τα μοντέλα OpenAI:
from langchain.llms import OpenAI llm = OpenAI(model_name=&quot;text-davinci-003&quot;) # Το LLM λαμβάνει ένα prompt ως είσοδο και εξοδεύει μια ολοκλήρωση prompt = &quot;who is the president of the United States of America?&quot; completion = llm(prompt)
<p>Ο πρόεδρος των Ηνωμένων Πολιτειών Αμερικής είναι ο Joe Biden.</p>
Σε αυτό το παράδειγμα, ένας πράκτορας αρχικοποιείται για να εκτελέσει υπολογισμούς. Ο πράκτορας λαμβάνει μια είσοδο, μια απλή εργασία πρόσθεσης, την επεξεργάζεται χρησιμοποιώντας το παρεχόμενο μοντέλο OpenAI και επιστρέφει το αποτέλεσμα.
Hugging
Hugging Face είναι μια ΔΩΡΕΑΝ βιβλιοθήκη Transformers Python, συμβατή με PyTorch, TensorFlow και JAX, και περιλαμβάνει υλοποιήσεις μοντέλων όπως BERT, T5, κ.λπ.
Το Hugging Face προσφέρει επίσης το Hugging Face Hub, μια πλατφόρμα για τη φιλοξενία αποθετηρίων κώδικα, μοντέλων μηχανικής μάθησης, συνόλων δεδομένων και web εφαρμογών.
Για να χρησιμοποιήσετε το Hugging Face ως παρόχο για τα μοντέλα σας, θα χρειαστείτε ένα λογαριασμό και κλειδιά API, τα οποία μπορούν να ληφθούν από την ιστοσελίδα τους. Το κλειδί μπορεί να είναι διαθέσιμο στο περιβάλλον σας ως HUGGINGFACEHUB_API_TOKEN.
Σκεφτείτε το ακόλουθο τμήμα Python που χρησιμοποιεί ένα ανοιχτό μοντέλο που αναπτύχθηκε από την Google (GOOGL ), το Flan-T5-XXL:
from langchain.llms import HuggingFaceHub
<p>llm = HuggingFaceHub(model_kwargs={&quot;temperature&quot;: 0.5, &quot;max_length&quot;: 64},repo_id=&quot;google/flan-t5-xxl&quot;)
prompt = &quot;In which country is Tokyo?&quot;
completion = llm(prompt)
print(completion)</p>
Αυτό το σενάριο λαμβάνει μια ερώτηση ως είσοδο και επιστρέφει μια απάντηση, δείχνοντας τις γνώσεις και τις ικανότητες πρόβλεψης του μοντέλου.
Βήμα 4: Βασικό Prompt Engineering
Για να αρχίσουμε, θα δημιουργήσουμε ένα απλό prompt και θα δούμε πώς το μοντέλο απαντά.
prompt = 'Translate the following English text to French: &quot;{0}&quot;'
input_text = 'Hello, how are you?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')
<p>generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
Σε αυτό το τμήμα κώδικα, παρέχουμε ένα prompt για τη μετάφραση αγγλικού κειμένου στα γαλλικά. Το μοντέλο γλώσσας στη συνέχεια προσπαθεί να μεταφράσει το δεδομένο κείμενο με βάση το prompt.
Βήμα 5: Προηγμένο Prompt Engineering
Ενώ η παραπάνω προσέγγιση λειτουργεί καλά, δεν αξιοποιεί πλήρως τη δύναμη του prompt engineering. Ας το βελτιώσουμε εισάγοντας πιο σύνθετες δομές prompts.
prompt = 'As a highly proficient French translator, translate the following English text to French: &quot;{0}&quot;'
input_text = 'Hello, how are you?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')
<p>generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
Σε αυτό το τμήμα κώδικα, τροποποιούμε το prompt για να προτείνουμε ότι η μετάφραση γίνεται από έναν ‘πολύ ικανό μεταφραστή γαλλικών’. Η αλλαγή στο prompt μπορεί να οδηγήσει σε βελτιωμένες μεταφράσεις, καθώς το μοντέλο τώρα υποθέτει τον ρόλο ενός εμπειρού μεταφραστή.
Δημιουργία ενός Συστήματος Ερωτήσεων και Απαντήσεων Ακαδημαϊκής Βιβλιογραφίας με Langchain
Θα δημιουργήσουμε ένα σύστημα ερωτήσεων και απαντήσεων ακαδημαϊκής βιβλιογραφίας χρησιμοποιώντας το LangChain, το οποίο μπορεί να απαντήσει σε ερωτήσεις σχετικά με πρόσφατα δημοσιευμένα ακαδημαϊκά έγγραφα.

Πρώτα, για να ρυθμίσουμε το περιβάλλον μας, εγκαταστήστε τις απαραίτητες εξαρτήσεις.
pip install langchain arxiv openai transformers faiss-cpu
Μετά την εγκατάσταση, δημιουργήστε ένα νέο Python σημειωματάριο και εισαγάγετε τις απαραίτητες βιβλιοθήκες:
from langchain.llms import OpenAI from langchain.chains.qa_with_sources import load_qa_with_sources_chain from langchain.docstore.document import Document import arxiv
Το κεντρικό σημείο του συστήματος ερωτήσεων και απαντήσεων μας είναι η ικανότητα να ανακτήσουμε σχετικές ακαδημαϊκές εργασίες που σχετίζονται με ένα συγκεκριμένο πεδίο, εδώ θεωρούμε την επεξεργασία φυσικής γλώσσας (NLP), χρησιμοποιώντας την ακαδημαϊκή βάση δεδομένων arXiv. Για να thực hiện αυτό, ορίστε μια συνάρτηση get_arxiv_data(max_results=10). Αυτή η συνάρτηση συλλέγει τις πιο πρόσφατες περίληψεις εργασιών NLP από το arXiv και τις ενσωματώνει σε αντικείμενα εγγράφων LangChain, χρησιμοποιώντας την περίληψη ως περιεχόμενο και το μοναδικό αναγνωριστικό εισόδου ως πηγή.
Θα χρησιμοποιήσουμε το API του arXiv για να ανακτήσουμε πρόσφατες εργασίες που σχετίζονται με την NLP:
<p>def get_arxiv_data(max_results=10):
search = arxiv.Search(
query=&quot;NLP&quot;,
max_results=max_results,
sort_by=arxiv.SortCriterion.SubmittedDate,
)</p>
documents = []
<p>for result in search.results():
documents.append(Document(
page_content=result.summary,
metadata={&quot;source&quot;: result.entry_id},
))</p>
return documents
Αυτή η συνάρτηση ανακτά τις περίληψεις των πιο πρόσφατων εργασιών NLP από το arXiv και τις μετατρέπει σε αντικείμενα εγγράφων LangChain. Χρησιμοποιούμε την περίληψη και το μοναδικό αναγνωριστικό εισόδου (URL προς την εργασία) ως περιεχόμενο και πηγή, αντίστοιχα.
def print_answer(question):
print(
chain(
{
&quot;input_documents&quot;: sources,
&quot;question&quot;: question,
},
return_only_outputs=True,
)[&quot;output_text&quot;]
)
Ας ορίσουμε το σώμα μας και να ρυθμίσουμε το LangChain:
sources = get_arxiv_data(2) chain = load_qa_with_sources_chain(OpenAI(temperature=0))
Με το σύστημά μας ερωτήσεων και απαντήσεων τώρα έτοιμο, μπορούμε να το δοκιμάσουμε ζητώντας μια ερώτηση:
print_answer(&quot;What are the recent advancements in NLP?&quot;)
Η έξοδος θα είναι η απάντηση στην ερώτησή σας, αναφέροντας τις πηγές από τις οποίες η πληροφορία εξήχθη. Για παράδειγμα:
<p>Οι πρόσφατες προόδους στην NLP περιλαμβάνουν μοντέλα retriever-augmented instruction-following για εργασίες αναζήτησης πληροφοριών όπως η απάντηση σε ερωτήσεις. Αυτά τα μοντέλα μπορούν να προσαρμοστούν σε διάφορα πεδία πληροφοριών και εργασίες χωρίς πρόσθετη εκπαίδευση. Ωστόσο, συχνά δυσκολεύονται να σταθούν στην παρεχόμενη γνώση και μπορεί να ονειροφανταστούν στις απαντήσεις τους, μεταξύ άλλων. ΠΗΓΕΣ: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1
Μπορείτε εύκολα να αλλάξετε μοντέλα ή να τροποποιήσετε το σύστημα σύμφωνα με τις ανάγκες σας. Για παράδειγμα, εδώ αλλάζουμε στο GPT-4, το οποίο μας δίνει μια πολύ καλύτερη και πιο περίπλοκη απάντηση.
sources = get_arxiv_data(2) chain = load_qa_with_sources_chain(OpenAI(model_name=&quot;gpt-4&quot;,temperature=0))
<p>Οι πρόσφατες προόδους στην NLP περιλαμβάνουν την ανάπτυξη μοντέλων retriever-augmented instruction-following για εργασίες αναζήτησης πληροφοριών όπως η απάντηση σε ερωτήσεις. Αυτά τα μοντέλα μπορούν να προσαρμοστούν σε διάφορα πεδία πληροφοριών και εργασίες χωρίς πρόσθετη εκπαίδευση. Ωστόσο, συχνά δυσκολεύονται να σταθούν στην παρεχόμενη γνώση και μπορεί να ονειροφανταστούν στις απαντήσεις τους. Ένα άλλο βήμα είναι η εισαγωγή ενός υπολογιστικού πλαισίου για την επίλυση προβλημάτων ροής ισχύος με τη χρήση γραφικών επεξεργαστών (GPUs). Αυτή η προσέγγιση χρησιμοποιεί μια ενιαία εντολή, πολλαπλά δεδομένα (SIMD) αφαίρεσης των μη γραμμικών προγραμμάτων (NLP) και εφαρμόζει μια μεθοδολογία εσωτερικής σημείωσης (IPM) με μια στρατηγική χαλάρωσης ανισότητας. Αυτή η στρατηγική επιτρέπει την παραγοντοποίηση της матριάς KKT χωρίς αριθμητική στροφή, η οποία είχε προηγουμένως εμποδίσει την παραλληλοποίηση του αλγορίθμου IPM. ΠΗΓΕΣ: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1
Ένα token στο GPT-4 μπορεί να είναι τόσο σύντομο όσο ένα χαρακτήρας ή τόσο μακρύ όσο μια λέξη. Για παράδειγμα, το GPT-4-32K μπορεί να επεξεργαστεί μέχρι 32.000 tokens σε μια seule εκτέλεση, ενώ το GPT-4-8K και το GPT-3.5-turbo υποστηρίζουν 8.000 και 4.000 tokens, αντίστοιχα. Ωστόσο, είναι σημαντικό να σημειωθεί ότι κάθε αλληλεπίδραση με αυτά τα μοντέλα συνοδεύεται από ένα κόστος που είναι άμεσα ανάλογο του αριθμού των tokens που επεξεργάζονται, είτε εισόδου είτε εξόδου.
Στο πλαίσιο του συστήματος ερωτήσεων και απαντήσεων μας, αν ένα ακαδημαϊκό έγγραφο υπερβαίνει το μέγιστο όριο tokens, το σύστημα θα αποτύχει να το επεξεργαστεί ολικά, επηρεάζοντας την ποιότητα και την πληρότητα των απαντήσεων. Για να αντιμετωπίσουμε αυτό το ζήτημα, το κείμενο μπορεί να χωριστεί σε μικρότερα τμήματα που συμμορφώνονται με το όριο tokens.
Το FAISS (Facebook AI Similarity Search) (META ) βοηθά στην ταχεία εύρεση των πιο σχετικών τμημάτων κειμένου που σχετίζονται με την ερώτησή σας. Δημιουργεί μια διανυσματική αναπαράσταση κάθε τμήματος κειμένου και χρησιμοποιεί αυτές τις διανυσματικές για να ανακαλύψει και να ανακτήσει τα τμήματα που είναι πιο παρόμοια με την διανυσματική αναπαράσταση της ερώτησής σας.
Είναι σημαντικό να θυμάστε ότι ακόμη και με τη χρήση εργαλείων όπως το FAISS, η ανάγκη να χωρίσετε το κείμενο σε μικρότερα τμήματα λόγω των ορίων tokens μπορεί να οδηγήσει σε απώλεια контекστού, επηρεάζοντας την ποιότητα των απαντήσεων.,因此, η προσεκτική διαχείριση και βελτιστοποίηση της χρήσης tokens είναι κρίσιμη όταν εργάζεστε με αυτά τα μεγάλα μοντέλα γλώσσας.
pip install faiss-cpu langchain CharacterTextSplitter
Μετά την εγκατάσταση των παραπάνω βιβλιοθηκών, εκτελέστε
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores.faiss import FAISS
from langchain.text_splitter import CharacterTextSplitter
documents = get_arxiv_data(max_results=10) # Τώρα μπορούμε να χρησιμοποιήσουμε περισσότερα δεδομένα
document_chunks = []
splitter = CharacterTextSplitter(separator=&quot; &quot;, chunk_size=1024, chunk_overlap=0)
for document in documents:
for chunk in splitter.split_text(document.page_content):
document_chunks.append(Document(page_content=chunk, metadata=document.metadata))
<p>search_index = FAISS.from_documents(document_chunks, OpenAIEmbeddings())</p>
<p>chain = load_qa_with_sources_chain(OpenAI(temperature=0))</p>
<p>def print_answer(question):
print(
chain(
{
&quot;input_documents&quot;: search_index.similarity_search(question, k=4),
&quot;question&quot;: question,
},
return_only_outputs=True,
)[&quot;output_text&quot;]
)
Με τον κώδικα ολοκληρωμένο, τώρα έχουμε ένα ισχυρό εργαλείο για την αναζήτηση των τελευταίων ακαδημαϊκών ερευνών στο πεδίο της NLP.
Οι πρόσφατες προόδους στην NLP περιλαμβάνουν τη χρήση των deep neural networks (DNNs) για την αυτόματη ανάλυση κειμένου και τις εργασίες NLP όπως η διόρθωση ορθογραφίας, η ανίχνευση γλώσσας, η εξαγωγή οντοτήτων, η ανίχνευση συγγραφέα, η απάντηση σε ερωτήσεις και άλλες εργασίες. ΠΗΓΕΣ: http://arxiv.org/abs/2307.10652v1, http://arxiv.org/abs/2307.07002v1, http://arxiv.org/abs/2307.12114v1, http://arxiv.org/abs/2307.16217v1
Συμπέρασμα
Η ενσωμάτωση των Μεγάλων Μοντέλων Γλώσσας (LLMs) σε εφαρμογές έχει επιταχύνει την υιοθέτησή τους σε διάφορα πεδία, συμπεριλαμβανομένης της μετάφρασης γλώσσας, της ανάλυσης συναισθήματος και της ανάκτησης πληροφοριών. Το prompt engineering είναι ένα ισχυρό εργαλείο για την αξιοποίηση του πλήρους потенτιαλίου αυτών των μοντέλων, και το Langchain οδηγεί τον τρόπο στην απλοποίηση αυτής της σύνθετης εργασίας. Η стандαρδποιημένη διεπαφή, οι ευέλικτες προτυποποιημένες προτροπές, η ρομπούστα ενσωμάτωση μοντέλων και η καινοτόμος χρήση των πρακτόρων και των chains εγγυώνται τα βέλτιστα αποτελέσματα για την απόδοση των LLMs.
Ωστόσο, παρά αυτές τις προόδους, υπάρχουν quelques συμβουλές να θυμάστε. Όσο χρησιμοποιείτε το Langchain, είναι απαραίτητο να κατανοήσετε ότι η ποιότητα της εξόδου εξαρτάται σε μεγάλο βαθμό από τη φράση της προτροπής. Η πειραματισμός με διαφορετικές στυλ και δομές προτροπών μπορεί να οδηγήσει σε βελτιωμένα αποτελέσματα. Επίσης, θυμάστε ότι το Langchain υποστηρίζει eine ποικιλία μοντέλων γλώσσας, και το καθένα έχει τις δικές του ισχύσεις και αδυναμίες. Η επιλογή του σωστού μοντέλου για την συγκεκριμένη σας εργασία είναι κρίσιμη. Τέλος, είναι σημαντικό να θυμάστε ότι η χρήση αυτών των μοντέλων συνοδεύεται από κόστη, καθώς η επεξεργασία tokens επηρεάζει直接 το κόστος των αλληλεπιδράσεων.
Όπως έχει αποδειχθεί στην οδηγία βήμα-βήμα, το Langchain μπορεί να ενδυναμώσει robust εφαρμογές, όπως το σύστημα ερωτήσεων και απαντήσεων ακαδημαϊκής βιβλιογραφίας. Με μια αυξανόμενη κοινότητα χρηστών και αυξανόμενη προεξοχή στο τοπίο του ανοιχτού κώδικα, το Langchain υπόσχεται να είναι ένα κρίσιμο εργαλείο για την αξιοποίηση του πλήρους потенτιαλίου των LLMs όπως το GPT-4.














