מעבר מ-Vertex AI Extensions ל-Agent Platform

בעקבות הוצאה משימוש של Vertex AI Extensions, צריך להעביר תהליכי עבודה קיימים אל Gemini Enterprise Agent Platform (Agent Platform). במדריך הזה מוסבר על נתיבי ההעברה של שלוש קטגוריות הליבה של התוספים:

תוסף Code Interpreter

מעבר אל: ארגז חול להרצת קוד ב-Agent Platformחלופה: כלי Gemini API CodeExecution

צריך להעביר את התוסף Code Interpreter אל Agent Platform Code Execution Sandbox. השירות המנוהל הזה מספק סביבת ארגז חול מאובטחת, מבודדת ועם שמירת מצב, שמיועדת להרצת קוד שנוצר על ידי AI ולא ניתן לסמוך עליו. הוא אידיאלי להרצה פרוגרמטית, לחישובים פיננסיים ולתהליכי עבודה במדעי הנתונים.

לחלופין, אם אתם מעדיפים שמודלי Gemini יכתבו ויריצו קוד באופן אוטומטי במהלך מעבר יצירה, אתם יכולים להשתמש בכלי code_execution המובנה ב-google-genai SDK.

דוגמאות להעברה

תוספים ל-Vertex AI:

from vertexai.preview import extensions

extension = extensions.Extension.from_hub("code_interpreter")
response = extension.execute(
    operation_id="generate_and_execute_code",
    operation_params={"code": "import math\nprint(math.sqrt(15376))"}
)

ארגז חול להרצת קוד ב-Agent Platform:

אפשרות 1: שימוש בערכה לפיתוח סוכנים (ADK)

from google.adk.code_executors.agent_engine_sandbox_code_executor import (
    AgentEngineSandboxCodeExecutor,
)
from vertexai.preview.reasoning_engines import Agent

root_agent = Agent(
    model="gemini-2.0-flash-001",
    name="agent_engine_code_execution_agent",
    instruction=base_system_instruction()
    + """
You need to assist the user with their queries by looking at the data and the
context in the conversation. Your final answer should summarize the code and
code execution relevant to the user query.

Include all pieces of data required to answer the question, such as a table
from code execution results. If the query can be answered directly without
writing code, generate the textual response directly. Take care not to manually
run commands like `pip install`. When plotting trends, sort data by the x-axis.
""",
    code_executor=AgentEngineSandboxCodeExecutor(
        sandbox_resource_name=None,
        agent_engine_resource_name=None,
    ),
)

אפשרות 2: שימוש ב-GenAI Client SDK

from google import genai

# Initialize Gemini model
model = genai.Client().models

# Ask Gemini to generate code for a calculation
prompt = """
Write Python code to calculate the mean and standard deviation of these numbers:
[23, 45, 67, 89, 12, 34, 56]

Return only the Python code, no explanations.
"""

response = model.generate_content(
    model="gemini-2.5-flash",
    contents=prompt
)
generated_code = response.text.replace("```python", "").replace("```", "").strip()


# Execute the generated code in Agent Engine Sandbox using new pattern
exec_response = client.agent_engines.sandboxes.execute_code(
    name=sandbox_resource_name,
    input_data={"code": generated_code},
)

# Parse response with new file handling logic
for output in exec_response.outputs:
    if output.mime_type == "application/json" and output.metadata is None:
        result = json.loads(output.data.decode("utf-8"))
        if result.get("msg_out"):
            print(result.get("msg_out"))
        if result.get("msg_err"):
            print(f"Error occurred: {result.get('msg_err')}")

אפשרות 3: הגדרה ככלי ידני דינמי

import json
import re
from google.genai.types import FunctionDeclaration, Tool


def execute_python_code(code: str) -> str:
    """Execute Python code in a secure sandbox.

    Args:
        code: Python code to execute
    Returns:
        The output from code execution
    """
    # Extract code block if wrapped in markdown
    code_match = re.search(r"```python\n(.*?)\n```", code, re.DOTALL)
    code_to_execute = code_match.group(1) if code_match else code

    # Execute in sandbox
    response = client.agent_engines.sandboxes.execute_code(
        name=sandbox_resource_name, input_data={"code": code_to_execute}
    )

    # Parse response using new pattern
    for output in response.outputs:
        if output.mime_type == "application/json" and output.metadata is None:
            result = json.loads(output.data.decode("utf-8"))

            if result.get("msg_err"):
                return f"Error: {result.get('msg_err')}"
            return result.get("msg_out", "Code executed successfully")

    return "Code executed (no output)"


# Create a tool from the function
code_tool = Tool(
    function_declarations=[FunctionDeclaration.from_func(execute_python_code)]
)

תוסף חיפוש Google

מעבר אל: עיגון באמצעות חיפוש Google

מעבר אל עיגון בנתונים באמצעות חיפוש Google היכולת הזו מעגנת את התשובות של המודל במאגרי מידע מהימנים של חיפוש ובמידע ציבורי עדכני, וכך משיגה שיעורי עובדות גבוהים יותר.

דוגמאות להעברה

תוספים ל-Vertex AI:

from vertexai.preview import extensions

extension = extensions.Extension.from_hub("google_search")
response = extension.execute(
    operation_id="search",
    operation_params={"query": "What is the next total solar eclipse in the US?"}
)

עיגון באמצעות חיפוש Google באמצעות Google GenAI SDK:

from google import genai
from google.genai.types import GenerateContentConfig, GoogleSearch, Tool

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.1-flash",
    contents="When is the next total solar eclipse in the United States?",
    config=GenerateContentConfig(
        tools=[Tool(google_search=GoogleSearch())],
        temperature=0.0,
    ),
)
print(response.text)

תוספים מותאמים אישית

מעבר אל: בקשה להפעלת פונקציה (שימוש בכלי)

העברה של תוספים בהתאמה אישית שהגדרתם באמצעות מפרטי OpenAPI אל קריאה לפונקציות. התכונה 'קריאה לפונקציות' מאפשרת להגדיר ממשקי API של פלטפורמות חיצוניות בקובצי המקור ולהעביר את ההפשטות של הממשקים שלהם למודלים.

דוגמאות להעברה

תוספים ל-Vertex AI:

from vertexai.preview import extensions

extension = extensions.Extension.create(
    manifest={
        "name": "my_custom_api",
        "apiSpec": {"openApiYaml": "..."}
    }
)

שימוש בכלי באמצעות Google GenAI SDK:

from google import genai
from google.genai.types import GenerateContentConfig


def get_order_status(order_id: str) -> str:
    """Returns the current status of a customer order.

    Args:
        order_id: The unique identifier of the order.
    """
    statuses = {"123": "Shipped", "456": "Processing"}
    return statuses.get(order_id, "Order not found")


client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.0-pro",
    contents="Can you check the status of my order 123?",
    config=GenerateContentConfig(
        tools=[get_order_status],
    ),
)

print(response.text)