Acessar o modelo Anthropic Claude na Vertex AI com o SDK Python usando o endpoint do Private Service Connect

1. Visão geral

A API Vertex AI pode ser acessada pela Internet. No entanto, na sua empresa, talvez você queira acessar a API Vertex AI de forma particular, sem passar pela Internet. Neste laboratório, você vai acessar o Anthropic Claude no Vertex usando o SDK do Python em execução em uma instância de VM pela Internet pública.

Em seguida, você vai criar um endpoint do Private Service Connect para as APIs do Google e mudar o fluxo de tráfego para usar o endpoint privado e se conectar à API Vertex.

Neste laboratório, você vai criar o seguinte padrão.

Figura 1.

103967918b096e97.png

2. Objetivos

Neste laboratório, você vai aprender a fazer o seguinte:

  • Configurar a instância de VM para usar o SDK do Python
  • Conectar-se ao chat do Anthropic Claude usando um script Python
  • Configurar o endpoint do PSC para se conectar às Googleapis
  • Configurar entradas DNS manuais
  • Verificar o caminho de conectividade para o Googleais

Configuração do laboratório

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Inicie o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

No Console do Google Cloud, clique no ícone do Cloud Shell na barra de ferramentas superior à direita:

55efc1aaa7a4d3ad.png

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

7ffe5cbb04455448.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Neste codelab, todo o trabalho pode ser feito com um navegador. Você não precisa instalar nada.

3. Tarefa 1: Configurar o ambiente

Vamos criar uma VPC personalizada com regras de firewall. Se você já tiver uma VPC e um projeto, pule esta parte.

Abra o Cloud Shell, localizado na parte de cima do console, à direita. E configure da seguinte maneira: 4261e776f64ea978.png

  1. Ative algumas das APIs que vamos usar neste laboratório
gcloud services enable dns.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable servicedirectory.googleapis.com
  1. Defina algumas variáveis. Essas variáveis são o ID do projeto e o ID da rede da VPC personalizada (você vai criar a VPC na etapa 4).
projectid=$(gcloud config get-value project)
networkid=anthropic-net 
echo $projectid
echo $networkid
clear
  1. Agora crie uma VPC personalizada chamada anthropic-net.
gcloud compute networks create $networkid \
--project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. Crie a sub-rede vm1 na nova VPC
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. Adicionar uma regra de firewall ICMP à VPC
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. Adicionar uma regra de firewall SSH à VPC
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. Tarefa 2: Ativar o Anthropic no Model Garden da Vertex

Precisamos conceder acesso externo de saída à Internet. Portanto, vamos criar e anexar um gateway do Cloud NAT.

  1. Acesse o Vertex AI e selecione Model Garden.
  2. Pesquise Anthropic e selecione Claude 3.5 Sonnet.

4fd4338c598983d8.png

  1. Selecione Ativar. Você precisará preencher algumas informações. Preencha o formulário e selecione Próxima.
  2. Na página final, selecione Concordo para ativar o Claude 3.5 Sonnet b3961312feb6c383.png

5. Tarefa 3: Criar gateway NAT e VMs

Precisamos conceder acesso externo de saída à Internet. Portanto, vamos criar um gateway do Cloud NAT e anexá-lo.

No Cloud Shell, use os seguintes comandos

  1. Crie o Cloud NAT.
gcloud compute routers create anthro-out-nat \
    --network $networkid \
    --region us-east1 
  1. Crie o gateway do 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

Agora vamos criar uma VM para acessar o Anthropic na Vertex AI usando o SDK do Python.

Vamos criar uma VM para testar com os pacotes instalados a seguir

  1. Na mesma sessão do Cloud Shell, crie anthro-vm usando o seguinte.
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]'"

Uma VM será criada sem endereços IP públicos. Agora vamos configurar as VMs

6. Tarefa 4: Configurar a VM e testar

  1. Acesse as instâncias de VM. Selecione a VM que começa com anthro-vm. Escolha SSH.
  2. Depois de usar o SSH para acessar o anthro-vm,ative o raiz digitando sudo -i.
  3. Ative o ambiente venv:
cd py-anthro-env
source env/bin/activate
  1. Agora vamos autenticar isso para fazer alguns testes mais tarde. Execute o comando a seguir na VM e pressione y quando solicitado.
gcloud auth application-default login
  1. Em seguida, copie o URL que aparece começando com https://, abra uma nova guia na janela do navegador do laboratório e cole o URL. Aceite as solicitações.
  2. Quando você receber a mensagem de seleção de cópia a seguir, volte para a sessão anthro-vm e, em Inserir código de autorização, cole o código copiado e pressione Enter para autenticar.

c29615cdf9324209.png

  1. Agora vamos fazer um teste rápido para saber se podemos nos conectar à API Vertex Gemini, que usa us-east5-aiplatform.googleapis.com. Vamos fazer uma dig para esse endereço e ver como o tráfego é roteado.
dig us-east5-aiplatform.googleapis.com
  1. Você vai encontrar algo parecido (o endereço será diferente). O caminho é por endereços IP públicos, já que a API é pública.
; <<>> 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. Agora vamos usar o Python. Digite ipython para ativar a interface ipython.
ipython

4685b31f13df54e1.png

  1. Agora copie e cole o seguinte. Isso faz com que Claude pergunte: Onde serão realizados os Jogos Olímpicos de 2024? . Observação: substitua YOUR-Project-ID-Here pelo nome do ID do seu projeto.
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. Pressione Enter para executar e conferir o resultado.
  2. Essa solicitação acessou a Anthropic pela API pública da Vertex.
  3. Feche a sessão SSH e vamos continuar.

7. Tarefa 5: Criar o endpoint do PSC para o googleapis

Para ativar a conectividade privada ao endpoint da API Vertex, vamos criar um endpoint do Private Service Connect para googleapis. Isso nos permite usar um endereço IP particular que atribuímos para encaminhar o tráfego para o googleapis necessário, neste caso, o Vertex Gemini.

  1. Abra o Cloud Shell, se ainda não estiver aberto. Crie um IP para o endpoint do PSC. Vamos usar 192.168.255.230 neste caso.
gcloud compute addresses create anthro-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=192.168.255.230 \
    --network=$networkid
  1. Verificar o IP criado
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
  1. Em seguida, crie o endpoint do PSC
gcloud compute forwarding-rules create pscanthrovertex \
    --global \
    --network=$networkid \
    --address=anthro-ip \
    --target-google-apis-bundle=all-apis
  1. Isso vai criar um endpoint e uma entrada do Diretório de serviços. Verificar se o endpoint existe
gcloud compute forwarding-rules describe pscanthrovertex --global

8. Tarefa 6: Verificar a conectividade do endpoint pela zona automática do Diretório de serviços

Vamos nos conectar usando o endpoint particular para se conectar ao Gemini.

  1. Acesse a instância de VM anthro-vm1. Selecione SSH e SSH na VM
  2. Tenha acesso raiz digitando sudo -i
  3. Verifique o caminho de conectividade para aiplatform-pscanthrovertex.p.googleapis.com usando o comando dig. O IP do endpoint do PSC vai aparecer.
dig aiplatform-pscanthrovertex.p.googleapis.com

9. Tarefa 7: Criar entrada DNS manual para googleapis (opcional)

É possível criar uma entrada DNS manual para apontar para o endpoint do PSC usando o DNS particular. Isso afetaria todas as redes que você atribui a ele.

  1. Acesse "Serviços de rede" e selecione "Cloud DNS".
  2. Em "Zonas", você vai encontrar uma zona criada automaticamente para o Private Service Connect para APIs do Google, com o tipo de zona "Diretório de serviços". Ele pode ser usado para se conectar ao endpoint do PSC com o formato **SERVICE-ENDPOINT.p.googleapis.com Exemplo aiplatform-pscvertexgemini.p.googleapis.com
  3. Neste caso, queremos criar manualmente uma entrada de DNS particular. Acesse o Cloud DNS e selecione Criar zona.
  4. Configure da seguinte maneira

Configuração

Nome

Tipo de zona

Particular

Nome da zona

googleapis-private

Nome do DNS

googleapis.com

Adicionar redes (selecione "Concluído" quando terminar)

anthropic-net

Para concluir a seleção

Criar

  1. Na área "Detalhes da zona", selecione Adicionar padrão para adicionar um registro A.

Configuração

Nome

Tipo de registro de recurso

A

Endereço IPv4 (adicionar o endereço IP do endpoint)

192.168.255.230

Para concluir a seleção

Criar

  1. Na área Detalhes da zona, selecione Adicionar padrão para adicionar um registro CNAME.

Configuração

Nome

Nome do DNS

*

Tipo de recurso de registro

CNAME

Nome canônico 1

googleapis.com

Para concluir a seleção

Criar

  1. Você vai encontrar uma configuração com um registro A e CNAME como este: b7f122f0d1fd2850.png
  2. Em seguida, verificamos a conectividade com essas mudanças no anthro-vm.

10. Tarefa 8: Verificar a conectividade do endpoint pelo endereço IP (opcional)

Vamos nos conectar usando o endpoint particular para se conectar ao Gemini.

  1. Acesse a instância de VM anthro-vm. Selecione SSH e SSH na VM
  2. Tenha acesso raiz digitando sudo -i
  3. Verifique o caminho de conectividade para us-east5-aiplatform.googleapis.com usando o comando ping. Isso vai fazer um ping no endereço IP no DNS particular, registro A para googleapis. Esse IP é um endpoint do PSC, e seus pings não vão ser bem-sucedidos.
ping -c 2 us-east5-aiplatform.googleapis.com
  1. Verifique o caminho de conectividade com um ping usando a entrada DNS criada automaticamente para as APIs do Google PSC com aiplatform-pscanthrovertex.p.googleapis.com. Isso aponta para o endereço IP do endpoint do PSC, e seus pings não vão ser bem-sucedidos.
ping -c 2 aiplatform-pscanthrovertex.p.googleapis.com
  1. Verifique o caminho de conectividade para us-east5-aiplatform.googleapis.com usando o comando dig. Esse deve ser o endereço IP do endpoint do PSC.
dig us-east5-aiplatform.googleapis.com
  1. Volte ao console e abra outra instância da VM anthro-vm. Selecione SSH e use o SSH na VM.
  2. Acesse o acesso raiz digitando sudo -i
  3. Execute o comando de acompanhamento para conferir a conectividade em um despejo TCP.
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
  1. Agora volte para a primeira instância SSH da instância de VM anthro-vm.
  2. Ativar o ambiente usando
cd py-gem-env
source env/bin/activate
  1. Agora vamos testar o Python. Digite ipython para ativar a interface do ipython.
ipython
  1. Agora copie e cole o seguinte. Isso faz com que Claude pergunte: O que é um roti?. Observação: substitua YOUR-Project-ID-Here pelo nome do ID do seu projeto.
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. Pressione Enter para executar e conferir o resultado.
  2. Volte para a segunda instância de VM anthro-vm. Você vai ver o resultado do TCPDUMP. Você vai notar que o endereço IP da VM está usando o endereço IP do endpoint do PSC para se conectar a us-east5-aiplatform.googleapis.com.

Feche todas as sessões SSH para a instância de VM anthro-vm.

11. Parabéns

Parabéns, você se conectou ao Anthropic no Vertex usando o endereço da API pública e o endpoint do Private Service Connect para Googleapis. Essa funcionalidade pode estender a conectividade de API privada ao seu ambiente local/outra nuvem conectado por (Interconnect, Cross-Cloud Interconnect e VPC).

Limpar

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

Saiba mais sobre a rede da Vertex AI.