בדף הזה מוסבר איך להכין את מערך הנתונים לשירות ההערכה של AI גנרטיבי.
סקירה כללית
שירות ההערכה של AI גנרטיבי מזהה ומטפל באופן אוטומטי בכמה פורמטים נפוצים של נתונים. המשמעות היא שלרוב תוכלו להשתמש בנתונים כמו שהם, בלי שתצטרכו לבצע המרות ידניות.
השדות שצריך לספק במערך הנתונים תלויים ביעד:
| מטרה | הנתונים הנדרשים | זרימת העבודה של SDK |
|---|---|---|
| יצירת תשובות חדשות ואז הערכה שלהן | prompt |
run_inference() ← evaluate() |
| בדיקת תשובות קיימות | prompt וגם response |
evaluate() |
| יצירת תוצאות חדשות של הפעלת הסוכן ואז הערכתן | prompt |
run_inference() ← evaluate() |
| הערכת תגובות קיימות של סוכנים ואירועים ביניים | prompt, response וגם intermediate_events |
evaluate() |
כשמריצים את client.evals.evaluate() או client.evals.create_evaluation_run(), שירות ההערכה של ה-AI הגנרטיבי מחפש באופן אוטומטי את השדות הנפוצים הבאים במערך הנתונים:
prompt: (חובה) הקלט למודל שרוצים להעריך. כדי להשיג את התוצאות הטובות ביותר, כדאי לספק הנחיות לדוגמה שמייצגות את סוגי הקלט שהמודלים שלכם מעבדים בסביבת הייצור.
response: (חובה) הפלט שנוצר על ידי המודל או האפליקציה שנבדקים.
reference(אופציונלי): תשובת האמת או התשובה ה"מושלמת" שאפשר להשוות אליה את התשובה של המודל. השדה הזה נדרש לעיתים קרובות למדדים שמבוססים על חישובים, כמוbleuו-rouge.
conversation_history: (אופציונלי) רשימה של תורות קודמות בשיחה מרובת תורות. שירות ההערכה של AI גנרטיבי מחלץ את השדה הזה באופן אוטומטי מפורמטים נתמכים. מידע נוסף זמין במאמר בנושא טיפול בשיחות מרובות תפניות.
session_inputs: (אופציונלי) קלט לאתחול סשן להרצת סוכן. האפשרות הזו היא אופציונלית רק בתהליך העבודהrun_inference()→evaluate().
intermediate_events: (אופציונלי) עקבות של סוכן של תור יחיד בהרצת סוכן, כולל קריאות לפונקציות, תשובות לפונקציות ותשובות ביניים של המודל. השדה הזה לא נדרש בתהליך העבודהrun_inference()→evaluate().
פורמטים נתמכים של נתונים
שירות ההערכה של AI גנרטיבי תומך בפורמטים הבאים:
Pandas DataFrame
אם אתם רוצים לבצע הערכה פשוטה, אתם יכולים להשתמש בpandas.DataFrame. שירות ההערכה של ה-AI הגנרטיבי מחפש שמות נפוצים של עמודות כמו prompt, response ו-reference. הפורמט הזה תואם באופן מלא לגרסאות קודמות.
import pandas as pd
# Example DataFrame with prompts and ground truth references
prompts_df = pd.DataFrame({
"prompt": [
"What is the capital of France?",
"Who wrote 'Hamlet'?",
],
"reference": [
"Paris",
"William Shakespeare",
]
})
# You can use this DataFrame directly with run_inference or evaluate
eval_dataset = client.evals.run_inference(model="gemini-2.5-flash", src=prompts_df)
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()
פורמט של חיזוי באצווה ב-Gemini
אתם יכולים להשתמש ישירות בפלט של משימת חיזוי באצווה ב-Vertex AI, שבדרך כלל מופיע בקובצי JSONL שמאוחסנים ב-Cloud Storage, כאשר כל שורה מכילה אובייקט של בקשה ותגובה. שירות ההערכה של AI גנרטיבי מנתח את המבנה הזה באופן אוטומטי כדי לספק שילוב עם שירותים אחרים של Vertex AI.
הנה דוגמה לשורה אחת בקובץ JSONl:
{"request": {"contents": [{"role": "user", "parts": [{"text": "Why is the sky blue?"}]}]}, "response": {"candidates": [{"content": {"role": "model", "parts": [{"text": "The sky appears blue to the human eye as a result of a phenomenon known as Rayleigh scattering."}]}}]}}
אחר כך תוכלו להעריך ישירות את התשובות שנוצרו מראש ממשימת אצווה:
# Cloud Storage path to your batch prediction output file
batch_job_output_uri = "gs://path/to/your/batch_output.jsonl"
# Evaluate the pre-generated responses directly
eval_result = client.evals.evaluate(
dataset=batch_job_output_uri,
metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()
פורמט של השלמת צ'אט ב-OpenAI
כדי להעריך או להשוות עם מודלים של צד שלישי כמו OpenAI ו-Anthropic, שירות ההערכה של AI גנרטיבי תומך בפורמט של OpenAI Chat Completion. אתם יכולים לספק מערך נתונים שבו כל שורה היא אובייקט JSON שמובנה כמו בקשת OpenAI API. שירות ההערכה של AI גנרטיבי מזהה את הפורמט הזה באופן אוטומטי.
דוגמה לשורה אחת בפורמט הזה:
{"request": {"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What's the capital of France?"}], "model": "gpt-4o"}}
אתם יכולים להשתמש בנתונים האלה כדי ליצור תשובות ממודל של צד שלישי ולהעריך את התשובות:
# Ensure your third-party API key is set
# e.g., os.environ['OPENAI_API_KEY'] = 'Your API Key'
openai_request_uri = "gs://path/to/your/openai_requests.jsonl"
# Generate responses using a LiteLLM-supported model string
openai_responses = client.evals.run_inference(
model="gpt-4o", # LiteLLM compatible model string
src=openai_request_uri,
)
# The resulting openai_responses object can then be evaluated
eval_result = client.evals.evaluate(
dataset=openai_responses,
metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()
טיפול בשיחות עם זיכרון
שירות ההערכה של AI גנרטיבי מנתח באופן אוטומטי נתוני שיחות מרובות-תורות מפורמטים נתמכים. אם נתוני הקלט כוללים היסטוריה של חילופי מידע (למשל, בשדה request.contents בפורמט Gemini או request.messages בפורמט OpenAI), שירות ההערכה של ה-AI הגנרטיבי מזהה את התורות הקודמות ומעבד אותן כconversation_history.
המשמעות היא שלא צריך להפריד ידנית בין ההנחיה הנוכחית לבין השיחה הקודמת, כי מדדי ההערכה יכולים להשתמש בהיסטוריית השיחות כדי להבין את ההקשר של התגובה של המודל.
הנה דוגמה לשיחה מרובת תפניות בפורמט Gemini:
{
"request": {
"contents": [
{"role": "user", "parts": [{"text": "I'm planning a trip to Paris."}]},
{"role": "model", "parts": [{"text": "That sounds wonderful! What time of year are you going?"}]},
{"role": "user", "parts": [{"text": "I'm thinking next spring. What are some must-see sights?"}]}
]
},
"response": {
"candidates": [
{"content": {"role": "model", "parts": [{"text": "For spring in Paris, you should definitely visit the Eiffel Tower, the Louvre Museum, and wander through Montmartre."}]}}
]
}
}
השיחה מרובת השלבים מנותחת אוטומטית באופן הבא:
prompt: הודעת המשתמש האחרונה מזוהה כהנחיה הנוכחית ({"role": "user", "parts": [{"text": "I'm thinking next spring. What are some must-see sights?"}]}).
conversation_history: ההודעות הקודמות מחולצות באופן אוטומטי וזמינות כהיסטוריית השיחות ([{"role": "user", "parts": [{"text": "I'm planning a trip to Paris."}]}, {"role": "model", "parts": [{"text": "That sounds wonderful! What time of year are you going?"}]}]).
response: התשובה של המודל נלקחת מהשדהresponse({"role": "model", "parts": [{"text": "For spring in Paris..."}]}).