API Cortex Chat Completions¶
A API Cortex Chat Completions é um superconjunto independente de modelo da API OpenAI Chat Completions, permitindo compatibilidade com um vasta ecossistema de ferramentas, bibliotecas e aplicativos de AI de terceiros.
A API Cortex Chat Completions é uma API complementar à API REST do Cortex, com maior suporte para modelos OpenAI. Para saber mais sobre a API REST do Cortex, consulte Cortex REST API.
Introdução ao OpenAI SDK¶
Importante
Certifique-se de que você está usando uma versão oficial do OpenAI SDK conforme especificado na documentação das bibliotecas do OpenAI, como em uma das seguintes linguagens:
Python
TypeScript/JavaScript
Para começar, você precisa de:
URL da sua conta Snowflake. Ele será usado para construir o URL básico para o cliente OpenAI.
Um token de acesso programático do Snowflake (PAT). Ele será usado para autenticar na API Cortex Chat Completions. Para obter mais informações sobre a criação de um PAT, consulte Geração de um token de acesso programático.
Um nome de modelo válido a ser usado na solicitação. Para obter uma lista de modelos compatíveis, consulte Disponibilidade do modelo.
Exemplos de código simples¶
Os exemplos a seguir mostram como fazer solicitações a OpenAI SDKs com Python, JavaScript/TypeScript e curl.
Use o código a seguir para começar com o Python SDK:
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="<model_name>",
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)
No código anterior, especifique valores para o seguinte:
base_url: Substitua<account-identifier>pelo identificador da sua conta Snowflake.api_key: Substitua<SNOWFLAKE_PAT>pelo seu token de acesso programático do Snowflake (PAT).model: Substitua<model_name>pelo nome do modelo que você deseja usar. Para obter uma lista de modelos compatíveis, consulte Disponibilidade do modelo.
Use o código a seguir para começar a usar o JavaScript/TypeScript SDK:
import OpenAI from "openai";
const openai = new OpenAI({
apikey="SNOWFLAKE_PAT",
baseURL: "https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
});
const response = await openai.chat.completions.create({
model: "claude-3-7-sonnet",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{
role: "user",
content: "How does a snowflake get its unique pattern?",
},
],
});
console.log(response.choices[0].message);
No código anterior, especifique valores para o seguinte:
baseURL: Substitua<account-identifier>pelo identificador da sua conta Snowflake.apikey: SubstituaSNOWFLAKE_PATpelo seu token de acesso pessoal (PAT) do Snowflake.model: Substitua<model_name>pelo nome do modelo que você deseja usar. Para obter uma lista de modelos compatíveis, consulte Disponibilidade do modelo.
Use o seguinte comando curl para fazer uma solicitação ao modelo hospedado no Snowflake:
curl "https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <SNOWFLAKE_PAT>" \
-d '{
"model": "<model_name>",
"messages": [
{"role": "user", "content": "How does a snowflake get its unique pattern?"}
]
}'
No código anterior, especifique valores para o seguinte:
<account-identifier>: Substitua<account-identifier>pelo identificador da sua conta Snowflake.<SNOWFLAKE_PAT>: Substitua<SNOWFLAKE_PAT>pelo seu token de acesso pessoal (PAT) do Snowflake.<model_name>: Substitua<model_name>pelo nome do modelo que você deseja usar. Para obter uma lista de modelos compatíveis, consulte Disponibilidade do modelo.
Respostas do fluxo¶
Você pode transmitir respostas da API REST definindo o parâmetro stream para True na solicitação.
O seguinte código Python transmite uma resposta da API REST:
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="<model_name>",
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)
O seguinte código JavaScript/TypeScript transmite uma resposta da API REST:
import OpenAI from "openai";
const openai = new OpenAI({
apikey="SNOWFLAKE_PAT",
baseURL: "https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1"
});
const stream = await openai.chat.completions.create({
model: "<model_name>",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{
role: "user",
content: "How does a snowflake get its unique pattern?",
}
],
stream:true,
});
for await (const event of stream) {
console.log(event);
}
O seguinte comando curl transmite uma resposta do modelo hospedado no Snowflake:
curl "https://<account-identifier>.snowflakecomputing.com/api/v2/cortex/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SNOWFLAKE_PAT" \
-d '{
"model": "<model_name>",
"messages": [
{"role": "user", "content": "How does a snowflake get its unique pattern?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
Limitações¶
Os itens a seguir são as limitações no uso do OpenAI SDK com modelos hospedados pelo Snowflake:
Somente conclusões de bate-papo são compatíveis.
Se não for definido,
max_completion_tokensassume o padrão de 4096. O máximo teórico para a API Cortex Chat Completions é 131.072. Cada modelo tem seus próprios limites de token de saída que podem ser inferiores a 131.072.A chamada de ferramenta é compatível com modelos do OpenAI e do Claude. Para um exemplo que usa a chamada de ferramenta de forma eficaz, consulte Chamada de ferramenta com exemplo de cadeia de pensamento.
Não há suporte para áudio.
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 oferecem suporte ao retorno de seus detalhes de raciocínio na resposta.
As mensagens de erro são geradas pelo Snowflake, não pelo OpenAI. Recomenda-se usar os erros relatados apenas para fins de registro e depuração.
Tabela de compatibilidade detalhada¶
As tabelas a seguir resumem quais campos de solicitação e resposta e cabeçalhos são suportados ao usar a API Cortex Chat Completions com diferentes modelos hospedados pelo Snowflake.
Campo |
Modelos do OpenAI |
Modelos do Claude |
Outros modelos |
|---|---|---|---|
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
❌ Erro |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
✔ Somente usuário/assistente/sistema |
✔ Somente usuário/assistente/sistema |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
❌ Erro |
|
❌ Ignorado |
✔ Compatível (somente efêmero) |
❌ Ignorado |
|
❌ Erro |
❌ Erro |
❌ Ignorado |
|
❌ Erro |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
✔ Compatível (obsoleto) |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
Suporte para ✔ |
❌ Ignorado |
|
Suporte para ✔ |
✔ Somente ferramentas |
❌ Ignorado |
|
❌ Ignorado |
✔ Formato OpenRouter |
❌ Ignorado |
|
❌ Erro |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
❌ Erro (obsoleto) |
❌ Erro (obsoleto) |
❌ Erro (obsoleto) |
|
✔ Compatível (4096 padrão, 131072 máximo) |
✔ Compatível (4096 padrão, 131072 máximo) |
✔ Compatível (4096 padrão, 131072 máximo) |
|
❌ Ignorado |
❌ Ignorado |
❌ Ignorado |
|
❌ Ignorado |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
❌ Ignorado (usar o objeto |
❌ Ignorado |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
✔ Compatível (substitui |
✔ Convertido em |
❌ Ignorado |
|
❌ Ignorado |
Suporte para ✔ |
❌ Ignorado |
|
Suporte para ✔ |
✔ Only |
❌ Ignorado |
|
❌ Ignorado |
❌ Ignorado |
❌ Ignorado |
|
❌ Erro |
❌ Erro |
❌ Erro |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
❌ Erro |
❌ Erro |
❌ Erro |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
❌ Ignorado |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
✔ Somente ferramentas |
❌ Ignorado |
|
Suporte para ✔ |
✔ Somente ferramentas |
❌ Erro |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
❌ Ignorado |
❌ Ignorado |
|
❌ Erro |
❌ Ignorado |
❌ Ignorado |
Campo |
Modelos do OpenAI |
Modelos do Claude |
Outros modelos |
|---|---|---|---|
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
Suporte para ✔ |
✔ Somente escolha única |
✔ Somente escolha única |
|
Suporte para ✔ |
❌ Sem suporte |
✔ Somente |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
❌ Sem suporte |
❌ Sem suporte |
❌ Sem suporte |
|
❌ Sem suporte |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
✔ Somente ferramentas |
❌ Sem suporte |
|
❌ Sem suporte |
✔ Formato OpenRouter |
❌ Sem suporte |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
✔ Somente ferramentas |
❌ Sem suporte |
|
❌ Sem suporte |
✔ Formato OpenRouter |
❌ Sem suporte |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Suporte para ✔ |
Suporte para ✔ |
Suporte para ✔ |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
❌ Sem suporte |
❌ Sem suporte |
❌ Sem suporte |
|
✔ Somente leituras de cache |
✔ Leitura + gravação de cache |
❌ Sem suporte |
|
Consulte os subcampos |
Consulte os subcampos |
Consulte os subcampos |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
❌ Sem suporte |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
|
Suporte para ✔ |
❌ Sem suporte |
❌ Sem suporte |
Cabeçalho |
Suporte |
|---|---|
|
✔ Obrigatório |
|
✔ Compatível ( |
|
✔ Compatível ( |
Cabeçalho |
Suporte |
|---|---|
|
❌ Sem suporte |
|
❌ Sem suporte |
|
❌ Sem suporte |
|
❌ Sem suporte |
|
❌ Sem suporte |
|
❌ Sem suporte |
|
❌ Sem suporte |
|
❌ Sem suporte |
|
❌ Sem suporte |
|
❌ Sem suporte |
Saiba mais¶
Para obter um compêndio completo de exemplos de uso, consulte a referência da API Chat Completions do OpenAI 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.
Para cache de prompt, use o campo
cache_control. Consulte a documentação sobre armazenamento de prompts em cache do OpenRouter para obter mais informações.Para tokens de raciocínio, use o campo
reasoning. Consulte a documentação sobre raciocínio do OpenRouter para obter mais informações.