גישה ל-Gemini 3 Pro Chat באמצעות Python SDK דרך נקודת קצה של Private Service Connect

1. סקירה כללית

אפשר לגשת ל-Vertex AI API דרך האינטרנט, אבל יכול להיות שתרצו לגשת ל-Vertex AI API באופן פרטי בארגון שלכם, בלי לעבור דרך האינטרנט. בשיעור ה-Lab הזה תעשו את זה קודם.

  • גישה אל Gemini 3 Pro API דרך Vertex באמצעות Python SDK
  • הוא יפעל במכונה וירטואלית
  • החיבור יהיה דרך Cloud NAT לאינטרנט הציבורי.

לאחר מכן תיצרו נקודת קצה (endpoint) של Private Service Connect לממשקי Google API, ותשנו את זרימת התנועה כך שתשתמש בנקודת הקצה הפרטית כדי להתחבר ל-Gemini chat API. ההגדרות יהיו שילוב של Terraform, ‏ gcloud והמסוף.

בשיעור ה-Lab הזה תיצרו את התבנית הבאה.

איור 1.

304c579d349aec90.png

2. מטרה

בשיעור ה-Lab הזה תלמדו איך לבצע את המשימה הבאה:

  • הגדרת מכונה וירטואלית לשימוש ב-Python SDK
  • איך מתחברים ל-Gemini Chat באמצעות סקריפט Python
  • הגדרת נקודת קצה של PSC כדי להתחבר אל Googleapis
  • אימות נתיב הקישוריות אל Googleais
  • הגדרת רשומות DNS ידניות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

הפעלת Cloud Shell

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

צילום מסך של טרמינל Google Cloud Shell שבו מוצג שהסביבה מחוברת

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.

3. משימה 1: הגדרת סביבה באמצעות Terraform

ניצור VPC בהתאמה אישית עם כללי חומת אש ותת-רשת. פותחים את מסוף Cloud ובוחרים את הפרויקט שבו רוצים להשתמש.

  1. פותחים את Cloud Shell בפינה השמאלית העליונה של המסוף, מוודאים שמופיע מזהה הפרויקט הנכון ב-Cloud Shell ומאשרים את כל ההנחיות למתן גישה. b51b80043d3bac90.png
  2. יוצרים תיקייה בשם terraform-build ועוברים לתיקייה
mkdir terraform-build  && cd terraform-build
  1. יוצרים קובץ main.tf וקובץ variable.tf.
touch main.tf variable.tf 
  1. עוברים לתצוגה של Cloud Shell Editor. בוחרים באפשרות עורך ומוודאים שמאשרים את כל ההנחיות הנדרשות כדי שהממשק ייטען.
  2. אחרי הטעינה, עוברים אל קובץ > פתיחת תיקייה, אל ‎/home/your-user-name/terraform-build ולוחצים על אישור כדי לפתוח את התיקייה בעורך. 39b3eb9a3e077bfd.png
  3. בוחרים את הקובץ variable.tf ומוסיפים את הקוד הבא. מחליפים את הטקסט your-project-id-here במזהה הפרויקט בפועל בתוך מרכאות.
variable "project_id" {
  type = string
  default = "your-project-id-here"
}

variable "network_id" {
  type = string
  default = "python-net"
}
  1. לאחר מכן פותחים את הקובץ main.tf. אנחנו נוסיף קוד Terraform כדי לבצע פעולות שונות, כמו שמוסבר בהמשך.

הפעלת ממשקי API

resource "google_project_service" "default"

יצירת VPC בשם python-net

resource "google_compute_network" "default"

הוספת תת-רשת

resource "google_compute_subnetwork" "default"

הוספת שני כללים לחומת האש

resource "google_compute_firewall" "allow_icmp"resource "google_compute_firewall" "allow_ssh"

  1. מעתיקים את הקוד הבא ומדביקים אותו בקובץ main .tf.
resource "google_project_service" "default" {
  project = var.project_id 
  for_each = toset([
    "dns.googleapis.com",
    "aiplatform.googleapis.com",
    "servicedirectory.googleapis.com"
  ])

  service            = each.value
  disable_on_destroy = false
}

resource "google_compute_network" "default" {
  project                 = var.project_id
  name                    = var.network_id
  auto_create_subnetworks = false
  mtu                     = 1460
  routing_mode            = "GLOBAL"
}

resource "google_compute_subnetwork" "default" {
  name          = "vm1-subnet"
  ip_cidr_range = "10.0.11.0/24"
  project       = var.project_id
  region        = "us-east1"
  stack_type    = "IPV4_ONLY"
  network       = google_compute_network.default.id
}

resource "google_compute_firewall" "allow_icmp" {
  name    = "allow-icmp-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-icmp"]
}

resource "google_compute_firewall" "allow_ssh" {
  name    = "allow-ssh-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-ssh"]
}
  1. חוזרים אל מסוף Cloud Shell, מוודאים שאתם בספרייה terraform-build cd terraform-build ומריצים את הפקודות הבאות:

terraform init

מאתחלת את ספריית העבודה. בשלב הזה מתבצעת הורדה של הספקים שנדרשים להגדרה הנתונה.

terraform plan

יוצרת תוכנית ביצוע שמראה אילו פעולות Terraform תבצע כדי לפרוס את התשתית.

  1. כדי ליצור את המשאבים, מריצים את הפקודה terraform apply ומקלידים yes כדי להריץ.

4. משימה 2: יצירת שער NAT ומכונות וירטואליות באמצעות Terraform

אנחנו צריכים להעניק גישה חיצונית לאינטרנט, אז ניצור שער Cloud NAT ונצרף אותו.

  1. פותחים את Cloud Shell, עוברים לתיקייה terraform-build ויוצרים את הקבצים הבאים (סה"כ שלושה קבצים). נערוך אותם בהמשך.
touch nat-vm.tf psc.tf dns.tf
  1. עוברים לתצוגה Cloud Shell editor, בוחרים את הקובץ nat-vm.tf ומוסיפים את קוד Terraform הבא. ייווצר שער NAT ושתי מכונות וירטואליות.

‫Terraform nat-vm.tf

resource "google_compute_router" "default" {
  name    = "py-outbound-nat"
  region  = "us-east1"
  network = google_compute_network.default.id
  project = var.project_id
  

 bgp {
  asn = 64514
  }
}

resource "google_compute_router_nat" "default" {
  name                               = "py-outbound-nat-gw"
  router                             = google_compute_router.default.name
  region                             = google_compute_router.default.region
  nat_ip_allocate_option             = "AUTO_ONLY"
  project                            = var.project_id
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"

  log_config {
    enable = true
    filter = "ERRORS_ONLY"
  }
}

resource "google_compute_instance" "vm1" {
  name         = "py-vm1"
  zone         = "us-east1-b"
  machine_type = "n2-standard-2"
  project      = var.project_id

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-12"
    }
  }

  network_interface {
    subnetwork = google_compute_subnetwork.default.id  
    stack_type = "IPV4_ONLY"
  }

  tags = ["allow-ssh", "allow-icmp"]

  metadata_startup_script = <<-EOF
    #! /bin/bash
    sudo apt-get update
    sudo apt-get install python3 python3-dev python3-venv git -y
    sudo apt-get install tcpdump dnsutils -y    
    
      mkdir -p ~/py-gem-env
      cd ~/py-gem-env
      python3 -m venv env
      source env/bin/activate
      pip install --upgrade pip
      pip install ipython google-genai
    '
  EOF
}
  1. עוברים אל Cloud Shell terminal (מסוף Cloud Shell), מוודאים שאתם בתיקייה terraform-build ומריצים את הפקודה terraform plan. הפקודה הזו תראה לכם ש-4 פריטים יתווספו. לאחר מכן מריצים את הפקודה terraform apply ומקלידים yes כדי ליצור את שער ה-NAT ואת המכונה הווירטואלית.

5. משימה 3: הגדרת מכונות וירטואליות ובדיקה

  1. עוברים אל VM instances (מכונות וירטואליות). בוחרים את המכונה הווירטואלית שמתחילה ב-py-vm1. בוחרים באפשרות SSH.
  2. אחרי שמתחברים ב-SSH אל py-vm1, מקלידים sudo -i כדי להפעיל את root.
  3. מפעילים את סביבת ה-venv:
cd py-gem-env
source env/bin/activate
  1. עכשיו נאמת את זה כדי שנוכל לבצע בדיקות בהמשך. מריצים את הפקודה הבאה במכונת ה-VM ומקישים על y כשמופיעה בקשה.
gcloud auth application-default login
  1. אחר כך מעתיקים את כתובת ה-URL שמתחילה ב-https://‎, פותחים כרטיסייה חדשה בחלון הדפדפן של המעבדה ומדביקים את כתובת ה-URL. מאשרים את ההנחיות.
  2. כשמופיעה ההודעה הבאה, בוחרים באפשרות 'העתקה', חוזרים להפעלה של המכונה הווירטואלית py-vm1, ובשדה Enter authorization code:‎ מדביקים את הקוד שהעתקתם ולוחצים על Enter כדי לבצע אימות.

b703db7aa2aa286a.png

  1. עכשיו נבצע בדיקה מהירה כדי לראות אם אפשר להתחבר ל-Vertex API. ה-API הזה משתמש ב-‎ *-aiplatform.googleapis.com, לכן נבצע dig לכתובת הזו כדי לראות איך התנועה מנותבת.
dig *-aiplatform.googleapis.com
  1. אמורה להופיע כתובת דומה (אבל לא זהה). שימו לב שהנתיב הוא דרך כתובות IP ציבוריות, כי ה-API הוא API ציבורי. לא להעתיק
; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> *-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60947
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;*-aiplatform.googleapis.com.   IN      A

;; ANSWER SECTION:
*-aiplatform.googleapis.com. 300 IN     A       173.194.216.95
*-aiplatform.googleapis.com. 300 IN     A       108.177.11.95
*-aiplatform.googleapis.com. 300 IN     A       192.178.219.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.134.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.139.95
*-aiplatform.googleapis.com. 300 IN     A       108.177.12.95
*-aiplatform.googleapis.com. 300 IN     A       173.194.210.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.26.95
*-aiplatform.googleapis.com. 300 IN     A       173.194.212.95
*-aiplatform.googleapis.com. 300 IN     A       172.217.204.95
  1. עכשיו נשתמש ב-Python. מקלידים ipython כדי להפעיל את הממשק של ipython.
ipython

845ef4291429888a.png

  1. מעתיקים ומדביקים את הטקסט הבא. ההנחיות האלה שולחות ל-Gemini את השאלות What are all the colors of the Google logo ו-What is the color of the sky.
from google import genai
from google.genai import types
import os
import sys

LOCATION = "global"
MODEL_ID = "gemini-3-pro-preview" 

try:
    client = genai.Client(vertexai=True, location=LOCATION)
    print(f"Successfully initialized Google Gen AI Client (Vertex AI mode) in {LOCATION}")
except Exception as e:
    print(f"Error initializing client: {e}")
    print("Ensure you have installed the library: `pip install google-genai`")
    print("And authenticated: `gcloud auth application-default login`")
    sys.exit(1)

class SimpleChatSession:
    def __init__(self, model_id):
        self.model_id = model_id
        self.history = [] 

    def send_message(self, prompt, stream=True):
        user_content = types.Content(
            role="user",
            parts=[types.Part(text=prompt)]
        )
        self.history.append(user_content)

        try:
            response_stream = client.models.generate_content_stream(
                model=self.model_id,
                contents=self.history,
                config=types.GenerateContentConfig(
                    temperature=0.7 
                )
            )

            accumulated_text = ""
            
            for chunk in response_stream:
                if chunk.text:
                    yield chunk.text
                    accumulated_text += chunk.text
            
            model_content = types.Content(
                role="model",
                parts=[types.Part(text=accumulated_text)]
            )
            self.history.append(model_content)

        except Exception as e:
            print(f"\n[Error during generation: {e}]")

def get_chat_response(session: SimpleChatSession, prompt: str):
    print(f"\n--- User: {prompt} ---")
    print("--- Model: ", end="")
    
    stream_generator = session.send_message(prompt)
    
    full_text = ""
    for chunk_text in stream_generator:
        full_text += chunk_text
        print(chunk_text, end="", flush=True)

    print() 
    return full_text

if __name__ == "__main__":
    chat_session = SimpleChatSession(MODEL_ID)

    get_chat_response(chat_session, "Hello.")
    get_chat_response(chat_session, "What are all the colors of the Google logo?")
    get_chat_response(chat_session, "What color is the sky?")
  1. מקישים פעמיים על Enter כדי להריץ את הקוד ולראות את התוצאה.
  2. הבקשה הזו ניגשה אל Vertex דרך ה-API הציבורי.
  3. בואו נמשיך אחרי שנסגור את סשן SSH.

6. משימה 4: יצירת נקודת קצה של PSC ל-googleapis באמצעות Terraform

כדי להפעיל קישוריות פרטית לנקודת קצה ל-API של Vertex, ניצור נקודת קצה של Private Service Connect ל-Google APIs. כך נוכל להשתמש בכתובת IP פרטית שהקצנו לניתוב תעבורה לממשקי Google API שאנחנו צריכים, במקרה הזה Vertex.

  1. אם Cloud Shell לא פתוח, פותחים אותו בתצוגת עריכה. ניצור את הפריטים הבאים:
  • יוצרים כתובת IP לנקודת הקצה של PSC‏ 192.168.255.250 (resource "google_compute_global_address" "default")
  • יצירת נקודת קצה של PSC ל-Google APIs (resource "google_compute_global_forwarding_rule" "default")

פותחים את הקובץ psc.tf בתיקייה terraform-build. מוסיפים את הקוד הבא לקובץ.

‫Terraform psc.tf

resource "google_compute_global_address" "default" {
  name         = "vertex-ip"
  purpose      = "PRIVATE_SERVICE_CONNECT"
  network      = google_compute_network.default.id
  address_type = "INTERNAL"
  address      = "192.168.255.250"
}

resource "google_compute_global_forwarding_rule" "default" {  
  name                  = "pscvertexgemini"
  target                = "all-apis"
  network               = google_compute_network.default.id
  ip_address            = google_compute_global_address.default.id
  load_balancing_scheme = ""
  }
  1. עוברים אל הטרמינל של Cloud Shell ומוודאים שאתם נמצאים בתיקייה terraform-build. לאחר מכן מריצים את הפקודה terraform init Then run terraform plan this will show you that 2 items will be added,
    ואז מריצים את הפקודה terraform apply ומקלידים yes כדי ליצור את נקודת הקצה של כתובת ה-IP ושל Google APIs של PSC.
  2. אימות קיום של נקודת קצה
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global

7. משימה 5: יצירת רשומת DNS ידנית ל-googleapis באמצעות Terraform

אפשר ליצור רשומת DNS ידנית כדי להפנות לנקודת הקצה של PSC באמצעות שרת DNS פרטי. השינוי ישפיע על כל הרשתות שמשויכות אליו.

  1. עוברים אל Network services (שירותי רשת) ובוחרים באפשרות Cloud DNS.
  2. באזורים, אמור להופיע אזור שנוצר באופן אוטומטי עבור Private Service Connect ל-Google APIs, עם סוג האזור service directory. אפשר להשתמש בכתובת הזו כדי להתחבר לנקודת הקצה (endpoint) של PSC בפורמט **SERVICE-ENDPOINT.p.googleapis.com לדוגמה: aiplatform-pscvertexgemini.p.googleapis.com
  3. במקרה הזה, אנחנו רוצים ליצור באופן ידני רשומה של שרת DNS פרטי. ההגדרה תהיה כדלקמן
  • יוצרים שרת DNS פרטי בשם googleapis-private עבור googleapis.com ומגבילים אותו לרשת python-net.
  • מוסיפים רשומת A כדי למפות את 'googleapis.com' לכתובת ה-IP ‏'192.168.255.250'.
  • מוסיפים רשומת CNAME כדי להפנות את כל תתי-הדומיין של googleapis.com (לדוגמה, www.googleapis.com) אל googleapis.com.
  1. אם Cloud Shell לא פתוח, פותחים אותו בתצוגת עריכה. פותחים את הקובץ dns.tf בתיקייה terraform-build. מוסיפים את הקוד הבא לקובץ.

‫Terraform dns.tf

resource "google_dns_managed_zone" "private_zone" {
  name        = "googleapis-private"
  dns_name    = "googleapis.com."  
  visibility  = "private"
  project     = var.project_id     

  private_visibility_config {
    networks {
      network_url = google_compute_network.default.id  
    }
  }
}

resource "google_dns_record_set" "a_record" {
  name    = "googleapis.com."  
  type    = "A"
  ttl     = 300
  managed_zone = google_dns_managed_zone.private_zone.name
  project = var.project_id    

  rrdatas = ["192.168.255.250"]
}

resource "google_dns_record_set" "cname_record" {
 name    = "*.googleapis.com."
 type    = "CNAME"
 ttl     = 300
 managed_zone = google_dns_managed_zone.private_zone.name
 project = var.project_id    

 rrdatas = ["googleapis.com."]  
}
  1. עוברים אל הטרמינל של Cloud Shell ומוודאים שאתם נמצאים בתיקייה terraform-build. אחר כך מריצים את הפקודה terraform plan כדי לראות אילו פריטים יתווספו,
    ואז מריצים את הפקודה terraform apply ומקלידים yes כדי ליצור את רשומת ה-DNS הפרטית.
  2. ההגדרה אמורה לכלול רשומת A ורשומת CNAME, כמו בדוגמה הבאה 6d2fc061460cd983.png
  3. בשלב הבא מאמתים את הקישוריות עם השינויים האלה ב-py-vm1

8. משימה 6: אימות הקישוריות של נקודות קצה באמצעות כתובת IP

בואו נתחבר באמצעות נקודת הקצה הפרטית כדי להתחבר ל-Gemini.

  1. עוברים למכונה הווירטואלית py-vm1. בוחרים באפשרות SSH ומתחברים למכונה הווירטואלית באמצעות SSH
  2. כדי לקבל גישת root, מקלידים sudo -i
  3. בודקים את נתיב הקישוריות אל aiplatform.googleapis.com באמצעות הפקודה ping. הפעולה הזו תבצע פינג לכתובת ה-IP בשרת ה-DNS הפרטי, רשומת A עבור googleapis. כתובת ה-IP הזו היא נקודת קצה של PSC, והפינגים שלכם ייכשלו.
ping -c 2 aiplatform.googleapis.com
  1. בודקים את נתיב הקישוריות באמצעות ping באמצעות רשומת ה-DNS שנוצרה אוטומטית עבור Google APIs של PSC עם aiplatform-pscvertexgemini.p.googleapis.com. היא מצביעה על כתובת ה-IP של נקודת הקצה של ה-PSC, והפינגים שלכם ייכשלו.
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
  1. בודקים את נתיב הקישוריות אל aiplatform.googleapis.com באמצעות הפקודה dig. זו צריכה להיות כתובת ה-IP של נקודת הקצה של PSC.
dig aiplatform.googleapis.com
  1. חוזרים למסוף ופותחים מופע נוסף של מכונת ה-VM py-vm1. בוחרים באפשרות SSH ומתחברים למכונה הווירטואלית באמצעות SSH
  2. כדי לקבל גישת root, מקלידים sudo -i
  3. מריצים את הפקודה הבאה כדי לראות את הקישוריות ב-TCP dump
sudo tcpdump -i any port 53 -n or host aiplatform.googleapis.com
  1. עכשיו חוזרים למופע הראשון של SSH של מכונת ה-VM‏ py-vm1
  2. מפעילים את הסביבה באמצעות
cd py-gem-env
source env/bin/activate
  1. עכשיו נבדוק את Python. מקלידים ipython כדי להפעיל את הממשק ipython.
ipython
  1. מעתיקים ומדביקים את הטקסט הבא. ההנחיה הזו מבקשת מ-Gemini: ‏ "In one short sentence summarize what is a tokenizer in the context of AI?" (במשפט קצר אחד, סכם מהו טוקנייזר בהקשר של AI) ו-"Are whales awesome or not?" (האם לווייתנים הם מדהימים או לא?).
from google import genai
from google.genai import types
import os
import sys

LOCATION = "global"
MODEL_ID = "gemini-3-pro-preview" 

try:
    client = genai.Client(vertexai=True, location=LOCATION)
    print(f"Successfully initialized Google Gen AI Client (Vertex AI mode) in {LOCATION}")
except Exception as e:
    print(f"Error initializing client: {e}")
    print("Ensure you have installed the library: `pip install google-genai`")
    print("And authenticated: `gcloud auth application-default login`")
    sys.exit(1)

class SimpleChatSession:
    def __init__(self, model_id):
        self.model_id = model_id
        self.history = [] 

    def send_message(self, prompt, stream=True):
        user_content = types.Content(
            role="user",
            parts=[types.Part(text=prompt)]
        )
        self.history.append(user_content)

        try:
            response_stream = client.models.generate_content_stream(
                model=self.model_id,
                contents=self.history,
                config=types.GenerateContentConfig(
                    temperature=0.7 
                )
            )

            accumulated_text = ""
            
            for chunk in response_stream:
                if chunk.text:
                    yield chunk.text
                    accumulated_text += chunk.text
            
            model_content = types.Content(
                role="model",
                parts=[types.Part(text=accumulated_text)]
            )
            self.history.append(model_content)

        except Exception as e:
            print(f"\n[Error during generation: {e}]")

def get_chat_response(session: SimpleChatSession, prompt: str):
    print(f"\n--- User: {prompt} ---")
    print("--- Model: ", end="")
    
    stream_generator = session.send_message(prompt)
    
    full_text = ""
    for chunk_text in stream_generator:
        full_text += chunk_text
        print(chunk_text, end="", flush=True)

    print() 
    return full_text

if __name__ == "__main__":
    chat_session = SimpleChatSession(MODEL_ID)

    get_chat_response(chat_session, "Hello.")
    get_chat_response(chat_session, "In one short sentence summarize what is a tokenizer in the context of AI?")
    get_chat_response(chat_session, "Are whales awesome or not?")
  1. מקישים על Enter פעמיים כדי להריץ את הפקודה ולראות את התוצאה.
  2. חוזרים למופע השני של VM Instance py-vm1. אמורה להופיע תוצאה של TCPDUMP. תשימו לב שהתעבורה נכנסת ויוצאת, וכתובת ה-IP של המכונה הווירטואלית משתמשת בכתובת ה-IP של נקודת הקצה של PSC כדי להתחבר אל aiplatform.googleapis.com

סגירת כל סשני ה-SSH למכונה הווירטואלית py-vm1

9. הסרת המשאבים

  1. עוברים אל Cloud Shell ומוודאים שאתם בספרייה terraform-build cd terraform-build
  2. מריצים את הפקודה terraform plan destroy כדי לראות את כל השינויים שיבוצעו.
terraform plan -destroy
  1. אחר כך מריצים את הפקודה terraform destroy, מקלידים yes וכל המשאבים שיצרתם בפרויקט באמצעות Terraform יוסרו.
terraform destroy 

10. מזל טוב

הצלחתם להתחבר ל-Vertex ולהשתמש ב-Gemini 3 Pro דרך כתובת API ציבורית ובאופן פרטי באמצעות נקודת קצה של Private Service Connect ל-Google APIs. הפונקציונליות הזו יכולה להרחיב את הקישוריות הפרטית של ה-API לסביבה המקומית או לסביבת ענן אחרת שמחוברת באמצעות (Interconnect, ‏ Cross-Cloud Interconnect ו-VPC).

השלבים הבאים / מידע נוסף

מידע נוסף על רשתות ב-Vertex AI

Codelab: גישה אל Anthropic Claude ב-Vertex AI באמצעות Python SDK דרך נקודת קצה של Private Service Connect

אל שיעור ה-Lab הבא

אתם יכולים להמשיך את יחידת ה-Quest ב-Google Cloud או לנסות את שיעורי ה-Lab הבאים של Google Cloud Skills Boost: