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

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

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

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

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

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

איור 1.

304c579d349aec90.png

2. מטרה

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

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

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

  1. נכנסים ל-Google Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון 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, סביבת שורת פקודה שפועלת ב-Cloud.

ב-Google Cloud Console, לוחצים על סמל 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. אחרי הטעינה, עוברים אל 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. מעתיקים ומדביקים את הטקסט הבא. הוא שואל את 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

כדי להפעיל קישוריות פרטית לנקודת הקצה של Vertex API, ניצור נקודת קצה של Private Service Connect לממשקי API של Google. כך נוכל להשתמש בכתובת 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, עם סוג אזור של ספריית שירותים. אפשר להשתמש בכתובת הזו כדי להתחבר לנקודת הקצה (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 את השאלות הבאות: "במשפט קצר אחד, מהו טוקנייזר בהקשר של AI?" ו "האם לווייתנים הם מדהימים או לא?".
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 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: