החבילה google-cloud-aiplatform כוללת גם את AI Platform SDK ל-Python וגם את ספריית הלקוח של Python ל-Gemini Enterprise Agent Platform. בדף הזה מפורטות הקטגוריות הבאות של שינויים בחבילה google-cloud-aiplatform:
מודולים של AI גנרטיבי עוברים ל-Google Gen AI SDK: המודולים הבאים של AI גנרטיבי בחבילה
vertexaiהוצאו משימוש והועברו ל-Google Gen AI SDK (google-genai):vertexai.generative_modelsvertexai.language_modelsvertexai.vision_modelsvertexai.cachingvertexai.tuning
במאמר העברת מודולים של AI גנרטיבי אל Google Gen AI SDK מוסבר איך להעביר את המודולים שהוצאו משימוש אל Google Gen AI SDK.
שינוי במבנה של Agent surface: בוצעו השינויים הבאים במודולים
agentplatformשלgoogle-cloud-aiplatform:- שינוי שם
- מבצעים ברמה העליונה
- הסרה של מאתחל גלובלי
במאמר שינוי המבנה של Agent Platform SDK מוסבר איך לבצע מיגרציה למבנה החדש של ה-SDK.
הפרדה של
agentplatform:google-cloud-agentplatformהיא עכשיו הפצה עצמאית קלה, והיא מומלצת להתקנה עבור עומסי עבודה של סוכנים. אם אתם בונים רק סוכנים, אתם יכולים להתקין אתgoogle-cloud-agentplatform, שלא כולל מודולים של AI גנרטיבי. מודולים שלagentplatformמכסים את השילובים הנפוצים כמו[adk],[a2a],[agent_engines],[langchain],[ag2],[llama_index],[evaluation],[bigquery],[live]ו-[all].
מה לא יושפע
התכונה הקלאסית של למידת מכונה (מערכי נתונים, אימון, מודלים, חיזוי, מעקב, צינורות) נתמכת באופן מלא, לא מושפעת מהשינויים בגרסה 2.0.1 ואין לה מקבילה ב-Google Gen AI SDK. עדיין אפשר לגשת להערכה, ל-Agent Runtime, להנחיות ולמיומנויות על ידי התקנת google-cloud-aiplatform. google-cloud-aiplatform ו-google-genai פועלים יחד בסביבה אחת, ו-google-genai הוא עכשיו יחס תלות מחייב של google-cloud-aiplatform:
import agentplatform
client = agentplatform.Client(project="my-project", location="global")
# client.evals client.prompts
# client.prompt_optimizer client.datasets client.skills
vertexai.batch_prediction לא הוצא משימוש, אבל יש כלי מקביל של Google Gen AI SDK, והוא הכלי המומלץ.
העברת מודולים של AI גנרטיבי אל Google Gen AI SDK
אם אתם משתמשים במודולים של AI גנרטיבי בחבילה google-cloud-aiplatform, כדאי לפעול לפי ההמלצות הבאות כדי לעבור ל-Google Gen AI SDK (google-genai):
מגדירים את
google-cloud-aiplatform < 2.0.0כדי ששינויים לא קשורים בתלות לא יוכלו להסיר את המודולים שמתחת.מחפשים בקוד את המודולים שהוצאו משימוש:
vertexai.generative_modelsvertexai.language_modelsvertexai.vision_modelsvertexai.cachingvertexai.tuning
אם מייבאים מודול Python מושפע כלשהו, מוצגת אזהרת ההוצאה משימוש הבאה:
UserWarning: This feature is deprecated as of June 24, 2025 and will be removed on June 24, 2026. For details, see https://cloud.google.com/vertex-ai/generative-ai/docs/deprecations/genai-vertexai-sdk.מריצים את חבילת מקרים לבדיקה עם
-W error::UserWarningכדי לזהות ייבוא שלא בוצע.מחליפים את
vertexai.init(...)ב-genai.Client(enterprise=True, project=..., location=...)מפורש. כדאי להשאיר אתvertexai.init()אם אתם משתמשים גם בממשק הקלאסי של למידת מכונה.לפני
# pip install google-cloud-aiplatform import vertexai from vertexai.generative_models import GenerativeModel vertexai.init(project="my-project", location="us-central1") # Model identity and config are bound at construction time. model = GenerativeModel("gemini-2.5-flash")אחרי
# pip install google-genai from google import genai from google.genai import types client = genai.Client( enterprise=True, project="my-project", location="global", )או להגדיר מתוך הסביבה:
export GOOGLE_GENAI_USE_ENTERPRISE=true export GOOGLE_CLOUD_PROJECT=my-project export GOOGLE_CLOUD_LOCATION=globalfrom google import genai client = genai.Client()שיקולים עיקריים:
- הסטטוס הגלובלי הופך ללקוח מפורש.
vertexai.init()הגדיר את כל התהליך, ו-genai.Client()הוא אובייקט שמעבירים. עםgenai.Client(), אפשר להשתמש בשני פרויקטים או באזורים בתהליך אחד. - השדה
enterprise=Trueהוא שדה חובה. אם לא מציינים את ה-API, הלקוח מכוון בשקט אל Gemini Developer API, ואז נכשל ב-Application Default Credentials או דורש מפתח API. - שם הדגם עובר משלב הפיתוח לכל שיחה. אין אובייקט מודל של bind-once.
model=הוא ארגומנט חובה של מילת מפתח בכל קריאה שלclient.models.*. - האימות לא משתנה. פרטי הכניסה שמוגדרים כברירת מחדל לאפליקציה עדיין חלים, והפונקציה
credentials=מקבלתgoogle.auth.credentials.Credentialsבשני ה-SDK. -
vertexai.init()כולל גם הגדרות לא גנרטיביות כמוstaging_bucket, experiment, encryption_spec_key_name, service_account, network. אין מקבילה ל-genai.Client. - האיות החדש יותר
enterprise=Trueמתקבל החל מגרסהgoogle-genai2.20.0, אבל הגרסה הישנה יותרvertexai=Trueפועלת בכל גרסה והיא הבחירה הבטוחה יותר.
- הסטטוס הגלובלי הופך ללקוח מפורש.
בודקים את הקוד כדי לזהות שינויים שקורים בלי שגיאה, אבל משנים את ההתנהגות של האתר. הן עוברות קומפילציה ופועלות, אבל המשמעות שלהן משתנה.
התנהגות לפני אחרי response.textבתשובה חסומה או ריקההעלאה של ValueErrorהחזרה Noneresponse.textעם כמה מועמדיםהעלאה של ValueErrorמתעד אזהרה, מחזיר את המועמד הראשון טירגוט לקוחות vertexai.init()Agent Platform משתמעהשמטה של vertexai=Trueמכוונת באופן שקט אל Gemini Developer APIהטמעות auto_truncateברירת המחדל היא Trueלא מוגדר; חלה ברירת המחדל של השרת פונקציית Python שמועברת ככלי לא נתמך מופעל באופן אוטומטי על ידי ה-SDK system_instructionמוגדר פעם אחת במודל חובה להעביר את הפרמטר בכל שיחה השינוי
response.textהוא זה שצריך לחפש קודם. כלtry/except ValueErrorשמוקף ב-.textהופך לקוד מת, וכל.textלא מוגן יכול עכשיו להחזירNoneבמקוםstrשהוחזר קודם:if response.text is None: print( "blocked or empty:", response.prompt_feedback, response.candidates[0].finish_reason if response.candidates else None, )מומלץ להשאיר את
google-cloud-aiplatformמותקן אם אתם משתמשים בהערכה, ב-Agent Runtime, בהנחיות, במערכי נתונים, במיומנויות ובכל הממשק הקלאסי של למידת מכונה.מעבר לגרסאות החדשות של שיחות. מתחילים בשינוי שמות מכני, ואז ממשיכים לאיחוד של
config=.
שינויים בשיחות שמבוססים על משימות
כדי לראות את השיחות שהשתנו לפי משימה:
- יצירת טקסט
- יצירה בסטרימינג
- יצירה אסינכרונית
- סשנים בצ'אט
- הגדרות, הגדרות בטיחות והוראות מערכת
- קלט מרובה מצבים
- הפעלת פונקציות ועיגון
- הטמעות
- ספירת טוקנים
- שמירת נתונים במטמון לפי הקשר
- חיזויים רבים בבת אחת ושיפור הביצועים
יצירת טקסט
במשימות של יצירת טקסט, כל הארגומנטים הם מילות מפתח בלבד. קריאות מיקום מעלות TypeError.
לפני
model = GenerativeModel("gemini-2.5-flash")
response = model.generate_content("Why is the sky blue?")
print(response.text)
אחרי
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Why is the sky blue?",
)
print(response.text)
יצירה בסטרימינג
במשימות של יצירת סטרימינג, הדגל stream=True מוסר. הסטרימינג הוא עכשיו שיטה נפרדת שמחזירה Iterator[types.GenerateContentResponse]. כדאי להשתמש ב-if chunk.text: כדי לבדוק לפני שניגשים לטקסט, כי כל מקטע הוא אובייקט תשובה מלא והמאפיין .text שלו יכול להיות לפעמים None.
לפני
stream = model.generate_content("Tell me a story in 300 words.", stream=True)
for chunk in stream:
print(chunk.text, end="")
אחרי
for chunk in client.models.generate_content_stream(
model="gemini-3.5-flash",
contents="Tell me a story in 300 words.",
):
if chunk.text:
print(chunk.text, end="")
יצירה אסינכרונית
במשימות יצירה אסינכרוניות, הסיומת _async method-name הוסרה. כל קריאה אסינכרונית נמצאת ב-client.aio.<module> עם אותו שם שיטה כמו המקבילה הסינכרונית שלה. סוגרים את הלקוח באמצעות await client.aio.aclose() או משתמשים ב-async with genai.Client(...).aio as aclient:.
לפני
response = await model.generate_content_async("Why is the sky blue?")
async_stream = await model.generate_content_async("Why is the sky blue?", stream=True)
async for chunk in async_stream:
print(chunk.text, end="")
אחרי
response = await client.aio.models.generate_content(
model="gemini-3.5-flash",
contents="Why is the sky blue?",
)
# Note the `await` in front of the async iterator.
async for chunk in await client.aio.models.generate_content_stream(
model="gemini-3.5-flash",
contents="Tell me a story in 300 words.",
):
print(chunk.text, end="")
שיחות צ'אט
שימו לב לשינויים הבאים במשימות של סשנים בצ'אט:
- הצ'אטים נוצרים מהלקוח, ולא מאובייקט של מודל.
-
chat.history(property) הופך ל-chat.get_history()(method). השיטה החדשה אורכתcurated: bool = False. העברתTrueמחזירה רק את התורות שנשמרו, ואין לה מקבילה ישנה. -
client.aio.chats.create(...)מחזירהAsyncChatבאופן ישיר. ההמתנה היא רק ל-send_messageול-send_message_stream. - האפשרויות לכל תור מתכווצות לארגומנט אחד:
send_message(message, config=types.GenerateContentConfig(...)). גם הפרמטר הראשון משנה את השם מ-contentל-message.
start_chat(response_validation=False)היא שיטה חדשה שאין לה מקבילה בגרסאות קודמות.
לפני
model = GenerativeModel("gemini-2.5-flash")
chat = model.start_chat()
print(chat.send_message("Tell me a story").text)
for content in chat.history:
print(content.role, content.parts)
אחרי
chat = client.chats.create(model="gemini-3.5-flash")
print(chat.send_message("Tell me a story").text)
for content in chat.get_history():
print(content.role, content.parts)
הגדרות, הגדרות בטיחות והוראות מערכת
שימו לב לשינויים הבאים במשימות של הגדרה, הגדרות בטיחות והוראות למערכת:
הארגומנטים הבאים מכווצים לארגומנט אחד
config=כשדות שלGenerateContentConfig:generation_configsafety_settingstoolstool_configlabelssystem_instruction
אפשר להשתמש ב-
dictבכל מקום שאפשר להשתמש בסוג הגדרה.
system_instructionעובר מהבנאי של המודל להגדרה לכל קריאה. בגרסה הקודמת של ה-SDK, הערךsystem_instructionהוגדר פעם אחת כשבונים אתGenerativeModel. מעכשיו צריך להעביר אתsystem_instructionבכל שיחה או לכלול אותו ב-client.chats.create(config=...).הגדרות הבטיחות השתנו מ-
dictל-list. לדוגמה,[types.SafetySetting(category=c, threshold=t) for c, t in old_dict.items()].אפשר להשתמש ב-enums כמחרוזות פשוטות, והן יומרו.
שמות השדות הסקלריים לא משתנים:
temperature,top_p,top_k,candidate_count,max_output_tokens,stop_sequences,presence_penalty,frequency_penalty,seed,response_mime_type,response_schema,response_logprobs,logprobs.שדות חדשים שאין להם שדה מקביל ישן כוללים את
thinking_config,cached_content,automatic_function_calling,http_options,media_resolutionו-speech_config.
לפני
from vertexai.generative_models import (
GenerativeModel, GenerationConfig, HarmCategory, HarmBlockThreshold,
)
model = GenerativeModel(
"gemini-2.5-flash",
system_instruction=["Talk like a pirate.", "Don't use rude words."],
)
response = model.generate_content(
contents="Why is the sky blue?",
generation_config=GenerationConfig(temperature=0, top_p=0.95, max_output_tokens=100),
safety_settings={
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
)
אחרי
from google.genai import types
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Why is the sky blue?",
config=types.GenerateContentConfig(
system_instruction="Talk like a pirate. Don't use rude words.",
temperature=0,
top_p=0.95,
max_output_tokens=100,
safety_settings=[
types.SafetySetting(
category="HARM_CATEGORY_HATE_SPEECH",
threshold="BLOCK_MEDIUM_AND_ABOVE",
),
types.SafetySetting(
category=types.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold=types.HarmBlockThreshold.BLOCK_ONLY_HIGH,
),
],
),
)
קלט מולטי-מודאלי
שימו לב לשינויים הבאים במשימות של קלט מולטימודאלי:
| ישן | חדש |
|---|---|
Part.from_uri(uri, mime_type), מותר להשתמש במיקום |
Part.from_uri(file_uri=, mime_type=), keyword-only, parameter renamed |
Part.from_data(data, mime_type) |
Part.from_bytes(data=, mime_type=), שינוי השם של אמצעי התשלום |
Part.from_text(text) |
Part.from_text(text=), מילות מפתח בלבד |
Image.load_from_file(path) |
אין מקבילה; פותחים את הקובץ ומשתמשים ב-Part.from_bytes |
- המאפיין
mime_typeהוא אופציונלי ב-types.Part.from_uri()(הוא מוסק בצד השרת), אבל הוא עדיין נדרש ב-types.Part.from_bytes().
client.files.upload(...)נתמך רק ב-Gemini Developer API. במקרה של עומסי עבודה ב-Agent Platform, ממשיכים להעביר כתובות URI של Cloud Storage באמצעותfrom_uriאו בייטים מוטבעים באמצעותfrom_bytes.
לפני
from vertexai.generative_models import GenerativeModel, Part, Image
image = Image.load_from_file("image.jpg")
print(model.generate_content(["What is shown in this image?", image]).text)
image_part = Part.from_uri(
"gs://cloud-samples-data/generative-ai/image/scones.jpg",
mime_type="image/jpeg",
)
אחרי
from google.genai import types
# Image.load_from_file has no equivalent: read the bytes yourself.
with open("image.jpg", "rb") as f:
image = types.Part.from_bytes(data=f.read(), mime_type="image/jpeg")
response = client.models.generate_content(
model="gemini-3.5-flash",
contents=["What is shown in this image?", image],
)
image_part = types.Part.from_uri(
file_uri="gs://cloud-samples-data/generative-ai/image/scones.jpg",
mime_type="image/jpeg",
)
בקשה להפעלת פונקציה ועיגון
שימו לב לשינויים הבאים במשימות של קריאה לפונקציות ושל ביסוס:
- הכלים עוברים אל
config=. אין ארגומנטtools=בקריאה או באובייקט של המודל. -
Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval())הופך ל-types.Tool(google_search=types.GoogleSearch()). שיטת factory הופכת לשדה רגיל. ל-types.Toolיש גם שדה נפרד שלgoogle_search_retrieval. -
response.function_callsהוא פונקציית הגישה האידיומטית, והוא לא נכשל אם החלק האפס הוא טקסט. המעבר הישן עדיין פועל. - סכימת JSON גולמית מוגדרת ב-
parameters_json_schema. הערךtypes.Schemaעם סוג מצוין ב-parameters. - עכשיו אפשר להעביר פונקציית Python ככלי, והתכונה 'קריאה אוטומטית לפונקציה' מופעלת כברירת מחדל כשמעבירים את הפונקציה. אם מעבירים לולאה של כלי ידני ומעבירים אובייקט פונקציה, ערכת ה-SDK מתחילה להריץ את הקוד. משביתים את הפונקציה האוטומטית שמוגדרת כברירת מחדל באמצעות
automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True). לסוגי הכלים החדשים הבאים אין מקבילה בגרסאות קודמות:
code_execution, url_context, google_maps, computer_use, file_search, enterprise_web_search, mcp_servers.
לפני
from vertexai.generative_models import GenerativeModel, FunctionDeclaration, Tool, grounding
weather_tool = Tool(function_declarations=[
FunctionDeclaration(
name="get_current_weather",
description="Get the current weather in a given location",
parameters={
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"],
},
)
])
model = GenerativeModel("gemini-2.5-flash", tools=[weather_tool])
response = model.generate_content("What is the weather in Boston?")
call = response.candidates[0].content.parts[0].function_call
# Grounding
search_tool = Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval())
אחרי
from google.genai import types
weather_tool = types.Tool(function_declarations=[
types.FunctionDeclaration(
name="get_current_weather",
description="Get the current weather in a given location",
parameters_json_schema={
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"],
},
)
])
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="What is the weather in Boston?",
config=types.GenerateContentConfig(tools=[weather_tool]),
)
call = response.function_calls[0]
# Grounding
search_tool = types.Tool(google_search=types.GoogleSearch())
הטמעות
שימו לב לשינויים הבאים בהטמעת משימות:
- האפשרות
TextEmbeddingInputמוסרת. הפרמטריםtask_typeו-titleהם עכשיו פרמטרים של בקשה, ולכן צריך לפצל חבילות של משימות מעורבות לכמה קריאות. - סוג ההחזרה השתנה מרשימה ישירה לאובייקט תגובה.
get_embeddings()החזירה ישירותlist[TextEmbedding], כך שהמתקשרים יכלו לגשת לרשימה ישירות (embeddings[0].values). בגרסה החדשה,embed_content()מחזירה אובייקטEmbedContentResponseשמכיל רשימה.embeddings, ולכן צריך לגשת אלresponse.embeddings[0].values. השמות המקוריים של השדות להטמעה (.valuesו-.statistics) נשמרים. auto_truncateכבר לא מוגדר כברירת מחדל ל-True. ברירת המחדל של השדה החדש היאunset. אם אתם מסתמכים על חיתוך שקט של קלט ארוך מדי, צריך להגדיר אתauto_truncateבאופן מפורש.
לפני
from vertexai.language_models import TextEmbeddingModel, TextEmbeddingInput
model = TextEmbeddingModel.from_pretrained("gemini-embedding-001")
text_input = TextEmbeddingInput(
text="How do I get a driver's license?",
task_type="RETRIEVAL_DOCUMENT", # per input
title="Driver's License", # per input
)
embeddings = model.get_embeddings([text_input], output_dimensionality=3072, auto_truncate=True)
print(embeddings[0].values)
אחרי
from google.genai import types
response = client.models.embed_content(
model="gemini-embedding-2",
contents="How do I get a driver's license?",
config=types.EmbedContentConfig(
task_type="RETRIEVAL_DOCUMENT", # now per request
title="Driver's License", # now per request
output_dimensionality=3072,
auto_truncate=True,
),
)
print(response.embeddings[0].values)
ספירת טוקנים
שימו לב לשינויים הבאים במשימות של ספירת טוקנים:
- האפשרות
total_billable_charactersהוסרה ואין לה תחליף. צריך לעבד מחדש כל אומדן עלות שמבוסס עלtotal_billable_characters(למשל, בהשוואה ל-total_tokensאו ל-response.usage_metadata) מתוך קריאה ליצירה. - נוסף
client.models.compute_tokens(...)למזהי אסימונים ולחלקים של מחרוזות. הוספנו ספירה אופליין דרך
google.genai.local_tokenizer.LocalTokenizer.
לפני
model = GenerativeModel("gemini-2.5-flash")
response = model.count_tokens(["Why is the sky blue?"])
print(response.total_tokens)
print(response.total_billable_characters)
אחרי
response = client.models.count_tokens(
model="gemini-3.5-flash",
contents=["Why is the sky blue?"],
)
print(response.total_tokens)
print(response.cached_content_token_count)
שמירת נתונים במטמון לפי הקשר
שימו לב לשינויים הבאים במשימות של שמירת נתונים במטמון לפי הקשר:
- הפונקציה
ttlמשנה את הסוג מ-datetime.timedeltaלמחרוזת של משך זמן, כמו"86400s". - שיטות של אובייקט משאב הופכות לקריאות של מודול לקוח.
updateמחזירה אובייקט חדש במקום לשנות את האובייקט הקיים.
לפני
import datetime
from vertexai.caching import CachedContent
cache = CachedContent.create(
model_name="gemini-2.5-flash",
system_instruction="Please answer my question formally",
contents=contents,
ttl=datetime.timedelta(days=1),
)
cache.update(ttl=datetime.timedelta(days=2))
cache.delete()
אחרי
from google.genai import types
cache = client.caches.create(
model="gemini-3.5-flash",
config=types.CreateCachedContentConfig(
contents=contents,
system_instruction="Please answer my question formally",
ttl="86400s",
),
)
cache = client.caches.update(
name=cache.name, config=types.UpdateCachedContentConfig(ttl="172800s")
)
client.caches.delete(name=cache.name)
חיזוי ושיפור ביצועים של קבוצות
שימו לב לשינויים הבאים במשימות של חיזוי אצווה וכוונון:
- הסקר מבוסס על קישור מחדש, ולא על קישור במקום. אין
job.refresh()ואיןjob.has_ended. מאחזרים אובייקט חדש מ-client.batches.get(name=...)ומשווים את המחרוזותjob.stateלמחרוזותJOB_STATE_*. - שינוי שם של כמה קבצים:
source_modelל-model, input_datasetל-src, output_uri_prefixל-config.dest, job_display_nameל-config.display_name. - הוסרו פקדים של צורות מכונה באצווה, ואין להם מקבילה בגרסת ה-SDK החדשה. השדות
machine_type,accelerator_type,accelerator_count,starting_replica_countו-max_replica_countכבר לא שייכים ל-CreateBatchJobConfig. - השמות של ה-methods הבאות שונו:
sft.trainעדclient.tunings.tunesource_modelעדbase_modeltrain_datasetעדtraining_datasetepochsעדepoch_count
- קבוצות הנתונים של ההתאמה העדינה עטופות. מחרוזת
"gs://..."הופכת ל-types.TuningDataset(gcs_uri=...). הפונקציה
adapter_sizeמשנה את הסוג מ-intלמחרוזת enum, כמו"ADAPTER_SIZE_FOUR".
לפני
from vertexai.batch_prediction import BatchPredictionJob
from vertexai.tuning import sft
job = BatchPredictionJob.submit(
source_model="gemini-2.5-flash",
input_dataset="bq://my-project.my-dataset.my-table",
output_uri_prefix="bq://my-project.my-dataset.output",
)
while not job.has_ended:
job.refresh()
tuning_job = sft.train(
source_model="gemini-2.5-flash",
train_dataset="gs://bucket/train.jsonl",
epochs=1,
adapter_size=4,
)
אחרי
from google.genai import types
job = client.batches.create(
model="gemini-3.5-flash",
src="bq://my-project.my-dataset.my-table",
config=types.CreateBatchJobConfig(dest="bq://my-project.my-dataset.output"),
)
completed = {"JOB_STATE_SUCCEEDED", "JOB_STATE_FAILED", "JOB_STATE_CANCELLED", "JOB_STATE_PAUSED"}
while job.state not in completed:
job = client.batches.get(name=job.name)
tuning_job = client.tunings.tune(
base_model="gemini-3.5-flash",
training_dataset=types.TuningDataset(gcs_uri="gs://bucket/train.jsonl"),
config=types.CreateTuningJobConfig(
epoch_count=1,
adapter_size="ADAPTER_SIZE_FOUR",
),
)
שינוי המבנה של Agent Platform SDK
אם אתם משתמשים במודולים agentplatform של google-cloud-aiplatform, כדאי להשתמש בהמלצות הבאות כדי לעבור למבנה ה-SDK החדש:
google-cloud-agentplatformהיא עכשיו הפצה עצמאית קלה, והיא מומלצת להתקנה של עומסי עבודה של סוכנים. אם אתם לא צריכים את הממשק הקלאסי של למידת מכונה, אתם יכולים להחליף את ההתקנה מ-pip install google-cloud-aiplatformל-pip install google-cloud-agentplatform.כדי לעדכן את הייבוא ואת נתיבי המאפיינים, אפשר להיעזר בטבלה הבאה:
הקודם חדש client.agent_engines.create client.runtimes.create(Deploy an Agent Runtime on Gemini Enterprise Agent Platform instance, which provides built-in Sessions, Sandbox code execution, and context memory configuration)
client.memory_banks.create(Create standalone Memory Bank resources for persisting, managing, and retrieving memories across interactions)client.agent_engines.sandboxesclient.sandboxesclient.agent_engines.sandboxes.snapshotsclient.sandboxes.snapshotsclient.agent_engines.sandboxes.templatesclient.sandboxes.templatesclient.agent_engines.sessionsclient.sessionsclient.agent_engines.sessions.eventsclient.sessions.eventsclient.agent_engines.runtimes.revisionsclient.runtimes.revisionsclient.agent_engines.memoriesclient.memory_banks.memoriesagentplatform.agent_engines.templatesagentplatform.frameworksהמאחלים הגלובלי מוסר, ומסגרות הסוכנים כבר לא קוראות את הפרויקט והמיקום מהמצב
aiplatform.init()אוvertexai.init(). החלפת הגדרות שמקורן בפונקציית אתחול במשתני סביבה לכל מה שפועל במסגרת סוכן. קוד שמסתמך על הפונקציה initializer כדי להגדיר סוכנים שנפרסו נכשל בשקט במקום להציג שגיאה.צריך לעדכן את האתרים של
evals.run_inference(agent=...)כדי להעביר אתtypes.Runtime, כי ה-SDK כבר לא מקבל אתtypes.AgentEngine.מבצעים את השינויים הבאים:
vertexai.Clientעדagentplatform.Clientvertexai.ragעדagentplatform.Client().rag
vertexai.Clientemits aFutureWarningon first instantiation:The vertexai.Client class is deprecated. Please use agentplatform.Client instead.
vertexai.ragמחזירה את הערךUserWarningבזמן ייבוא המודול, ולא בזמן הקריאה. מעבירים את הנתונים אל:import agentplatform client = agentplatform.Client(project="your-project", location="global") client.rag.create_corpus(...)עדכון הטיפול בשגיאות שקשורות ל-
AdkAppולשיחות בסשן. שיטות סינכרוניות של הפעלת סוכן וסטרימינג של הפעלת סוכן מציגות עכשיו את שגיאת ה-API הבסיסית. מתקשרים שמקבלים שגיאה כללית עטופה כבר לא תואמים. מחליפים את ה-catches של חריגים גנריים של עטיפת ספריות ב-google.api_core.exceptions.GoogleAPICallError(או בשגיאות סטטוס ספציפיות כמוResourceExhaustedו-NotFound).צריך לעדכן את הקריאות ללקוח או את תוכנת הביניים כדי לכלול את טוקן הגישה של המשתמש ב-OAuth בכל בקשה, כי הטוקנים הם עכשיו זמניים ולא נשמרים עם מצב הסשן. מוודאים שרענון האסימון מנוהל בצד הלקוח.
חשוב לשים לב שהמודול
a2a.tasksהוסר ולא הוחלף במודול אחר.