透過 Private Service Connect 端點,使用 Python SDK 在 Vertex AI 上存取 Anthropic Claude

1. 總覽

Vertex AI API 可透過網際網路存取,但在企業中,您可能會想要私下存取 Vertex AI API,而不需要透過網際網路。在本研究室中,您將先透過公開網際網路,在 VM 執行個體上執行的 Python SDK 存取 Vertex 上的 Anthropic Claude。

接著,您將建立 Private Service Connect 端點連線至 Googleapis,並變更流量流程,以便使用私人端點連線至 Vertex API。

在本研究室中,您將建立下列模式。

圖 1.

103967918b096e97.png

2. 目標

在本研究室中,您將瞭解如何執行下列工作:

  • 設定 VM 執行個體以使用 Python SDK
  • 透過 Python 指令碼連線至 Anthropic Claude 即時通訊
  • 設定 PSC 端點以連線至 Googleapis
  • 設定手動 DNS 項目
  • 驗證連線至 Googleais 的路徑

設定研究室

自助式環境設定

  1. 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請務必建立帳戶

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 「Project name」是這個專案參與者的顯示名稱。這是 Google API 不會使用的字元字串。您隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中都是不重複的值,且無法變更 (設定後即無法變更)。Cloud 控制台會自動產生專屬字串,您通常不需要特別在意。在大多數程式碼研究室中,您都需要參照專案 ID (通常會以 PROJECT_ID 表示)。如果您不喜歡系統產生的 ID,可以隨機產生另一個 ID。或者,您也可以自行嘗試,看看是否可用。這項設定在這個步驟後就無法變更,並會在整個專案期間維持不變。
  • 提醒您,有些 API 會使用第三個值「專案編號」。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用帳單功能,才能使用 Cloud 資源/API。執行這個程式碼研究室不會產生太多費用,甚至可能完全不會產生費用。如要關閉資源,避免在本教學課程結束後繼續產生費用,您可以刪除建立的資源或專案。Google Cloud 新使用者可享有價值 $300 美元的免費試用期

啟動 Cloud Shell

雖然 Google Cloud 可透過筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是在雲端運作的指令列環境。

Google Cloud 控制台中,按一下右上方工具列的 Cloud Shell 圖示:

55efc1aaa7a4d3ad.png

佈建並連線至環境的作業需要一些時間才能完成。完成後,畫面應如下所示:

7ffe5cbb04455448.png

這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,可大幅提升網路效能和驗證功能。您可以在瀏覽器中完成本程式碼研究室的所有工作。您不需要安裝任何東西。

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. 設定一些變數。這些變數是自訂虛擬私有雲的專案 ID 和網路 ID (您會在步驟 4 中建立虛擬私有雲)。
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. 在新虛擬私有雲網路中建立 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. 在虛擬私有雲中新增 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 模型園地中啟用 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

接下來,我們將建立一個 VM,透過 Python SDK 存取 Vertex AI 上的 Anthropic。

我們將建立 VM 來測試安裝下列套件

  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 位址的 VM 建立作業。接下來,我們來設定 VM 的

6. 工作 4:設定及測試 VM

  1. 前往 VM 執行個體。選取開頭為 anthro-vm 的 VM。選擇 SSH。
  2. 透過 SSH 連線至 anthro-vm 後,輸入 sudo -i 即可啟用 root
  3. 啟用 venv 環境:
cd py-anthro-env
source env/bin/activate
  1. 接下來,我們要驗證這個值,以便稍後進行測試。在 VM 中執行下列指令,並在系統提示時按下 y
gcloud auth application-default login
  1. 接著,複製開頭為 https:// 的網址,在實驗室瀏覽器視窗中開啟新的分頁,然後貼上網址。接受提示。
  2. 當您看到下列選取複製畫面時,請切換回 vm anthro-vm 工作階段,然後在「Enter authorization code:」中貼上複製的程式碼,然後按下 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,請先開啟 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:透過自動服務目錄區域驗證端點連線

讓我們使用私人端點連線至 Gemini。

  1. 前往 VM 執行個體 anthro-vm1。選取 SSH 並透過 SSH 連線至 VM
  2. 輸入 sudo -i 即可取得根目錄存取權
  3. 使用 dig 指令,檢查 aiplatform-pscanthrovertex.p.googleapis.com 的連線路徑。您應該會看到 PSC 端點的 IP 位址
dig aiplatform-pscanthrovertex.p.googleapis.com

9. 工作 7:建立手動 DNS 項目至 googleapis (選用)

您可以建立手動 DNS 項目,使用私人 DNS 指向 PSC 端點。這會影響您指派給該聯播網的所有聯播網。

  1. 前往「網路服務」並選取「Cloud DNS」。
  2. 在區域中,您應該會看到系統為 Google API 的 Private Service Connect 自動建立的區域,以及區域類型服務目錄。您可以使用這個值連線至 PSC 端點,格式為 **SERVICE-ENDPOINT.p.googleapis.com 範例 aiplatform-pscvertexgemini.p.googleapis.com
  3. 在本例中,我們要手動建立私人 DNS 項目。前往 Cloud DNS,然後選取「Create Zone」(建立可用區)
  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. 前往 VM 執行個體 anthro-vm。選取 SSH 並透過 SSH 連線至 VM
  2. 輸入 sudo -i 即可取得根目錄存取權
  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。這會指向 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. 返回控制台,開啟另一個 VM 執行個體 anthro-vm。選取「SSH」SSH,然後透過 SSH 連線至 VM
  2. 輸入 sudo -i 即可取得根目錄存取權
  3. 執行下列指令,查看 TCP 轉儲中的連線
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
  1. 接著,切換回 VM 執行個體 anthro-vm 的第一個 SSH 例項
  2. 使用以下指令啟用環境
cd py-gem-env
source env/bin/activate
  1. 接下來,我們來測試 Python。輸入 ipython 即可啟用 ipython 介面。
ipython
  1. 複製並貼上下列內容。這會詢問 Claude「What is a 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. 切換回 VM 執行個體 anthro-vm 的第二個執行個體。您應該會看到 TCPDUMP 的結果。您會發現,VM 的入站和出站 IP 位址都使用 PSC 端點 IP 位址連線至 us-east5-aiplatform.googleapis.com

關閉 VM 執行個體 anthro-vm 的所有 SSH 工作階段

11. 恭喜

恭喜!您已成功使用公開 API 位址和私密的 Google API Private Service Connect 端點,連線至 Vertex 上的 Anthropic。這項功能可將私人 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 --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 網路