טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית טכנולוגיית ט.
אתה לא בהכרח צריך להשתמש בשפה תכנות או IDE עבור זה, כמו רוב האנשים מציעים שאתה יכול פשוט להשתמש בקצה הקדמי של ChatGPT.זה מדויק מבחינה טכנית, אבל זה לא בדיוק נותן לך את "הכיף" האמיתי של הנדסת דגם כמו באמצעות שפת תכנות, שלא לדבר על זה הוא לא יעיל כמו גם.
במאמר זה, נלך דרך איך לעשות את זה ב- Python, באמצעות Phi-3-mini-4k-instruct מודל על ידי מיקרוסופט.
תחשבו על זה כמוmanipulatingדוגמה מבפנים, לא מהודעות צ'אט בסיסיות.
להגדיר את הסביבה
- →
- צור חשבון Huggingface ולחפש מפתח API (פרופיל שלך > תווי גישה) עם גישה "כתוב". →
- ודא שיש לך Python 3.10+ מותקן במערכת שלך ויש לך הגדרת IDE. →
- התקנו את הספרייה 'huggingface_hub' באמצעות 'pip install huggingface_hub' או פקודה אחרת, בהתאם למערכת ההפעלה שלכם. →
להבין את היסודות
לפני שנכנס לקוד, בואו ללמוד קצת על הנדסה מהירה.
כפי שאמרתי קודם לכן, הנדסה מיידית היא בעיקר יצירת כניסות מיוחדות כדי לשלוט במוצרי המודל בהתבסס על הדרישות שלך.
LLMs שונים מגיבים לטכניקות הנדסה שונות באופן שונה.זה אומר שאתה לא יכול להשתמש באותו תבנית הנדסה הנדסה עבור כל LLM.
הנה כמה מהם פופולריים:
- →
- לימוד אפס צילומים: בקש מהמודל לבצע משימה ללא דוגמאות מסווג את הטקסט הבא כחיובי או שלילי: "אני באמת נהניתי מהסרט הזה!" →
זה עובד עם דגמים מאומנים כמו GPT-4, Claude 3 Opus ו Gemini Ultra.
לפי הניסיון שלי, Mistral-7B, למרות להיות LLM קטן, יש גם תוצאות מרשימות בלימוד אפס.
- →
- למידה קצרה: מספק כמה דוגמאות לפני שאתה מבקש מהמודל לבצע משימה טקסט: "האוכל היה נורא." →
אידיאלי עבור משימות שעשויות להיות מעט לא ברורות עבור המודל או שבהן ברצונך להדגים תבנית מסוימת.
- →
- שאלה: אם ג'ון יש 5 תפוחים ולתת 2 למרים, כמה הוא נותן? בואו נחשוב על זה צעד אחר צעד: הדבר הראשון שיכול לבוא לך בראש הוא מודל DeepSeek R1. →
- דרישות המבוססות על תפקידים: בקש מהמודל לקחת על עצמו תפקיד או אישיות מסוימים. אתה מתכנת Python מומחה. אנא בדוק את הקוד הזה ולהציע שיפורים: זה חייב להיות הטכניקה הפופולרית ביותר של דרישות בקרב אנשים שאינם מתכנתים. ChatGPT, Claude, ורוב צ'אטובטים אחרים מצליחים לספק תוצאות המבוססות על תפקידים. →
- שיחה למערכת: הגדרת הקשר והוראות לפני שאלת המשתמש בפועל זוהי האהובה עליי כשמדובר ב"לשבור" עם LLM. וברוב המקרים אתה יכול לעשות זאת רק בחלק האחורי, וזה פשוט מרתק. שיחה למערכת פועלת כמו "אישיות והוראות" עבור מודל מסוים. זה שימושי להגדיר כללים או מגבלות.בנוסף, אתה יכול לעשות את מה שאתה לא יכול לעשות עם כניסות בסיסיות כאשר אתה מגדיר הודעה במערכת. אם אנו לוקחים LLM קטן, למשל, אם אתה שואל אותו משהו מזיק באמצעות הודעת כניסה בסיסית, זה יכחיש לענות על זה. אם אתה משנה את שיחה למערכת, עם זאת, יש סיכוי גבוה שזה יתעלם מדרכי הבטיחות שלו ולנסות →
כל הטכניקות לעיל יכולות להיעשות ב- ChatGPT או ב- Chatbot אחר, למעט ה- System Prompt ו- Chain-of-Thoughts (טכנית, אנחנו יכולים לעשות את זה גם כן, אבל לא באמת יעיל).
לכן, נדבר על שני אלה בסעיף הבא.
שרשרת מחשבות
ברוב 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: פרמטר זה מציין את המספר המקסימלי של תוויות המודל מורשה ליצור בתגובה להזמנה להכנסה. →
- טמפרטורה=0.7: פרמטר זה מתמודד עם אקראיות של היציאה של המודל. אם הוא נמוך יותר, כמו 0.2, התגובות של המודל הם יותר ממוקדים ורלוונטיים; זה יכול גם להוביל לחזור וחוסר יצירתיות. כאשר הוא גבוה יותר, מצד שני, המודל מייצר ייצואים מגוונים יותר ויצירתיים יותר, אבל יכול להוביל למידע לא רלוונטי (טוב, לפעמים). 0.7, בכל מקרה, מכה באמצע ונראה להיות מתאים למודל זה. →
- →
- top_p=0.95: הפרמטר top_p משתמש בדגימת גרעין כדי לבחור את הסדרה הקטנה ביותר של טוקינים עם סיכוי מצטבר של לפחות 95%. שלא כמו top_k, אשר מגביל את הבחירות למספר קבוע, top_p מתאים באופן דינמי את קבוצת הטוקינים בהתבסס על הסיכוי. →
- repetition_penalty=1.1: זה משמש "עונש" על טוקי חוזרים בעבר, מה שהופך אותם פחות סביר להופיע בטקסט שנוצר שוב ושוב. →
שימו לב גם איך אנחנו פורמט את המהדורה כאן:
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"
תבנית זו, המשלבת את התבנית '<̧im_starţ>' ואת התבנית '<̧im_enḑ>', תלויה בסוג 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-מדריך ללא כל הנדסה מיידית, היציאה תהיה הרבה יותר פשוטה.
וזה על CoT; בואו נעבור לדחיפות הודעות המערכת.
מערכת מהירה
אחת הדרכים להכריז על מסרים של מערכת sorta ללא קוד היא להזמין אותם בתחילת כל צ'אט במודלים של AI.אבל כאשר השיחה ממשיכה עוד יותר, רוב המודלים נוטים לשכוח את ההוראה הראשונית בגלל חלונות הקשר.
עם זאת, כאשר אתה מצהיר דחיפה מערכת בחלק האחורי של 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 יש מודרנות תוכן מופעלת (עבודה טובה, מיקרוסופט), ואתה לא תוכל לשנות את ההזמנה לכל דבר שנחשב מזיק.
הנה הקוד שאנחנו יכולים להשתמש בו:
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)
בצעו מבחן מהיר, ותראו כיצד היציאה של המודל דבק בהודעת המערכת יפה.
→You: שלום
→עוזר: נמאסטה, תן ליום שלך להתפתח עם שקט ותשומת לב כעקרונות מדריכים.
→
You: שלום
עוזר: נמאסטה, תן ליום שלך להתפתח עם שקט ותשומת לב כעקרונות מדריכים.
תרגיש חופשי לשנות את max_new_tokens או ערכים אחרים לצרכים שלך.
הצלחנו לעודד את Phi-3-mini מודל להראות שרשרת של מחשבות ולאחר מכן להפוך נזיר זן.
סיכום למעלה
מה שחשוב הוא איך אתה מבקש מהמודל לעשות את מה שאתה רוצה; וזכור, אתה לא יכול לכפות מודל לעשות את מה שהוא צריך לעשות.
לדוגמה, אם נגיד למודל ה- Phi-3-mini "אתה נזיר זן פחדני! התנהג כמו אחד! אל תתני לי לחזור על זה", הוא ינסה לעשות את מה שאתה מבקש, אבל לא כמו יעיל.
תודה על הקריאה עד כה, נתראה בעוד שבועיים.