στέλεχος Μηχανική προτροπής από μηδέν έως προηγμένη με Langchain στην Python - Unite.AI
Συνδεθείτε μαζί μας

Άμεση Μηχανική

Μηχανική από Zero to Advanced Prompt Engineering με Langchain στην Python

mm
Ενημερώθηκε on

Μια σημαντική πτυχή των Μεγάλων Γλωσσικών Μοντέλων (LLM) είναι ο αριθμός των παραμέτρων που χρησιμοποιούν αυτά τα μοντέλα για μάθηση. Όσο περισσότερες παραμέτρους έχει ένα μοντέλο, τόσο καλύτερα μπορεί να κατανοήσει τη σχέση μεταξύ λέξεων και φράσεων. Αυτό σημαίνει ότι τα μοντέλα με δισεκατομμύρια παραμέτρους έχουν την ικανότητα να δημιουργούν διάφορες μορφές δημιουργικού κειμένου και να απαντούν σε ανοιχτές και προκλητικές ερωτήσεις με κατατοπιστικό τρόπο.

Τα LLM όπως το ChatGPT, που χρησιμοποιούν το μοντέλο Transformer, είναι ικανά στην κατανόηση και τη δημιουργία ανθρώπινης γλώσσας, καθιστώντας τα χρήσιμα για εφαρμογές που απαιτούν κατανόηση φυσικής γλώσσας. Ωστόσο, δεν είναι χωρίς τους περιορισμούς τους, οι οποίοι περιλαμβάνουν μεταξύ άλλων ξεπερασμένη γνώση, αδυναμία αλληλεπίδρασης με εξωτερικά συστήματα, έλλειψη κατανόησης του πλαισίου και μερικές φορές δημιουργία εύλογων αλλά εσφαλμένων ή παράλογων απαντήσεων.

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

Ωστόσο, η ενοποίηση των LLMs με άλλα εργαλεία για τη δημιουργία εφαρμογών που υποστηρίζονται από LLM θα μπορούσε να επαναπροσδιορίσει το ψηφιακό μας τοπίο. Οι δυνατότητες τέτοιων εφαρμογών είναι τεράστιες, συμπεριλαμβανομένης της βελτίωσης της αποδοτικότητας και της παραγωγικότητας, της απλοποίησης των εργασιών, της ενίσχυσης της λήψης αποφάσεων και της παροχής εξατομικευμένων εμπειριών.

Σε αυτό το άρθρο, θα εμβαθύνουμε σε αυτά τα ζητήματα, διερευνώντας τις προηγμένες τεχνικές άμεσης μηχανικής με το Langchain, προσφέροντας σαφείς εξηγήσεις, πρακτικά παραδείγματα και οδηγίες βήμα προς βήμα για τον τρόπο εφαρμογής τους.

Η Langchain, μια βιβλιοθήκη αιχμής, προσφέρει ευκολία και ευελιξία στο σχεδιασμό, την υλοποίηση και τον συντονισμό των προτροπών. Καθώς αποσυσκευάζουμε τις αρχές και τις πρακτικές της άμεσης μηχανικής, θα μάθετε πώς να χρησιμοποιείτε τις ισχυρές δυνατότητες της Langchain για να αξιοποιήσετε τα δυνατά σημεία των μοντέλων SOTA Generative AI όπως το GPT-4.

Κατανόηση Προτροπών

Πριν βουτήξουμε στις τεχνικές λεπτομέρειες της άμεσης μηχανικής, είναι απαραίτητο να κατανοήσουμε την έννοια των προτροπών και τη σημασία τους.

ΕΝΑ 'έγκαιρη' είναι μια ακολουθία διακριτικών που χρησιμοποιούνται ως είσοδος σε ένα μοντέλο γλώσσας, δίνοντάς του εντολή να δημιουργήσει έναν συγκεκριμένο τύπο απόκρισης. Οι προτροπές παίζουν κρίσιμο ρόλο στην καθοδήγηση της συμπεριφοράς ενός μοντέλου. Μπορούν να επηρεάσουν την ποιότητα του παραγόμενου κειμένου και, όταν δημιουργηθούν σωστά, μπορούν να βοηθήσουν το μοντέλο να παρέχει διορατικά, ακριβή αποτελέσματα και συγκεκριμένα αποτελέσματα.

Η άμεση μηχανική είναι η τέχνη και η επιστήμη του σχεδιασμού αποτελεσματικών προτροπών. Ο στόχος είναι να εξαχθεί το επιθυμητό αποτέλεσμα από ένα γλωσσικό μοντέλο. Με την προσεκτική επιλογή και δόμηση των προτροπών, μπορεί κανείς να καθοδηγήσει το μοντέλο προς τη δημιουργία πιο ακριβών και σχετικών απαντήσεων. Στην πράξη, αυτό περιλαμβάνει τη λεπτή ρύθμιση των φράσεων εισαγωγής για να καλύψει την εκπαίδευση και τις δομικές προκαταλήψεις του μοντέλου.

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

Langchain: Το πιο γρήγορα αναπτυσσόμενο εργαλείο προτροπής

LangChain, που κυκλοφόρησε τον Οκτώβριο του 2022 από Χάρισον Τσέις, έχει γίνει ένα από τα πλαίσια ανοιχτού κώδικα με τις περισσότερες αξιολογήσεις στο GitHub το 2023. Προσφέρει μια απλοποιημένη και τυποποιημένη διεπαφή για την ενσωμάτωση μοντέλων μεγάλων γλωσσών (LLM) σε εφαρμογές. Παρέχει επίσης μια διεπαφή πλούσια σε χαρακτηριστικά για άμεση μηχανική, επιτρέποντας στους προγραμματιστές να πειραματιστούν με διαφορετικές στρατηγικές και να αξιολογήσουν τα αποτελέσματά τους. Χρησιμοποιώντας το Langchain, μπορείτε να εκτελέσετε άμεσες εργασίες μηχανικής πιο αποτελεσματικά και διαισθητικά.

LangFlow χρησιμεύει ως διεπαφή χρήστη για την ενορχήστρωση στοιχείων LangChain σε ένα εκτελέσιμο διάγραμμα ροής, επιτρέποντας τη γρήγορη δημιουργία πρωτοτύπων και πειραματισμό.

Το LangChain καλύπτει ένα κρίσιμο κενό στην ανάπτυξη της τεχνητής νοημοσύνης για τις μάζες. Επιτρέπει σε μια σειρά εφαρμογών NLP, όπως εικονικούς βοηθούς, παραγωγούς περιεχομένου, συστήματα απάντησης ερωτήσεων και πολλά άλλα, να λύσουν μια σειρά από προβλήματα του πραγματικού κόσμου.

Αντί να είναι ένα αυτόνομο μοντέλο ή πάροχος, το LangChain απλοποιεί την αλληλεπίδραση με διαφορετικά μοντέλα, επεκτείνοντας τις δυνατότητες των εφαρμογών LLM πέρα ​​από τους περιορισμούς μιας απλής κλήσης API.

Η Αρχιτεκτονική του LangChain

 

Τα κύρια στοιχεία του LangChain περιλαμβάνουν Model I/O, Πρότυπα Προτροπής, Μνήμη, Πράκτορες και Αλυσίδες.

Μοντέλο I/O

Το LangChain διευκολύνει μια απρόσκοπτη σύνδεση με διάφορα μοντέλα γλωσσών τυλίγοντάς τα με μια τυποποιημένη διεπαφή γνωστή ως Model I/O. Αυτό διευκολύνει έναν αβίαστο διακόπτη μοντέλου για βελτιστοποίηση ή καλύτερη απόδοση. Το LangChain υποστηρίζει διάφορους παρόχους μοντέλων γλωσσών, μεταξύ των οποίων OpenAI, Πρόσωπο αγκαλιάς, Γαλανός, Πυροτεχνήματα, Και πολλά άλλα.

Πρότυπα προτροπής

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

Ένα απλό παράδειγμα προτύπου προτροπής:

from langchain.prompts import PromptTemplate
prompt = PromptTemplate(input_variables=["subject"],
template="What are the recent advancements in the field of {subject}?")
print(prompt.format(subject="Natural Language Processing"))

Καθώς προχωράμε στην πολυπλοκότητα, συναντάμε πιο εξελιγμένα μοτίβα στο LangChain, όπως το μοτίβο Reason and Act (ReAct). Το ReAct είναι ένα ζωτικό μοτίβο για την εκτέλεση ενεργειών όπου ο πράκτορας αναθέτει μια εργασία σε ένα κατάλληλο εργαλείο, προσαρμόζει την είσοδο για αυτό και αναλύει την έξοδο του για να ολοκληρώσει την εργασία. Το παρακάτω παράδειγμα Python δείχνει ένα μοτίβο ReAct. Δείχνει πώς δομείται μια προτροπή στο LangChain, χρησιμοποιώντας μια σειρά από σκέψεις και ενέργειες για να συλλογιστεί ένα πρόβλημα και να παράγει μια τελική απάντηση:

PREFIX = """Answer the following question using the given tools:"""
FORMAT_INSTRUCTIONS = """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"""
SUFFIX = """Start!
Question: {input}
Thought:{agent_scratchpad}"""

Μνήμη

Η μνήμη είναι μια κρίσιμη έννοια στο LangChain, η οποία επιτρέπει στα LLM και στα εργαλεία να διατηρούν πληροφορίες με την πάροδο του χρόνου. Αυτή η συμπεριφορά κατάστασης βελτιώνει την απόδοση των εφαρμογών LangChain αποθηκεύοντας προηγούμενες απαντήσεις, αλληλεπιδράσεις με τους χρήστες, την κατάσταση του περιβάλλοντος και τους στόχους του πράκτορα. Οι στρατηγικές ConversationBufferMemory και ConversationBufferWindowMemory βοηθούν στην παρακολούθηση του πλήρους ή πρόσφατου μέρους μιας συνομιλίας, αντίστοιχα. Για μια πιο περίπλοκη προσέγγιση, η στρατηγική ConversationKGMemory επιτρέπει την κωδικοποίηση της συνομιλίας ως γραφήματος γνώσης που μπορεί να ανατροφοδοτηθεί σε προτροπές ή να χρησιμοποιηθεί για την πρόβλεψη απαντήσεων χωρίς κλήση του LLM.

Πράκτορες

Ένας πράκτορας αλληλεπιδρά με τον κόσμο εκτελώντας ενέργειες και εργασίες. Στο LangChain, οι πράκτορες συνδυάζουν εργαλεία και αλυσίδες για την εκτέλεση εργασιών. Μπορεί να δημιουργήσει μια σύνδεση με τον έξω κόσμο για ανάκτηση πληροφοριών για να αυξήσει τη γνώση LLM, ξεπερνώντας έτσι τους εγγενείς περιορισμούς τους. Μπορούν να αποφασίσουν να περάσουν τους υπολογισμούς σε μια αριθμομηχανή ή έναν διερμηνέα Python ανάλογα με την περίσταση.

Οι πράκτορες είναι εξοπλισμένοι με υποσυστατικά:

  • Εργαλεία: Αυτά είναι λειτουργικά εξαρτήματα.
  • Εργαλεία: Συλλογές εργαλείων.
  • Πράκτορες Εκτελεστές: Αυτός είναι ο μηχανισμός εκτέλεσης που επιτρέπει την επιλογή μεταξύ εργαλείων.

Οι πράκτορες στο LangChain ακολουθούν επίσης το μοτίβο Zero-shot ReAct, όπου η απόφαση βασίζεται μόνο στην περιγραφή του εργαλείου. Αυτός ο μηχανισμός μπορεί να επεκταθεί με μνήμη προκειμένου να ληφθεί υπόψη το πλήρες ιστορικό συνομιλιών. Με το ReAct, αντί να ζητήσετε από ένα LLM να συμπληρώσει αυτόματα το κείμενό σας, μπορείτε να του ζητήσετε να απαντήσει σε έναν βρόχο σκέψης/πράξης/παρατήρησης.

Αλυσίδες

Οι αλυσίδες, όπως υποδηλώνει ο όρος, είναι ακολουθίες λειτουργιών που επιτρέπουν στη βιβλιοθήκη LangChain να επεξεργάζεται τις εισόδους και τις εξόδους του μοντέλου γλώσσας απρόσκοπτα. Αυτά τα αναπόσπαστα στοιχεία του LangChain αποτελούνται βασικά από συνδέσμους, οι οποίοι μπορεί να είναι άλλες αλυσίδες ή πρωτόγονα, όπως προτροπές, μοντέλα γλώσσας ή βοηθητικά προγράμματα.

Φανταστείτε μια αλυσίδα ως μεταφορική ταινία σε ένα εργοστάσιο. Κάθε βήμα σε αυτήν τη ζώνη αντιπροσωπεύει μια συγκεκριμένη λειτουργία, η οποία θα μπορούσε να είναι η επίκληση ενός μοντέλου γλώσσας, η εφαρμογή μιας συνάρτησης Python σε ένα κείμενο ή ακόμη και η προτροπή του μοντέλου με συγκεκριμένο τρόπο.

Η LangChain κατηγοριοποιεί τις αλυσίδες της σε τρεις τύπους: αλυσίδες Utility, Generic chains και Combine Documents αλυσίδες. Θα βουτήξουμε στις αλυσίδες Utility και Generic για τη συζήτησή μας.

  • Αλυσίδες κοινής ωφέλειας έχουν σχεδιαστεί ειδικά για την εξαγωγή ακριβών απαντήσεων από γλωσσικά μοντέλα για στενά καθορισμένες εργασίες. Για παράδειγμα, ας ρίξουμε μια ματιά στο LLMMathChain. Αυτή η αλυσίδα βοηθητικού προγράμματος επιτρέπει στα μοντέλα γλώσσας να εκτελούν μαθηματικούς υπολογισμούς. Αποδέχεται μια ερώτηση σε φυσική γλώσσα και το μοντέλο γλώσσας με τη σειρά του δημιουργεί ένα απόσπασμα κώδικα Python το οποίο στη συνέχεια εκτελείται για να δώσει την απάντηση.
  • Γενικές Αλυσίδες, από την άλλη πλευρά, χρησιμεύουν ως δομικά στοιχεία για άλλες αλυσίδες αλλά δεν μπορούν να χρησιμοποιηθούν απευθείας αυτόνομες. Αυτές οι αλυσίδες, όπως το LLMChain, είναι θεμελιώδεις και συχνά συνδυάζονται με άλλες αλυσίδες για την επίτευξη περίπλοκων εργασιών. Για παράδειγμα, το LLMChain χρησιμοποιείται συχνά για την αναζήτηση ενός αντικειμένου μοντέλου γλώσσας μορφοποιώντας την είσοδο με βάση ένα παρεχόμενο πρότυπο προτροπής και στη συνέχεια μεταβιβάζοντάς το στο μοντέλο γλώσσας.

Βήμα-βήμα Εφαρμογή του Prompt Engineering με το Langchain

Θα σας καθοδηγήσουμε στη διαδικασία εφαρμογής άμεσης μηχανικής χρησιμοποιώντας το Langchain. Πριν συνεχίσετε, βεβαιωθείτε ότι έχετε εγκαταστήσει το απαραίτητο λογισμικό και πακέτα.

Μπορείτε να επωφεληθείτε από δημοφιλή εργαλεία όπως το Docker, το Conda, το Pip και το Poetry για τη ρύθμιση του LangChain. Τα σχετικά αρχεία εγκατάστασης για καθεμία από αυτές τις μεθόδους βρίσκονται στο αποθετήριο LangChain στη διεύθυνση https://github.com/benman1/generative_ai_with_langchain. Αυτό περιλαμβάνει α Dockerfile για Docker, α απαιτήσεις.txt για τον Πιπ, α pyproject.toml για την Ποίηση, και α 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 μαζί με άλλες απαραίτητες ενότητες. Εδώ, εισάγουμε επίσης τη βιβλιοθήκη μετασχηματιστών, η οποία χρησιμοποιείται ευρέως σε εργασίες NLP.

import langchain
from transformers import AutoModelWithLMHead, AutoTokenizer

Βήμα 3: Φόρτωση προεκπαιδευμένου μοντέλου

Ανοίξτε το AI

OpenAI Τα μοντέλα μπορούν να συνδεθούν εύκολα με τη βιβλιοθήκη LangChain ή τη βιβλιοθήκη πελάτη OpenAI Python. Συγκεκριμένα, το OpenAI παρέχει μια τάξη Ενσωμάτωσης για μοντέλα ενσωμάτωσης κειμένου. Δύο βασικά μοντέλα LLM είναι το GPT-3.5 και το GPT-4, που διαφέρουν κυρίως ως προς το μήκος διακριτικού. Η τιμολόγηση για κάθε μοντέλο βρίσκεται στον ιστότοπο του OpenAI. Ενώ υπάρχουν περισσότερα εξελιγμένα μοντέλα όπως το GPT-4-32K που έχουν υψηλότερη αποδοχή διακριτικών, η διαθεσιμότητά τους μέσω API είναι δεν είναι πάντα εγγυημένη.

Η πρόσβαση σε αυτά τα μοντέλα απαιτεί κλειδί OpenAI API. Αυτό μπορεί να γίνει δημιουργώντας έναν λογαριασμό στην πλατφόρμα του OpenAI, ρυθμίζοντας πληροφορίες χρέωσης και δημιουργώντας ένα νέο μυστικό κλειδί.

import os
os.environ["OPENAI_API_KEY"] = 'your-openai-token'

Αφού δημιουργήσετε επιτυχώς το κλειδί, μπορείτε να το ορίσετε ως μεταβλητή περιβάλλοντος (OPENAI_API_KEY) ή να το μεταβιβάσετε ως παράμετρο κατά την εγκατάσταση κλάσης για κλήσεις OpenAI.

Σκεφτείτε ένα σενάριο LangChain για να παρουσιάσετε την αλληλεπίδραση με τα μοντέλα OpenAI:

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")
# The LLM takes a prompt as an input and outputs a completion
prompt = "who is the president of the United States of America?"
completion = llm(prompt)
The current President of the United States of America is Joe Biden.

Σε αυτό το παράδειγμα, ένας πράκτορας προετοιμάζεται για να εκτελέσει υπολογισμούς. Ο πράκτορας λαμβάνει μια είσοδο, μια απλή εργασία προσθήκης, την επεξεργάζεται χρησιμοποιώντας το παρεχόμενο μοντέλο OpenAI και επιστρέφει το αποτέλεσμα.

Αγκαλιάζοντας το πρόσωπο

Αγκαλιάζοντας το πρόσωπο είναι ένα ΔΩΡΕΑΝ ΧΡΗΣΗ Βιβλιοθήκη Transformers Python, συμβατή με PyTorch, TensorFlow και JAX και περιλαμβάνει υλοποιήσεις μοντέλων όπως ΜΠΕΡΤ, T5Κ.λπ.

Το Hugging Face προσφέρει επίσης το Hugging Face Hub, μια πλατφόρμα για τη φιλοξενία αποθετηρίων κώδικα, μοντέλων μηχανικής εκμάθησης, συνόλων δεδομένων και εφαρμογών ιστού.

Για να χρησιμοποιήσετε το Hugging Face ως πάροχο για τα μοντέλα σας, θα χρειαστείτε έναν λογαριασμό και κλειδιά API, τα οποία μπορείτε να αποκτήσετε από τον ιστότοπό τους. Το διακριτικό μπορεί να διατεθεί στο περιβάλλον σας ως HUGGINGFACEHUB_API_TOKEN.

Εξετάστε το ακόλουθο απόσπασμα Python που χρησιμοποιεί ένα μοντέλο ανοιχτού κώδικα που αναπτύχθηκε από την Google, το μοντέλο Flan-T5-XXL:

from langchain.llms import HuggingFaceHub
llm = HuggingFaceHub(model_kwargs={"temperature": 0.5, "max_length": 64},repo_id="google/flan-t5-xxl")
prompt = "In which country is Tokyo?"
completion = llm(prompt)
print(completion)

Αυτό το σενάριο λαμβάνει μια ερώτηση ως είσοδο και επιστρέφει μια απάντηση, επιδεικνύοντας τις γνώσεις και τις δυνατότητες πρόβλεψης του μοντέλου.

