Cortex REST API

A Cortex REST API oferece acesso a modelos de ponta da Anthropic, OpenAI, Meta, Mistral e outras empresas por meio do SDK ou ponto de extremidade preferido. Toda a inferência é executada dentro do perímetro do Snowflake, para que seus dados permaneçam seguros e dentro do seu limite de governança. Consulte abaixo como começar.

Escolher sua API

A Cortex REST API é compatível com duas especificações de API padrão do setor. Escolha a opção que melhor se adapta à sua pilha:

Chat Completions API

API de mensagens

Compatibilidade

OpenAI Chat Completions API

Anthropic Messages API

Ponto de extremidade

/api/v2/cortex/v1/chat/completions

/api/v2/cortex/v1/messages

Modelos compatíveis

Todos os modelos (OpenAI, Claude, Llama, Mistral, DeepSeek, Snowflake)

Somente modelos Claude

Suporte para SDK

SDKs Python e JavaScript da OpenAI

SDK Python da Anthropic

Melhor para

Maioria dos casos de uso; flexibilidade multimodelo

Integrações existentes com o Anthropic; paridade com a Anthropic API

Ambas as APIs compartilham a mesma autenticação, catálogo de modelos e limites de taxa. A única diferença é o formato de solicitação/resposta e com quais modelos cada ponto de extremidade é compatível. Para obter preços, consulte a tabela de consumo de serviços do Snowflake.

Guia de início rápido

Pré-requisitos

Antes de começar, você precisa de:

  1. URL da sua conta Snowflake (por exemplo, https://<account-identifier>.snowflakecomputing.com).

  2. Um token de acesso programático (programmatic access token, PAT) do Snowflake para autenticação. Consulte Geração de um token de acesso programático.

  3. Um nome de modelo para usar nas solicitações. Consulte Disponibilidade do modelo para obter os modelos disponíveis.

Guia rápido da Chat Completions

A Chat Completions API segue a especificação da OpenAI. Você pode usar diretamente o SDK da OpenAI.

from openai import OpenAI

client = OpenAI(
  api_key="<SNOWFLAKE_PAT>",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
)

response = client.chat.completions.create(
  model="claude-sonnet-4-5",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "How does a snowflake get its unique pattern?"}
  ]
)

print(response.choices[0].message.content)

Nos exemplos anteriores, substitua o seguinte:

  • <account-identifier>: seu identificador de conta Snowflake.

  • <SNOWFLAKE_PAT>: um token de acesso programático (programmatic access token, PAT) do Snowflake.

  • model: o nome do modelo. Consulte Disponibilidade do modelo para obter os modelos compatíveis.

Guia rápido da Messages API

A Messages API segue a especificação da Anthropic e é compatível apenas com modelos Claude.

O SDK da Anthropic envia credenciais via x-api-key por padrão, mas o Snowflake espera um token Bearer. Use um cliente httpx para definir o cabeçalho de autorização correto.

import httpx
import anthropic

PAT = "<SNOWFLAKE_PAT>"

http_client = httpx.Client(
  headers={"Authorization": f"Bearer {PAT}"},
)

client = anthropic.Anthropic(
  api_key="not-used",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex",
  http_client=http_client,
  default_headers={"Authorization": f"Bearer {PAT}"},
)

response = client.messages.create(
  model="claude-sonnet-4-5",
  max_tokens=1024,
  messages=[
    {"role": "user", "content": "How does a snowflake get its unique pattern?"}
  ],
)

print(response.content[0].text)

Nos exemplos anteriores, substitua o seguinte:

  • <account-identifier>: seu identificador de conta Snowflake.

  • <SNOWFLAKE_PAT>: um token de acesso programático (programmatic access token, PAT) do Snowflake.

  • model: o nome do modelo Claude. Consulte Disponibilidade do modelo para obter os modelos compatíveis.

Configuração da autenticação

Para se autenticar na Cortex REST API, você pode usar os métodos descritos em Autenticando o Snowflake REST APIs com Snowflake.

Defina o cabeçalho Authorization para incluir seu token (por exemplo, um token da web JSON [JWT], um token OAuth ou um token de acesso programático).

Dica

Considere criar um usuário dedicado para solicitações da Cortex REST API.

Configuração da autorização

To send a REST API request, your default role must be granted either the SNOWFLAKE.CORTEX_USER database role or the SNOWFLAKE.CORTEX_REST_API_USER database role. SNOWFLAKE.CORTEX_USER provides access to all Covered AI features including the Cortex REST API, whereas SNOWFLAKE.CORTEX_REST_API_USER provides access only to the Cortex REST API.

In most cases, users already have access because SNOWFLAKE.CORTEX_USER is granted to the PUBLIC role automatically, and all roles inherit PUBLIC.

Se o administrador do Snowflake revogou essa concessão, ele deve concedê-la novamente:

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE my_role;
GRANT ROLE my_role TO USER my_user;

Importante

As solicitações REST API usam a função padrão do usuário, portanto, essa função deve ter os privilégios necessários. Você pode alterar a função padrão de um usuário com :doc:`ALTER … USER SETDEFAULT_ROLE.

ALTER USER my_user SET DEFAULT_ROLE=my_role

Limiting access using the Cortex REST API user role

To provide selective access to the Cortex REST API for specific users, use the SNOWFLAKE.CORTEX_REST_API_USER database role. This role grants access to the Cortex REST API without granting access to other Cortex features such as Cortex AI functions, Cortex Agent, Cortex Analyst, Cortex Fine-tuning, or Cortex Search.

CORTEX_REST_API_USER is not granted to the PUBLIC role by default. An account administrator must explicitly grant this role to roles that require access to the Cortex REST API. The SNOWFLAKE.CORTEX_REST_API_USER database role can’t be granted directly to a user. For more information, see Como usar as funções de banco de dados SNOWFLAKE.

Importante

If your user roles already have the CORTEX_USER role, you must revoke access to the CORTEX_USER role before the CORTEX_REST_API_USER role can take effect as a fine-grained control.

REVOKE DATABASE ROLE SNOWFLAKE.CORTEX_USER FROM ROLE PUBLIC;

To provide access to the Cortex REST API, use the ACCOUNTADMIN role to do the following:

  1. Grant the SNOWFLAKE.CORTEX_REST_API_USER database role to a custom role.

  2. Assign this custom role to users.

The following example creates the custom role cortex_rest_api_role, grants it the CORTEX_REST_API_USER database role, and assigns the role to example_user:

USE ROLE ACCOUNTADMIN;
CREATE ROLE cortex_rest_api_role;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_REST_API_USER TO ROLE cortex_rest_api_role;

GRANT ROLE cortex_rest_api_role TO USER example_user;

You can also grant access to the Cortex REST API through existing roles. For example, if you have an api_consumer role used by a group of users, you can grant access with a single GRANT statement:

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_REST_API_USER TO ROLE api_consumer;

Disponibilidade do modelo

As tabelas a seguir mostram os modelos disponíveis na Cortex REST API para cada região:

Modelo
Entre nuvens
(Qualquer região)
AWS Global
(Entre regiões)
AWS US
(Entre regiões)
AWS EU
(Entre regiões)
AWS APJ
(Entre regiões)
Azure Global
(Entre regiões)
Azure US
(Entre regiões)
Azure EU
(Entre regiões)

claude-opus-4-7

*

*

*

*

claude-sonnet-4-6

claude-opus-4-6

claude-sonnet-4-5

claude-opus-4-5

claude-haiku-4-5

claude-4-sonnet

claude-4-opus

claude-3-7-sonnet

openai-gpt-5.4

*

*

*

openai-gpt-5.2

openai-gpt-5.1

openai-gpt-5

*

*

*

*

openai-gpt-5-mini

*

*

*

openai-gpt-5-nano

*

*

*

openai-gpt-4.1

openai-gpt-oss-120b

*

llama4-maverick

llama3.1-8b

llama3.1-70b

llama3.1-405b

deepseek-r1

mistral-7b

mistral-large

mistral-large2

snowflake-llama-3.3-70b

* Indica uma função ou um modelo da versão preliminar. Os recursos em versão preliminar não são adequados para cargas de trabalho de produção.

Você também pode usar qualquer modelo com ajuste fino em qualquer região compatível.

Recursos

Streaming

Ambas as APIs são compatíveis com streaming de respostas usando eventos enviados pelo servidor.

Streaming da Chat Completions

from openai import OpenAI

client = OpenAI(
  api_key="<SNOWFLAKE_PAT>",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
)

response = client.chat.completions.create(
  model="claude-sonnet-4-5",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "How does a snowflake get its unique pattern?"}
  ],
  stream=True
)

for chunk in response:
    print(chunk.choices[0].delta.content, end="", flush=True)

Streaming de API de mensagens

import httpx
import anthropic

PAT = "<SNOWFLAKE_PAT>"

http_client = httpx.Client(
  headers={"Authorization": f"Bearer {PAT}"},
)

client = anthropic.Anthropic(
  api_key="not-used",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex",
  http_client=http_client,
  default_headers={"Authorization": f"Bearer {PAT}"},
)

with client.messages.stream(
  model="claude-sonnet-4-5",
  max_tokens=1024,
  messages=[
    {"role": "user", "content": "How does a snowflake get its unique pattern?"}
  ],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

Chamada de ferramentas

A chamada de ferramentas permite que o modelo invoque funções externas durante uma conversa. O fluxo funciona em etapas:

  1. Você envia uma solicitação com uma lista de ferramentas disponíveis.

  2. O modelo decide chamar uma ou mais ferramentas e retorna o nome da ferramenta e os argumentos.

  3. Você executa a ferramenta.

  4. Você envia o resultado da ferramenta de volta e o modelo gera uma resposta final.

A chamada de ferramenta é compatível com modelos do OpenAI e do Claude.

Chamada da ferramenta Chat Completions

import json
from openai import OpenAI

client = OpenAI(
  api_key="<SNOWFLAKE_PAT>",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
)

tools = [
  {
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Get the current weather for a location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          }
        },
        "required": ["location"]
      }
    }
  }
]

messages = [
  {"role": "user", "content": "What is the weather like in San Francisco?"}
]

# Step 1: Send the request with tools
response = client.chat.completions.create(
  model="claude-sonnet-4-5",
  messages=messages,
  tools=tools,
)

# Step 2: The model responds with tool_calls
message = response.choices[0].message

if message.tool_calls:
    tool_call = message.tool_calls[0]

    # Step 3: Execute the tool (your implementation)
    result = json.dumps({"temperature": "69°F", "condition": "sunny"})

    # Step 4: Send the tool result back
    messages.append(message)
    messages.append({
      "role": "tool",
      "tool_call_id": tool_call.id,
      "content": result,
    })

    final_response = client.chat.completions.create(
      model="claude-sonnet-4-5",
      messages=messages,
      tools=tools,
    )

    print(final_response.choices[0].message.content)

Chamada da ferramenta Messages API

import json
import httpx
import anthropic

PAT = "<SNOWFLAKE_PAT>"

http_client = httpx.Client(
  headers={"Authorization": f"Bearer {PAT}"},
)

client = anthropic.Anthropic(
  api_key="not-used",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex",
  http_client=http_client,
  default_headers={"Authorization": f"Bearer {PAT}"},
)

tools = [
  {
    "name": "get_weather",
    "description": "Get the current weather for a location",
    "input_schema": {
      "type": "object",
      "properties": {
        "location": {
          "type": "string",
          "description": "The city and state, e.g. San Francisco, CA"
        }
      },
      "required": ["location"]
    }
  }
]

messages = [
  {"role": "user", "content": "What is the weather like in San Francisco?"}
]

# Step 1: Send the request with tools
response = client.messages.create(
  model="claude-sonnet-4-5",
  max_tokens=1024,
  messages=messages,
  tools=tools,
)

# Step 2: The model responds with a tool_use block
if response.stop_reason == "tool_use":
    tool_use = next(b for b in response.content if b.type == "tool_use")

    # Step 3: Execute the tool (your implementation)
    result = json.dumps({"temperature": "69°F", "condition": "sunny"})

    # Step 4: Send the tool result back
    messages.append({"role": "assistant", "content": response.content})
    messages.append({
      "role": "user",
      "content": [
        {
          "type": "tool_result",
          "tool_use_id": tool_use.id,
          "content": result,
        }
      ],
    })

    final_response = client.messages.create(
      model="claude-sonnet-4-5",
      max_tokens=1024,
      messages=messages,
      tools=tools,
    )

    print(final_response.content[0].text)

Saída estruturada

You can request structured JSON output that conforms to a specific schema. Both the Chat Completions API and the Messages API support structured output.

Saída estruturada da Chat Completions

Use o campo response_format com um esquema JSON para restringir a saída do modelo.

import json
from openai import OpenAI

client = OpenAI(
  api_key="<SNOWFLAKE_PAT>",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
)

response = client.chat.completions.create(
  model="claude-sonnet-4-5",
  messages=[
    {"role": "user", "content": "Create a dataset of 3 people with their names and ages."}
  ],
  response_format={
    "type": "json_schema",
    "json_schema": {
      "name": "people_data",
      "schema": {
        "type": "object",
        "properties": {
          "people": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {"type": "string"},
                "age": {"type": "number"}
              },
              "required": ["name", "age"]
            }
          }
        },
        "required": ["people"]
      }
    }
  }
)

data = json.loads(response.choices[0].message.content)
print(data)

Nota

Os modelos Claude são compatíveis apenas com json_schema como tipo de formato de resposta. Os modelos OpenAI são compatíveis com tipos de formato de resposta adicionais, conforme documentado na referência da OpenAI API.

Saída estruturada da Messages API

Use the output_config parameter with a JSON schema to constrain the model’s output. The response contains valid JSON in a text content block that matches your schema.

import json
import httpx
import anthropic

PAT = "<SNOWFLAKE_PAT>"

http_client = httpx.Client(
  headers={"Authorization": f"Bearer {PAT}"},
)

client = anthropic.Anthropic(
  api_key="not-used",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex",
  http_client=http_client,
  default_headers={"Authorization": f"Bearer {PAT}"},
)

response = client.messages.create(
  model="claude-sonnet-4-5",
  max_tokens=1024,
  messages=[
    {"role": "user", "content": "Create a dataset of 3 people with their names and ages."}
  ],
  output_config={
    "format": {
      "type": "json_schema",
      "schema": {
        "type": "object",
        "properties": {
          "people": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {"type": "string"},
                "age": {"type": "number"}
              },
              "required": ["name", "age"]
            }
          }
        },
        "required": ["people"],
        "additionalProperties": False
      }
    }
  },
)

data = json.loads(response.content[0].text)
print(data)

Entrada de imagem

Você pode incluir imagens em suas solicitações para modelos que são compatíveis com visão. As imagens devem ser fornecidas como cadeias de caracteres codificadas em base64. As imagens são limitadas a 20 por conversação com um de tamanho máximo de solicitação de 20 MiB.

A entrada de imagem é compatível com:

  • Modelos Claude (claude-3-7-sonnet e mais recentes)

  • OpenAI models (openai-gpt-4.1 and newer)

Entrada de imagens da Chat Completions

import base64
from openai import OpenAI

client = OpenAI(
  api_key="<SNOWFLAKE_PAT>",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
)

# Read and encode an image file
with open("image.png", "rb") as f:
    image_data = base64.b64encode(f.read()).decode("utf-8")

response = client.chat.completions.create(
  model="claude-sonnet-4-5",
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/png;base64,{image_data}"
          }
        },
        {
          "type": "text",
          "text": "What is in this image?"
        }
      ]
    }
  ]
)

print(response.choices[0].message.content)

Entrada de imagens da Messages API

O Messages API utiliza um formato de imagem diferente: um bloco source com campos type, media_type e data em vez do URL de dados.

import base64
import httpx
import anthropic

PAT = "<SNOWFLAKE_PAT>"

http_client = httpx.Client(
  headers={"Authorization": f"Bearer {PAT}"},
)

client = anthropic.Anthropic(
  api_key="not-used",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex",
  http_client=http_client,
  default_headers={"Authorization": f"Bearer {PAT}"},
)

# Read and encode an image file
with open("image.png", "rb") as f:
    image_data = base64.b64encode(f.read()).decode("utf-8")

response = client.messages.create(
  model="claude-sonnet-4-5",
  max_tokens=1024,
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "image",
          "source": {
            "type": "base64",
            "media_type": "image/png",
            "data": image_data
          }
        },
        {
          "type": "text",
          "text": "What is in this image?"
        }
      ]
    }
  ],
)

print(response.content[0].text)

Cache de prompts

O cache de prompts permite reutilizar o contexto processado anteriormente (como prompts extensos do sistema, documentos ou histórico de conversas) entre solicitações, reduzindo a latência e o custo.

  • Modelos OpenAI: o cache é implícito. Prompts com mais de 1.024 tokens são armazenados em cache automaticamente; nenhuma alteração na solicitação é necessária.

  • Modelos Claude: o cache é explícito. Adicione pontos de interrupção cache_control aos blocos de conteúdo que você deseja armazenar em cache. Somente o tipo de cache ephemeral é compatível, com um TTL de 5 minutos. No máximo 4 pontos de interrupção de cache por solicitação.

Cache de prompts da Chat Completions

Para modelos Claude via Chat Completions, adicione cache_control aos blocos de conteúdo. Os modelos OpenAI são armazenados em cache automaticamente e não exigem este campo.

from openai import OpenAI

client = OpenAI(
  api_key="<SNOWFLAKE_PAT>",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
)

response = client.chat.completions.create(
  model="claude-sonnet-4-5",
  messages=[
    {
      "role": "system",
      "content": [
        {
          "type": "text",
          "text": "<long system prompt to cache>",
          "cache_control": {"type": "ephemeral"}
        }
      ]
    },
    {"role": "user", "content": "Summarize the key points."}
  ]
)

print(response.choices[0].message.content)

Cache de prompts da Messages API

Use cache_control em blocos de conteúdo do sistema ou do usuário. Somente o tipo de cache ephemeral é compatível, com um TTL de 5 minutos. No máximo 4 pontos de interrupção de cache podem ser definidos por solicitação.

import httpx
import anthropic

PAT = "<SNOWFLAKE_PAT>"

http_client = httpx.Client(
  headers={"Authorization": f"Bearer {PAT}"},
)

client = anthropic.Anthropic(
  api_key="not-used",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex",
  http_client=http_client,
  default_headers={"Authorization": f"Bearer {PAT}"},
)

response = client.messages.create(
  model="claude-sonnet-4-5",
  max_tokens=1024,
  system=[
    {
      "type": "text",
      "text": "<long system prompt to cache>",
      "cache_control": {"type": "ephemeral"}
    }
  ],
  messages=[
    {"role": "user", "content": "Summarize the key points."}
  ],
)

print(response.content[0].text)

Nota

Anthropic prompt caching uses a 5-minute TTL. Cached content not accessed within the TTL window is evicted. OpenAI prompt caching is implicit and managed automatically — no cache_control fields needed.

Raciocínio

Chat Completions reasoning

For Claude models, use the reasoning object. For OpenAI reasoning models, use the reasoning_effort field (values: none, minimal, low, medium, high).

from openai import OpenAI

client = OpenAI(
  api_key="<SNOWFLAKE_PAT>",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
)

# Claude models — use the reasoning object
response = client.chat.completions.create(
  model="claude-sonnet-4-5",
  temperature=1,
  messages=[
    {"role": "user", "content": "Are there an infinite number of prime numbers such that n mod 4 == 3?"}
  ],
  extra_body={
    "reasoning": {"effort": "high"}
  }
)

print(response.choices[0].message.content)

Raciocínio da Messages API

Alguns modelos Claude são compatíveis com pensamento adaptativo, em que o modelo ajusta a quantidade de raciocínio que aplica com base na complexidade da tarefa. Os modelos a seguir são compatíveis com o pensamento adaptativo:

  • claude-opus-4-6 and newer

  • claude-sonnet-4-6

Para a Messages API, use o parâmetro thinking com type: "adaptive" para habilitar o raciocínio adaptativo. O parâmetro output_config.effort fornece um controle de alto nível sobre a profundidade do raciocínio e aceita os seguintes valores:

Nível de esforço

Comportamento

max

Always thinks with no constraints on thinking depth.

high (padrão)

Sempre raciocina. Fornece raciocínio profundo em tarefas complexas.

medium

Raciocínio moderado. Pode ignorar o raciocínio para consultas muito simples.

low

Minimiza o raciocínio. Ignora o raciocínio para tarefas simples em que a velocidade é mais importante.

Os exemplos a seguir demonstram como fazer uma chamada da Messages API com o raciocínio adaptativo habilitado:

import httpx
import anthropic

PAT = "<SNOWFLAKE_PAT>"

http_client = httpx.Client(
  headers={"Authorization": f"Bearer {PAT}"},
)

client = anthropic.Anthropic(
  api_key="not-used",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex",
  http_client=http_client,
  default_headers={"Authorization": f"Bearer {PAT}"},
)

response = client.messages.create(
  model="claude-opus-4-6",
  max_tokens=16384,
  thinking={
    "type": "adaptive"
  },
  messages=[
    {"role": "user", "content": "Are there an infinite number of prime numbers such that n mod 4 == 3?"}
  ],
)

# The response includes thinking blocks followed by text
for block in response.content:
    if block.type == "thinking":
        print(f"Thinking: {block.thinking[:100]}...")
    elif block.type == "text":
        print(f"Answer: {block.text}")

A resposta inclui blocos de raciocínio com resumos e assinaturas de raciocínio. Passe esses blocos de volta em conversas com várias interações para manter o contexto do raciocínio:

{
  "role": "assistant",
  "content": [
    {"type": "thinking", "thinking": "<thinking>", "signature": "<signature>"},
    {"type": "text", "text": "Yes, there are infinitely many primes p where p ≡ 3 (mod 4)..."}
  ]
}

Para uma descrição completa do suporte da Messages API para raciocínio adaptativo, consulte Documentos da Claude API – raciocínio adaptativo.

Recursos beta (Messages API)

A Messages API é compatível com recursos beta da Anthropic pelo cabeçalho anthropic-beta. Passe um ou mais valores de cabeçalho beta como uma cadeia de caracteres separada por vírgulas.

Cabeçalhos beta compatíveis

Valor do cabeçalho beta

Recurso

token-efficient-tools-2025-02-19

Ferramentas com uso eficiente de tokens

interleaved-thinking-2025-05-14

Raciocínio intercalado

output-128k-2025-02-19

Permite até 128 mil tokens de saída

dev-full-thinking-2025-05-14

Modo desenvolvedor para raciocínio bruto em modelos Claude 4+

context-management-2025-06-27

Gerenciamento de contexto

effort-2025-11-24

Parâmetro de esforço para raciocínio

tool-search-tool-2025-10-19

Ferramenta de pesquisa de ferramentas

tool-examples-2025-10-29

Exemplos de uso da ferramenta

The following example demonstrates using tool examples with claude-sonnet-4-6:

import httpx
import anthropic

PAT = "<SNOWFLAKE_PAT>"

http_client = httpx.Client(
  headers={"Authorization": f"Bearer {PAT}"},
)

client = anthropic.Anthropic(
  api_key="not-used",
  base_url="https://<account-identifier>.snowflakecomputing.com/api/v2/cortex",
  http_client=http_client,
  default_headers={
    "Authorization": f"Bearer {PAT}",
  },
)

response = client.beta.messages.create(
  model="claude-sonnet-4-6",
  max_tokens=8192,
  betas=["tool-examples-2025-10-29"],
  tools=[
    {
      "name": "get_weather",
      "description": "Get the current weather for a location",
      "input_schema": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          }
        },
        "required": ["location"]
      },
      "examples": [
        {
          "input": {"location": "San Francisco, CA"},
          "output": {"temperature": "65°F", "condition": "sunny"}
        }
      ]
    }
  ],
  messages=[
    {"role": "user", "content": "What's the weather in New York?"}
  ],
)

print(f"Stop reason: {response.stop_reason}")
if response.stop_reason == "tool_use":
  tool_use = next(b for b in response.content if b.type == "tool_use")
  print(f"Tool called: {tool_use.name}")
  print(f"Arguments: {tool_use.input}")

É possível combinar vários recursos beta ao passar uma cadeia de caracteres separada por vírgulas:

-H "anthropic-beta: tool-examples-2025-10-29,tool-search-tool-2025-10-19"

Referência da Chat Completions API

POST /api/v2/cortex/v1/chat/completions

Gera uma complementação de bate-papo usando o modelo especificado. O formato da solicitação e da resposta segue a especificação da OpenAI Chat Completions API.

POST https://<account_identifier>.snowflakecomputing.com/api/v2/cortex/v1/chat/completions

Cabeçalhos obrigatórios

Authorization: Bearer token

Autorização para a solicitação. token é um token web JSON (JSON web token, JWT), token OAuth ou token de acesso programático. Para obter mais detalhes, consulte Autenticando o Snowflake REST APIs com Snowflake.

Content-Type: application/json

Especifica que o corpo da solicitação está no formato JSON.

Cabeçalhos opcionais

X-Snowflake-Authorization-Token-Type: type

Define o tipo de token de autorização.

Se você omitir o cabeçalho X-Snowflake-Authorization-Token-Type, o Snowflake determinará o tipo de token examinando o token.

Embora esse cabeçalho seja opcional, você pode optar por especificá-lo. Você pode definir o cabeçalho com um dos seguintes valores:

Accept: application/json, text/event-stream

Especifica que a resposta conterá JSON (caso de erro) ou eventos enviados pelo servidor.

Campos JSON obrigatórios

Campo

Tipo

Descrição

model

string

O modelo a ser utilizado (consulte Disponibilidade do modelo). Você também pode usar o nome totalmente qualificado de qualquer modelo ajustado no formato database.schema.model.

messages

matriz

Uma matriz de objetos de mensagem que representam a conversa. Cada mensagem deve ter um role (system, user, assistant ou tool) e content (cadeia de caracteres ou matriz de partes do conteúdo).

Campos JSON opcionais comumente utilizados

Campo

Tipo

Padrão

Descrição

max_completion_tokens

inteiro

4096

Número máximo de tokens na resposta. O máximo teórico é 131.072; cada modelo tem o próprio limite de saída.

temperature

number

Varia de acordo com o modelo

Controla a aleatoriedade. Valores de 0 a 2.

top_p

number

1.0

Controla a diversidade via amostragem de núcleo.

stream

booleano

falso

Indica se o progresso parcial deve ser transmitido como eventos enviados pelo servidor.

tools

matriz

null

Uma lista de ferramentas que o modelo pode chamar. Cada ferramenta deve ter type: "function" e um objeto function com name, description e parameters.

tool_choice

cadeia de caracteres ou objeto

"auto"

Controla como o modelo seleciona as ferramentas. Opções: "auto", "required", "none" ou um objeto especificando uma função específica.

response_format

objeto

null

Restringe o formato de saída. Use {"type": "json_schema", "json_schema": {...}} para a saída estruturada.

reasoning_effort

string

null

For OpenAI reasoning models. Values: none, "minimal", "low", "medium", "high".

reasoning

objeto

null

Para modelos Claude. Defina reasoning.effort ou reasoning.max_tokens para habilitar o raciocínio.

Consulte a tabela de compatibilidade detalhada para obter a lista completa de campos compatíveis por família de modelos.

Códigos de status

200 OK

Solicitação concluída com sucesso.

400 invalid options object

Os argumentos opcionais têm valores inválidos.

400 unknown model model_name

O modelo especificado não existe.

400 schema validation failed

A estrutura do esquema de resposta está incorreta.

400 max tokens of count exceeded

A solicitação excedeu o número máximo de tokens compatíveis com o modelo.

400 all requests were throttled by remote service

A solicitação foi limitada. Tente novamente mais tarde.

402 budget exceeded

O orçamento de consumo do modelo foi excedido.

403 Not Authorized

Conta não habilitada para REST API, ou a função padrão para o usuário que efetuou a chamada não tem a função de banco de dados snowflake.cortex_user.

429 too many requests

A cota de uso foi excedida. Tente novamente mais tarde.

503 inference timed out

A solicitação demorou muito.

Limitações

  • Se não for definido, max_completion_tokens assume o padrão de 4096. Cada modelo tem seu próprio limite de tokens de saída.

  • A chamada de ferramentas é compatível apenas com os modelos OpenAI e Claude.

  • O uso de áudio não é compatível.

  • A compreensão da imagem é compatível somente com modelos do OpenAI e do Claude. As imagens são limitadas a 20 por conversação com um de tamanho máximo de solicitação de 20 MiB.

  • Somente os modelos do Claude oferecem suporte a pontos de controle de cache efêmeros para cache de prompt. Os modelos do OpenAI oferecem suporte ao cache implícito.

  • Somente os modelos Claude são compatíveis com o retorno de detalhes de raciocínio na resposta.

  • The temperature field is ignored for Claude Opus 4.7 since the model no longer supports temperature.

  • max_tokens está obsoleto. Use max_completion_tokens em vez disso.

  • As mensagens de erro são geradas pela Snowflake, não pelo provedor do modelo.

Tabela de compatibilidade detalhada

As tabelas a seguir resumem quais campos de solicitação e resposta são compatíveis ao usar a Chat Completions API com diferentes famílias de modelos hospedadas no Snowflake.

Campos da solicitação

Campo

Modelos do OpenAI

Modelos do Claude

Outros modelos

model

Suporte para ✔

Suporte para ✔

Suporte para ✔

messages

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

messages[].audio

❌ Erro

❌ Ignorado

❌ Ignorado

messages[].role

Suporte para ✔

✔ Somente usuário/assistente/sistema

✔ Somente usuário/assistente/sistema

messages[].content (string)

Suporte para ✔

Suporte para ✔

Suporte para ✔

messages[].content[] (matriz)

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

messages[].content[].text

Suporte para ✔

Suporte para ✔

Suporte para ✔

messages[].content[].type

Suporte para ✔

Suporte para ✔

Suporte para ✔

messages[].content[].image_url

Suporte para ✔

Suporte para ✔

❌ Erro

messages[].content[].cache_control

❌ Ignorado

✔ Compatível (somente efêmero)

❌ Ignorado

messages[].content[].file

❌ Erro

❌ Erro

❌ Ignorado

messages[].content[].input_audio

❌ Erro

❌ Ignorado

❌ Ignorado

messages[].content[].refusal

Suporte para ✔

❌ Ignorado

❌ Ignorado

messages[].function_call

✔ Compatível (obsoleto)

❌ Ignorado

❌ Ignorado

messages[].name

Suporte para ✔

❌ Ignorado

❌ Ignorado

messages[].refusal

Suporte para ✔

❌ Ignorado

❌ Ignorado

messages[].tool_call_id

Suporte para ✔

Suporte para ✔

❌ Ignorado

messages[].tool_calls

Suporte para ✔

✔ Somente ferramentas function

❌ Ignorado

messages[].reasoning_details

❌ Ignorado

✔ Formato OpenRouter reasoning.text

❌ Ignorado

audio

❌ Erro

❌ Ignorado

❌ Ignorado

frequency_penalty

Suporte para ✔

❌ Ignorado

❌ Ignorado

logit_bias

Suporte para ✔

❌ Ignorado

❌ Ignorado

logprobs

Suporte para ✔

❌ Ignorado

❌ Ignorado

max_tokens

❌ Erro (obsoleto)

❌ Erro (obsoleto)

❌ Erro (obsoleto)

max_completion_tokens

✔ Compatível (4096 padrão, 131072 máximo)

✔ Compatível (4096 padrão, 131072 máximo)

✔ Compatível (4096 padrão, 131072 máximo)

metadata

❌ Ignorado

❌ Ignorado

❌ Ignorado

modalities

❌ Ignorado

❌ Ignorado

❌ Ignorado

n

Suporte para ✔

❌ Ignorado

❌ Ignorado

parallel_tool_calls

Suporte para ✔

❌ Ignorado

❌ Ignorado

prediction

Suporte para ✔

❌ Ignorado

❌ Ignorado

presence_penalty

Suporte para ✔

❌ Ignorado

❌ Ignorado

prompt_cache_key

Suporte para ✔

❌ Ignorado

❌ Ignorado

reasoning_effort

Suporte para ✔

❌ Ignorado (usar o objeto reasoning)

❌ Ignorado

reasoning

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

reasoning.effort

✔ Compatível (substitui reasoning_effort)

✔ Convertido em reasoning.max_tokens

❌ Ignorado

reasoning.max_tokens

❌ Ignorado

Suporte para ✔

❌ Ignorado

response_format

Suporte para ✔

✔ Somente json_schema

❌ Ignorado

safety_identifier

❌ Ignorado

❌ Ignorado

❌ Ignorado

service_tier

❌ Erro

❌ Erro

❌ Erro

stop

Suporte para ✔

❌ Ignorado

❌ Ignorado

store

❌ Erro

❌ Erro

❌ Erro

stream

Suporte para ✔

Suporte para ✔

Suporte para ✔

stream_options

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

stream_options.include_obfuscation

❌ Ignorado

❌ Ignorado

❌ Ignorado

stream_options.include_usage

Suporte para ✔

Suporte para ✔

Suporte para ✔

temperature

Suporte para ✔

Suporte para ✔

Suporte para ✔

tool_choice

Suporte para ✔

✔ Somente ferramentas function

❌ Ignorado

tools

Suporte para ✔

✔ Somente ferramentas function

❌ Erro

top_logprobs

Suporte para ✔

❌ Ignorado

❌ Ignorado

top_p

Suporte para ✔

Suporte para ✔

Suporte para ✔

verbosity

Suporte para ✔

❌ Ignorado

❌ Ignorado

web_search_options

❌ Erro

❌ Ignorado

❌ Ignorado

Campos de resposta:

Campo

Modelos do OpenAI

Modelos do Claude

Outros modelos

id

Suporte para ✔

Suporte para ✔

Suporte para ✔

object

Suporte para ✔

Suporte para ✔

Suporte para ✔

created

Suporte para ✔

Suporte para ✔

Suporte para ✔

model

Suporte para ✔

Suporte para ✔

Suporte para ✔

choices

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

choices[].index

Suporte para ✔

✔ Somente escolha única

✔ Somente escolha única

choices[].finish_reason

Suporte para ✔

❌ Sem suporte

✔ Somente stop

choices[].logprobs

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

choices[].message (sem streaming)

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

choices[].message.content

Suporte para ✔

Suporte para ✔

Suporte para ✔

choices[].message.role

Suporte para ✔

Suporte para ✔

Suporte para ✔

choices[].message.refusal

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

choices[].message.annotations

❌ Sem suporte

❌ Sem suporte

❌ Sem suporte

choices[].message.audio

❌ Sem suporte

❌ Sem suporte

❌ Sem suporte

choices[].message.function_call

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

choices[].message.tool_calls

Suporte para ✔

✔ Somente ferramentas function

❌ Sem suporte

choices[].message.reasoning

❌ Sem suporte

✔ Formato OpenRouter

❌ Sem suporte

choices[].delta (streaming)

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

choices[].delta.content

Suporte para ✔

Suporte para ✔

Suporte para ✔

choices[].delta.role

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

choices[].delta.refusal

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

choices[].delta.function_call

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

choices[].delta.tool_calls

Suporte para ✔

✔ Somente ferramentas function

❌ Sem suporte

choices[].delta.reasoning

❌ Sem suporte

✔ Formato OpenRouter

❌ Sem suporte

usage

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

usage.prompt_tokens

Suporte para ✔

Suporte para ✔

Suporte para ✔

usage.completion_tokens

Suporte para ✔

Suporte para ✔

Suporte para ✔

usage.total_tokens

Suporte para ✔

Suporte para ✔

Suporte para ✔

usage.prompt_tokens_details

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

usage.prompt_tokens_details.audio_tokens

❌ Sem suporte

❌ Sem suporte

❌ Sem suporte

usage.prompt_tokens_details.cached_tokens

✔ Somente leituras de cache

✔ Leitura + gravação de cache

❌ Sem suporte

usage.completion_tokens_details

Consulte os subcampos

Consulte os subcampos

Consulte os subcampos

usage.completion_tokens_details.accepted_prediction_tokens

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

usage.completion_tokens_details.audio_tokens

❌ Sem suporte

❌ Sem suporte

❌ Sem suporte

usage.completion_tokens_details.reasoning_tokens

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

usage.completion_tokens_details.rejected_prediction_tokens

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

service_tier

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

system_fingerprint

Suporte para ✔

❌ Sem suporte

❌ Sem suporte

Cabeçalhos de solicitação

Cabeçalho

Suporte

Authorization

✔ Obrigatório

Content-Type

✔ Compatível (application/json)

Accept

✔ Compatível (application/json, text/event-stream)

Cabeçalhos de resposta

Cabeçalho

Suporte

openai-organization

❌ Sem suporte

openai-version

❌ Sem suporte

openai-processing-ms

❌ Sem suporte

x-ratelimit-limit-requests

❌ Sem suporte

x-ratelimit-limit-tokens

❌ Sem suporte

x-ratelimit-remaining-requests

❌ Sem suporte

x-ratelimit-remaining-tokens

❌ Sem suporte

x-ratelimit-reset-requests

❌ Sem suporte

x-ratelimit-reset-tokens

❌ Sem suporte

retry-after

❌ Sem suporte

Saiba mais

Para exemplos de uso adicionais, consulte a referência da OpenAI Chat Completions API ou o OpenAI Cookbook.

Além de oferecer compatibilidade com a API Chat Completions, o Snowflake oferece suporte a recursos compatíveis com OpenRouter para modelos do Claude. Esses recursos são expostos como campos extras na solicitação:

  1. Para cache de prompt, use o campo cache_control. Consulte a documentação de cache de prompts OpenRouter.

  2. Para tokens de raciocínio, use o campo reasoning. Consulte a documentação de raciocínio do OpenRouter.

Referência da Messages API

POST /api/v2/cortex/v1/messages

Gera uma resposta usando um modelo Claude. O formato de solicitação e resposta segue a especificação da Anthropic Messages API.

POST https://<account_identifier>.snowflakecomputing.com/api/v2/cortex/v1/messages

Nota

A Messages API é compatível apenas com modelos Claude. Para outros modelos, use a Chat Completions API.

Cabeçalhos obrigatórios

Authorization: Bearer token

Autorização para a solicitação. token é um token web JSON (JSON web token, JWT), token OAuth ou token de acesso programático. Para obter mais detalhes, consulte Autenticando o Snowflake REST APIs com Snowflake.

Content-Type: application/json

Especifica que o corpo da solicitação está no formato JSON.

anthropic-version: 2023-06-01

Cabeçalho de versão Anthropic API obrigatório.

Cabeçalhos opcionais

X-Snowflake-Authorization-Token-Type: type

Define o tipo de token de autorização.

Se você omitir o cabeçalho X-Snowflake-Authorization-Token-Type, o Snowflake determinará o tipo de token examinando o token.

Embora esse cabeçalho seja opcional, você pode optar por especificá-lo. Você pode definir o cabeçalho com um dos seguintes valores:

anthropic-beta: feature

Habilita os recursos beta. Somente cabeçalhos beta compatíveis com Bedrock são aceitos.

Campos JSON obrigatórios

Campo

Tipo

Descrição

model

string

O modelo Claude a ser utilizado (consulte Disponibilidade do modelo).

max_tokens

inteiro

o número máximo de tokens a serem gerados.

messages

matriz

Uma matriz de objetos de mensagem. Cada mensagem tem um role (user ou assistant) e um content (cadeia de caracteres ou matriz de blocos de conteúdo).

Recursos aceitos

A Messages API é compatível com o conjunto de recursos padrão do Anthropic Messages API para modelos Claude, incluindo:

  • Geração de texto e conversas com várias interações

  • Streaming ("stream": true)

  • Mensagens do sistema (via campo system de nível superior)

  • Chamada de ferramentas (formato Anthropic com name, description, input_schema)

  • Structured output (output_config with json_schema)

  • Entrada de imagem (blocos de origem base64)

  • Cache de prompts (cache_control em blocos de conteúdo)

  • Adaptive thinking (thinking parameter with type: "adaptive") and extended thinking (budget_tokens)

Para obter detalhes completos sobre o esquema de solicitação e resposta, consulte a documentação da Anthropic Messages API.

Limitações

  • Somente modelos Claude. OpenAI, Llama, Mistral e outros modelos não estão disponíveis por meio desse ponto de extremidade.

  • Sem processamento flexível ou nível de prioridade. O campo service_tier não é compatível.

  • Apenas cabeçalhos beta do Bedrock. Somente valores de cabeçalho anthropic-beta compatíveis com o Bedrock são compatíveis.

  • As mensagens de erro são geradas pela Snowflake, não pela Anthropic.

Códigos de status

200 OK

Solicitação concluída com sucesso.

400 invalid_request_error

O corpo da solicitação está malformado ou contém valores inválidos.

400 unknown model model_name

O modelo especificado não existe ou não é um modelo Claude.

402 budget exceeded

O orçamento de consumo do modelo foi excedido.

403 Not Authorized

A conta não está habilitada para REST API ou a função padrão não tem a função de banco de dados snowflake.cortex_user.

429 too many requests

A cota de uso foi excedida. Tente novamente mais tarde.

503 inference timed out

A solicitação demorou muito.

Limites de taxa

Para garantir alto desempenho para todos os clientes Snowflake, as solicitações Cortex REST API estão sujeitas a limites de taxa. As solicitações que excederem os limites poderão receber uma resposta HTTP 429. Ocasionalmente, a Snowflake pode ajustar esses limites.

Os limites padrão nas tabelas a seguir são aplicados por conta e de maneira independente para cada modelo. Certifique-se de que seu aplicativo trate respostas 429 de maneira adequada, tentando novamente com espera exponencial.

Se você precisa aumentar os limites, entre em contato com o suporte Snowflake.

Limites de taxa da Cortex REST API
Modelo
Tokens processados
por minuto (TPM)
Solicitações por
Minuto (RPM)
Saída máxima (tokens)
claude-3-7-sonnet

600.000

600

16.384

claude-4-opus

200,000

200

16.384

claude-4-sonnet

2,000,000

1.200

16.384

claude-haiku-4-5

5.000.000

10,000

16.384

claude-opus-4-5

2,000,000

10,000

16.384

claude-opus-4-6

3,000,000

10,000

16.384

claude-opus-4-7

3,000,000

10,000

16.384

claude-sonnet-4-5

5.000.000

10,000

16.384

claude-sonnet-4-6

6,000,000

10,000

16.384

deepseek-r1

100,000

100

16.384

llama3.1-8b

800.000

800

16.384

llama3.1-70b

400,000

400

16.384

llama3.1-405b

200,000

200

16.384

mistral-7b

400,000

400

16.384

mistral-large2

600.000

200

16.384

openai-gpt-4.1

2,000,000

600

16.384

openai-gpt-5

600.000

600

16.384

openai-gpt-5-chat

1.000.000

1.000

16.384

openai-gpt-5-mini

2,000,000

2,000

16.384

openai-gpt-5-nano

10,000,000

10,000

16.384

openai-gpt-5.1

600.000

3,000

16.384

openai-gpt-5.2

1.200.000

3,000

16.384

Aumento dos limites de taxa com inferência entre regiões

If you’ve opted into Cross Cloud, AWS Global, or Azure Global cross-region inference (see cross-region inference) in your Snowflake account, the rate limits are higher for the following models:

Limites de taxa da Cortex REST API com inferência entre regiões
Modelo
Tokens processados
por minuto (TPM)
Solicitações por
Minuto (RPM)
Saída máxima (tokens)
claude-haiku-4-5

5.000.000

10,000

16.384

claude-opus-4-5

2,000,000

10,000

16.384

claude-opus-4-6

3,000,000

10,000

16.384

claude-opus-4-7

3,000,000

10,000

16.384

claude-sonnet-4-5

5.000.000

10,000

16.384

claude-sonnet-4-6

6,000,000

10,000

16.384

openai-gpt-4.1

1.000.000

1.000

16.384

openai-gpt-5

1.000.000

10,000

16.384

openai-gpt-5.1

1.000.000

10,000

16.384

openai-gpt-5.2

1.000.000

10,000

16.384

Solução de problemas de eventos de limite de taxa

Exceder um dos limites de TPM ou RPM resulta no código de resposta 429. Se o seu uso da REST API está abaixo do limite de taxa de solicitação por minuto, mas ainda assim recebeu o código de resposta 429, verifique novamente a taxa de uso de token.

A Cortex REST API implementa limites de taxa usando o padrão Contador de janelas deslizantes. Os contadores são armazenados em um cluster Redis de alta disponibilidade, acessível apenas pelo Snowflake Cortex, dentro da rede privada do Snowflake.

O contador de janelas deslizantes considera que o tráfego do cliente para a API na janela de tempo anterior esteja uniformemente distribuído. Quando o pico de tráfego está elevado, essa suposição pode superestimar a taxa de solicitações, mas se recupera rapidamente, já que janela é breve. Entre em contato com o suporte Snowflake se você está sujeito à superestimativa e quer aumentar os limites.

Problemas conhecidos

Expiração do token de sessão

Recomendamos a autenticação com um dos três métodos definidos em Autenticando o Snowflake REST APIs com Snowflake. Entretanto, se você autenticar com um token de sessão do Snowflake, deverá cuidar da atualização do token para garantir o acesso ininterrupto à API.

Os tokens de sessão expiram periodicamente. Se uma solicitação for executada com um token de sessão expirado, a API REST retornará uma resposta 200 OK que inclui o código de erro 390112. Quando isso ocorre, a operação não é realizada.

Para resolver esse comportamento, seu aplicativo deve:

  1. Verificar em cada resposta da API se há o código de erro 390112, mesmo quando o código de status HTTP é 200 OK.

  2. Quando o código de erro 390112 for detectado, atualize o token de sessão e repita a solicitação.

Nota

Esse comportamento afeta apenas aplicativos que usam tokens de sessão do Snowflake. Se você se autentica usando autenticação de par de chaves, OAuth ou tokens de acesso programático (Programmatic Access Tokens, PATs), não precisa implementar esse tratamento de erros.

Considerações sobre custo

As solicitações da REST API do Snowflake Cortex incorrem em custos de computação com base no número de tokens processados. Consulte a tabela de consumo de serviços do Snowflake para obter o custo de cada modelo em dólares por milhão de tokens.

Um token é a menor unidade de texto processada pelas funções de LLM do Snowflake Cortex, aproximadamente igual a quatro caracteres de texto. A equivalência do texto bruto de entrada ou saída com tokens pode variar de acordo com o modelo.

Tanto os tokens de entrada quanto os de saída incorrem em custo de computação. Se você usa a API para fornecer uma experiência de usuário de conversação ou de bate-papo, todos os prompts e respostas anteriores serão processados para gerar cada nova resposta, com os custos correspondentes.