通过 Private Service Connect 端点在 Vertex AI 上使用 Python SDK 访问 Anthropic Claude Opus 4.5 和 Gemini 3

1. 概览

Vertex AI API 可以通过互联网访问,但在企业中,您可能希望以私密方式访问 Vertex AI API,而无需通过互联网。在本实验中,您将首先通过在虚拟机实例上运行的 Python SDK,经由公共互联网访问 Vertex 上的 Anthropic Claude Opus 4.5Gemini 3 Pro

然后,您将创建指向 Googleapis 的 Private Service Connect 端点,并更改流量流以使用专用端点连接到 Vertex API。

此 Python 代码示例将获取输入问题,将其传递给 Claude Opus 以生成回答,然后将该输出传递给 Gemini Pro 3 以创建文本摘要并生成图片。

在本实验中,您将创建以下模式。

图 1.

c8f37e193349bfd6.png

2. 目标

在本实验中,您将学习如何执行以下任务:

  • 设置虚拟机实例以使用 Python SDK
  • 在 Vertex AI 中启用 Anthropic 模型卡片
  • 通过 Python 脚本连接到 Anthropic Claude Opus 4.5Gemini 3 Pro
  • 配置 PSC 端点以连接到 Googleapis
  • 配置手动 DNS 条目
  • 验证与 Googleais 的连接路径
  • 执行 Python 脚本以查询模型

实验设置

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:

激活 Cloud Shell

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

Google Cloud Shell 终端的屏幕截图,显示环境已连接

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。

3. 设置环境

我们将创建一个具有防火墙规则的自定义 VPC。如果您已有 VPC 和项目,则可以跳过此部分。

打开位于控制台右上角的 Cloud Shell。并按如下方式进行配置:b51b80043d3bac90.png

  1. 启用本实验中将使用的一些 API
gcloud services enable dns.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable servicedirectory.googleapis.com
  1. 设置一些变量。这些变量是自定义 VPC 的项目 ID 和网络 ID(您将在第 4 步中创建 VPC)。
projectid=$(gcloud config get-value project)
networkid=anthropic-net 
echo $projectid
echo $networkid
clear
  1. 现在,创建一个名为 anthropic-net 的自定义 VPC。
gcloud compute networks create $networkid \
--project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. 在新 VPC 中创建 vm1-subnet
gcloud compute networks subnets create vm-subnet \
--project=$projectid --range=10.0.88.0/24 \
--stack-type=IPV4_ONLY --network=$networkid \
--region=us-east1
  1. 向 VPC 添加 ICMP、SSH 和 HTTP 防火墙规则
gcloud compute firewall-rules create $networkid-allow-icmp --project=$projectid \
--network=$networkid \
--description="Allows ICMP connections from any source to any instance on the network." \
--direction=INGRESS \
--priority=65534 \
--source-ranges=0.0.0.0/0 \
--action=ALLOW \
--rules=icmp

gcloud compute firewall-rules create $networkid-allow-ssh \
--project=$projectid \
--network=$networkid \
--description="Allows TCP connections from any source to any instance on the network using port 22." \
--direction=INGRESS --priority=65534 \
--source-ranges=0.0.0.0/0 --action=ALLOW \
--rules=tcp:22

gcloud compute firewall-rules create $networkid-allow-web \
--project=$projectid \
--network=$networkid \
--description="Allows TCP connections on port 8080." \
--direction=INGRESS --priority=1000 \
--source-ranges=0.0.0.0/0 --action=ALLOW \
--rules=tcp:8080

4. 在 Vertex Model Garden 中启用 Anthropic

我们需要授予出站外部互联网访问权限,因此我们来创建 Cloud NAT 网关并将其附加。

  1. 前往 Vertex AI 信息中心,然后选择 Model Garden
  2. 搜索 Anthropic,然后选择 Claude Opus 4.5