Βήμα 4: Βασική Μηχανική Προτροπής

Αρχικά, θα δημιουργήσουμε μια απλή προτροπή και θα δούμε πώς ανταποκρίνεται το μοντέλο.

prompt = 'Translate the following English text to French: "{0}"'
input_text = 'Hello, how are you?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')
generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))

Στο παραπάνω απόσπασμα κώδικα, παρέχουμε μια προτροπή για μετάφραση αγγλικού κειμένου στα γαλλικά. Στη συνέχεια, το μοντέλο γλώσσας προσπαθεί να μεταφράσει το δεδομένο κείμενο με βάση την προτροπή.

Βήμα 5: Advanced Prompt Engineering

Ενώ η παραπάνω προσέγγιση λειτουργεί καλά, δεν εκμεταλλεύεται πλήρως τη δύναμη της άμεσης μηχανικής. Ας το βελτιώσουμε εισάγοντας μερικές πιο σύνθετες δομές άμεσης επικοινωνίας.

prompt = 'As a highly proficient French translator, translate the following English text to French: "{0}"'
input_text = 'Hello, how are you?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')
generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))

Σε αυτό το απόσπασμα κώδικα, τροποποιούμε την προτροπή για να υποδείξουμε ότι η μετάφραση γίνεται από έναν «μεταφραστή με μεγάλη γνώση στα γαλλικά. Η αλλαγή στην προτροπή μπορεί να οδηγήσει σε βελτιωμένες μεταφράσεις, καθώς το μοντέλο αναλαμβάνει πλέον την προσωπικότητα ενός ειδικού.

Δημιουργία Συστήματος Ερωτήσεων & Απαντήσεων Ακαδημαϊκής Λογοτεχνίας με το 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

Ο πυρήνας του συστήματος Q&A μας είναι η δυνατότητα λήψης σχετικών ακαδημαϊκών εργασιών που σχετίζονται με ένα συγκεκριμένο πεδίο, εδώ εξετάζουμε την Επεξεργασία Φυσικής Γλώσσας (NLP), χρησιμοποιώντας την ακαδημαϊκή βάση δεδομένων arXiv. Για να γίνει αυτό, ορίζουμε μια συνάρτηση get_arxiv_data(max_results=10). Αυτή η συνάρτηση συλλέγει τις πιο πρόσφατες περιλήψεις χαρτιού NLP από το arXiv και τις ενσωματώνει σε αντικείμενα LangChain Document, χρησιμοποιώντας τη σύνοψη ως περιεχόμενο και το μοναδικό αναγνωριστικό καταχώρισης ως πηγή.

Θα χρησιμοποιήσουμε το arXiv API για τη λήψη πρόσφατων εγγράφων που σχετίζονται με το NLP:

def get_arxiv_data(max_results=10):
    search = arxiv.Search(
        query="NLP",
        max_results=max_results,
        sort_by=arxiv.SortCriterion.SubmittedDate,
    )
   
    documents = []
   
    for result in search.results():
        documents.append(Document(
            page_content=result.summary,
            metadata={"source": result.entry_id},
        ))
    return documents

Αυτή η συνάρτηση ανακτά τις περιλήψεις των πιο πρόσφατων εγγράφων NLP από το arXiv και τις μετατρέπει σε αντικείμενα LangChain Document. Χρησιμοποιούμε τη σύνοψη του χαρτιού και το μοναδικό αναγνωριστικό καταχώρισής του (URL στο χαρτί) ως περιεχόμενο και πηγή, αντίστοιχα.

def print_answer(question):
    print(
        chain(
            {
                "input_documents": sources,
                "question": question,
            },
            return_only_outputs=True,
        )["output_text"]
    )                 

Ας ορίσουμε το σώμα μας και ας ρυθμίσουμε το LangChain:

sources = get_arxiv_data(2)
chain = load_qa_with_sources_chain(OpenAI(temperature=0))

Με το ακαδημαϊκό μας σύστημα Q&A τώρα έτοιμο, μπορούμε να το δοκιμάσουμε κάνοντας μια ερώτηση:

print_answer("What are the recent advancements in NLP?")

Το αποτέλεσμα θα είναι η απάντηση στην ερώτησή σας, παραθέτοντας τις πηγές από τις οποίες αντλήθηκαν οι πληροφορίες. Για παράδειγμα:

Recent advancements in NLP include Retriever-augmented instruction-following models and a novel computational framework for solving alternating current optimal power flow (ACOPF) problems using graphics processing units (GPUs).
SOURCES: 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="gpt-4",temperature=0))
Recent advancements in Natural Language Processing (NLP) include the development of retriever-augmented instruction-following models for information-seeking tasks such as question answering (QA). These models can be adapted to various information domains and tasks without additional fine-tuning. However, they often struggle to stick to the provided knowledge and may hallucinate in their responses. Another advancement is the introduction of a computational framework for solving alternating current optimal power flow (ACOPF) problems using graphics processing units (GPUs). This approach utilizes a single-instruction, multiple-data (SIMD) abstraction of nonlinear programs (NLP) and employs a condensed-space interior-point method (IPM) with an inequality relaxation strategy. This strategy allows for the factorization of the KKT matrix without numerical pivoting, which has previously hampered the parallelization of the IPM algorithm.
SOURCES: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1

Ένα διακριτικό στο GPT-4 μπορεί να είναι τόσο σύντομο όσο ένας χαρακτήρας ή όσο μια λέξη. Για παράδειγμα, το GPT-4-32K, μπορεί να επεξεργαστεί έως και 32,000 μάρκες σε μία μόνο εκτέλεση, ενώ το GPT-4-8K και το GPT-3.5-turbo υποστηρίζουν 8,000 και 4,000 μάρκες αντίστοιχα. Ωστόσο, είναι σημαντικό να σημειωθεί ότι κάθε αλληλεπίδραση με αυτά τα μοντέλα συνοδεύεται από ένα κόστος που είναι άμεσα ανάλογο με τον αριθμό των κουπονιών που υποβάλλονται σε επεξεργασία, είτε πρόκειται για είσοδο είτε για έξοδο.

Στο πλαίσιο του συστήματος Q&A που διαθέτουμε, εάν ένα κομμάτι ακαδημαϊκής βιβλιογραφίας υπερβεί το μέγιστο όριο συμβολικής, το σύστημα θα αποτύχει να το επεξεργαστεί στο σύνολό του, επηρεάζοντας έτσι την ποιότητα και την πληρότητα των απαντήσεων. Για να επιλύσετε αυτό το ζήτημα, το κείμενο μπορεί να αναλυθεί σε μικρότερα μέρη που συμμορφώνονται με το όριο διακριτικού.

FAISS (Facebook AI Similarity Search) βοηθά στη γρήγορη εύρεση των πιο σχετικών τμημάτων κειμένου που σχετίζονται με το ερώτημα του χρήστη. Δημιουργεί μια διανυσματική αναπαράσταση κάθε τμήματος κειμένου και χρησιμοποιεί αυτά τα διανύσματα για να αναγνωρίσει και να ανακτήσει τα κομμάτια που είναι πιο παρόμοια με τη διανυσματική αναπαράσταση μιας δεδομένης ερώτησης.

Είναι σημαντικό να θυμάστε ότι ακόμη και με τη χρήση εργαλείων όπως το FAISS, η ανάγκη διαίρεσης του κειμένου σε μικρότερα κομμάτια λόγω περιορισμών συμβολικών μπορεί μερικές φορές να οδηγήσει σε απώλεια του πλαισίου, επηρεάζοντας την ποιότητα των απαντήσεων. Επομένως, η προσεκτική διαχείριση και η βελτιστοποίηση της χρήσης διακριτικών είναι ζωτικής σημασίας όταν εργάζεστε με αυτά τα μεγάλα μοντέλα γλώσσας.

 
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) # We can now use feed more data
document_chunks = []
splitter = CharacterTextSplitter(separator=" ", 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))
search_index = FAISS.from_documents(document_chunks, OpenAIEmbeddings())
chain = load_qa_with_sources_chain(OpenAI(temperature=0))
def print_answer(question):
    print(
        chain(
            {
                "input_documents": search_index.similarity_search(question, k=4),
                "question": question,
            },
            return_only_outputs=True,
        )["output_text"]
    )

Με τον κώδικα ολοκληρωμένο, έχουμε τώρα ένα ισχυρό εργαλείο για την αναζήτηση της πιο πρόσφατης ακαδημαϊκής βιβλιογραφίας στον τομέα του NLP.

 
Recent advancements in NLP include the use of deep neural networks (DNNs) for automatic text analysis and natural language processing (NLP) tasks such as spell checking, language detection, entity extraction, author detection, question answering, and other tasks. 
SOURCES: http://arxiv.org/abs/2307.10652v1, http://arxiv.org/abs/2307.07002v1, http://arxiv.org/abs/2307.12114v1, http://arxiv.org/abs/2307.16217v1 

Συμπέρασμα

Η ενσωμάτωση των μεγάλων γλωσσικών μοντέλων (LLM) σε εφαρμογές έχει επιταχύνει την υιοθέτηση πολλών τομέων, συμπεριλαμβανομένης της μετάφρασης γλώσσας, της ανάλυσης συναισθημάτων και της ανάκτησης πληροφοριών. Η άμεση μηχανική είναι ένα ισχυρό εργαλείο για τη μεγιστοποίηση των δυνατοτήτων αυτών των μοντέλων και η Langchain πρωτοπορεί στην απλούστευση αυτού του πολύπλοκου έργου. Η τυποποιημένη διεπαφή του, τα ευέλικτα πρότυπα προτροπής, η ισχυρή ενσωμάτωση μοντέλων και η καινοτόμος χρήση πρακτόρων και αλυσίδων εξασφαλίζουν βέλτιστα αποτελέσματα για την απόδοση των LLMs.

Ωστόσο, παρά αυτές τις εξελίξεις, υπάρχουν λίγες συμβουλές που πρέπει να θυμάστε. Καθώς χρησιμοποιείτε το Langchain, είναι σημαντικό να καταλάβετε ότι η ποιότητα της παραγωγής εξαρτάται σε μεγάλο βαθμό από τη διατύπωση της προτροπής. Ο πειραματισμός με διαφορετικά στυλ και δομές προτροπής μπορεί να αποφέρει βελτιωμένα αποτελέσματα. Επίσης, να θυμάστε ότι ενώ το Langchain υποστηρίζει μια ποικιλία μοντέλων γλώσσας, το καθένα έχει τα δυνατά και τα αδύνατα σημεία του. Η επιλογή του σωστού για τη συγκεκριμένη εργασία σας είναι ζωτικής σημασίας. Τέλος, είναι σημαντικό να θυμάστε ότι η χρήση αυτών των μοντέλων συνοδεύεται από εκτιμήσεις κόστους, καθώς η επεξεργασία διακριτικών επηρεάζει άμεσα το κόστος των αλληλεπιδράσεων.

Όπως αποδεικνύεται στον οδηγό βήμα προς βήμα, το Langchain μπορεί να τροφοδοτήσει ισχυρές εφαρμογές, όπως το σύστημα Ακαδημαϊκής Λογοτεχνίας Q&A. Με μια αυξανόμενη κοινότητα χρηστών και την αυξανόμενη εξέχουσα θέση στο τοπίο ανοιχτού κώδικα, το Langchain υπόσχεται να είναι ένα βασικό εργαλείο για την αξιοποίηση του πλήρους δυναμικού των LLMs όπως το GPT-4.

Έχω περάσει τα τελευταία πέντε χρόνια βυθίζοντας τον εαυτό μου στον συναρπαστικό κόσμο της Μηχανικής Μάθησης και της Βαθιάς Μάθησης. Το πάθος και η εξειδίκευσή μου με οδήγησαν να συνεισφέρω σε περισσότερα από 50 διαφορετικά έργα μηχανικής λογισμικού, με ιδιαίτερη έμφαση στην AI/ML. Η συνεχής περιέργειά μου με έχει τραβήξει επίσης προς την Επεξεργασία Φυσικής Γλώσσας, έναν τομέα που ανυπομονώ να εξερευνήσω περαιτέρω.