גישה לצ'אט של Gemini עם python sdk דרך נקודת קצה של Private Service Connect

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

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

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

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

איור 1.

8b283cc5684283c2.png

2. מטרה

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

הפעלת Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

3. משימה 1: הגדרת סביבת עם terraform

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

  1. פותחים את Cloud Shell, שנמצא בחלק העליון של המסוף בצד שמאל, מוודאים שמזהה הפרויקט הנכון מופיע ב-Cloud Shell, ומאשרים את כל ההנחיות כדי לאשר גישה. 4261e776f64ea978.png
  2. יוצרים תיקייה בשם terraform-build ומעבירים אותה לתיקייה
mkdir terraform-build  && cd terraform-build
  1. יוצרים קובץ main.tf ו-variable.tf.
touch main.tf variable.tf 
  1. עוברים לתצוגת Cloud Shell Editor. בוחרים באפשרות editor (עריכה) ומוודאים שמאשרים את כל ההנחיות הנדרשות כדי שהממשק יוכל לטעון.
  2. אחרי הטעינה, עוברים אל File > Open Folder (קובץ > פתיחת תיקייה) ועוברים אל /home/your-user-name/terraform-build ובוחרים באפשרות Ok (אישור) כדי לפתוח את התיקייה בעורך. 78f5eb9f2f82f1b0.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. מעתיקים את הקטע הבא ומדביקים אותו בקובץ ה- .tf הראשי.
resource "google_project_service" "default" {
  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"
  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

 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"
  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"

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

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

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

  metadata_startup_script = <<-EOF
    sudo apt-get update
    sudo apt-get install python3 python3-dev python3-venv -y
    sudo apt-get install tcpdump dnsutils -y
    sudo -i
    sudo mkdir -p ~/py-gem-env
    cd ~/py-gem-env
    python3 -m venv env
    source env/bin/activate
    pip install ipython google-cloud-aiplatform
  EOF
}

resource "google_compute_instance" "vm2" {
  name         = "py-vm2"
  zone         = "us-east1-b"
  machine_type = "n2-standard-2"

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

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

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

  metadata_startup_script = <<-EOF
    sudo apt-get update
    sudo apt-get install python3 python3-dev python3-venv -y
    sudo apt-get install tcpdump dnsutils -y
    sudo -i
    sudo mkdir -p ~/py-gem-env
    cd ~/py-gem-env
    python3 -m venv env
    source env/bin/activate
    pip install ipython google-cloud-aiplatform
  EOF
}
  1. עוברים לטרמינל של Cloud Shell, מוודאים שנמצאים בתיקייה terraform-build ומריצים את הפקודה terraform plan, ואז יוצג 4 פריטים ואז מריצים את הפקודה terraform apply ומקלידים yes כדי ליצור את השער NAT ושני VMs.

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

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

c29615cdf9324209.png

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

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

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.210.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.211.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.212.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.213.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.215.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.216.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.12.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.13.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.26.95
  1. עכשיו נשתמש ב-Python. מקלידים ipython כדי להפעיל את הממשק ipython.
ipython

4685b31f13df54e1.png

  1. עכשיו צריך להעתיק ולהדביק את הטקסט הבא. ההנחיה הזו שואלת את Gemini "מהם כל צבעי הלוגו של Google" ואת השאלה "מה צבע השמיים" . מחליפים את enter-your-project-id-here במזהה הפרויקט במירכאות
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

prompt = "What color is the sky?"
print(get_chat_response(chat_session, prompt))
  1. יש להקיש על Enter כדי להריץ אותו ולראות את התוצאה.
  2. הבקשה הזו ניגשה ל-Vertex דרך ה-API הציבורי.
  3. סוגרים את סשן SSH וממשיכים.

עכשיו צריך להגדיר את py-vm2 עם אותן הגדרות

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

c29615cdf9324209.png

  1. עכשיו נבצע בדיקה מהירה כדי לראות אם אנחנו יכולים להתחבר ל-Vertex Gemini API. הפקודה הזו תשתמש ב-4 פינגים אל us-central1-aiplatform.googleapis.com, כך שנקבל תשובה מהכתובת הציבורית של ה-API.
ping -c 4 us-central1-aiplatform.googleapis.com
  1. נמשיך לבדוק את ה-VM בהמשך. סוגרים את סשן ה-SSH וממשיכים.

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

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

  1. אם עדיין לא פותחים את Cloud Shell, פותחים אותו בתצוגת Editor. אנחנו ניצור את הפריטים הבאים:
  • יוצרים כתובת IP לנקודת הקצה של PSC‏ 192.168.255.250 (resource "google_compute_global_address" "default")
  • יצירת נקודת קצה (endpoint) של 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 כדי ליצור את נקודת הקצה (endpoint) של Google APIs ו-PSC.
  2. איך מוודאים שנקודת הקצה קיימת
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global

7. משימה 5: אימות הקישוריות של נקודת הקצה לפי כתובת IP

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

  1. נכנסים אל מכונת ה-VM py-vm1. בחירת SSH ו-SSH ב-VM
  2. קבלת גישה לרמה הבסיסית (root) באמצעות הקלדת sudo -i
  3. נשתמש במכונה הספציפית הזו רק כדי לבדוק את נקודת הקצה של PSC, לכן נשנה את קובץ המארח באמצעות הרשומה הבאה:
echo 192.168.255.250 us-central1-aiplatform.googleapis.com >> /etc/hosts

cat /etc/hosts
  1. בודקים את נתיב הקישוריות אל us-central1-aiplatform.googleapis.com באמצעות הפקודה ping. הפקודה תשלח הודעה (ping) לכתובת ה-IP שהזנתם בקובצי המארחים. זוהי נקודת קצה (endpoint) של PSC והפינגים שלך ייכשלו.
ping -c 2 us-central1-aiplatform.googleapis.com
  1. חוזרים למסוף ופותחים מכונה וירטואלית נוספת של py-vm1. בוחרים את האפשרויות SSH ו-SSH ב-VM.
  2. קבלת גישה לרמה הבסיסית (root) באמצעות הקלדת sudo -i
  3. מריצים את הפקודה הבאה כדי לראות את הקישוריות בקובץ נתונים של TCP
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
  1. עכשיו חוזרים למופע ה-SSH הראשון של מכונת ה-VM py-vm1
  2. מפעילים את הסביבה באמצעות
cd py-gem-env
source env/bin/activate
  1. עכשיו נבדוק את Python. מקלידים ipython כדי להפעיל את הממשק ipython. הפעם התנועה תעבור דרך נקודת הקצה של PSC.
ipython
  1. עכשיו צריך להעתיק ולהדביק את הטקסט הבא. כך שואלים את Gemini "מהם כל הצבעים של הלוגו של Google" וגם "תיאור של מפלי הניאגרה". מחליפים את enter-your-project-id-here במזהה הפרויקט בתוך המירכאות
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  # Corrected line

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

prompt = "Describe Niagara Falls"
print(get_chat_response(chat_session, prompt))
  1. מקישים על enter כדי להריץ את הפקודה ולראות את התוצאה.
  2. חוזרים למכונה הווירטואלית השנייה py-vm1. אתם אמורים לראות את התוצאה של ה-TCPDUMP. תוכלו לראות את הכניסה והיציאה באמצעות כתובות ה-IP של המכונה הווירטואלית וגם כתובת ה-IP של נקודת הקצה של PSC כדי להתחבר אל us-central1-aiplatform.googleapis.com
22:21:55.032433 ens4  Out IP 10.0.11.18.57114 > 192.168.255.250.443: Flags [.], ack 8606, win 501, options [nop,nop,TS val 1797790182 ecr 2593039209], length 0
22:21:55.468285 ens4  In  IP 192.168.255.250.443 > 10.0.11.18.57114: Flags [P.], seq 8606:8991, ack 5785, win 296, options [nop,nop,TS val 2593039645 ecr 1797790182], length 385
22:21:55.468320 ens4  Out IP 10.0.11.18.57114 > 192.168.255.250.443: Flags [.], ack 8991, win 501, options [nop,nop,TS val 1797790618 ecr 2593039645], length 0
  1. סגירת כל סשני ה-SSH למכונה הווירטואלית py-vm1

8. משימה 6: יצירת רשומת DNS ידנית ל-googleapis באמצעות Terraform (אופציונלי)

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

  1. עוברים אל 'שירותי רשת' ובוחרים ב-Cloud DNS.
  2. באזורים אמור להופיע אזור שנוצר באופן אוטומטי עבור Private Service Connect for 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, כמו בדוגמה הבאה: b7f122f0d1fd2850.png
  3. בשלב הבא נאמת את הקישוריות עם השינויים האלה ב-py-vm2

9. משימה 7: אימות הקישוריות של נקודת הקצה באמצעות כתובת IP (אופציונלי)

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

  1. נכנסים אל מכונת ה-VM py-vm2. בחירת SSH והתחברות ל-VM באמצעות SSH
  2. קבלת גישה לרמה הבסיסית (root) באמצעות הקלדת sudo -i
  3. בודקים את נתיב הקישוריות אל us-central1-aiplatform.googleapis.com באמצעות הפקודה ping. הפקודה הזו תשלח הודעה ל-ping לכתובת ה-IP ב-DNS הפרטי, רשומת A של googleapis. כתובת ה-IP הזו היא נקודת קצה (endpoint) של PSC והפינגים שלך ייכשלו.
ping -c 2 us-central1-aiplatform.googleapis.com
  1. בודקים את נתיב הקישוריות באמצעות ping באמצעות רשומת ה-DNS שנוצרה באופן אוטומטי עבור ממשקי Google API של PSC באמצעות aiplatform-pscvertexgemini.p.googleapis.com. הכתובת הזו מפנה לכתובת ה-IP של נקודת הקצה של PSC, והפינגים לא יצליחו.
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
  1. בודקים את נתיב הקישוריות אל us-central1-aiplatform.googleapis.com באמצעות הפקודה dig. זו צריכה להיות כתובת ה-IP של נקודת הקצה של PSC.
dig us-central1-aiplatform.googleapis.com
  1. חוזרים למסוף ופותחים מכונה וירטואלית נוספת, py-vm2. בוחרים את האפשרויות SSH ו-SSH ב-VM.
  2. כדי לקבל הרשאת root, מקלידים sudo -i
  3. מריצים את פקודת המעקב כדי לראות את הקישוריות בקובץ Dump של TCP
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
  1. עכשיו חוזרים למופע ה-SSH הראשון של מכונת ה-VM py-vm2
  2. מפעילים את הסביבה באמצעות
cd py-gem-env
source env/bin/activate
  1. עכשיו נבדוק את Python. מקלידים ipython כדי להפעיל את הממשק ipython.
ipython
  1. עכשיו צריך להעתיק ולהדביק את הטקסט הבא. הבקשה הזו מבקשת מ-Gemini לומר "מהם כל הצבעים של הלוגו של Google" וגם "מהן שתי התכונות של Gemini Pro". מחליפים את enter-your-project-id-here במזהה הפרויקט בתוך המירכאות
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  # Corrected line

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

prompt = "What are two features of Gemini pro"
print(get_chat_response(chat_session, prompt))
  1. מקישים על enter כדי להריץ את הפקודה ולראות את התוצאה.
  2. חוזרים למכונה הווירטואלית השנייה py-vm2. אמורה להופיע התוצאה של ה-TCPDUMP. תוכלו לראות את הכניסה פנימה והחוצה, וכתובת ה-IP של המכונה הווירטואלית משתמשת בכתובת ה-IP של נקודת הקצה של PSC כדי להתחבר אל us-central1-aiplatform.googleapis.com

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

10. ניקוי

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

11. מזל טוב

מזל טוב! התחברת בהצלחה לצ'אט של Vertex Gemini באמצעות כתובת API ציבורית וגם באמצעות Private Service Connect Endpoint ל-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: