החבילה google-cloud-aiplatform כוללת גם את ה-SDK של Agent Platform ל-Python וגם את ספריית הלקוח של Agent Platform ל-Python. בדף הזה מפורטות הקטגוריות הבאות של שינויים בחבילה 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.
שינוי מבנה של ממשק הסוכן: השינויים הבאים בוצעו במודולים של
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הוא שדה חובה. אם לא תציינו את זה, הלקוח יטרגט את Gemini Developer API בלי להודיע, ואז ייכשל ב-Application Default Credentials או ידרוש מפתח API. - שם המודל עובר מהבנייה לכל קריאה. אין אובייקט מודל של קישור חד-פעמי.
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מקובל החל מגרסה 2.20.0 שלgoogle-genai, אבל הגרסה הישנה יותרvertexai=Trueפועלת בכל גרסה והיא הבחירה הבטוחה יותר.
- המצב הגלובלי הופך ללקוח מפורש.
בודקים את הקוד כדי לזהות שינויים שקטים שבהם ההתנהגות משתנה בלי שגיאה. הם עוברים הידור ופועלים, אבל המשמעות שלהם משתנה.
התנהגות לפני אחרי response.textבתשובה חסומה או ריקההערך עולה ב- ValueErrorהאפליקציה מחזירה את הערך None response.textעם כמה מועמדיםהערך עולה ב- ValueErrorמתעדת אזהרה ומחזירה את המועמד הראשון טירגוט לפי לקוח vertexai.init()implied 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, )אם אתם משתמשים בהערכה, ב-Agent Runtime, בהנחיות, במערכי נתונים, במיומנויות ובכל הממשק הקלאסי של למידת המכונה, השאירו את
google-cloud-aiplatformמותקן.משנים את הקריאות לגרסאות החדשות. מתחילים בשינוי שמות מכני, ואז ממשיכים לאיחוד
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 הוסרה. כל קריאה אסינכרונית נמצאת ב-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(מאפיין) הופך ל-chat.get_history()(שיטה). השיטה החדשה נמשכת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עובר מה-constructor של המודל להגדרה לכל קריאה. בגרסה הקודמת של ה-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=), מילת מפתח בלבד, השם של הפרמטר השתנה |
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הוא ה-accessor האידיומטי והוא לא נכשל כשחלק אפס הוא טקסט. המעבר הישן עדיין פועל. - סכימת ה-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. - אמצעי הבקרה של Batch machine-shape הוסרו ואין להם מקבילה בגרסת ה-SDK החדשה.
machine_type, accelerator_type, accelerator_count, starting_replica_countו-max_replica_countהם כבר לא שדות שלCreateBatchJobConfig. - השמות של השיטות הבאות השתנו:
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.createclient.runtimes.create(פריסת מופע של Agent Runtime ב-Gemini Enterprise Agent Platform, שמספק סשנים מובנים של Agent Platform, הרצת קוד בארגז חול והגדרת זיכרון הקשר)
client.memory_banks.create(יצירת משאבים נפרדים של Agent Platform Memory Bank כדי לשמור, לנהל ולאחזר זיכרונות מאינטראקציות שונות)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(). החלפת הגדרות שנגזרות מהמאתחל במשתני סביבה לכל מה שפועל בתוך מסגרת של סוכן. קוד שמסתמך על המאתחל כדי להגדיר סוכנים שנפרסו נכשל באופן שקט במקום להציג שגיאה.צריך לעדכן את
evals.run_inference(agent=...)אתרי הקריאה כדי להעביר אתtypes.Runtime, כי ה-SDK כבר לא מקבל אתtypes.AgentEngine.מבצעים את השינויים הבאים:
vertexai.Clientעדagentplatform.Clientvertexai.ragעדagentplatform.Client().rag
vertexai.ClientפולטFutureWarningבהפעלה הראשונה: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. קריאות שמקבלות שגיאה גנרית עטופה לא תואמות יותר. מחליפים את ה-catch של חריגות גנריות של wrapper בספרייה ב-google.api_core.exceptions.GoogleAPICallError(או בשגיאות סטטוס ספציפיות כמוResourceExhaustedו-NotFound).צריך לעדכן את הגורמים שמבצעים קריאות ללקוח או את התוכנה המתווכת כך שיכללו את טוקן הגישה של המשתמש ב-OAuth בכל בקשה, כי הטוקנים הם זמניים ולא נשמרים במצב הסשן. חשוב לוודא שרענון הטוקן מנוהל בצד הלקוח.
חשוב לשים לב שהמודול
a2a.tasksהוסר בלי תחליף.