เข้าถึง Gemini Chat ด้วย Python SDK ผ่านปลายทาง Private Service Connect

เข้าถึง Gemini Chat ด้วย Python SDK ผ่านปลายทาง Private Service Connect

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ต.ค. 29, 2024
account_circleเขียนโดย Ammett Williams & Sampath Kumar Maddula

1 ภาพรวม

Vertex AI API สามารถเข้าถึงได้ผ่านอินเทอร์เน็ต แต่คุณอาจต้องการเข้าถึง Vertex AI API แบบส่วนตัวในองค์กรโดยไม่ต้องผ่านอินเทอร์เน็ต ในชั้นเรียนนี้ คุณจะเข้าถึง Vertex Gemini Chat API ผ่าน Python SDK ที่ทำงานบนอินสแตนซ์ VM ผ่านอินเทอร์เน็ตสาธารณะก่อน

จากนั้นคุณจะสร้างปลายทาง Private Service Connect ไปยัง Google API และเปลี่ยนเส้นทางการรับส่งข้อมูลให้ใช้ปลายทางส่วนตัวเพื่อเชื่อมต่อกับ Gemini Chat API การกําหนดค่าจะรวม Terraform, gcloud และคอนโซล

ในชั้นเรียนนี้ คุณจะได้สร้างรูปแบบต่อไปนี้

รูปที่ 1

8b283cc5684283c2.png

2 วัตถุประสงค์

ในบทนี้ คุณจะได้เรียนรู้วิธีทํางานต่อไปนี้

  • ตั้งค่าอินสแตนซ์ VM เพื่อใช้ Python SDK
  • เชื่อมต่อกับ Gemini Chat ผ่านสคริปต์ Python
  • กําหนดค่าปลายทาง PSC เพื่อเชื่อมต่อกับ Googleapis
  • ยืนยันเส้นทางการเชื่อมต่อกับ Googleais
  • กำหนดค่ารายการ DNS ด้วยตนเอง

การตั้งค่าสภาพแวดล้อมด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะต้องไม่ซ้ำกันสำหรับโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ปกติจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าอุปกรณ์พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อนี้จะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้จะไม่เสียค่าใช้จ่ายมากนัก หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณก็ลบทรัพยากรที่สร้างไว้หรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่ม Cloud Shell

แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

55efc1aaa7a4d3ad.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้

7ffe5cbb04455448.png

เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานบน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย

3 งานที่ 1 ตั้งค่าสภาพแวดล้อมด้วย Terraform

เราจะสร้าง VPC ที่กำหนดเองที่มีกฎไฟร์วอลล์และซับเน็ต เปิดคอนโซลระบบคลาวด์และเลือกโปรเจ็กต์ที่จะใช้

  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 ตรวจสอบว่าคุณอนุญาตข้อความแจ้งที่จำเป็นเพื่อให้อินเทอร์เฟซโหลดได้
  2. เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/your-user-name/terraform-build แล้วเลือกตกลงเพื่อเปิดโฟลเดอร์ในเครื่องมือแก้ไข 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"

เพิ่มกฎไฟร์วอลล์ 2 รายการ

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

  1. คัดลอกและวางข้อมูลต่อไปนี้ลงในไฟล์ main .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 และ VM ด้วย Terraform

เราต้องให้สิทธิ์เข้าถึงอินเทอร์เน็ตขาออกจากภายนอก ดังนั้นให้สร้างเกตเวย์ Cloud NAT และแนบไว้

  1. เปิด Cloud Shell แล้วไปที่โฟลเดอร์ terraform-build จากนั้นสร้างไฟล์ต่อไปนี้ (รวม 3 ไฟล์) เราจะแก้ไขข้อมูลเหล่านี้ในภายหลัง
touch nat-vm.tf psc.tf dns.tf
  1. เปลี่ยนเป็นมุมมองเครื่องมือแก้ไข Cloud Shell แล้วเลือกไฟล์ nat-vm.tf แล้วเพิ่มโค้ด Terraform ต่อไปนี้ การดำเนินการนี้จะสร้างเกตเวย์ NAT และ VM 2 รายการ

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 Terminal ตรวจสอบว่าคุณอยู่ในโฟลเดอร์ terraform-build แล้วเรียกใช้ terraform plan ซึ่งจะแสดงการเพิ่มรายการ 4 รายการ จากนั้นเรียกใช้ terraform apply แล้วพิมพ์ yes เพื่อสร้างเกตเวย์ NAT และ VM 2 เครื่อง

5 งานที่ 3 กำหนดค่า VM และทดสอบ

  1. ไปที่อินสแตนซ์ VM เลือก VM ที่ขึ้นต้นด้วย py-vm1 เลือก SSH
  2. เมื่อ SSH เข้าสู่ py-vm1 แล้ว ให้เปิดใช้รูทโดยพิมพ์ sudo -i
  3. เปิดใช้งานสภาพแวดล้อม venv โดยทำดังนี้
cd py-gem-env
source env
/bin/activate
  1. ตอนนี้มาตรวจสอบสิทธิ์เพื่อทำการทดสอบกัน เรียกใช้คำสั่งต่อไปนี้ใน VM แล้วกด y เมื่อได้รับข้อความแจ้ง
