通过 Private Service Connect 端点使用 Python SDK 访问 Vertex AI 上的 Anthropic Claude

1. 概览

您可以通过互联网访问 Vertex AI API,但在企业中,您可能希望在不通过互联网的情况下私下访问 Vertex AI API。在本实验中,您将首先通过在虚拟机实例上运行的 Python SDK 通过公共互联网访问 Vertex 上的 Anthropic Claude。

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

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

图 1.

103967918b096e97.png

2. 目标

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

  • 设置虚拟机实例以使用 Python SDK
  • 通过 Python 脚本连接到 Anthropic Claude 聊天
  • 配置 PSC 端点以连接到 Googleapis
  • 配置手动 DNS 条目
  • 验证到 Googleais 的连接路径

实验设置

自定进度的环境设置

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.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 图标:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

3. 任务 1. 设置环境

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

打开控制台右上角的 Cloud Shell。并按如下方式进行配置:4261e776f64ea978.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 防火墙规则
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
  1. 向 VPC 添加 SSH 防火墙规则
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

4. 任务 2. 在 Vertex Model Garden 中启用 Anthropic

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

  1. 前往 Vertex AI,然后选择 Model Garden
  2. 搜索 Anthropic,然后选择 Claude 3.5 Sonnet

4fd4338c598983d8.png

  1. 选择启用,您需要填写一些信息。填写表单,然后选择下一步
  2. 在最后一页上,选择同意以启用 Claude 3.5 Sonnet b3961312feb6c383.png

5. 任务 3. 创建 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-cloud-aiplatform 'anthropic[vertex]'"

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

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

  1. 前往“虚拟机实例”。选择以 anthro-vm 开头的虚拟机。选择 SSH。
  2. 通过 SSH 连接到 anthro-vm 后,输入 sudo -i 以启用 root
  3. 激活 venv 环境:
cd py-anthro-env
source env/bin/activate
  1. 现在,我们来对其进行身份验证,以便稍后进行一些测试。在虚拟机中运行以下命令,并在出现提示时按 y
gcloud auth application-default login
  1. 接下来,复制以 https:// 开头的网址,在实验室浏览器窗口中打开一个新标签页,然后粘贴该网址。接受提示。
  2. 当您看到以下内容时,选择“复制”,然后切换回虚拟机 anthro-vm 会话,在输入授权代码:中粘贴您复制的代码,然后按 Enter 键进行身份验证。

c29615cdf9324209.png

  1. 现在,我们来快速测试一下,看看能否连接到 Vertex Gemini API。该 API 使用 us-east5-aiplatform.googleapis.com,因此我们将对该地址执行 dig,以查看流量如何路由。
dig us-east5-aiplatform.googleapis.com
  1. 您应该会看到类似的内容(地址会有所不同)。请注意,由于该 API 是公共 API,因此路径是通过公共 IP 地址。
; <<>> DiG 9.16.48-Debian <<>> us-east5-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9117
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-east5-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.210.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.211.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.212.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.213.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.215.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.216.95
us-east5-aiplatform.googleapis.com. 300 IN A 108.177.12.95
us-east5-aiplatform.googleapis.com. 300 IN A 108.177.13.95
us-east5-aiplatform.googleapis.com. 300 IN A 74.125.26.95
  1. 现在,我们使用 Python。输入 ipython 以激活 ipython 界面。
ipython

4685b31f13df54e1.png

  1. 现在,复制并粘贴以下内容。这会询问 Claude“2024 年奥运会在哪里举行!”。(附注)请将 YOUR-Project-ID-Here 替换为您的项目 ID 的名称
from anthropic import AnthropicVertex

project_id = "YOUR-Project-ID-Here"
region = "us-east5"

client = AnthropicVertex(project_id=project_id, region=region)

message = client.messages.create(
    model="claude-3-5-sonnet@20240620",
    max_tokens=100,
    messages=[
        {
            "role": "user",
            "content": "Where is the olympics being held in 2024!",
        }
    ],
)
print(message)
  1. 按 Enter 键运行并查看结果。
  2. 此请求通过 Vertex 公开 API 访问了 Anthropic。
  3. 关闭 SSH 会话,然后继续操作。

7. 任务 5. 创建指向 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. 这将创建一个端点和一个服务目录条目。验证端点是否存在
gcloud compute forwarding-rules describe pscanthrovertex --global

8. 任务 6. 通过自动 Service Directory 区域验证端点连接情况

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

  1. 前往虚拟机实例 anthro-vm1。选择 SSH,然后通过 SSH 连接到虚拟机
  2. 输入 sudo -i 以获取 root 访问权限
  3. 使用 dig 命令检查到 aiplatform-pscanthrovertex.p.googleapis.com 的连接路径。您应该会看到 PSC 端点的 IP 地址
dig aiplatform-pscanthrovertex.p.googleapis.com

9. 任务 7. 为 googleapis 创建手动 DNS 条目(可选)

您可以使用专用 DNS 创建手动 DNS 条目,将其指向 PSC 端点。这会影响您为其分配的所有广告联盟。

  1. 前往“网络服务”,然后选择“Cloud DNS”。
  2. 在“区域”中,您应该会看到为 Google API 的 Private Service Connect 自动创建的区域,其区域类型为“Service Directory”。此值可用于连接到格式为 **SERVICE-ENDPOINT.p.googleapis.com 的 PSC 端点。示例:aiplatform-pscvertexgemini.p.googleapis.com
  3. 在本例中,我们要手动创建专用 DNS 条目。前往 Cloud DNS,然后选择创建区域
  4. 请按如下方式进行配置

配置

名称

区域类型

私享

区域名称

googleapis-private

DNS 名称

googleapis.com

添加影音平台(添加后选择“完成”)

anthropic-net

完成选择

创建

  1. 在“区域详情”区域中,选择添加标准以添加 A 记录

配置

名称

资源记录类型

A

IPv4 地址(添加端点的 IP 地址)

192.168.255.230

完成选择

创建

  1. 区域详情区域中,选择添加标准以添加 CNAME 记录

配置

名称

DNS 名称

*

记录资源类型

CNAME

规范名称 1

googleapis.com

完成选择

创建

  1. 您应该会看到包含 A 记录和 CNAME 的设置,如下所示:b7f122f0d1fd2850.png
  2. 接下来,我们将在 anthro-vm 上验证这些更改的连接性

10. 任务 8. 通过 IP 地址验证端点连接情况(可选)

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

  1. 前往虚拟机实例 anthro-vm。选择 SSH,然后通过 SSH 连接到虚拟机
  2. 输入 sudo -i 以获取 root 访问权限
  3. 使用 ping 命令检查到 us-east5-aiplatform.googleapis.com 的连接路径。这将对专用 DNS 中的 IP 地址执行 ping 操作,即 googleapis 的 A 记录。此 IP 地址是 PSC 端点,您的 ping 将会失败。
ping -c 2 us-east5-aiplatform.googleapis.com
  1. 使用 aiplatform-pscanthrovertex.p.googleapis.com 为 PSC Google API 自动创建的 DNS 条目,通过 ping 检查连接路径。此 IP 地址指向 PSC 端点的 IP 地址,因此您的 ping 将会失败。
ping -c 2 aiplatform-pscanthrovertex.p.googleapis.com
  1. 使用 dig 命令检查到 us-east5-aiplatform.googleapis.com 的连接路径。此处应填写 PSC 端点的 IP 地址。
dig us-east5-aiplatform.googleapis.com
  1. 返回控制台,然后打开另一个虚拟机实例 anthro-vm。选择 SSH,然后通过 SSH 连接到虚拟机
  2. 输入 sudo -i 以获取 root 访问权限
  3. 运行以下命令,查看 TCP 转储中的连接情况
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
  1. 现在,切换回虚拟机实例 anthro-vm 的第一个 SSH 实例
  2. 使用以下命令激活该环境
cd py-gem-env
source env/bin/activate
  1. 现在,我们来测试 Python。输入 ipython 以激活 ipython 界面。
ipython
  1. 现在,复制并粘贴以下内容。这会询问 Claude“什么是 roti?”(附注)请将 YOUR-Project-ID-Here 替换为您的项目 ID 的名称
from anthropic import AnthropicVertex

project_id = "YOUR-Project-ID-Here"
region = "us-east5"

client = AnthropicVertex(project_id=project_id, region=region)

message = client.messages.create(
    model="claude-3-5-sonnet@20240620",
    max_tokens=100,
    messages=[
        {
            "role": "user",
            "content": "What is a roti?",
        }
    ],
)
print(message)
  1. Enter 键运行并查看结果。
  2. 切换回虚拟机实例 anthro-vm 的第二个实例。您应该会看到 TCPDUMP 的结果。您会注意到,虚拟机的 IP 地址使用 PSC 端点 IP 地址连接到 us-east5-aiplatform.googleapis.com

关闭与虚拟机实例 anthro-vm 的所有 SSH 会话

11. 恭喜

恭喜,您已成功使用公共 API 地址和专用 Google API Private Service Connect 端点私下连接到 Vertex 上的 Anthropic。此功能可将私有 API 连接扩展到通过(互连、跨云互连和 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 --quiet

gcloud compute forwarding-rules delete pscanthrovertex --global

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

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

gcloud dns managed-zones delete googleapis-private

gcloud compute addresses delete anthro-ip --global


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

gcloud compute networks delete anthropic-net --quiet

您可以详细了解 Vertex AI 网络