استخدام Private Service Connect لواجهات برمجة تطبيقات Google من أجل الوصول إلى Gemini عبر اتصال مختلط

1. مقدمة

‫Private Service Connect لواجهات Google APIs (‏PSC) هي إحدى إمكانات الربط الشبكي في Google Cloud التي تتيح للمستخدمين إعداد وصول خاص من خلال نقطة نهاية عامة لعنوان IP خاص ضمن شبكة VPC. بالنسبة إلى المستخدمين الذين يشغّلون الرموز أو تطبيقات من جهة العميل في بيئة مختلطة مرتبطة بخدمة Google Cloud من خلال شبكة VPN أو Interconnect، يتم استخدام PSC لحلّ مشاكل Google APIs عبر هذا الاتصال المختلط الخاص.

يمكن أن تحلّ خدمة PSC الخاصة بواجهات Google APIs العديد من النطاقات المختلفة، ويمكن الاطّلاع على القائمة الكاملة هنا. النطاق الذي تستخدمه معظم واجهات Google API هو <API>.googleapis.com. بالإضافة إلى هذا النطاق، يوفّر PSC للمستخدمين أيضًا إصدارًا من googleapis.com وهو <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com. وباستخدام هذا النطاق، يمكن للمستخدمين إعداد التطبيقات لاستخدام نقاط نهاية PSC معيّنة. تتيح حالة الاستخدام الأكثر شيوعًا للمستخدمين اختيار التطبيقات التي تستخدم نقطة نهاية PSC لتوجيه زيارات Google API عبر الاتصال المختلط، مع السماح للتطبيقات الأخرى بمواصلة توجيه الزيارات إلى نقطة نهاية واجهة برمجة التطبيقات العامة.

يصنّف Gemini ضمن مجموعة منتجات Vertex AI في Google Cloud، وهو مدرَج في قائمة واجهات Google APIs التي يمكن حلّها باستخدام PSC لواجهات Google APIs.

في هذا الدرس العملي، ستنشئ بيئة مختلطة محاكاة، وتستضيف مثيل Workbench محليًا، وتنفّذ رمز Gemini Python الذي يصل إلى Gemini API بشكل خاص عبر شبكة HA VPN، ويتصل بنقطة نهاية PSC لواجهات Google APIs.

ما ستتعلمه

  • أنشئ "مركزًا للشبكة السحابية المحلية".
  • إعداد أجهزة Spoke في شبكة VPC في مركز NCC
  • أنشئ شبكة Cloud HA VPN.
  • ضبط Hybrid Spokes في مركز NCC
  • أنشئ نقطة نهاية Private Service Connect لواجهات Google APIs.
  • ضبط مسار مخصّص عبر HA-VPN
  • إعداد منطقة ربط نظام أسماء النطاقات
  • ضبط مثيل Vertex Workbench
  • إعداد رمز Python في Gemini لاستخدام Private Service Connect (PSC) لنقطة نهاية Google APIs API.

المتطلبات

  • مشروع Google Cloud لديه أذونات "المالك" أو "المحرّر" الكاملة

2. بنية الدرس التطبيقي حول الترميز

74f1027c8c8085f6.png

في هذا الدرس العملي، ستستخدم Google Cloud لمحاكاة بيئة مختلطة. ستتضمّن هذه التجربة العملية خطوات خاصة بـ Google Cloud وستكون مختلفة إذا تم إعدادها من بيئة محلية حقيقية. سيتم توضيح هذه الخطوات.

ستنشئ مركز NCC يحتوي على شبكة VPC للتوجيه كشبكة VPC فرعية. في شبكة VPC هذه، سيتم إعداد HA-VPN لشبكة VPC المحلية، ما يحاكي بيئة محلية. سيتم إعداد HA-VPN كمركز Hybrid Spoke في مركز NCC. في شبكة VPC المحلية، ستنشئ شبكة فرعية سيتم استضافة مثيل Workbench فيها. ستنشئ أيضًا خدمة Cloud NAT لاستخدامها في تنزيل الحِزم على مثيل Workbench.

أخيرًا، ستنشئ منطقة ربط DNS للسحابة الإلكترونية الافتراضية الخاصة (VPC) المحلية لتتمكّن من استخدام منطقة Service Directory الخاصة لـ p.googleapis.com التي تنشئها خدمة Private Service Connect (PSC) تلقائيًا لواجهات Google APIs.

3- الإعداد والمتطلبات

إعداد البيئة بالسرعة التي تناسبك

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
  • معرّف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع.
  • للعلم، هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

55efc1aaa7a4d3ad.png

لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:

7ffe5cbb04455448.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا ثابتًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إكمال جميع المهام في هذا الدرس العملي ضمن المتصفّح. ليس عليك تثبيت أي تطبيق.

4. قبل البدءالمدة: 2:00

تفعيل واجهات برمجة التطبيقات

داخل 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

فعِّل جميع واجهات Google APIs الضرورية في المشروع.

من 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 وشبكات فرعيةالمدة: 5:00

إنشاء شبكات

من 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 Router و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 الذي سيتم إعداده في خطوة لاحقة.

من 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-VPNDuration: 7:00

أنشئ بوابات 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 مصدرها routing-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 للنفقَين اللذين ينشآن من routing-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" و"النقاط المحورية"Duration:10:00

إنشاء مركز NCC

من 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 الفرعية الخاصة بالتوجيه

من 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

دوِّن المسارات الكاملة (معرّفات الموارد الموحّدة) لأنفاق شبكة VPN التي مصدرها routing-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 APIsDuration: 5:00

يتم إنشاء نقاط نهاية PSC لواجهات برمجة تطبيقات Google من عناوين 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‏Duration: 5:00

أنشئ حساب خدمة لاستخدامه في تحديد هوية مثيل 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. اختبار Gemini CodeDuration: 7:00

في واجهة المستخدم، انقر على "فتح JupyterLab".

1b7ff959f1072aaa.png

بعد الدخول إلى JupyterLab، افتح دفتر ملاحظات جديدًا في Python 3.

18c26d06183faca1.png

نفِّذ الرمز التالي في ورقة الملاحظات. تأكَّد من تعديل الرمز البرمجي ليشمل مشروعك المحدّد ومعلومات المنطقة.

من دفتر ملاحظات JupyterLab

pip install --upgrade google-genai

أعِد تشغيل نواة دفتر الملاحظات.

fe7911ce8b54ff8a.png

دوِّن نقطة نهاية واجهة برمجة التطبيقات. في هذا المثال، نستخدم نقطة نهاية واجهة برمجة التطبيقات <YOUR_REGION>-aiplatform.googleapis.com، وهي نقطة نهاية واجهة برمجة التطبيقات الافتراضية في 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.

دوِّن اسم واجهة برمجة التطبيقات الذي استخدمته عند تنفيذ الرمز. YOUR_REGION-aiplatform.googleapis.com هو اسم واجهة برمجة التطبيقات التلقائي في Vertex AI. علينا تغيير اسم واجهة برمجة التطبيقات وتشغيل الرمز مرة أخرى. يمكننا التأكّد من أنّ الرمز البرمجي يستخدم نقطة نهاية PSC من خلال تشغيل TCPdump في نافذة طرفية على "مثيل Workbench".

تشغيل TCPdump في الوحدة الطرفية

افتح "وحدة طرفية" في Workbench من خلال النقر على "ملف" > "جديد" > "وحدة طرفية".

2cc405367de1f4c2.png

إذا كنت تواجه مشاكل في رؤية ناتج النص في الوحدة الطرفية، عليك تعديل مظهر الوحدة الطرفية. يمكنك إجراء ذلك من خلال "الإعدادات" > "مظهر المحطة الطرفية" > "فاتح" أو "داكن".

من المحطة

sudo tcpdump host 10.100.100.0

تعديل Gemini Code

ارجع إلى دفتر الملاحظات، وعدِّل نقطة نهاية واجهة برمجة التطبيقات، ثم شغِّل الرمز مرة أخرى. يُرجى العِلم أنّنا غيّرنا نقطة نهاية واجهة برمجة التطبيقات إلى ‎ <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com. ويتوافق ذلك مع تنسيق واجهة برمجة التطبيقات الخاص بخدمة Private Service Connect وهو ‎ <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. تهانينا!

تهانينا على إكمال هذا الدرس العملي.

المواضيع التي تناولناها

  • أنشئ "مركزًا للشبكة السحابية المحلية".
  • إعداد أجهزة Spoke في شبكة VPC في مركز NCC
  • أنشئ شبكة Cloud HA VPN.
  • ضبط Hybrid Spokes في مركز NCC
  • أنشئ نقطة نهاية Private Service Connect لواجهات Google APIs.
  • ضبط مسار مخصّص عبر HA-VPN
  • إعداد منطقة ربط نظام أسماء النطاقات
  • ضبط مثيل Vertex Workbench
  • إعداد رمز Python في Gemini لاستخدام Private Service Connect (PSC) لنقطة نهاية Google APIs API.