استفاده از Private Service Connect برای Google API برای دسترسی به Gemini از طریق یک اتصال ترکیبی

1. مقدمه

Private Service Connect for Google APIs (PSC) یک قابلیت شبکه Google Cloud است که به کاربران اجازه می دهد دسترسی خصوصی را از طریق یک نقطه پایانی جهانی IP خصوصی در یک VPC پیکربندی کنند. برای کاربرانی که برنامه‌های کد یا سمت کلاینت را در یک محیط ترکیبی متصل به Google Cloud توسط VPN یا Interconnect اجرا می‌کنند، از PSC برای حل کردن APIهای Google از طریق آن اتصال ترکیبی خصوصی استفاده می‌شود.

PSC برای Google API می‌تواند دامنه‌های مختلفی را حل کند که فهرست کامل آن‌ها را می‌توانید در اینجا بیابید. دامنه ای که اکثر API های Google از آن استفاده می کنند <API>.googleapis.com است. همراه با این دامنه، PSC همچنین نسخه‌ای از googleapis.com را به کاربران ارائه می‌دهد که <API>-<PSC-ENDPOINT-NAME> است.**p.**googleapis.com. با استفاده از این دامنه، کاربران می توانند برنامه ها را برای استفاده از نقاط پایانی خاص PSC پیکربندی کنند. رایج‌ترین مورد استفاده به کاربران امکان می‌دهد انتخاب کنند کدام برنامه‌ها از نقطه پایانی PSC برای هدایت ترافیک Google API از طریق اتصال ترکیبی استفاده کنند، در حالی که به سایر برنامه‌ها اجازه می‌دهد به مسیریابی ترافیک به نقطه پایانی API عمومی ادامه دهند.

Gemini تحت مجموعه محصولات Vertex AI Google Cloud قرار می گیرد و در لیست API های Google گنجانده شده است که می توانند با PSC برای API های Google حل شوند.

در این نرم افزار کد، شما یک محیط ترکیبی شبیه سازی شده، میزبانی یک Workbench Instance در prem و اجرای کد Gemini Python که به طور خصوصی از طریق HA VPN به Gemini API دسترسی دارد، و به یک PSC برای Google APIs endpoint متصل خواهید شد.

چیزی که یاد خواهید گرفت

  • یک NCC Hub ایجاد کنید.
  • اسپیک های VPC را در یک مرکز NCC پیکربندی کنید.
  • یک Cloud HA VPN ایجاد کنید.
  • اسپیک های هیبریدی را در یک هاب NCC پیکربندی کنید.
  • یک PSC برای Google APIs endpoint ایجاد کنید.
  • یک مسیر سفارشی را از طریق HA-VPN پیکربندی کنید.
  • یک منطقه همتای DNS را پیکربندی کنید.
  • یک نمونه Vertex Workbench را پیکربندی کنید
  • کد Gemini Python را برای استفاده از PSC برای Google APIs API Endpoint پیکربندی کنید.

آنچه شما نیاز دارید

  • یک پروژه Google Cloud با مجوزهای «مالک» یا «ویرایشگر» کامل.

2. توپولوژی Codelab

74f1027c8c8085f6.png

برای این نرم افزار کد، از Google Cloud برای شبیه سازی یک محیط ترکیبی استفاده خواهید کرد. مراحلی در این Codelab وجود دارد که مختص Google Cloud است و اگر از یک محیط واقعی on-prem پیکربندی شود، متفاوت خواهد بود. آن مراحل فراخوانی خواهد شد.

شما یک NCC Hub ایجاد خواهید کرد که دارای Routing-vpc به عنوان Spoke VPC است. در آن VPC، یک HA-VPN روی VPC on-prem پیکربندی می‌شود که یک محیط on-prem را تقلید می‌کند. HA-VPN به عنوان یک اسپک هیبریدی در مرکز NCC پیکربندی خواهد شد. در on-prem VPC، شما یک زیرشبکه ایجاد خواهید کرد که در آن یک Workbench Instance میزبانی خواهد شد. شما همچنین یک Cloud NAT ایجاد خواهید کرد تا برای دانلود بسته ها در نمونه Workbench استفاده شود.

در نهایت، یک منطقه همتای DNS برای VPC اولیه ایجاد می‌کنید تا بتوانید از منطقه خصوصی فهرست خدمات برای p.googleapis.com استفاده کنید که PSC برای APIهای Google به طور خودکار ایجاد می‌کند.

3. راه اندازی و الزامات

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.

4. قبل از شروع

API ها را فعال کنید

در داخل Cloud Shell، مطمئن شوید که پروژه شما به درستی پیکربندی شده است و متغیرهای محیط خود را تنظیم کنید.

از Cloud Shell

gcloud config list project
gcloud config set project <project-id>
export project=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

همه API های لازم Google را در پروژه فعال کنید.

از Cloud Shell

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable notebooks.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable aiplatform.googleapis.com

5. VPC ها و Subnets ایجاد کنید

ایجاد شبکه ها

از Cloud Shell

gcloud compute networks create routing-vpc \
    --subnet-mode=custom

از Cloud Shell

gcloud compute networks create onprem-vpc \
    --subnet-mode=custom

gcloud compute networks subnets create onprem-$region-subnet \
    --network=onprem-vpc \
    --range=10.0.0.0/24 \
    --region=$region
    --enable-private-ip-google-access

Cloud Routers و Cloud NAT را ایجاد کنید

یک Cloud Router ایجاد کنید که در ارتباط با HA VPN در مسیریابی vpc استفاده شود.

از Cloud Shell

gcloud compute routers create routing-$region-cr \
    --network=routing-vpc \
    --region=$region \
    --asn=64512

یک Cloud Router ایجاد کنید که همراه با HA VPN در onprem-vpc استفاده شود.

از Cloud Shell

gcloud compute routers create onprem-$region-cr \
    --network=onprem-vpc \
    --region=$region \
    --asn=64513

یک Cloud Router ایجاد کنید که همراه با Cloud NAT در onprem-vpc استفاده شود.

از Cloud Shell

gcloud compute routers create onprem-$region-cr-4nat \
    --network=onprem-vpc \
    --region=$region

Cloud NAT در onprem-vpc برای دانلود بسته‌ها در Vertex AI Workbench Instance استفاده می‌شود که در مرحله بعد پیکربندی می‌شود.

از Cloud Shell

gcloud compute routers nats create onprem-$region-nat \
    --router=onprem-$region-cr-4nat \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

6. Cloud HA-VPN ایجاد کنید

دروازه های VPN را ایجاد کنید.

از Cloud Shell

gcloud compute vpn-gateways create routing-gateway \
   --network=routing-vpc \
   --region=$region \
   --stack-type=IPV4_ONLY

از Cloud Shell

gcloud compute vpn-gateways create onprem-gateway \
   --network=onprem-vpc \
   --region=$region \
   --stack-type=IPV4_ONLY

تونل های VPN را که از مسیریابی vpc سرچشمه می گیرند ایجاد کنید.

از Cloud Shell

gcloud compute vpn-tunnels create routing-to-onprem-tunnel0 \
    --peer-gcp-gateway=onprem-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=routing-$region-cr \
    --vpn-gateway=routing-gateway \
    --interface=0

gcloud compute vpn-tunnels create routing-to-onprem-tunnel1 \
    --peer-gcp-gateway=onprem-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=routing-$region-cr \
    --vpn-gateway=routing-gateway \
    --interface=1

تونل های VPN را از onprem-vpc ایجاد کنید.

از Cloud Shell

gcloud compute vpn-tunnels create onprem-to-routing-tunnel0 \
    --peer-gcp-gateway=routing-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=onprem-$region-cr \
    --vpn-gateway=onprem-gateway \
    --interface=0

    gcloud compute vpn-tunnels create onprem-to-routing-tunnel1 \
    --peer-gcp-gateway=routing-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=onprem-$region-cr \
    --vpn-gateway=onprem-gateway \
    --interface=1

جلسات BGP را برای دو تونل که از مسیریابی vpc سرچشمه می گیرند، تنظیم کنید.

از Cloud Shell

gcloud compute routers add-interface routing-$region-cr \
    --interface-name=routing-interface0 \
    --ip-address=169.254.0.1 \
    --mask-length=30 \
    --vpn-tunnel=routing-to-onprem-tunnel0 \
    --region=$region

gcloud compute routers add-bgp-peer routing-$region-cr \
    --peer-name=routingtoonprem-bgp0 \
    --interface=routing-interface0 \
    --peer-ip-address=169.254.0.2 \
    --peer-asn=64513 \
    --region=$region

gcloud compute routers add-interface routing-$region-cr \
  --interface-name=routing-interface1 \
  --ip-address=169.254.1.1 \
  --mask-length=30 \
  --vpn-tunnel=routing-to-onprem-tunnel1 \
  --region=$region

gcloud compute routers add-bgp-peer routing-$region-cr \
    --peer-name=routingtoonprem-bgp1 \
    --interface=routing-interface1 \
    --peer-ip-address=169.254.1.2 \
    --peer-asn=64513 \
    --region=$region

جلسات BGP را برای دو تونل که از onprem-vpc سرچشمه می گیرند، تنظیم کنید.

از Cloud Shell

gcloud compute routers add-interface onprem-$region-cr \
    --interface-name=onprem-interface0 \
    --ip-address=169.254.0.2 \
    --mask-length=30 \
    --vpn-tunnel=onprem-to-routing-tunnel0 \
    --region=$region

gcloud compute routers add-bgp-peer onprem-$region-cr \
    --peer-name=onpremtorouting-bgp0 \
    --interface=onprem-interface0 \
    --peer-ip-address=169.254.0.1 \
    --peer-asn=64512 \
    --region=$region

gcloud compute routers add-interface onprem-$region-cr \
  --interface-name=onprem-interface1 \
  --ip-address=169.254.1.2 \
  --mask-length=30 \
  --vpn-tunnel=onprem-to-routing-tunnel1 \
  --region=$region

gcloud compute routers add-bgp-peer onprem-$region-cr \
    --peer-name=onpremtorouting-bgp1 \
    --interface=onprem-interface1 \
    --peer-ip-address=169.254.1.1 \
    --peer-asn=64512 \
    --region=$region

به صفحه اتصال شبکه > VPN در کنسول بروید و مطمئن شوید که تونل های HA-VPN و جلسات BGP شما به درستی پیکربندی شده اند.

7. NCC Hub و Spokes را پیکربندی کنید

NCC Hub را ایجاد کنید

از Cloud Shell

gcloud network-connectivity hubs create ncc-hub \
    --project="$project" \
    --preset-topology="mesh"

اسپک های NCC را ایجاد کنید

NCC gcloud نیاز دارد که همه پره ها با نام مسیرهای کامل یا URI پیکربندی شوند.

از Cloud Shell

gcloud compute networks describe routing-vpc

به مسیر کامل (URI) روتینگ-vpc برای دستور زیر توجه کنید.

خروجی نمونه

autoCreateSubnetworks: false
creationTimestamp: '2025-08-20T11:13:42.233-07:00'
id: 'xxx'
kind: compute#network
name: routing-vpc
networkFirewallPolicyEnforcementOrder: AFTER_CLASSIC_FIREWALL
routingConfig:
  bgpBestPathSelectionMode: LEGACY
  routingMode: REGIONAL
selfLink: https://www.googleapis.com/compute/v1/projects/$project/global/networks/routing-vpc
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/$project/global/networks/355666541188722361
x_gcloud_bgp_routing_mode: REGIONAL
x_gcloud_subnet_mode: CUSTOM

مسیریابی VPC Spoke را پیکربندی کنید

از Cloud Shell

gcloud network-connectivity spokes linked-vpc-network create routing-vpc \
    --hub=ncc-hub \
    --vpc-network=projects/$project/global/networks/routing-vpc \
    --global

از Cloud Shell

gcloud compute vpn-tunnels describe routing-to-onprem-tunnel0 --region=$region
gcloud compute vpn-tunnels describe routing-to-onprem-tunnel1 --region=$region

به مسیرهای کامل (URI) برای تونل های VPN که از مسیریابی-vpc سرچشمه می گیرند، توجه کنید.

خروجی نمونه

creationTimestamp: '2025-08-20T11:33:37.494-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'xxx'
ikeVersion: 2
kind: compute#vpnTunnel
labelFingerprint: xxx
localTrafficSelector:
- 0.0.0.0/0
name: routing-to-onprem-tunnel0
peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway
peerIp: 34.153.54.166
region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel0
sharedSecret: '*************'
sharedSecretHash: xxx
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway

vpnGatewayInterface: 0
creationTimestamp: '2025-08-20T11:33:41.829-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'xxx'
ikeVersion: 2
kind: compute#vpnTunnel
labelFingerprint: xxx
localTrafficSelector:
- 0.0.0.0/0
name: routing-to-onprem-tunnel1
peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway
peerIp: 34.153.246.117
region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel1
sharedSecret: '*************'
sharedSecretHash: xxx
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway
vpnGatewayInterface: 1

از Cloud Shell

gcloud network-connectivity spokes linked-vpn-tunnels create $region-vpn-spoke \
    --hub=ncc-hub \
  --vpn-tunnels=projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel0,projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel1 \
    --region=$region 

قبل از حرکت، مطمئن شوید که تمام پره های شما به درستی پیکربندی شده اند.

از Cloud Shell

gcloud network-connectivity hubs list-spokes ncc-hub

خروجی نمونه

NAME: routing-vpc
GROUP: default
PROJECT: $project
LOCATION: global
TYPE: VPC_NETWORK
STATE: ACTIVE
STATE REASON: 
ETAG: 2

NAME: us-central1-vpn-spoke
GROUP: default
PROJECT: $project
LOCATION: us-central1
TYPE: VPN_TUNNEL
STATE: ACTIVE
STATE REASON: 
ETAG: 

8. Private Service Connect را برای Google APIs تنظیم کنید

نقاط پایانی PSC برای Google API از آدرس‌های IP جهانی ایجاد می‌شوند که در یک زیرشبکه VPC منطقه‌ای قرار ندارند. آدرس IP جهانی باید به طور خاص با هدف PRIVATE_SERVICE_CONNECT رزرو شود.

از Cloud Shell

gcloud compute addresses create psc-ip \
  --global \
  --purpose=PRIVATE_SERVICE_CONNECT \
  --addresses=10.100.100.0 \
  --network=routing-vpc

از Cloud Shell

gcloud compute forwarding-rules create psc4googep \
  --global \
  --network=routing-vpc \
  --address=psc-ip \
  --target-google-apis-bundle=all-apis \
  --service-directory-registration=projects/$project/locations/$region

از Cloud Shell

gcloud compute routers update routing-$region-cr \
   --project=$project \
   --region=$region \
   --advertisement-mode custom \
   --set-advertisement-groups=ALL_SUBNETS \
   --set-advertisement-ranges=10.100.100.0/32

از Cloud Shell

gcloud dns managed-zones create peeringzone \
    --description="dns peer onprem to routing" \
    --dns-name=p.googleapis.com \
    --networks=onprem-vpc \
    --target-network=routing-vpc \
    --target-project=$project \
    --visibility=private

9. نمونه Vertex Workbench را تنظیم کنید

یک حساب سرویس ایجاد کنید تا برای هویت نمونه Workbench استفاده شود.

از Cloud Shell

gcloud iam service-accounts create workbench-sa \
    --display-name="workbench-sa"

نام کامل حساب سرویس خود را یادداشت کنید و به آن اجازه aiplatform.admin را بدهید تا تماس های Vertex AI/Gemini را اجرا کند.

از Cloud Shell

gcloud iam service-accounts list

خروجی نمونه

DISPLAY NAME: Compute Engine default service account
EMAIL: xxx-compute@developer.gserviceaccount.com
DISABLED: False

DISPLAY NAME: workbench-sa
EMAIL: workbench-sa@$project.iam.gserviceaccount.com
DISABLED: False

مطمئن شوید که <your-project-id> را با شناسه پروژه واقعی خود جایگزین کرده اید. ما نمی توانیم در اینجا از متغیر $project به دلیل نقل قول های مورد نیاز استفاده کنیم.

از Cloud Shell

gcloud projects add-iam-policy-binding $project --member='serviceAccount:workbench-sa@<your-project-id>.iam.gserviceaccount.com' --role='roles/aiplatform.admin' --condition=None

از Cloud Shell

gcloud workbench instances create workbench-$region --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --location=$region-a --network=projects/$project/global/networks/onprem-vpc --subnet=projects/$project/regions/$region/subnetworks/onprem-$region-subnet --subnet-region=$region --disable-public-ip --service-account-email=workbench-sa@$project.iam.gserviceaccount.com

تهیه نمونه Workbench ممکن است بیشتر از اجرای دستور gcloud طول بکشد.

10. کد جمینی را تست کنید

در UI، روی "Open JupyterLab" کلیک کنید.

1b7ff959f1072aaa.png

پس از ورود به JupyterLab، یک نوت بوک پایتون 3 جدید باز کنید.

18c26d06183faca1.png

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

از نوت بوک JupyterLab

pip install --upgrade google-genai

هسته نوت بوک را مجددا راه اندازی کنید.

fe7911ce8b54ff8a.png

به نقطه پایانی API توجه کنید. در اینجا ما از نقطه پایانی API <YOUR_REGION>-aiplatform.googleapis.com استفاده می کنیم. این نقطه پایانی استاندارد API برای Vertex AI است.

از نوت بوک JupyterLab

PROJECT_ID="YOUR_PROJECT_ID" # Google Cloud Project ID
LOCATION_ID="YOUR_REGION" # Enter Vertex AI Gemini region such a s us-central1
API_ENDPOINT="https://<YOUR_REGION>-aiplatform.googleapis.com" # API Endpoint
MODEL_ID="gemini-2.0-flash" # Gemini Model ID

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
)

از نوت بوک JupyterLab

from google import genai

client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})

prompt = "what weighs more, 1kg of feathers or 1kg of stones"

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)

نمونه پاسخ

This is a classic trick question! They both weigh the same: 1 kilogram. The difference is in the volume they occupy and the density of the materials.

به نام API که هنگام اجرای کد استفاده کردید توجه کنید. YOUR_REGION-aiplatform.googleapis.com نام پیش‌فرض API برای Vertex AI است. باید نام API را تغییر دهیم و دوباره کد را اجرا کنیم. با اجرای TCPdump در ترمینال در Workbench Instance می‌توانیم مطمئن شویم که کد از نقطه پایانی PSC استفاده می‌کند.

TCPdump را در ترمینال اجرا کنید

با کلیک روی File > New > Terminal، یک ترمینال را در Workbench باز کنید.

2cc405367de1f4c2.png

اگر با دیدن خروجی متن در ترمینال مشکل دارید، باید تم ترمینال خود را به روز کنید. این کار را در Settings > Terminal Theme > Light OR Dark انجام دهید.

از ترمینال

sudo tcpdump host 10.100.100.0

کد جمینی را به روز کنید

به نوت بوک برگردید، API Endpoint را به روز کنید و کد را دوباره اجرا کنید. توجه داشته باشید که نقطه پایانی API را به <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com تغییر دادیم. این با فرمت API خاص PSC <service>-<endpointname>.p.googleapis.com مطابقت دارد.

از نوت بوک JupyterLab

API_ENDPOINT="https://<YOUR_REGION>-aiplatform-psc4googep.p.googleapis.com" # API Endpoint

از نوت بوک JupyterLab

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
)

از نوت بوک JupyterLab

from google import genai

client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})

prompt = "what weighs more, 1kg of feathers or 1kg of stones"

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)

نمونه پاسخ

They weigh the same. 1 kg is 1 kg, regardless of what it's made of.

TCPdump را بررسی کنید

به ترمینال برگردید و به دنبال تماس با نقطه پایانی PSC (10.100.100.0) باشید. پایان دادن به TCPdump (control+c)

خروجی نمونه

listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
19:12:01.473886 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [S], seq 3367930834, win 65320, options [mss 1420,sackOK,TS val 2933602967 ecr 0,nop,wscale 7], length 0
19:12:01.476561 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [S.], seq 1863301110, ack 3367930835, win 65535, options [mss 1366,sackOK,TS val 3004118895 ecr 2933602967,nop,wscale 8], length 0
19:12:01.476602 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 1, win 511, options [nop,nop,TS val 2933602969 ecr 3004118895], length 0
19:12:01.477283 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1:1573, ack 1, win 511, options [nop,nop,TS val 2933602970 ecr 3004118895], length 1572
19:12:01.478836 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [.], ack 1573, win 1045, options [nop,nop,TS val 3004118898 ecr 2933602970], length 0
19:12:01.480181 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 1:6041, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 6040
19:12:01.480183 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 6041:8378, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 2337
19:12:01.480215 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 6041, win 485, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0
19:12:01.480225 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 8378, win 473, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0
19:12:01.482580 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1573:1653, ack 8378, win 501, options [nop,nop,TS val 2933602975 ecr 3004118899], length 80

موفقیت!

11. مراحل پاکسازی

نوت بوک JupyterLab را ببندید و به Cloud Shell برگردید. مطمئن شوید که Cloud Shell شما تمام نشده است. اگر چنین است، متغیرهای خود را بازنشانی کنید.

از Cloud Shell

gcloud config list project
gcloud config set project <project-id>
export project=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

تمام منابع را حذف کنید

از Cloud Shell

gcloud workbench instances delete workbench-$region --location=$zone -q

gcloud iam service-accounts delete workbench-sa@$project.iam.gserviceaccount.com -q

gcloud dns managed-zones delete peeringzone -q

gcloud compute forwarding-rules delete psc4googep --global -q

gcloud compute addresses delete psc-ip --global -q

gcloud network-connectivity spokes delete $region-vpn-spoke --region=$region -q

gcloud network-connectivity spokes delete routing-vpc --global -q

gcloud network-connectivity hubs delete ncc-hub -q

gcloud compute vpn-tunnels delete onprem-to-routing-tunnel1 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete onprem-to-routing-tunnel0 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete routing-to-onprem-tunnel1 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete routing-to-onprem-tunnel0 --region=$region --project=$project -q

gcloud compute vpn-gateways delete onprem-gateway --region=$region --project=$project -q

gcloud compute vpn-gateways delete routing-gateway --region=$region --project=$project -q

gcloud compute routers nats delete onprem-$region-nat --router=onprem-$region-cr-4nat --region=$region -q

gcloud compute routers delete onprem-$region-cr-4nat --region=$region -q

gcloud compute routers delete onprem-$region-cr --region=$region -q

gcloud compute routers delete routing-$region-cr --region=$region -q

gcloud compute networks subnets delete onprem-$region-subnet --region=$region -q

gcloud compute networks delete onprem-vpc -q

gcloud compute networks delete routing-vpc -q

12. تبریک می گویم!

برای تکمیل کد لبه تبریک می گویم.

آنچه را پوشش داده ایم

  • یک NCC Hub ایجاد کنید.
  • اسپیک های VPC را در یک مرکز NCC پیکربندی کنید.
  • یک Cloud HA VPN ایجاد کنید.
  • اسپیک های هیبریدی را در یک هاب NCC پیکربندی کنید.
  • یک PSC برای Google APIs endpoint ایجاد کنید.
  • یک مسیر سفارشی را از طریق HA-VPN پیکربندی کنید.
  • یک منطقه همتای DNS را پیکربندی کنید.
  • یک نمونه Vertex Workbench را پیکربندی کنید
  • کد Gemini Python را برای استفاده از PSC برای Google APIs API Endpoint پیکربندی کنید.