Truy cập vào cuộc trò chuyện với Gemini 3 Pro bằng python sdk thông qua điểm cuối Private Service Connect

1. Tổng quan

Bạn có thể truy cập vào Vertex AI API qua Internet. Tuy nhiên, trong doanh nghiệp của mình, bạn có thể muốn truy cập vào Vertex AI API một cách riêng tư mà không cần truy cập qua Internet. Trong phòng thí nghiệm này, trước tiên bạn sẽ.

  • Truy cập Gemini 3 Pro API thông qua Vertex bằng cách sử dụng python sdk
  • Thao tác này sẽ chạy trên một phiên bản máy ảo
  • Kết nối sẽ thông qua Cloud NAT đến Internet công cộng.

Sau đó, bạn sẽ tạo một điểm cuối Private Service Connect cho Google API và thay đổi luồng lưu lượng truy cập để sử dụng điểm cuối riêng tư nhằm kết nối với Gemini Chat API. Các cấu hình sẽ là sự kết hợp giữa Terraform, gcloud và bảng điều khiển.

Trong lớp học lập trình này, bạn sẽ tạo mẫu sau.

Hình 1.

304c579d349aec90.png

2. Mục tiêu

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách thực hiện nhiệm vụ sau:

  • Thiết lập phiên bản máy ảo để sử dụng python sdk
  • Kết nối với Gemini Chat thông qua tập lệnh Python
  • Định cấu hình điểm cuối PSC để kết nối với Googleapis
  • Xác minh đường dẫn kết nối đến Googleais
  • Định cấu hình các mục nhập DNS theo cách thủ công

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
  • Mã dự án là mã duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi chế độ này sau bước này và chế độ này sẽ duy trì trong suốt thời gian diễn ra dự án.
  • Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

Kích hoạt Cloud Shell

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

Ảnh chụp màn hình cửa sổ dòng lệnh Google Cloud Shell cho thấy môi trường đã kết nối

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.

3. Nhiệm vụ 1. Thiết lập môi trường bằng Terraform

Chúng ta sẽ tạo một VPC tuỳ chỉnh có các quy tắc về tường lửa và mạng con. Mở Cloud Console rồi chọn dự án mà bạn sẽ sử dụng.

  1. Mở Cloud Shell ở trên cùng bên phải của bảng điều khiển, đảm bảo bạn thấy mã dự án chính xác trong Cloud Shell, xác nhận mọi lời nhắc để cho phép truy cập. b51b80043d3bac90.png
  2. Tạo thư mục có tên là terraform-build và di chuyển đến thư mục
mkdir terraform-build  && cd terraform-build
  1. Tạo tệp main.tfvariable.tf.
touch main.tf variable.tf 
  1. Chuyển sang chế độ xem trình chỉnh sửa Cloud Shell. Chọn trình chỉnh sửa, đảm bảo bạn cho phép mọi lời nhắc cần thiết để giao diện có thể tải.
  2. Sau khi tải, hãy chuyển đến File > Open Folder (Tệp > Mở thư mục) rồi chuyển đến /home/your-user-name/terraform-build và chọn Ok (Được) để mở thư mục trong trình chỉnh sửa. 39b3eb9a3e077bfd.png
  3. Chọn tệp variable.tf rồi thêm nội dung sau. Thay thế văn bản your-project-id-here bằng mã dự án thực tế của bạn trong dấu ngoặc kép
variable "project_id" {
  type = string
  default = "your-project-id-here"
}

variable "network_id" {
  type = string
  default = "python-net"
}
  1. Tiếp theo, hãy mở tệp main.tf. Chúng ta sẽ thêm một số mã terraform để thực hiện nhiều thao tác như giải thích bên dưới.

Bật API

resource "google_project_service" "default"

Tạo VPC có tên là python-net

resource "google_compute_network" "default"

Thêm mạng con

resource "google_compute_subnetwork" "default"

Thêm hai quy tắc Tường lửa

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

  1. Sao chép và dán nội dung sau vào tệp 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. Chuyển về cửa sổ dòng lệnh Cloud Shell, đảm bảo bạn đang ở trong thư mục terraform-build cd terraform-build rồi chạy các lệnh sau

terraform init

Khởi chạy thư mục đang hoạt động. Bước này sẽ tải các nhà cung cấp cần thiết cho cấu hình đã cho xuống.

terraform plan

Tạo một kế hoạch thực thi, cho biết những hành động mà Terraform sẽ thực hiện để triển khai cơ sở hạ tầng của bạn.

  1. Bây giờ, để tạo tài nguyên, hãy chạy lệnh terraform apply và nhập yes để chạy.

4. Nhiệm vụ 2. Tạo cổng NAT và máy ảo bằng Terraform

Chúng ta cần cấp quyền truy cập từ bên ngoài vào Internet, vì vậy, hãy tạo một cổng Cloud NAT và đính kèm cổng đó.

  1. Mở Cloud Shell, chuyển đến thư mục terraform-build và tạo các tệp sau (tổng cộng 3 tệp). Chúng ta sẽ chỉnh sửa các phần này sau.
touch nat-vm.tf psc.tf dns.tf
  1. Chuyển sang chế độ xem Trình chỉnh sửa Cloud Shell, chọn tệp nat-vm.tf rồi thêm mã Terraform sau. Thao tác này sẽ tạo một cổng NAT và 2 máy ảo.

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. Chuyển sang thiết bị đầu cuối Cloud Shell, đảm bảo bạn đang ở trong thư mục terraform-build và chạy terraform plan. Lệnh này sẽ cho bạn biết rằng 4 mục sẽ được thêm vào, sau đó chạy terraform apply và nhập yes để tạo cổng NAT và máy ảo.

5. Nhiệm vụ 3. Định cấu hình máy ảo và kiểm thử

  1. Chuyển đến các phiên bản máy ảo. Chọn vm bắt đầu bằng py-vm1. Chọn SSH.
  2. Sau khi bạn SSH vào py-vm1,hãy bật quyền truy cập vào thư mục gốc bằng cách nhập sudo -i
  3. Kích hoạt môi trường venv:
cd py-gem-env
source env/bin/activate
  1. Bây giờ, hãy xác thực điều này để thực hiện một số kiểm thử sau. Chạy lệnh sau trong máy ảo, nhấn y khi được nhắc.
gcloud auth application-default login
  1. Tiếp theo, hãy sao chép URL xuất hiện ở phần bắt đầu bằng https://, mở một thẻ mới trong cửa sổ trình duyệt phòng thí nghiệm rồi dán URL đó. Chấp nhận lời nhắc.
  2. Khi bạn thấy nội dung sau, hãy chọn sao chép, chuyển về phiên py-vm1 của máy ảo và dán mã bạn đã sao chép vào phần Nhập mã uỷ quyền: rồi nhấn phím Enter để xác thực.

b703db7aa2aa286a.png

  1. Bây giờ, hãy thực hiện một kiểm thử nhanh để xem chúng ta có thể kết nối với Vertex API hay không. Thao tác này sử dụng *-aiplatform.googleapis.com nên chúng ta sẽ thực hiện dig đến địa chỉ đó để xem lưu lượng truy cập được định tuyến như thế nào.
dig *-aiplatform.googleapis.com
  1. Bạn sẽ thấy nội dung tương tự (địa chỉ sẽ khác). Xin lưu ý rằng đường dẫn này là thông qua địa chỉ IP công khai vì API này là một API công khai. KHÔNG SAO CHÉP
; <<>> 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. Bây giờ, hãy sử dụng Python. Nhập ipython để kích hoạt giao diện ipython.
ipython

845ef4291429888a.png

  1. Bây giờ, hãy sao chép và dán nội dung sau. Câu hỏi này yêu cầu Gemini trả lời "Google có những màu nào trong logo" và "Bầu trời có màu gì" .
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. Nhấn Enter hai lần để chạy và xem kết quả.
  2. Yêu cầu này truy cập vào Vertex thông qua API công khai.
  3. Đóng phiên SSH để tiếp tục.

6. Nhiệm vụ 4. Tạo điểm cuối PSC cho googleapis bằng Terraform

Để bật kết nối riêng tư đến điểm cuối Vertex API, chúng ta sẽ tạo một điểm cuối Kết nối dịch vụ riêng tư cho các API của Google. Điều này sẽ cho phép chúng ta sử dụng một địa chỉ IP riêng tư mà chúng ta chỉ định để định tuyến lưu lượng truy cập đến các API của Google mà chúng ta cần, trong trường hợp này là Vertex.

  1. Mở Cloud Shell ở chế độ xem trình chỉnh sửa nếu chưa mở. Chúng ta sẽ tạo các thành phần sau:
  • Tạo một IP cho điểm cuối PSC 192.168.255.250 (resource "google_compute_global_address" "default")
  • Tạo một điểm cuối PSC cho các API của Google (resource "google_compute_global_forwarding_rule" "default")

Mở tệp psc.tf trong thư mục terraform-build. Thêm đoạn mã sau vào tệp.

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. Chuyển sang thiết bị đầu cuối Cloud Shell, đảm bảo bạn đang ở trong thư mục terraform-build. Sau đó, hãy chạy terraform init Sau đó, hãy chạy terraform plan thao tác này sẽ cho bạn thấy rằng 2 mục sẽ được thêm,
    sau đó chạy terraform apply và nhập yes để tạo điểm cuối API IP và PSC của Google.
  2. Xác minh điểm cuối tồn tại
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global

7. Nhiệm vụ 5. Tạo mục DNS thủ công cho googleapis bằng Terraform

Bạn có thể tạo một mục nhập DNS theo cách thủ công để trỏ đến điểm cuối PSC bằng DNS riêng tư. Điều này sẽ ảnh hưởng đến tất cả các mạng mà bạn chỉ định cho chiến dịch.

  1. Chuyển đến mục Network services (Dịch vụ mạng) rồi chọn Cloud DNS.
  2. Trong các vùng, bạn sẽ thấy một vùng được tạo tự động cho Private Service Connect cho Google API, với thư mục dịch vụ loại vùng. Bạn có thể dùng thông tin này để kết nối với điểm cuối PSC theo định dạng **SERVICE-ENDPOINT.p.googleapis.com Ví dụ: aiplatform-pscvertexgemini.p.googleapis.com
  3. Trong trường hợp này, chúng ta muốn tạo một mục DNS riêng theo cách thủ công. Cấu hình sẽ có dạng như sau
  • Tạo một vùng DNS riêng tư có tên là "googleapis-private" cho "googleapis.com" và hạn chế vùng này đối với mạng "python-net".
  • Thêm một bản ghi A để liên kết "googleapis.com" với địa chỉ IP "192.168.255.250".
  • Thêm một bản ghi CNAME để chuyển hướng tất cả miền phụ của "googleapis.com" (ví dụ: www.googleapis.com) đến "googleapis.com".
  1. Mở Cloud Shell ở chế độ xem trình chỉnh sửa nếu chưa mở. Mở tệp dns.tf trong thư mục terraform-build. Thêm đoạn mã sau vào tệp.

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. Chuyển sang thiết bị đầu cuối Cloud Shell, đảm bảo bạn đang ở trong thư mục terraform-build. Sau đó, hãy chạy terraform plan. Lệnh này sẽ cho bạn biết những mục sẽ được thêm,
    Sau đó, hãy chạy terraform apply và nhập yes để tạo mục DNS riêng tư.
  2. Bạn sẽ thấy một chế độ thiết lập có bản ghi ACNAME như thế này, hãy xem 6d2fc061460cd983.png
  3. Tiếp theo, chúng ta sẽ xác minh khả năng kết nối với những thay đổi này trên py-vm1

8. Nhiệm vụ 6. Xác minh khả năng kết nối điểm cuối thông qua địa chỉ IP

Hãy kết nối bằng điểm cuối riêng tư để kết nối với Gemini.

  1. Chuyển đến phiên bản máy ảo py-vm1. Chọn SSH và SSH vào VM
  2. Có quyền truy cập vào thư mục gốc bằng cách nhập sudo -i
  3. Kiểm tra đường dẫn kết nối đến aiplatform.googleapis.com bằng lệnh ping. Lệnh này sẽ ping địa chỉ IP trong DNS riêng, bản ghi A cho googleapis. IP này là một điểm cuối PSC và các lệnh ping của bạn sẽ không thành công.
ping -c 2 aiplatform.googleapis.com
  1. Kiểm tra đường kết nối bằng ping bằng cách sử dụng mục DNS được tạo tự động cho các API của Google PSC bằng aiplatform-pscvertexgemini.p.googleapis.com. Điều này chỉ đến địa chỉ IP của điểm cuối PSC và các ping của bạn sẽ không thành công.
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
  1. Kiểm tra đường dẫn kết nối đến aiplatform.googleapis.com bằng lệnh dig. Đây phải là địa chỉ IP của điểm cuối PSC.
dig aiplatform.googleapis.com
  1. Quay lại bảng điều khiển và mở một phiên bản khác của VM Instance py-vm1. Chọn SSH rồi SSH vào máy ảo
  2. Có quyền truy cập vào thư mục gốc bằng cách nhập sudo -i
  3. Chạy lệnh sau để xem khả năng kết nối trong một bản kết xuất TCP
sudo tcpdump -i any port 53 -n or host aiplatform.googleapis.com
  1. Bây giờ, hãy chuyển về phiên bản SSH đầu tiên của VM Instance py-vm1
  2. Kích hoạt env bằng cách sử dụng
cd py-gem-env
source env/bin/activate
  1. Bây giờ, hãy kiểm thử Python. Nhập ipython để kích hoạt giao diện ipython.
ipython
  1. Bây giờ, hãy sao chép và dán nội dung sau. Câu lệnh này yêu cầu Gemini trả lời câu hỏi "Trong một câu ngắn, hãy tóm tắt khái niệm về mã hoá từ trong bối cảnh của AI?" và "Cá voi có tuyệt vời hay không?".
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. Nhấn enter hai lần để chạy và xem kết quả.
  2. Chuyển lại sang phiên bản thứ hai của VM Instance py-vm1. Bạn sẽ thấy kết quả của TCPDUMP. Bạn sẽ thấy lưu lượng truy cập vào và ra, đồng thời địa chỉ IP của VM đang sử dụng địa chỉ IP điểm cuối PSC để kết nối với aiplatform.googleapis.com

Đóng tất cả các phiên SSH đến phiên bản máy ảo py-vm1

9. Dọn dẹp

  1. Chuyển đến Cloud Shell, đảm bảo bạn đang ở trong thư mục terraform-build cd terraform-build
  2. Chạy terraform plan destroy để xem tất cả các thay đổi sẽ được thực hiện
terraform plan -destroy
  1. Sau đó, hãy chạy lệnh terraform destroy rồi nhập yes. Tất cả tài nguyên bạn đã tạo trong dự án bằng Terraform sẽ bị xoá.
terraform destroy 

10. Xin chúc mừng

Xin chúc mừng! Bạn đã kết nối thành công với Vertex và sử dụng Gemini 3 Pro thông qua địa chỉ API công khai và riêng tư bằng cách sử dụng Điểm cuối Kết nối dịch vụ riêng tư cho các API của Google. Chức năng này có thể mở rộng khả năng kết nối API riêng tư vào môi trường tại chỗ/môi trường đám mây khác được kết nối thông qua (Interconnect, Cross-Cloud Interconnect và VPC).

Các bước tiếp theo / Tìm hiểu thêm

Bạn có thể đọc thêm về mạng Vertex AI

Lớp học lập trình: Truy cập Anthropic Claude trên Vertex AI bằng python sdk thông qua điểm cuối Private Service Connect

Tham gia phòng thí nghiệm tiếp theo

Tiếp tục hành trình khám phá của bạn với Google Cloud và xem các phòng thí nghiệm khác trên Google Cloud Skills Boost: