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
2. วัตถุประสงค์
ในบทนี้ คุณจะได้เรียนรู้วิธีทํางานต่อไปนี้
- ตั้งค่าอินสแตนซ์ VM เพื่อใช้ Python SDK
- เชื่อมต่อกับ Gemini Chat ผ่านสคริปต์ Python
- กําหนดค่าปลายทาง PSC เพื่อเชื่อมต่อกับ Googleapis
- ยืนยันเส้นทางการเชื่อมต่อกับ Googleais
- กำหนดค่ารายการ DNS ด้วยตนเอง
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะต้องไม่ซ้ำกันสำหรับโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าอุปกรณ์พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อนี้จะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้จะไม่เสียค่าใช้จ่ายมากนัก หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณก็ลบทรัพยากรที่สร้างไว้หรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่ม Cloud Shell
แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้
เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานบน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย
3. งานที่ 1 ตั้งค่าสภาพแวดล้อมด้วย Terraform
เราจะสร้าง VPC ที่กำหนดเองที่มีกฎไฟร์วอลล์และซับเน็ต เปิดคอนโซลระบบคลาวด์และเลือกโปรเจ็กต์ที่จะใช้
- เปิด Cloud Shell ที่ด้านบนของคอนโซลทางด้านขวา ตรวจสอบว่าคุณเห็นรหัสโปรเจ็กต์ที่ถูกต้องใน Cloud Shell ยืนยันข้อความแจ้งเพื่ออนุญาตให้เข้าถึง
- สร้างโฟลเดอร์ชื่อ terraform-build แล้วย้ายไปยังโฟลเดอร์
mkdir terraform-build && cd terraform-build
- สร้างไฟล์ main.tf และ variable.tf
touch main.tf variable.tf
- เปลี่ยนไปใช้มุมมองเครื่องมือแก้ไข Cloud Shell เลือก editor ตรวจสอบว่าคุณอนุญาตข้อความแจ้งที่จำเป็นเพื่อให้อินเทอร์เฟซโหลดได้
- เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /home/your-user-name/terraform-build แล้วเลือกตกลงเพื่อเปิดโฟลเดอร์ในเครื่องมือแก้ไข
- เลือกไฟล์ variable.tf แล้วเพิ่มข้อมูลต่อไปนี้ แทนที่ข้อความ
your-project-id-here
ด้วยรหัสโปรเจ็กต์จริงในเครื่องหมายคำพูด
variable "project_id" { type = string default = "your-project-id-here" } variable "network_id" { type = string default = "python-net" }
- จากนั้นเปิดไฟล์ main.tf เราจะเพิ่มโค้ด terraform บางส่วนเพื่อดำเนินการต่างๆ ตามที่อธิบายไว้ด้านล่าง
เปิดใช้ API |
|
สร้าง VPC ชื่อ python-net |
|
เพิ่มซับเน็ต |
|
เพิ่มกฎไฟร์วอลล์ 2 รายการ |
|
- คัดลอกและวางข้อมูลต่อไปนี้ลงในไฟล์ 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"] }
- กลับไปที่เทอร์มินัล Cloud Shell ตรวจสอบว่าคุณอยู่ในไดเรกทอรี terraform-build
cd terraform-build
แล้วเรียกใช้คำสั่งต่อไปนี้
terraform init
เริ่มต้นไดเรกทอรีที่ใช้งานอยู่ ขั้นตอนนี้จะดาวน์โหลดผู้ให้บริการที่จําเป็นสําหรับการกําหนดค่าที่ระบุ
terraform plan
สร้างแผนการดำเนินการ ซึ่งแสดงการดำเนินการที่ Terraform จะทำเพื่อทำให้โครงสร้างพื้นฐานใช้งานได้
- ตอนนี้ให้สร้างทรัพยากรโดยเรียกใช้คําสั่ง
terraform apply
แล้วพิมพ์yes
เพื่อเรียกใช้
4. งานที่ 2 สร้างเกตเวย์ NAT และ VM ด้วย Terraform
เราต้องให้สิทธิ์เข้าถึงอินเทอร์เน็ตขาออกจากภายนอก ดังนั้นให้สร้างเกตเวย์ Cloud NAT และแนบไว้
- เปิด Cloud Shell แล้วไปที่โฟลเดอร์ terraform-build จากนั้นสร้างไฟล์ต่อไปนี้ (รวม 3 ไฟล์) เราจะแก้ไขข้อมูลเหล่านี้ในภายหลัง
touch nat-vm.tf psc.tf dns.tf
- เปลี่ยนเป็นมุมมองเครื่องมือแก้ไข 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
}
- เปลี่ยนไปใช้ Cloud Shell Terminal ตรวจสอบว่าคุณอยู่ในโฟลเดอร์ terraform-build แล้วเรียกใช้
terraform plan
ซึ่งจะแสดงการเพิ่มรายการ 4 รายการ จากนั้นเรียกใช้terraform apply
แล้วพิมพ์yes
เพื่อสร้างเกตเวย์ NAT และ VM 2 เครื่อง
5. งานที่ 3 กำหนดค่า VM และทดสอบ
- ไปที่อินสแตนซ์ VM เลือก VM ที่ขึ้นต้นด้วย py-vm1 เลือก SSH
- เมื่อ SSH เข้าสู่ py-vm1 แล้ว ให้เปิดใช้รูทโดยพิมพ์
sudo -i
- เปิดใช้งานสภาพแวดล้อม venv โดยทำดังนี้
cd py-gem-env
source env/bin/activate
- ตอนนี้มาตรวจสอบสิทธิ์เพื่อทำการทดสอบกัน เรียกใช้คำสั่งต่อไปนี้ใน VM แล้วกด y เมื่อได้รับข้อความแจ้ง
gcloud auth application-default login
- จากนั้นคัดลอก URL ที่ปรากฏขึ้นโดยขึ้นต้นด้วย https:// เปิดแท็บใหม่ในหน้าต่างเบราว์เซอร์ของห้องทดลอง แล้ววาง URL ยอมรับข้อความแจ้ง
- เมื่อเห็นข้อความต่อไปนี้ ให้เลือก "คัดลอก" แล้วเปลี่ยนกลับไปที่เซสชัน vm py-vm1 และในส่วนป้อนรหัสการให้สิทธิ์: ให้วางรหัสที่คุณคัดลอกไว้แล้วกด Enter เพื่อตรวจสอบสิทธิ์
- ตอนนี้มาทําการทดสอบสั้นๆ เพื่อดูว่าเราเชื่อมต่อกับ Vertex Gemini API ได้ไหม ซึ่งจะใช้ us-central1-aiplatform.googleapis.com ดังนั้นเราจะทํา
dig
ไปยังที่อยู่ดังกล่าวเพื่อดูว่าเส้นทางการรับส่งข้อมูลเป็นอย่างไร
dig us-central1-aiplatform.googleapis.com
- คุณควรเห็นข้อมูลคล้ายกับในภาพ (ที่อยู่จะแตกต่างกัน) โปรดทราบว่าเส้นทางนี้ผ่านที่อยู่ 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
- ตอนนี้มาลองใช้ Python กัน พิมพ์
ipython
เพื่อเปิดใช้งานอินเทอร์เฟซ ipython
ipython
- ตอนนี้ให้คัดลอกและวางข้อมูลต่อไปนี้ ข้อความนี้ถาม 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))
- กด Enter เพื่อเรียกใช้และดูผลลัพธ์
- คําขอนี้เข้าถึง Vertex ผ่าน API สาธารณะ
- ปิดเซสชัน SSH แล้วมาดำเนินการต่อ
ตอนนี้กําหนดค่า py-vm2 ด้วยการกำหนดค่าเดียวกัน
- ไปที่อินสแตนซ์ VM เลือก VM ที่ขึ้นต้นด้วย py-vm2 เลือก SSH
- เมื่อ SSH เข้าสู่ py-vm2-**** ให้เปิดใช้รูทโดยพิมพ์ **
sudo -i
** - เปิดใช้งานสภาพแวดล้อม venv โดยทำดังนี้
cd py-gem-env
source env/bin/activate
- ตอนนี้มาตรวจสอบสิทธิ์เพื่อทำการทดสอบกัน เรียกใช้คำสั่งต่อไปนี้ใน VM
gcloud auth application-default login
- จากนั้นคัดลอก URL ที่ปรากฏขึ้นโดยขึ้นต้นด้วย https:// เปิดแท็บใหม่ในหน้าต่างเบราว์เซอร์ของห้องทดลอง แล้ววาง URL ยอมรับข้อความแจ้ง
- เมื่อเห็นข้อความต่อไปนี้ ให้เลือก "คัดลอก" แล้วกลับไปที่เซสชัน vm py-vm2 และสำหรับป้อนรหัสการให้สิทธิ์: ให้วางรหัสที่คุณคัดลอกไว้แล้วกด Enter เพื่อตรวจสอบสิทธิ์
- มาทดสอบกันอย่างรวดเร็วว่าเชื่อมต่อกับ Vertex Gemini API ได้ไหม คำสั่งนี้จะส่ง Ping ไปยัง us-central1-aiplatform.googleapis.com 4 ครั้งเพื่อให้เราได้รับการตอบกลับจากที่อยู่สาธารณะของ API
ping -c 4 us-central1-aiplatform.googleapis.com
- เราจะกลับมาทดสอบ VM นี้ในภายหลัง ปิดเซสชัน SSH แล้วมาดำเนินการต่อ
6. งานที่ 4 สร้างปลายทาง PSC ไปยัง googleapis ด้วย Terraform
เราจะสร้างปลายทาง Private Service Connect สำหรับ Google API เพื่อเปิดใช้การเชื่อมต่อส่วนตัวกับปลายทาง Vertex API ซึ่งจะช่วยให้เราใช้ที่อยู่ IP ส่วนตัวที่เรากำหนดเพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยัง Google API ที่ต้องการได้ ในกรณีนี้คือ Vertex
- เปิด 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 = ""
}
- สลับไปที่ Cloud Shell Terminal และตรวจสอบว่าคุณอยู่ในโฟลเดอร์
terraform-build
จากนั้นเรียกใช้terraform init
แล้วเรียกใช้terraform plan
ซึ่งจะแสดงการเพิ่มรายการ 2 รายการ
จากนั้นเรียกใช้terraform apply
แล้วพิมพ์yes
เพื่อสร้างปลายทาง IP และ PSC ของ Google APIs - ยืนยันว่าปลายทางมีอยู่
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global
7. งานที่ 5 ยืนยันการเชื่อมต่ออุปกรณ์ปลายทางผ่านที่อยู่ IP
มาเชื่อมต่อโดยใช้ปลายทางส่วนตัวเพื่อเชื่อมต่อกับ Gemini กัน
- ไปที่อินสแตนซ์ VM py-vm1 เลือก SSH และ SSH เข้าสู่ VM
- รับสิทธิ์เข้าถึงรูทโดยพิมพ์
sudo -i
- เราจะใช้อินสแตนซ์นี้เพื่อทดสอบปลายทาง PSC เท่านั้น ดังนั้นเราจะแก้ไขไฟล์โฮสต์ด้วยรายการต่อไปนี้
echo 192.168.255.250 us-central1-aiplatform.googleapis.com >> /etc/hosts
cat /etc/hosts
- ตรวจสอบเส้นทางการเชื่อมต่อไปยัง us-central1-aiplatform.googleapis.com โดยใช้คำสั่ง
ping
ซึ่งจะเป็นการ ping ที่อยู่ IP ที่คุณป้อนในไฟล์โฮสต์ นี่คือปลายทาง PSC และคุณจะทำการ ping ไม่สำเร็จ
ping -c 2 us-central1-aiplatform.googleapis.com
- กลับไปที่คอนโซลและเปิดอินสแตนซ์อื่นของอินสแตนซ์ VM py-vm1 เลือก SSH และ SSH เข้าสู่ VM
- รับสิทธิ์เข้าถึงรูทโดยพิมพ์
sudo -i
- เรียกใช้คำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อใน TCP dump
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
- ตอนนี้ให้เปลี่ยนกลับไปที่อินสแตนซ์ SSH แรกของอินสแตนซ์ VM py-vm1
- เปิดใช้งาน env โดยใช้
cd py-gem-env
source env/bin/activate
- มาทดสอบ Python กัน พิมพ์
ipython
เพื่อเปิดใช้งานอินเทอร์เฟซ ipython คราวนี้ การเข้าชมจะส่งผ่านปลายทาง PSC
ipython
- ตอนนี้ให้คัดลอกและวางข้อมูลต่อไปนี้ ข้อความนี้ถาม 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))
- กด Enter เพื่อเรียกใช้และดูผลลัพธ์
- กลับไปที่อินสแตนซ์ที่ 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
- ปิดเซสชัน SSH ทั้งหมดไปยังอินสแตนซ์ VM py-vm1
8. งานที่ 6 สร้างรายการ DNS ด้วยตนเองไปยัง googleapis ด้วย Terraform (ไม่บังคับ)
คุณสร้างรายการ DNS ด้วยตนเองเพื่อชี้ไปยังปลายทาง PSC ได้โดยใช้ DNS ส่วนตัว ซึ่งจะส่งผลต่อเครือข่ายทั้งหมดที่คุณกำหนดให้กับอุปกรณ์
- ไปที่บริการเครือข่ายและเลือก Cloud DNS
- ในโซน คุณควรเห็นโซนที่สร้างขึ้นโดยอัตโนมัติสำหรับ Private Service Connect สำหรับ Google API พร้อมไดเรกทอรีบริการประเภทโซน สามารถใช้เพื่อเชื่อมต่อกับปลายทาง PSC โดยใช้รูปแบบ **SERVICE-ENDPOINT.p.googleapis.com ตัวอย่างเช่น
aiplatform-pscvertexgemini.p.googleapis.com
- ในกรณีนี้ เราต้องการสร้างรายการ DNS ส่วนตัวด้วยตนเอง การกําหนดค่าจะเป็นดังนี้
- สร้างโซน DNS ส่วนตัวชื่อ "googleapis-private" สําหรับ "googleapis.com" และจํากัดให้ใช้เฉพาะเครือข่าย "python-net"
- เพิ่มระเบียน A เพื่อแมป "googleapis.com" กับที่อยู่ IP "192.168.255.250"
- เพิ่มระเบียน CNAME เพื่อเปลี่ยนเส้นทางโดเมนย่อยทั้งหมดของ "googleapis.com" (เช่น www.googleapis.com) ไปยัง "googleapis.com"
- เปิด 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."]
}
- สลับไปที่ Cloud Shell Terminal และตรวจสอบว่าคุณอยู่ในโฟลเดอร์
terraform-build
จากนั้นเรียกใช้terraform plan
ซึ่งจะแสดงรายการที่จะเพิ่ม
จากนั้นเรียกใช้terraform apply
แล้วพิมพ์yes
เพื่อสร้างรายการ DNS ส่วนตัว - คุณควรเห็นการตั้งค่าที่มีระเบียน A และ CNAME ดังตัวอย่างนี้ โปรดดู
- ต่อไปเราจะยืนยันการเชื่อมต่อกับการเปลี่ยนแปลงเหล่านี้ใน py-vm2
9. งานที่ 7 ยืนยันการเชื่อมต่ออุปกรณ์ปลายทางผ่านที่อยู่ IP (ไม่บังคับ)
มาเชื่อมต่อโดยใช้ปลายทางส่วนตัวเพื่อเชื่อมต่อกับ Gemini กัน
- ไปที่อินสแตนซ์ VM py-vm2 เลือก SSH และ SSH เข้าสู่ VM
- รับสิทธิ์เข้าถึงรูทโดยพิมพ์
sudo -i
- ตรวจสอบเส้นทางการเชื่อมต่อไปยัง us-central1-aiplatform.googleapis.com โดยใช้คำสั่ง
ping
ซึ่งจะ ping ที่อยู่ IP ใน DNS ส่วนตัว ซึ่งเป็นระเบียน A สำหรับ googleapis IP นี้เป็นปลายทาง PSC และคุณจะทำการ ping ไม่สำเร็จ
ping -c 2 us-central1-aiplatform.googleapis.com
- ตรวจสอบเส้นทางการเชื่อมต่อด้วย
ping
โดยใช้รายการ DNS ที่สร้างขึ้นโดยอัตโนมัติสําหรับ PSC Google APIs ด้วยaiplatform-pscvertexgemini.p.googleapis.com
ซึ่งจะชี้ไปยังที่อยู่ IP ของปลายทาง PSC และคุณจะทำการ ping ไม่สำเร็จ
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
- ตรวจสอบเส้นทางการเชื่อมต่อไปยัง us-central1-aiplatform.googleapis.com โดยใช้คำสั่ง
dig
ซึ่งควรเป็นที่อยู่ IP ของปลายทาง PSC
dig us-central1-aiplatform.googleapis.com
- กลับไปที่คอนโซลและเปิดอินสแตนซ์อื่นของอินสแตนซ์ VM py-vm2 เลือก SSH และ SSH เข้าสู่ VM
- รับสิทธิ์เข้าถึงรูทโดยพิมพ์
sudo -i
- เรียกใช้คำสั่งต่อไปนี้เพื่อดูการเชื่อมต่อในการดัมพ์ TCP
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
- ตอนนี้ให้เปลี่ยนกลับไปที่อินสแตนซ์ SSH แรกของอินสแตนซ์ VM py-vm2
- เปิดใช้งาน env โดยใช้
cd py-gem-env
source env/bin/activate
- มาทดสอบ Python กัน พิมพ์
ipython
เพื่อเปิดใช้งานอินเทอร์เฟซ ipython
ipython
- ตอนนี้ให้คัดลอกและวางข้อมูลต่อไปนี้ คำถามนี้ถาม 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))
- กด Enter เพื่อเรียกใช้และดูผลลัพธ์
- กลับไปที่อินสแตนซ์ที่ 2 ของอินสแตนซ์ VM py-vm2 คุณควรเห็นผลลัพธ์ของ TCPDUMP คุณจะเห็นข้อมูลขาเข้าและขาออก และที่อยู่ IP ของ VM จะใช้ที่อยู่ IP ของปลายทาง PSC เพื่อเชื่อมต่อกับ us-central1-aiplatform.googleapis.com
ปิดเซสชัน SSH ทั้งหมดไปยังอินสแตนซ์ VM py-vm2
10. ล้าง
- ไปที่ 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 อื่นๆ เหล่านี้