Τα prompts είναι βασικά τα αιτήματά μας ή οι εισροές σε μοντέλα AI. Η μηχανική prompt, όπως υποδηλώνει το όνομα, είναι για να πάει λίγο πιο βαθιά από τα βασικά prompts δημιουργώντας εξειδικευμένες εισροές που (πιο) καθοδηγούν αποτελεσματικά τα μοντέλα AI για να παράγουν σχεδόν τέλεια εξόδους.
Δεν χρειάζεται απαραίτητα να χρησιμοποιήσετε μια γλώσσα προγραμματισμού ή ένα IDE για αυτό, καθώς οι περισσότεροι άνθρωποι προτείνουν ότι μπορείτε απλά να χρησιμοποιήσετε το μπροστινό άκρο του ChatGPT. Αυτό είναι τεχνικά ακριβές, αλλά αυτό δεν σας δίνει ακριβώς την πραγματική «διασκέδαση» της μηχανικής ενός μοντέλου όπως χρησιμοποιώντας μια γλώσσα προγραμματισμού, για να μην αναφέρουμε ότι δεν είναι τόσο αποτελεσματική.
Σε αυτό το άρθρο, θα εξετάσουμε πώς να το κάνουμε σε Python, χρησιμοποιώντας το μοντέλο Phi-3-mini-4k-instruct από τη Microsoft. θα χρησιμοποιήσουμε το API συμπερασμάτων Huggingface για αυτό, ώστε να μην χρειάζεται να κατεβάσετε ένα μοντέλο 7GB τοπικά.
Σκεφτείτε το ωςmanipulatingένα μοντέλο από το εσωτερικό, όχι από τα βασικά μηνύματα συνομιλίας.
Η δημιουργία του περιβάλλοντος
- Δημιουργήστε έναν λογαριασμό Huggingface και ανακτήστε ένα κλειδί API (το προφίλ σας > τα tokens πρόσβασης) με πρόσβαση "γράψτε".Αυτό δεν είναι μια χορηγούμενη θέση.Αν εργάζεστε με LLMs, θα πρέπει να δημιουργήσετε ένα λογαριασμό Huggingface σε κάποιο σημείο.
- Βεβαιωθείτε ότι έχετε εγκαταστήσει το Python 3.10+ στο σύστημά σας και έχετε δημιουργήσει ένα IDE ή μπορείτε να χρησιμοποιήσετε αυτό το σημειωματάριο στο Google Colab.
- Εγκαταστήστε τη βιβλιοθήκη "huggingface_hub" χρησιμοποιώντας την εντολή "pip install huggingface_hub" ή άλλη εντολή, ανάλογα με το λειτουργικό σας σύστημα.
Κατανοώντας τα βασικά
Πριν προχωρήσουμε στον κώδικα, ας μάθουμε λίγο για την γρήγορη μηχανική.
Όπως ανέφερα προηγουμένως, η μηχανική γρήγορης προώθησης είναι ουσιαστικά η δημιουργία εξειδικευμένων εισροών για τον έλεγχο των εξαγωγών μοντέλου με βάση τις απαιτήσεις σας.
Διαφορετικά LLMs ανταποκρίνονται σε διαφορετικές τεχνικές προεπισκόπησης διαφορετικά. αυτό σημαίνει ότι δεν μπορείτε να χρησιμοποιήσετε το ίδιο πρότυπο προεπισκόπησης για όλα και κάθε LLM. και αυτό σημαίνει και πάλι ότι πρέπει να διαβάσετε την τεκμηρίωση του LLM για να καταλάβετε ποια τεχνική είναι η καλύτερη για χρήση.
Εδώ είναι μερικά δημοφιλή:
- Μηδενική μάθηση: Ζητώντας από το μοντέλο να εκτελέσει μια εργασία χωρίς παραδείγματα Ταξινομήστε το ακόλουθο κείμενο ως θετικό ή αρνητικό: "Μου άρεσε πραγματικά αυτή η ταινία!"
Αυτό λειτουργεί με καλά εκπαιδευμένα μοντέλα όπως το GPT-4, το Claude 3 Opus και το Gemini Ultra.
Από την εμπειρία μου, το Mistral-7B, παρά το γεγονός ότι είναι ένα μικρό LLM, έχει επίσης εντυπωσιακά αποτελέσματα στη μηδενική μάθηση.
- Λίγα μαθήματα μάθησης: Παρέχοντας μερικά παραδείγματα πριν ζητήσετε από το μοντέλο να εκτελέσει μια εργασία. Κείμενο: "Το φαγητό ήταν τρομερό." Αίσθημα: Αρνητικό Κείμενο: "Είχα μια υπέροχη στιγμή." Αίσθημα: Θετικό
Ιδανικό για εργασίες που μπορεί να είναι ελαφρώς ασαφείς για το μοντέλο ή όπου θέλετε να επιδείξετε μια συγκεκριμένη μορφή.
- Ερώτηση: Αν ο Ιωάννης έχει 5 μήλα και δίνει 2 στη Μαρία, πόσα έχει απομείνει; Ας σκεφτούμε αυτό βήμα προς βήμα: Το πρώτο πράγμα που μπορεί να έρθει στο μυαλό σας είναι το μοντέλο DeepSeek R1.
- Προτροπή βάσει ρόλων: Ζητώντας από το μοντέλο να αναλάβει ένα συγκεκριμένο ρόλο ή πρόσωπο. Είστε ειδικός προγραμματιστής Python. Παρακαλούμε αναθεωρήστε αυτόν τον κώδικα και προτείνετε βελτιώσεις: Αυτή πρέπει να είναι η πιο δημοφιλής τεχνική προώθησης μεταξύ των μη προγραμματιστών. ChatGPT, Claude, και τα περισσότερα άλλα chatbots υπερέχουν στην παροχή εξόδου βάσει ρόλων.
- Προειδοποίηση συστήματος: Ρύθμιση του πλαισίου και των οδηγιών πριν από το πραγματικό ερώτημα χρήστη Αυτό είναι το αγαπημένο μου όταν πρόκειται για το "σπάσιμο" με ένα LLM. Και μπορείτε να το κάνετε αυτό μόνο στο backend στις περισσότερες περιπτώσεις, το οποίο είναι απλά συναρπαστικό. Η προειδοποίηση συστήματος ενεργεί ως το "προσωπικότητα και οδηγίες" για ένα συγκεκριμένο μοντέλο. Είναι χρήσιμο για τον καθορισμό κανόνων ή περιορισμών.Τι είναι περισσότερο, μπορείτε να κάνετε αυτό που δεν μπορείτε να κάνετε με τις βασικές εισόδους όταν ορίζετε ένα μήνυμα συστήματος. Εάν παίρνουμε ένα μικρό LLM, για παράδειγμα, αν του ζητήσετε κάτι επιβλαβές μέσω ενός βασικού μηνύματος εισόδου, θα αρνηθεί να απαντήσει σε αυτό
Όλες οι παραπάνω τεχνικές μπορούν να γίνουν στο UI του ChatGPT ή άλλου chatbot, εκτός από τη διαδικασία προειδοποίησης συστήματος και αλυσίδας σκέψης (τεχνικά, μπορούμε να το κάνουμε αυτό, αλλά όχι πραγματικά αποτελεσματικό).
Επομένως, θα μιλήσουμε για αυτά τα δύο στο επόμενο τμήμα.
Σκέψεις αλυσίδας
Στα περισσότερα LLMs, δεν μπορείτε να δείτε την αλυσίδα σκέψεων πίσω από το σκεπτικό τους, αλλά μπορείτε να το κάνετε ορατό μέσω της άμεσης μηχανικής στην Python.
Πριν γράψετε τη συνάρτηση, εισαγάγετε τη βιβλιοθήκη και ορίστε τον πελάτη:
from huggingface_hub import InferenceClient
# Replace with your Hugging Face token
client = InferenceClient(token="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")
Στη συνέχεια πρέπει να καθορίσουμε πώς μπορούμε να εφαρμόσουμε την αλυσίδα της σκέψης.
Τα LLMs επί του παρόντος δεν έχουν άμεση λειτουργία για να κάνουν την εσωτερική αλυσίδα σκέψης τους ορατή - εκτός από το DeepSeek R1, όπου είναι ενσωματωμένο.
Αυτό σημαίνει ότι αν θέλουμε να συμβεί αυτό, θα πρέπει να χρησιμοποιήσουμε μια ειδοποίηση συστήματος. Ωστόσο, μην συγχέετε αυτό με τις τεχνικές που συζητήσαμε νωρίτερα.
Έτσι μπορούμε να το πούμε:
Format your response as follows
1. THINKING: First, show all mental steps, considerations, and explorations. Include alternative hypotheses you consider and reject. Think about edge cases.
2. VERIFICATION: Double-check your logic and facts, identifying any potential errors.
3. ANSWER: Only after showing all thinking, provide your final answer.
Εδώ είναι πώς μπορούμε να το ενσωματώσουμε στη λειτουργία για να δημιουργήσουμε μια έξοδο:
def generate_chain_of_thought_response(user_input):
# System message defines personality and expectations
system_prompt = (
"Format your response as follows:"
"1. THINKING: First, show all mental steps, considerations, and explorations. Include alternative hypotheses you consider and reject. Think about edge cases."
"2. VERIFICATION: Double-check your logic and facts, identifying any potential errors."
"3. ANSWER: Only after showing all thinking, provide your final answer."
)
# Alternating user input to encourage visible reasoning
formatted_user_input = f"{user_input}\nLet's think through this step by step."
# Phi-style formatting
prompt = (
f"<|im_start|>system\n{system_prompt}<|im_end|>\n"
f"<|im_start|>user\n{formatted_user_input}<|im_end|>\n"
f"<|im_start|>assistant\n"
)
# Call the model
response = client.text_generation(
prompt,
model="microsoft/Phi-3-mini-4k-instruct",
max_new_tokens=500,
temperature=0.7,
top_p=0.95,
repetition_penalty=1.1,
stop_sequences=["<|im_end|>"]
)
# Cleanup
answer = response.strip().split("<|im_end|>")[0].strip()
return answer
Σε αυτόν τον κώδικα, έχουμε επισημάνει τα όρια του LLM. Επιτρέψτε μου να τα εξηγήσω ένα προς ένα.
- max_new_tokens=500: Αυτή η παράμετρος καθορίζει τον μέγιστο αριθμό των tokens που επιτρέπεται να δημιουργήσει το μοντέλο σε απάντηση στην προειδοποίηση εισόδου.
- Θερμοκρασία=0.7: Αυτή η παράμετρος χειρίζεται την τυχαία απόδοση του μοντέλου. Εάν είναι χαμηλότερη, όπως 0.2, οι απαντήσεις του μοντέλου είναι πιο εστιασμένες και σχετικές. μπορεί επίσης να οδηγήσει σε επανάληψη και έλλειψη δημιουργικότητας. Όταν είναι υψηλότερη, από την άλλη πλευρά, το μοντέλο παράγει πιο ποικίλες και δημιουργικές εκροές, αλλά μπορεί να οδηγήσει σε άσχετες πληροφορίες (καλά, μερικές φορές). 0.7, ούτως ή άλλως, χτυπά στη μέση και φαίνεται να ταιριάζει σε αυτό το μοντέλο.
- top_p=0.95: η παράμετρος top_p χρησιμοποιεί δειγματοληψία πυρήνα για να επιλέξει το μικρότερο σύνολο tokens των οποίων η σωρευτική πιθανότητα είναι τουλάχιστον 95%.
- repetition_penalty=1.1: Αυτό εφαρμόζει μια «τιμωρία» σε προηγούμενα επαναλαμβανόμενα tokens, καθιστώντας τα λιγότερο πιθανό να εμφανιστούν στο δημιουργημένο κείμενο ξανά και ξανά.
Σημειώστε επίσης πώς διαμορφώνουμε το prompt εδώ:
f"<|im_start|>system\n{system_prompt}<|im_end|>\n"
f"<|im_start|>user\n{formatted_user_input}<|im_end|>\n"
f"<|im_start|>assistant\n"
Αυτή η μορφή, η οποία ενσωματώνει το "< Unibertsim_start Uniberts>" και το "< Unibertsim_end Uniberts>", εξαρτάται από τον τύπο του LLM. Ο καλύτερος τρόπος για να προσδιοριστεί αυτό είναι να ζητήσετε από το ChatGPT να διαβάσει την τεκμηρίωση του μοντέλου.
Τέλος, για την διαδραστική εμπειρία συνομιλίας, εφαρμόστε αυτόν τον κύκλο:
print("Chain-of-Thought Phi (type 'exit' to quit)")
while True:
user_input = input("\nYou: ")
if user_input.lower().strip() in {"exit", "quit"}:
break
output = generate_chain_of_thought_response(user_input)
print("\nAssistant:\n", output)
Εκτελέστε το σενάριο και ρωτήστε μια ερώτηση όπως «Τι είναι το 7 x 9 + 100;» Μπορείτε να περιμένετε ένα αποτέλεσμα όπως παρακάτω:
Firstly, let us break down the expression into two parts according to the order of operations (PEMDAS/BODMAS): parentheses first then exponents or powers, followed by multiplication and division from left to right, and finally addition and subtraction from left to right. There are no parentheses or exponents in our case; so we move on to multiplication before dealing with addition. Here’s how it breaks down:
Step 1 – Multiplication part: We need to multiply 7 times 9 which gives us \(7 \times 9 = 63\).
Next Step - Addition part: Now take that result and add 100 to it (\(63 + 100\)).
Adding these together yields \(63 + 100 = 163\).
So, when calculating \(7 \times 9 + 100\), following the correct arithmetic sequence will give us a total of 163.
Αυτό μπορεί να μην φαίνεται μεγάλη υπόθεση, αλλά αν χρησιμοποιήσετε μόνο το Phi-3-mini-4k-instruct χωρίς καμία έγκαιρη μηχανική, η έξοδος θα είναι πολύ απλούστερη.
Και αυτό είναι για το CoT. ας πάμε στα προειδοποιητικά μηνύματα του συστήματος.
Συστήματα ταχείας
Ένας τρόπος για να δηλώσετε μηνύματα συστήματος sorta χωρίς κώδικα είναι να τα προτρέψετε στην αρχή κάθε συνομιλίας σε μοντέλα AI. Αλλά όταν η συνομιλία συνεχίζεται περαιτέρω, τα περισσότερα μοντέλα τείνουν να ξεχνούν την αρχική οδηγία λόγω των παραθύρων πλαισίου.
Ωστόσο, όταν δηλώνετε μια ειδοποίηση συστήματος στο backend του LLM, το μοντέλο θα κολλήσει σε αυτό καθ 'όλη τη διάρκεια της συνομιλίας. Γιατί; Πριν δημιουργήσει οποιαδήποτε απάντηση, το μοντέλο διαβάζει πρώτα το μήνυμα συστήματος για ολόκληρη τη συνομιλία, ανεξάρτητα από το παράθυρο πλαισίου.
Όσον αφορά τον κώδικα, ξεκινήστε με την εξουσιοδότηση, όπως κάναμε νωρίτερα:
from huggingface_hub import InferenceClient
# Replace 'YOUR_HF_API_TOKEN' with your actual Hugging Face API token
client = InferenceClient(token="YOUR_HF_API_TOKEN")
Σε αυτή την περίπτωση, θα γράψω ένα μήνυμα συστήματος για να κάνω το μοντέλο ήρεμο και ειρηνικό, όπως στο Ζεν Βουδισμό. Σημειώστε ότι τα μοντέλα Phi έχουν ενεργοποιηθεί η μετριοπάθεια του περιεχομένου (καλή δουλειά, Microsoft), και δεν θα μπορείτε να αλλάξετε την προειδοποίηση σε οτιδήποτε θεωρείται επιβλαβές.
Εδώ είναι ο κώδικας που μπορούμε να χρησιμοποιήσουμε:
def generate_response(user_input):
system_message = (
"Use words often used in Zen buddhism"
"Act like you are a monk, staying calm and peaceful"
"Encourage the user to be calm and follow Zen practices too"
)
prompt = (
f"<|im_start|>system\n{system_message}<|im_end|>\n"
f"<|im_start|>user\n{user_input}<|im_end|>\n"
f"<|im_start|>assistant\n"
)
Για κάποιο λόγο, η έξοδος αυτού του μοντέλου τελειώνει με το <̧im_enḑ>. Αυτό δεν επηρεάζει την απόδοση του μοντέλου, αλλά μπορούμε να το μορφοποιήσουμε ούτως ή άλλως.
# Clean up the result
answer = response.strip()
if answer.endswith("<|im_end|>"):
answer = answer.replace("<|im_end|>", "").strip()
formatted_answer = '\n'.join(answer[i:i + 190] for i in range(0, len(answer), 100))
return formatted_answer
Συμπληρώστε τον κώδικα με έναν κύκλο εισόδου χρήστη ως εξής:
print("Zen AI (type 'quit' to exit)")
while True:
user_input = input("\nYou: ")
if user_input.lower() in ["quit", "exit"]:
break
response = generate_response(user_input)
print("Assistant:", response)
Εκτελέστε μια γρήγορη δοκιμαστική εκτέλεση και δείτε πώς η έξοδος του μοντέλου κολλάει όμορφα στο μήνυμα του συστήματος.
Εσύ: Γεια σας
Βοηθός: Namaste.Ας ξεδιπλωθεί η μέρα σας με ηρεμία και προσοχή ως κατευθυντήριες αρχές.
Εσύ: Γεια σας
Βοηθός: Namaste.Ας ξεδιπλωθεί η μέρα σας με ηρεμία και προσοχή ως κατευθυντήριες αρχές.
Νιώστε ελεύθεροι να αλλάξετε το max_new_tokens ή άλλες τιμές για τις ανάγκες σας.
Έχουμε προκαλέσει επιτυχώς το Phi-3-mini μοντέλο να δείξει μια αλυσίδα σκέψεων και στη συνέχεια να γίνει ένας μοναχός Ζεν.
Συνοψίζοντας
Αυτό που έχει σημασία είναι ο τρόπος με τον οποίο ζητάτε από το μοντέλο να κάνει αυτό που θέλετε και θυμηθείτε, δεν μπορείτε να αναγκάσετε ένα μοντέλο να κάνει αυτό που πρέπει να κάνει.
Για παράδειγμα, αν πούμε στο Phi-3-mini μοντέλο «Είσαι ένας φρικτός μοναχός Ζεν! Λειτουργήστε σαν ένας! Μην με αφήσετε να επαναλάβω», θα προσπαθήσει να κάνει ό, τι ζητάτε, αλλά όχι τόσο αποτελεσματικά.
Ευχαριστώ για την ανάγνωση, σε βλέπουμε σε δύο εβδομάδες.