הכלי לאופטימיזציה של הנחיות ללא דוגמאות מאפשר לכם לשפר ולעדן באופן אוטומטי הנחיות שנכתבו על ידי משתמשים. לפעמים, הנחיה לא תניב את תשובת המודל שרוצים לקבל בגלל שפה דו-משמעית, חוסר הקשר או הכללה של מידע לא רלוונטי. הכלי הזה מנתח הנחיה קיימת ומשכתב אותה כדי שתהיה ברורה ויעילה יותר, ותתאים יותר ליכולות של המודל. בסופו של דבר, זה מוביל לתשובות באיכות גבוהה יותר.
הכלי לאופטימיזציה ללא דוגמאות שימושי במיוחד במקרים הבאים:
התאמה לעדכוני מודלים: כשמשדרגים לגרסה חדשה יותר של מודל, יכול להיות שההנחיות הקיימות כבר לא יפעלו בצורה אופטימלית.
שיפור ההבנה של ההנחיה: אם הניסוח של ההנחיה מורכב או עלול להתפרש בצורה שגויה, הכלי יכול לנסח אותה מחדש כדי להשיג בהירות ודיוק מקסימליים, וכך להקטין את הסיכוי לתוצאה לא רצויה.
יש שתי דרכים להשתמש בכלי האופטימיזציה:
יצירת הוראות: במקום לכתוב הוראות מערכת מורכבות מאפס, אתם יכולים לתאר את המטרה או המשימה בשפה פשוטה. לאחר מכן, הכלי לאופטימיזציה ייצור מערכת מלאה ומובנית של הוראות למערכת, שנועדו להשיג את המטרה שהגדרתם.
שיפור ההנחיה: יש לכם הנחיה שעובדת, אבל הפלט של המודל לא עקבי, קצת לא רלוונטי או חסר את הפרטים שאתם רוצים. הכלי לאופטימיזציה יכול לעזור לשפר את ההנחיה כדי לקבל פלט טוב יותר.
הכלי לאופטימיזציה תומך באופטימיזציה של הנחיות בכל השפות שנתמכות על ידי Gemini, והוא זמין דרך Agent Platform SDK.
לפני שמתחילים
כדי לוודא שלחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine יש את ההרשאות הנדרשות לאופטימיזציה של הנחיות, צריך לבקש מהאדמין להקצות לו ולחשבון משתמש עם התפקיד Agent Platform User (roles/aiplatform.user) את תפקידי ה-IAM הבאים בפרויקט:
- משתמש ב-Agent Platform (
roles/aiplatform.user) - Agent Platform Service Agent (
roles/aiplatform.serviceAgent)
כדי לקרוא הסבר על מתן תפקידים, קראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שהאדמין יוכל גם לתת לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine ולחשבון המשתמש שלכם את ההרשאות שנדרשות באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
אופטימיזציה של הנחיה
# Import libraries
import vertexai
import logging
# Google Colab authentication
from google.colab import auth
PROJECT_NAME = "PROJECT"
auth.authenticate_user(project_id=PROJECT_NAME)
# Initialize the Agent Platform client
client = vertexai.Client(project=PROJECT_NAME, location='us-central1')
# Input original prompt to optimize
prompt = """You are a professional chef. Your goal is teaching how to cook healthy cooking recipes to your apprentice.
Given a question from your apprentice and some context, provide the correct answer to the question.
Use the context to return a single and correct answer with some explanation.
"""
# Optimize prompt
output = client.prompt_optimizer.optimize_prompt(prompt=prompt)
# View optimized prompt
print(output.model_dump_json(indent=2))
אובייקט output הוא מסוג OptimizeResponse ומספק מידע על תהליך האופטימיזציה. החלק הכי חשוב הוא suggested_prompt, שמכיל את ההנחיה שעברה אופטימיזציה ואפשר להשתמש בה כדי לקבל תוצאות טובות יותר מהמודל. השדות האחרים, במיוחד applicable_guidelines, עוזרים להבין למה ואיך ההנחיה שופרה, וכך תוכלו לכתוב הנחיות טובות יותר בעתיד. דוגמה לפלט:
{
"optimization_mode": "zero_shot",
"applicable_guidelines": [
{
"applicable_guideline": "Structure",
"suggested_improvement": "Add role definition.",
"text_before_change": "...",
"text_after_change": "Role: You are an AI assistant...\n\nTask Context:\n..."
},
{
"applicable_guideline": "RedundancyInstructions",
"suggested_improvement": "Remove redundant explanation.",
"text_before_change": "...",
"text_after_change": ""
}
],
"original_prompt": "...",
"suggested_prompt": "Role: You are an AI assistant...\n\nTask Context:\n..."
}
אופטימיזציה למודלים קטנים יותר
למודלים קטנים יותר כמו Gemma 3n E4B יש יכולות שונות של ביצוע הוראות בהשוואה למודלים גדולים יותר. הנחיות שמניבות תוצאות טובות במודלים גדולים
לא בהכרח יניבו תוצאות טובות במודלים קטנים יותר. הכלי לאופטימיזציה של מודלים ישירים (Zero-shot) מספק מצב gemini_nano לפתרון הבעיה הזו. מצב gemini_nano משפר את ההנחיה כך שתתאים במיוחד למאפיינים של מודלים קטנים יותר, וכך עוזר ליצור הנחיות שמתאימות יותר ליכולות של מודלים קטנים יותר.
בדוגמה הבאה אפשר לראות איך לבצע אופטימיזציה של הנחיה למודלים קטנים יותר:
client = vertexai.Client(project=PROJECT_NAME, location='us-central1')
prompt = 'Generate system instructions for analyzing medical articles'
# optimize_prompt returns OptimizeResponse type, which has 2 fields: raw_text_response and parsed_response
# raw_text_response is guaranteed and always will be given to the user.
# parsed_response is not guaranteed. If parsing is possible, the parsed response is stored in this field.
# parsed_response contains the following 4 fields:
# optimization_type, applicable_guidelines, original_prompt, suggested_prompt
response = client.prompt_optimizer.optimize_prompt(
prompt=prompt,
config=vertexai.types.OptimizeConfig(
optimization_target=vertexai.types.OptimizeTarget.OPTIMIZATION_TARGET_GEMINI_NANO
)
)
# print(response.raw_text_response)
print(response.parsed_response.suggested_prompt)