גישה ל-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 APIs, ותשנו את זרימת התנועה כך שתשתמש בנקודת הקצה הפרטית כדי להתחבר ל-Gemini Chat API. ההגדרות יהיו שילוב של Terraform, ‏ gcloud והמסוף.

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

איור 1.

304c579d349aec90.png

2. מטרה

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

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

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

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

295004821bab6a87.png37d264871000675d.png96d86d3d5655cdbe.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 Console ובוחרים את הפרויקט שבו רוצים להשתמש.

  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. אחרי הטעינה, עוברים אל File > Open Folder (קובץ > פתיחת תיקייה), אל /home/your-user-name/terraform-build ובוחרים באפשרות Ok (אישור) כדי לפתוח את התיקייה בעורך. 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. אחרי שמתחברים ל-py-vm1 באמצעות SSH,מקלידים 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. הבדיקה הזו משתמשת בכתובת *-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. מעתיקים ומדביקים את הטקסט הבא. ההנחיות הן "What are all the colors of the Google logo" (מהם כל הצבעים של הלוגו של Google) ו-"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 ואז את הפקודה terraform plan כדי לראות שיתווספו 2 פריטים,
    ואז מריצים את הפקודה 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 ידנית כדי להפנות לנקודת הקצה (endpoint) של PSC באמצעות שרת DNS פרטי. השינוי ישפיע על כל הרשתות שמשויכות אליו.

  1. עוברים אל Network services (שירותי רשת) ובוחרים באפשרות Cloud DNS.
  2. באזורים, אמור להופיע אזור שנוצר אוטומטית עבור Private Service Connect ל-Google APIs, עם סוג אזור של ספריית שירותים. אפשר להשתמש בכתובת הזו כדי להתחבר לנקודת הקצה (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. כדי לקבל גישת רוט, מקלידים 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. כדי לקבל גישת רוט, מקלידים 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 ציבורית ובאופן פרטי באמצעות נקודת קצה (endpoint) של Private Service Connect לממשקי Google APIs. הפונקציונליות הזו יכולה להרחיב את הקישוריות הפרטית של ה-API לסביבה המקומית או לסביבת ענן אחרת שמחוברת באמצעות (Interconnect, ‏ Cross-Cloud Interconnect ו-VPC).

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

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

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

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

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