d8937fa7d5e216b7.png 3. 选择启用,系统会要求您填写一些信息。填写表单,然后选择下一步。4. 在最终页面上,选择同意以启用 Claude 4.5 Opus

6ccda2a237000dea.png

  1. 84fbda607163ab9a.png

5. 创建 NAT 网关和虚拟机

我们需要授予出站外部互联网访问权限,因此我们来创建 Cloud NAT 网关并将其附加。

在 Cloud Shell 中使用以下命令

  1. 创建 Cloud NAT。
gcloud compute routers create anthro-out-nat \
    --network $networkid \
    --region us-east1 
  1. 创建 Cloud NAT 网关。
gcloud compute routers nats create anthro-out-nat-gw \
    --router-region us-east1 \
    --router anthro-out-nat \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

现在,我们来创建一个虚拟机,以便通过 Python SDK 访问 Vertex AI 上的 Anthropic。

我们将创建一个虚拟机,并安装以下软件包以进行测试

  1. 在同一 Cloud Shell 会话中,使用以下命令创建 anthro-vm
gcloud compute instances create anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--network-interface=stack-type=IPV4_ONLY,subnet=vm-subnet,no-address,network=$networkid \
--metadata startup-script="#! /bin/bash    
      sudo apt-get update
      sudo apt-get install python3 python3-dev python3-venv -y
      sudo apt-get install tcpdump dnsutils -y
      sudo -i
      sudo mkdir -p ~/py-anthro-env
      cd ~/py-anthro-env
      python3 -m venv env
      source env/bin/activate
      pip install -U ipython google-genai 'anthropic[vertex]'"

您应该会看到一个没有公共 IP 地址的虚拟机。现在,我们来配置虚拟机的

6. 配置虚拟机并进行测试

  1. 在 Google Cloud Shell 中,通过 SSH 连接到名为 anthro-vm 的新虚拟机。
gcloud compute ssh anthro-vm \
    --project=$projectid \
    --zone=us-east1-b \
    --tunnel-through-iap \
    -- -L 8080:localhost:8080
  1. 通过 SSH 连接到 anthro-vm 后,激活您的 venv 环境:
sudo -i -- bash -c 'cd py-anthro-env && source env/bin/activate && exec bash'
  1. 现在,我们来验证此账号,以便稍后进行一些测试。在虚拟机中运行以下命令,并在出现提示时按 y
gcloud auth application-default login
  1. 接下来,复制以 https:// 开头的网址,在实验浏览器窗口中打开一个新标签页,然后粘贴该网址。接受提示。
  2. 看到以下内容后,选择复制,然后切换回虚拟机 anthro-vm 会话,在 Enter authorization code:(输入授权代码:)提示处粘贴复制的代码,然后按 Enter 键进行身份验证。

b703db7aa2aa286a.png

  1. 现在,我们来快速测试一下是否可以连接到 Vertex Gemini API。
dig *-aiplatform.googleapis.com
  1. 您应该会看到类似如下所示的内容(地址会有所不同)。请注意,由于该 API 是公共 API,因此路径是通过公共 IP 地址实现的。
; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> *-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3728
;; 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       172.217.204.95
*-aiplatform.googleapis.com. 300 IN     A       172.217.203.95
*-aiplatform.googleapis.com. 300 IN     A       173.194.215.95
*-aiplatform.googleapis.com. 300 IN     A       142.250.98.95
*-aiplatform.googleapis.com. 300 IN     A       173.194.217.95
*-aiplatform.googleapis.com. 300 IN     A       142.251.107.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.196.95
  1. 现在,我们来使用 Python。输入 ipython 以激活 ipython 界面。
ipython

845ef4291429888a.png

  1. 现在,复制并粘贴以下内容。此提示会向 Claude Opus 4.5 提出问题:“构建智能体 AI 的关键步骤有哪些?”然后,将输出传递给 Gemini 3 Pro,后者会创建摘要并生成图像,然后将其保存在虚拟机上。
import os
import sys
import google.auth
from pathlib import Path
from google import genai
from google.genai import types
from anthropic import AnthropicVertex

# 1. Setup & Auth
print("--- Authenticating ---")
creds, project_id = google.auth.default()
LOCATION = "global"

# 2. Initialize Clients
print(f"--- Initializing Clients for Project: {project_id} ---")
google_client = genai.Client(vertexai=True, location=LOCATION, project=project_id)
claude_client = AnthropicVertex(region=LOCATION, project_id=project_id)

# 3. Define the Question
question = "What are the key steps to building Agentic AI?"
print(f"\n--- Asking Claude: {question} ---")

# 4. Get Claude's Research
msg = claude_client.messages.create(
    model="claude-opus-4-5@20251101",
    max_tokens=2048,
    messages=[{"role": "user", "content": question}]
)
claude_text = msg.content[0].text
print(f"✓ Claude Answered ({len(claude_text)} chars)")

# 5. Send to Gemini 3 for Image & Summary
print("\n--- Sending to Gemini 3 (Image + Text) ---")
gemini_prompt = f"""
I am providing you with a technical explanation generated by Claude Opus 4.5.
1. READ the text below.
2. GENERATE a concise, bulleted executive summary.
3. CREATE a high-quality, futuristic illustration for a tech blog header (16:9).

--- INPUT TEXT ---
{claude_text}
"""

response = google_client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=gemini_prompt,
    config=types.GenerateContentConfig(
        response_modalities=['TEXT', 'IMAGE'],
        temperature=0.7
    )
)

# 6. Save and Display Results
print("\n--- Results ---")
for part in response.parts:
    if part.text:
        print(f"\n[SUMMARY]:\n{part.text.strip()[:500]}...\n(Summary truncated for brevity)")
    elif image := part.as_image():
        filename = "gemini_agentic_ai.png"
        image.save(filename)
        print(f"\n✓ IMAGE SAVED to: {os.path.abspath(filename)}")
  1. 按两次 Enter 键即可运行并查看文本结果。
  2. 为了查看图片,我们需要在 Python 中启用 Web 服务。在 ipython 会话中运行以下命令
!python3 -m http.server 8080
  1. 现在,前往 Cloud Shell 中的网页预览选项,选择“在端口 8080 上预览”6dcb2bf9a08aacaf.png
  2. 在打开的网络会话中,选择 gemini_agentic_ai.png 以查看生成的图片。(以下示例图片由 AI 生成)
    fdcb79d8410dadc5.png
  3. Cloud Shell 中,按 Ctrl C 退出会话,然后输入 exit 并按 Enter 键(重复三次),返回到 Cloud Shell 主页
  4. 我们继续吧。

7. 创建指向 googleapis 的 PSC 端点

为了能够以私密方式连接到 Vertex API 端点,我们将为 googleapis 创建一个 Private Service Connect 端点。这样一来,我们就可以使用分配的专用 IP 地址将流量路由到所需的 Googleapis(在本例中为 Vertex Gemini)。

  1. 如果 Cloud Shell 尚未打开,请将其打开。为 PSC 端点创建 IP。在本例中,我们将使用 192.168.255.230
gcloud compute addresses create anthro-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=192.168.255.230 \
    --network=$networkid
  1. 验证 IP 是否已创建
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
  1. 接下来,创建 PSC 端点
gcloud compute forwarding-rules create pscanthrovertex \
    --global \
    --network=$networkid \
    --address=anthro-ip \
    --target-google-apis-bundle=all-apis
  1. 这将创建一个端点和一个 Service Directory 条目。验证端点是否存在
gcloud compute forwarding-rules describe pscanthrovertex --global

8. 通过自动服务目录区域验证端点连接

让我们使用专用端点连接到 Gemini。

  1. 前往虚拟机实例 anthro-vm1。选择“SSH”,并通过 SSH 连接到虚拟机
  2. 使用 dig 命令检查与 aiplatform-pscanthrovertex.p.googleapis.com 的连接路径。您应该会看到 PSC 端点的 IP 地址 192.168.255.230
dig aiplatform-pscanthrovertex.p.googleapis.com
  1. 退出所有 SSH 会话

9. 创建指向 googleapis 的手动 DNS 条目

您可以使用专用 DNS 创建指向 PSC 端点的手动 DNS 条目。这会影响您为其分配的所有媒体文件。

在 Cloud Shell 中运行以下命令。

  1. 为 googleapis.com 创建一个专用 DNS 区域,并将其附加到 anthropic-net 网络。
gcloud dns managed-zones create googleapis-private \
    --description="Private DNS zone for googleapis.com" \
    --dns-name="googleapis.com." \
    --visibility="private" \
    --networks="anthropic-net"
  1. 创建将根网域映射到 Private Service Connect 端点 IP (192.168.255.230) 的 A 记录
gcloud dns record-sets create "googleapis.com." \
    --zone="googleapis-private" \
    --type="A" \
    --ttl="300" \
    --rrdatas="192.168.255.230"
  1. 创建通配符 CNAME 记录,以将所有子网域(例如 aiplatform.googleapis.com)重定向到根 A 记录
gcloud dns record-sets create "*.googleapis.com." \
    --zone="googleapis-private" \
    --type="CNAME" \
    --ttl="300" \
    --rrdatas="googleapis.com."
  1. 列出相应地区中的记录集,以确认 A 记录和 CNAME 已正确创建。
gcloud dns record-sets list --zone="googleapis-private"
  1. 在控制台视图中,它应如下所示。您应该会看到包含 A 记录和 CNAME 的设置,如图所示 a51a8b8caa7a0f1e.png
  2. 接下来,我们验证 anthro-vm 上这些更改的连接性

10. 通过 IP 地址验证端点连接

让我们使用专用端点连接到 Gemini。

  1. 在 Google Cloud Shell 中,通过 SSH 连接到名为 anthro-vm 的新虚拟机。
gcloud compute ssh anthro-vm \
    --project=$projectid \
    --zone=us-east1-b \
    --tunnel-through-iap \
    -- -L 8080:localhost:8080
  1. 通过 SSH 连接到 anthro-vm 后,激活您的 venv 环境:
sudo -i -- bash -c 'cd py-anthro-env && source env/bin/activate && exec bash'
  1. 现在,我们来执行 dig,看看是否可以连接到 Vertex Gemini API。
dig *-aiplatform.googleapis.com
  1. 您应该会看到类似的内容(地址会有所不同)。请注意,路径是通过 PSC 端点 IP 地址实现的。
; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> *-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33703
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, 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     CNAME   googleapis.com.
googleapis.com.         300     IN      A       192.168.255.230

;; Query time: 8 msec
;; SERVER: 169.254.169.254#53(169.254.169.254) (UDP)
;; WHEN: Sat Nov 29 15:19:15 UTC 2025
;; MSG SIZE  rcvd: 86
  1. 使用 ping 命令。我们可以快速测试一下。注意:此 IP 是 PSC 端点,因此您的 ping 将失败。
ping -c 2 aiplatform.googleapis.com
  1. 现在,我们来使用 Python。输入 ipython 以激活 ipython 界面。
ipython

845ef4291429888a.png

  1. 现在,复制并粘贴以下内容。此提示会要求 Claude Opus 4.5“为初学者提供一份制作印度烤饼的分步食谱”。然后,将输出传递给 Gemini 3 Pro,后者会创建摘要并生成图片,然后将图片保存到虚拟机中
import os
import sys
import google.auth
from pathlib import Path
from google import genai
from google.genai import types
from anthropic import AnthropicVertex

# 1. Setup & Auth
print("--- Authenticating ---")
creds, project_id = google.auth.default()
LOCATION = "global"

# 2. Initialize Clients
print(f"--- Initializing Clients for Project: {project_id} ---")
google_client = genai.Client(vertexai=True, location=LOCATION, project=project_id)
claude_client = AnthropicVertex(region=LOCATION, project_id=project_id)

# 3. Define the Question
question = "Give me a step by step recipe to make a roti for a beginner?"
print(f"\n--- Asking Claude: {question} ---")

# 4. Get Claude's Research
msg = claude_client.messages.create(
    model="claude-opus-4-5@20251101",
    max_tokens=2048,
    messages=[{"role": "user", "content": question}]
)
claude_text = msg.content[0].text
print(f"✓ Claude Answered ({len(claude_text)} chars)")

# 5. Send to Gemini 3 for Image & Summary
print("\n--- Sending to Gemini 3 (Image + Text) ---")
gemini_prompt = f"""
I am providing you with a technical explanation generated by Claude Opus 4.5.
1. READ the text below.
2. GENERATE a concise, bulleted executive summary.
3. CREATE a high-quality, futuristic illustration for a tech blog header (16:9).

--- INPUT TEXT ---
{claude_text}
"""

response = google_client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=gemini_prompt,
    config=types.GenerateContentConfig(
        response_modalities=['TEXT', 'IMAGE'],
        temperature=0.7
    )
)

# 6. Save and Display Results
print("\n--- Results ---")
for part in response.parts:
    if part.text:
        print(f"\n[SUMMARY]:\n{part.text.strip()[:500]}...\n(Summary truncated for brevity)")
    elif image := part.as_image():
        filename = "cookingroti.png"
        image.save(filename)
        print(f"\n✓ IMAGE SAVED to: {os.path.abspath(filename)}")
  1. 按两次 Enter 键即可运行并查看文本结果。
  2. 如需查看图片,我们需要在 Python 中启用 Web 服务,因此请在 IPython 会话中运行以下命令
!python3 -m http.server 8080
  1. 现在,前往 Cloud Shell 中的“网页预览”选项,选择“在端口 8080 上预览”
  2. 选择 cookingroti.png 以查看生成的图片。(以下示例由 AI 生成)bcf43fffede275cb.png
  3. Cloud Shell 中,按 Ctrl C 退出会话,然后输入 exit 并按 Enter 键(重复三次),返回到 Cloud Shell 主页

11. 恭喜

恭喜!您已经体验了乐趣,并成功通过公共 API 地址和以非公开方式使用 Googleapis 的 Private Service Connect 端点,在 Vertex 上连接到 Anthropic Claude Opus 4.5Gemini 3 Pro。此功能可以将专用 API 连接扩展到通过(互连、Cross-Cloud Interconnect 和 VPC)连接的本地/其他云环境。

清理

gcloud compute instances delete anthro-vm --zone=us-east1-b --quiet

gcloud compute routers nats delete anthro-out-nat-gw --router=anthro-out-nat --region=us-east1 --quiet

gcloud compute routers delete anthro-out-nat --region=us-east1 --quiet

gcloud compute firewall-rules delete anthropic-net-allow-icmp anthropic-net-allow-ssh anthropic-net-allow-web --quiet

gcloud compute forwarding-rules delete pscanthrovertex --global --quiet

gcloud dns record-sets delete googleapis.com. --zone googleapis-private --type A --quiet

gcloud dns record-sets delete *.googleapis.com --zone googleapis-private --type CNAME --quiet

gcloud dns managed-zones delete googleapis-private --quiet

gcloud compute addresses delete anthro-ip --global --quiet

gcloud compute networks subnets delete vm-subnet --region=us-east1 --quiet

gcloud compute networks delete anthropic-net --quiet

后续步骤/了解详情

您可以详细了解 Vertex AI 网络

Codelab通过 Private Service Connect 端点使用 Python SDK 访问 Gemini 3 Pro 聊天

Codelab使用 ADK 构建 AI 智能体:基础知识

参与下一项实验

继续探索 Google Cloud,并查看以下其他 Google Cloud Skills Boost 实验: