دسترسی به چت Gemini 3 Pro با استفاده از python sdk از طریق نقطه پایانی Private Service Connect

۱. مرور کلی

می‌توان از طریق اینترنت به API هوش مصنوعی ورتکس دسترسی پیدا کرد، با این حال، ممکن است در شرکت خود بخواهید بدون نیاز به اینترنت و به صورت خصوصی به APIهای هوش مصنوعی ورتکس دسترسی داشته باشید. در این آزمایش ابتدا این کار را انجام خواهید داد.

  • دسترسی به API Gemini 3 Pro از طریق Vertex با استفاده از python sdk
  • این روی یک نمونه ماشین مجازی اجرا خواهد شد
  • اتصال از طریق Cloud NAT به اینترنت عمومی خواهد بود.

سپس یک نقطه پایانی Private Service Connect به API های گوگل ایجاد خواهید کرد و جریان ترافیک را طوری تغییر خواهید داد که از نقطه پایانی خصوصی برای اتصال به API چت Gemini استفاده کند. پیکربندی‌ها ترکیبی از Terraform، gcloud و console خواهند بود.

در این آزمایش، شما قرار است الگوی زیر را ایجاد کنید.

شکل ۱.

304c579d349aec90.png

۲. هدف

در این آزمایشگاه یاد خواهید گرفت که چگونه وظایف زیر را انجام دهید:

  • راه‌اندازی نمونه ماشین مجازی برای استفاده از python sdk
  • اتصال به چت جمینی از طریق اسکریپت پایتون
  • پیکربندی نقطه پایانی PSC برای اتصال به Googleapis
  • مسیر اتصال به Googleais را تأیید کنید
  • پیکربندی ورودی‌های DNS دستی

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

۲۹۵۰۰۴۸۲۱bab6a87.png

37d264871000675d.png

۹۶d86d3d5655cdbe.png

  • نام پروژه، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. شما همیشه می‌توانید آن را به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه خود را (که معمولاً با عنوان PROJECT_ID شناخته می‌شود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی می‌ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینه‌ای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

فعال کردن پوسته ابری

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

تصویر صفحه ترمینال Google Cloud Shell که نشان می‌دهد محیط متصل شده است

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۳. وظیفه ۱. راه‌اندازی محیط با Terraform

ما یک VPC سفارشی با قوانین فایروال و زیرشبکه ایجاد خواهیم کرد. کنسول ابری را باز کنید و پروژه‌ای را که استفاده خواهید کرد انتخاب کنید.

  1. Cloud Shell را که در بالای کنسول شما در سمت راست قرار دارد باز کنید، مطمئن شوید که شناسه پروژه صحیح را در Cloud Shell مشاهده می‌کنید، هرگونه درخواستی را برای اجازه دسترسی تأیید کنید. b51b80043d3bac90.png
  2. یک پوشه به نام terraform-build ایجاد کنید و به پوشه مورد نظر منتقل کنید.
mkdir terraform-build  && cd terraform-build
  1. یک فایل main.tf و یک فایل variable.tf ایجاد کنید.
touch main.tf variable.tf 
  1. به نمای ویرایشگر Cloud Shell بروید. ویرایشگر را انتخاب کنید، مطمئن شوید که هرگونه درخواست لازم را مجاز می‌دانید تا رابط کاربری بتواند بارگیری شود.
  2. پس از بارگذاری، به مسیر File > Open Folder بروید و به مسیر /home/your-user-name/terraform-build بروید و برای باز کردن پوشه در ویرایشگر، Ok را انتخاب کنید. 39b3eb9a3e077bfd.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" {
  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. به ترمینال Cloud Shell برگردید و مطمئن شوید که در دایرکتوری terraform-build هستید. cd terraform-build اجرا کنید و دستورات زیر را اجرا کنید.

terraform init

دایرکتوری کاری را مقداردهی اولیه می‌کند. این مرحله ارائه‌دهندگان مورد نیاز برای پیکربندی داده شده را دانلود می‌کند.

terraform plan

یک طرح اجرایی ایجاد می‌کند که نشان می‌دهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.

  1. حالا برای ایجاد منابع، دستور terraform apply اجرا کنید و برای اجرا، yes را تایپ کنید.

۴. وظیفه ۲. ایجاد دروازه NAT و ماشین‌های مجازی با Terraform

ما باید دسترسی خارجی خروجی به اینترنت را فراهم کنیم، بنابراین بیایید یک دروازه Cloud NAT ایجاد کنیم و آن را وصل کنیم.

  1. Cloud Shell را باز کنید، به پوشه terraform-build بروید و فایل‌های زیر را ایجاد کنید (در مجموع سه فایل). بعداً آنها را ویرایش خواهیم کرد.
touch nat-vm.tf psc.tf dns.tf
  1. به نمای ویرایشگر Cloud Shell بروید و فایل 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
  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. به ترمینال Cloud Shell بروید، مطمئن شوید که در پوشه terraform-build هستید و terraform plan اجرا کنید. این به شما نشان می‌دهد که ۴ مورد اضافه خواهد شد، سپس terraform apply اجرا کنید و برای ایجاد دروازه NAT و ماشین مجازی، yes را تایپ کنید.

۵. وظیفه ۳. پیکربندی ماشین‌های مجازی و آزمایش

  1. به نمونه‌های ماشین مجازی بروید. ماشین مجازی که با py-vm1 شروع می‌شود را انتخاب کنید. SSH را انتخاب کنید.
  2. پس از اینکه با SSH به py-vm1 وارد شدید، با تایپ sudo -i دسترسی root را فعال کنید.
  3. محیط venv خود را فعال کنید:
cd py-gem-env
source env/bin/activate
  1. حالا بیایید این را احراز هویت کنیم تا بعداً آزمایش‌هایی انجام دهیم. دستور زیر را در ماشین مجازی اجرا کنید، وقتی از شما خواسته شد، کلید y را فشار دهید.
gcloud auth application-default login
  1. سپس آدرس اینترنتی (url) که با https:// شروع می‌شود را کپی کنید. یک تب جدید در پنجره مرورگر آزمایشگاه خود باز کنید و آدرس اینترنتی را جایگذاری کنید. دستورالعمل‌ها را بپذیرید (یا بپذیرید).
  2. وقتی کپی انتخاب‌شده‌ی زیر را مشاهده کردید، به جلسه‌ی vm py-vm1 برگردید و برای Enter authorization code: کدی را که کپی کرده‌اید، جای‌گذاری کنید و برای تأیید اعتبار، enter را فشار دهید.

b703db7aa2aa286a.png

  1. حالا بیایید یک آزمایش سریع انجام دهیم تا ببینیم آیا می‌توانیم به API ورتکس متصل شویم یا خیر، این از * -aiplatform.googleapis.com استفاده می‌کند، بنابراین ما به آن آدرس dig می‌اندازیم تا ببینیم ترافیک چگونه هدایت می‌شود.
dig *-aiplatform.googleapis.com
  1. شما باید چیزی مشابه را ببینید (آدرس متفاوت خواهد بود). توجه داشته باشید که مسیر از طریق آدرس‌های IP عمومی است زیرا API یک API عمومی است. کپی نکنید
; <<>> 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. حالا بیایید از پایتون استفاده کنیم. برای فعال کردن رابط کاربری ipython ipython را تایپ کنید.
ipython

845ef4291429888a.png

  1. حالا کد زیر را کپی و پیست کنید. این کد از Gemini می‌پرسد که « رنگ‌های لوگوی گوگل چیست » و « رنگ آسمان چیست ».
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. برای اجرا و مشاهده نتیجه، دو بار Enter را فشار دهید.
  2. این درخواست از طریق API عمومی به Vertex دسترسی پیدا کرد.
  3. جلسه SSH را ببندید، ادامه می‌دهیم.

۶. وظیفه ۴. ایجاد نقطه پایانی PSC برای googleapis با Terraform

برای فعال کردن اتصال خصوصی به نقطه پایانی Vertex API خود، یک نقطه پایانی Private Service Connect برای Google APIs ایجاد خواهیم کرد. این به ما امکان می‌دهد از یک آدرس IP خصوصی که برای مسیریابی ترافیک به Google APIs مورد نیازمان، در این مورد Vertex، اختصاص می‌دهیم، استفاده کنیم.

  1. اگر Cloud Shell از قبل باز نیست، آن را در نمای ویرایشگر باز کنید. ما قصد داریم موارد زیر را ایجاد کنیم:
  • یک IP برای نقطه پایانی PSC ایجاد کنید : ۱۹۲.۱۶۸.۲۵۵.۲۵۰ ( resource "google_compute_global_address" "default")
  • یک نقطه پایانی PSC برای 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 بروید، مطمئن شوید که در پوشه terraform-build هستید. سپس terraform init را اجرا کنید. سپس terraform plan اجرا کنید. این به شما نشان می‌دهد که ۲ مورد اضافه خواهد شد،
    سپس terraform apply اجرا کنید و برای ایجاد نقطه پایانی IP و PSC Google APIs، عبارت yes را تایپ کنید.
  2. تأیید وجود نقطه پایانی
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global

۷. وظیفه ۵. ایجاد ورودی DNS دستی به googleapis با Terraform

شما می‌توانید یک ورودی DNS دستی ایجاد کنید تا با استفاده از DNS خصوصی به نقطه پایانی PSC اشاره کند. این کار بر تمام شبکه‌هایی که به آن اختصاص می‌دهید تأثیر می‌گذارد.

  1. به سرویس‌های شبکه بروید و Cloud DNS را انتخاب کنید.
  2. در بخش Zoneها، باید یک Zone که به طور خودکار برای Private Service Connect for Google APIs ایجاد شده است، با نوع Zone، به نام Service Directory، مشاهده کنید. این Zone می‌تواند برای اتصال به نقطه پایانی PSC با فرمت ** SERVICE-ENDPOINT استفاده شود. مثال: p.googleapis.com : aiplatform-pscvertexgemini.p.googleapis.com
  3. در این مورد، ما می‌خواهیم به صورت دستی یک ورودی DNS خصوصی ایجاد کنیم. پیکربندی به شرح زیر خواهد بود.
  • یک DNS zone خصوصی با نام "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 اجرا کنید و برای ایجاد ورودی DNS خصوصی، عبارت yes را تایپ کنید.
  2. شما باید تنظیماتی با یک رکورد A و CNAME مانند این را ببینید. 6d2fc061460cd983.png
  3. در مرحله بعد، اتصال را با این تغییرات در py-vm1 تأیید می‌کنیم.

۸. وظیفه ۶. تأیید اتصال نقطه پایانی از طریق آدرس IP

بیایید با استفاده از نقطه پایانی خصوصی به Gemini متصل شویم.

  1. به VM Instance py-vm1 بروید. SSH را انتخاب کنید و SSH را وارد ماشین مجازی کنید.
  2. با تایپ sudo -i به دسترسی روت دسترسی پیدا کنید
  3. با استفاده از دستور ping مسیر اتصال به aiplatform.googleapis.com را بررسی کنید. این دستور، آدرس IP موجود در DNS خصوصی، یک رکورد برای googleapis، را پینگ می‌کند. این IP یک نقطه پایانی PSC است و پینگ‌های شما ناموفق خواهند بود.
ping -c 2 aiplatform.googleapis.com
  1. مسیر اتصال را با ping با استفاده از ورودی DNS که به طور خودکار برای APIهای PSC Google با aiplatform-pscvertexgemini.p.googleapis.com ایجاد شده است، بررسی کنید. این به آدرس IP نقطه پایانی PSC اشاره می‌کند و پینگ‌های شما ناموفق خواهند بود.
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
  1. با استفاده از دستور dig ، مسیر اتصال به aiplatform.googleapis.com را بررسی کنید. این باید آدرس IP نقطه پایانی PSC باشد.
dig aiplatform.googleapis.com
  1. به کنسول برگردید و یک نمونه دیگر از ماشین مجازی با نام py-vm1 باز کنید. SSH را انتخاب کنید و SSH را به ماشین مجازی وارد کنید.
  2. با تایپ sudo -i به دسترسی روت دسترسی پیدا کنید
  3. دستور follow را اجرا کنید تا اتصال را در یک فایل TCP dump مشاهده کنید.
sudo tcpdump -i any port 53 -n or host aiplatform.googleapis.com
  1. حالا به اولین نمونه SSH از VM Instance py-vm1 برگردید.
  2. فعال کردن env با استفاده از
cd py-gem-env
source env/bin/activate
  1. حالا بیایید پایتون را آزمایش کنیم. برای فعال کردن رابط کاربری ipython ipython را تایپ کنید.
ipython
  1. حالا کد زیر را کپی و پیست کنید. این کد از Gemini می‌پرسد: « در یک جمله کوتاه، توکنایزر را در زمینه هوش مصنوعی خلاصه کنید؟ » و « آیا نهنگ‌ها عالی هستند یا نه؟ »
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. برای اجرا و مشاهده نتیجه ، دو بار Enter را فشار دهید.
  2. به نمونه دوم VM Instance py-vm1 برگردید. باید نتیجه TCPDUMP را ببینید. متوجه خواهید شد که آدرس IP ماشین مجازی از آدرس IP نقطه پایانی PSC برای اتصال به aiplatform.googleapis.com استفاده می‌کند.

بستن تمام نشست‌های SSH به ماشین مجازی py-vm1

۹. تمیز کردن

  1. به Cloud Shell بروید و مطمئن شوید که در دایرکتوری terraform-build هستید cd terraform-build
  2. برای مشاهده تمام تغییراتی که اعمال خواهد شد terraform plan destroy اجرا کنید.
terraform plan -destroy
  1. سپس دستور terraform destroy اجرا کنید و بعد yes را تایپ کنید و تمام منابعی که در پروژه خود با Terraform ایجاد کرده‌اید حذف خواهند شد.
terraform destroy 

۱۰. تبریک

تبریک می‌گوییم، شما با موفقیت به Vertex متصل شدید و از طریق آدرس API عمومی و به صورت خصوصی با استفاده از Private Service Connect Endpoint برای APIهای گوگل ، از Gemini 3 pro استفاده کردید. این قابلیت می‌تواند اتصال API خصوصی را به محیط ابری on-premium/دیگر محیط‌های ابری شما که از طریق (Interconnect، Cross-Cloud Interconnect و VPC) متصل هستند، گسترش دهد.

مراحل بعدی / اطلاعات بیشتر

می‌توانید درباره شبکه هوش مصنوعی Vertex بیشتر بخوانید

Codelab: با استفاده از python sdk از طریق نقطه پایانی Private Service Connect به Anthropic Claude در Vertex AI دسترسی پیدا کنید

آزمایشگاه بعدی خود را انجام دهید

به تلاش خود با Google Cloud ادامه دهید و این آزمایشگاه‌های دیگر Google Cloud Skills Boost را بررسی کنید: