1. ภาพรวม
Vertex AI API เข้าถึงได้ผ่านอินเทอร์เน็ต แต่ในองค์กร คุณอาจต้องการเข้าถึง Vertex AI API แบบส่วนตัวโดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต ในห้องทดลองนี้ คุณจะต้องเข้าถึง Vertex Gemini Chat API ผ่าน SDK ของ Python ที่ทำงานบนอินสแตนซ์ 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 Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่สนใจก็ได้ว่านี่คืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็อาจสร้างรหัสแบบสุ่มขึ้นมาอีกรหัส หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้ใช้งานหรือไม่ คุณจะเปลี่ยนแปลงหลังจากขั้นตอนนี้ไม่ได้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การทำตามโค้ดแล็บนี้จะไม่เสียค่าใช้จ่ายมากนัก หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่นอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า $300 USD
เริ่ม Cloud Shell
แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร
3. งาน 1 ตั้งค่าสภาพแวดล้อมด้วย Terraform
เราจะสร้าง VPC ที่กำหนดเองที่มีกฎไฟร์วอลล์และซับเน็ต เปิด Cloud Console แล้วเลือกโปรเจ็กต์ที่จะใช้
- เปิด Cloud Shell ที่ด้านบนของคอนโซลทางด้านขวา ตรวจสอบว่าคุณเห็นรหัสโปรเจ็กต์ที่ถูกต้องใน Cloud Shell ยืนยันข้อความแจ้งเพื่ออนุญาตให้เข้าถึง
- สร้างโฟลเดอร์ชื่อ terraform-build แล้วย้ายไปยังโฟลเดอร์
mkdir terraform-build && cd terraform-build
- สร้างไฟล์ main.tf และ variable.tf
touch main.tf variable.tf
- เปลี่ยนไปใช้มุมมองตัวแก้ไข Cloud Shell เลือกตัวแก้ไขและตรวจสอบว่าได้อนุญาตข้อความแจ้งที่จำเป็นเพื่อให้โหลดอินเทอร์เฟซได้
- เมื่อโหลดแล้ว ให้ไปที่ไฟล์ > เปิดโฟลเดอร์ แล้วไปที่ /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 รายการ |
|
- คัดลอกและวางตัวอย่างต่อไปนี้ลงในไฟล์ .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 ด้วย terform
เราจำเป็นต้องให้สิทธิ์เข้าถึงอินเทอร์เน็ตจากภายนอกแก่บุคคลภายนอก ลองสร้างเกตเวย์ 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 จากนั้นตรวจสอบว่าอยู่ในโฟลเดอร์ 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 ยอมรับข้อความแจ้ง
- เมื่อพบข้อความต่อไปนี้ ให้เลือกคัดลอก ให้เปลี่ยนกลับไปใช้เซสชัน py-vm1 ของ VM และสำหรับการป้อนรหัสการให้สิทธิ์ ให้วางรหัสที่คุณคัดลอกและกด 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 ยอมรับข้อความแจ้ง
- เมื่อเห็นตัวเลือกดังต่อไปนี้ ให้เลือกคัดลอก ให้เปลี่ยนกลับไปใช้เซสชัน py-vm2 ของ VM และสำหรับการป้อนรหัสการให้สิทธิ์ ให้วางรหัสที่คุณคัดลอกและกด Enter เพื่อตรวจสอบสิทธิ์
- มาทดสอบกันอย่างรวดเร็วเพื่อดูว่าเราเชื่อมต่อกับ Vertex Gemini API ได้ไหม คำสั่งนี้จะใช้คำสั่ง ping 4 คำสั่งไปยัง us-central1-aiplatform.googleapis.com เราจึงจะได้รับการตอบกลับจากที่อยู่สาธารณะของ API
ping -c 4 us-central1-aiplatform.googleapis.com
- เราจะกลับมาทดสอบ VM นี้ในภายหลัง ปิดเซสชัน SSH แล้วดำเนินการต่อ
6. งานที่ 4 สร้างปลายทาง PSC ไปยัง googleapis ด้วย Terraform
หากต้องการเปิดใช้การเชื่อมต่อส่วนตัวกับปลายทาง Vertex API ของเรา เราจะสร้างปลายทาง Private Service Connect สำหรับ Google APIs วิธีนี้จะช่วยให้เราใช้ที่อยู่ IP ส่วนตัวที่เรากำหนดเพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยัง Google API ที่เราต้องการ ซึ่งในกรณีนี้ Vertex
- เปิด 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 = ""
}
- สลับไปที่ Cloud Shell Terminal และตรวจสอบว่าคุณอยู่ในโฟลเดอร์
terraform-build
จากนั้นเรียกใช้terraform init
จากนั้นเรียกใช้terraform plan
เพื่อแสดงให้เห็นว่าระบบจะเพิ่ม 2 รายการ
จากนั้นเรียกใช้terraform apply
และพิมพ์yes
เพื่อสร้างปลายทาง Google APIs และ IP และ PSC - ยืนยันว่ามีปลายทางอยู่
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 APIs พร้อมกับไดเรกทอรีบริการประเภทโซน ซึ่งสามารถใช้เพื่อเชื่อมต่อกับปลายทาง 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 ที่มี SDK ของ Python ผ่านปลายทาง Private Service Connect
เข้ารับการทดสอบครั้งถัดไป
ทำภารกิจต่อด้วย Google Cloud และดูห้องทดลอง Google Cloud Skills Boost อื่นๆ ต่อไปนี้