gcloud auth application-default login
  1. จากนั้นคัดลอก URL ที่ปรากฏขึ้นโดยขึ้นต้นด้วย https:// เปิดแท็บใหม่ในหน้าต่างเบราว์เซอร์ของห้องทดลอง แล้ววาง URL ยอมรับข้อความแจ้ง
  2. เมื่อเห็นข้อความต่อไปนี้ ให้เลือก "คัดลอก" แล้วเปลี่ยนกลับไปที่เซสชัน vm py-vm1 และในส่วนป้อนรหัสการให้สิทธิ์: ให้วางรหัสที่คุณคัดลอกไว้แล้วกด 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. เมื่อ SSH เข้าสู่ py-vm2-**** ให้เปิดใช้รูทโดยพิมพ์ **sudo -i**
  3. เปิดใช้งานสภาพแวดล้อม venv โดยทำดังนี้
cd py-gem-env
source env
/bin/activate
  1. ตอนนี้มาตรวจสอบสิทธิ์เพื่อทำการทดสอบกัน เรียกใช้คำสั่งต่อไปนี้ใน VM
gcloud auth application-default login
  1. จากนั้นคัดลอก URL ที่ปรากฏขึ้นโดยขึ้นต้นด้วย https:// เปิดแท็บใหม่ในหน้าต่างเบราว์เซอร์ของห้องทดลอง แล้ววาง URL ยอมรับข้อความแจ้ง
  2. เมื่อเห็นข้อความต่อไปนี้ ให้เลือก "คัดลอก" แล้วกลับไปที่เซสชัน vm py-vm2 และสำหรับป้อนรหัสการให้สิทธิ์: ให้วางรหัสที่คุณคัดลอกไว้แล้วกด Enter เพื่อตรวจสอบสิทธิ์

c29615cdf9324209.png

  1. มาทดสอบกันอย่างรวดเร็วว่าเชื่อมต่อกับ Vertex Gemini API ได้ไหม คำสั่งนี้จะส่ง Ping ไปยัง us-central1-aiplatform.googleapis.com 4 ครั้งเพื่อให้เราได้รับการตอบกลับจากที่อยู่สาธารณะของ API
ping -c 4 us-central1-aiplatform.googleapis.com
  1. เราจะกลับมาทดสอบ VM นี้ในภายหลัง ปิดเซสชัน SSH แล้วมาดำเนินการต่อ

6 งานที่ 4 สร้างปลายทาง PSC ไปยัง googleapis ด้วย Terraform

เราจะสร้างปลายทาง Private Service Connect สำหรับ Google API เพื่อเปิดใช้การเชื่อมต่อส่วนตัวกับปลายทาง Vertex API ซึ่งจะช่วยให้เราใช้ที่อยู่ IP ส่วนตัวที่เรากำหนดเพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยัง Google API ที่ต้องการได้ ในกรณีนี้คือ Vertex

  1. เปิด Cloud Shell ในมุมมองเครื่องมือแก้ไขหากยังไม่ได้เปิด เราจะสร้างสิ่งต่อไปนี้
  • สร้าง IP สำหรับปลายทาง PSC 192.168.255.250 (resource "google_compute_global_address" "default")
  • สร้างปลายทาง PSC ไปยัง Google API (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 Terminal และตรวจสอบว่าคุณอยู่ในโฟลเดอร์ terraform-build จากนั้นเรียกใช้ terraform init แล้วเรียกใช้ terraform plan ซึ่งจะแสดงการเพิ่มรายการ 2 รายการ
    จากนั้นเรียกใช้ terraform apply แล้วพิมพ์ yes เพื่อสร้างปลายทาง IP และ PSC ของ Google APIs
  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. รับสิทธิ์เข้าถึงรูทโดยพิมพ์ 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 ที่คุณป้อนในไฟล์โฮสต์ นี่คือปลายทาง PSC และคุณจะทำการ ping ไม่สำเร็จ
ping -c 2 us-central1-aiplatform.googleapis.com
  1. กลับไปที่คอนโซลและเปิดอินสแตนซ์อื่นของอินสแตนซ์ VM py-vm1 เลือก SSH และ SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงรูทโดยพิมพ์ sudo -i
  3. เรียกใช้คำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อใน TCP dump
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
  1. ตอนนี้ให้เปลี่ยนกลับไปที่อินสแตนซ์ SSH แรกของอินสแตนซ์ VM py-vm1
  2. เปิดใช้งาน env โดยใช้
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. กลับไปที่อินสแตนซ์ที่ 2 ของอินสแตนซ์ VM py-vm1 คุณควรเห็นผลลัพธ์ของ TCPDUMP คุณจะเห็นอินและเอาต์ที่มีที่อยู่ IP ของ VM และที่อยู่ 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 ทั้งหมดไปยังอินสแตนซ์ VM py-vm1

8 งานที่ 6 สร้างรายการ DNS ด้วยตนเองไปยัง googleapis ด้วย Terraform (ไม่บังคับ)

คุณสร้างรายการ DNS ด้วยตนเองเพื่อชี้ไปยังปลายทาง PSC ได้โดยใช้ DNS ส่วนตัว ซึ่งจะส่งผลต่อเครือข่ายทั้งหมดที่คุณกำหนดให้กับอุปกรณ์

  1. ไปที่บริการเครือข่ายและเลือก Cloud DNS
  2. ในโซน คุณควรเห็นโซนที่สร้างขึ้นโดยอัตโนมัติสำหรับ Private Service Connect สำหรับ Google API พร้อมไดเรกทอรีบริการประเภทโซน สามารถใช้เพื่อเชื่อมต่อกับปลายทาง 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 Terminal และตรวจสอบว่าคุณอยู่ในโฟลเดอร์ 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 และ SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงรูทโดยพิมพ์ sudo -i
  3. ตรวจสอบเส้นทางการเชื่อมต่อไปยัง us-central1-aiplatform.googleapis.com โดยใช้คำสั่ง ping ซึ่งจะ ping ที่อยู่ IP ใน DNS ส่วนตัว ซึ่งเป็นระเบียน A สำหรับ googleapis IP นี้เป็นปลายทาง PSC และคุณจะทำการ ping ไม่สำเร็จ
ping -c 2 us-central1-aiplatform.googleapis.com
  1. ตรวจสอบเส้นทางการเชื่อมต่อด้วย ping โดยใช้รายการ DNS ที่สร้างขึ้นโดยอัตโนมัติสําหรับ PSC Google APIs ด้วย aiplatform-pscvertexgemini.p.googleapis.com ซึ่งจะชี้ไปยังที่อยู่ IP ของปลายทาง PSC และคุณจะทำการ ping ไม่สำเร็จ
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
  1. ตรวจสอบเส้นทางการเชื่อมต่อไปยัง us-central1-aiplatform.googleapis.com โดยใช้คำสั่ง dig ซึ่งควรเป็นที่อยู่ IP ของปลายทาง PSC
dig us-central1-aiplatform.googleapis.com
  1. กลับไปที่คอนโซลและเปิดอินสแตนซ์อื่นของอินสแตนซ์ VM py-vm2 เลือก SSH และ SSH เข้าสู่ VM
  2. รับสิทธิ์เข้าถึงรูทโดยพิมพ์ sudo -i
  3. เรียกใช้คำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อในการดัมพ์ TCP
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
  1. ตอนนี้ให้เปลี่ยนกลับไปที่อินสแตนซ์ SSH แรกของอินสแตนซ์ VM py-vm2
  2. เปิดใช้งาน env โดยใช้
cd py-gem-env
source env
/bin/activate
  1. มาทดสอบ Python กัน พิมพ์ ipython เพื่อเปิดใช้งานอินเทอร์เฟซ ipython
ipython
  1. ตอนนี้ให้คัดลอกและวางข้อมูลต่อไปนี้ คำถามนี้ถาม Gemini ว่า "โลโก้ Google มีสีอะไรบ้าง" และ "ฟีเจอร์ 2 อย่างของ 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. กลับไปที่อินสแตนซ์ที่ 2 ของอินสแตนซ์ VM py-vm2 คุณควรเห็นผลลัพธ์ของ TCPDUMP คุณจะเห็นข้อมูลขาเข้าและขาออก และที่อยู่ IP ของ VM จะใช้ที่อยู่ IP ของปลายทาง PSC เพื่อเชื่อมต่อกับ us-central1-aiplatform.googleapis.com

ปิดเซสชัน SSH ทั้งหมดไปยังอินสแตนซ์ VM py-vm2

10 ล้าง

  1. ไปที่ Cloud Shell ตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-build cd terraform-build แล้วเรียกใช้คำสั่งต่อไปนี้ terraform destroy แล้วพิมพ์ yes ระบบจะนำทรัพยากรทั้งหมดที่คุณสร้างในโปรเจ็กต์ด้วย Terraform ออก

11 ขอแสดงความยินดี

ยินดีด้วย คุณได้เชื่อมต่อกับแชท Vertex Gemini โดยใช้ทั้งที่อยู่ API สาธารณะและแบบส่วนตัวโดยใช้ปลายทาง Private Service Connect สำหรับ Google API เรียบร้อยแล้ว ฟังก์ชันการทำงานนี้สามารถขยายการเชื่อมต่อ API ส่วนตัวไปยังสภาพแวดล้อมภายในองค์กร/ระบบคลาวด์อื่นๆ ที่เชื่อมต่อผ่าน (Interconnect, Cross-Cloud Interconnect และ VPC)

ขั้นตอนถัดไป / ดูข้อมูลเพิ่มเติม

อ่านข้อมูลเพิ่มเติมเกี่ยวกับเครือข่าย Vertex AI

Codelab: เข้าถึง Anthropic Claude ใน Vertex AI ด้วย Python SDK ผ่านปลายทาง Private Service Connect

เข้ารับการทดสอบครั้งถัดไป

ดำเนินการต่อในภารกิจของคุณกับ Google Cloud และดูห้องทดลอง Google Cloud Skills Boost อื่นๆ เหล่านี้