Cortex Chat Completions API¶
Cortex Chat Completions API는 어떤 모델에서도 사용할 수 있는 OpenAI Chat Completions API의 상위 기능으로, 광범위한 도구, 라이브러리 및 서드 파티 AI 애플리케이션 생태계와의 호환성을 지원합니다.
Cortex Chat Completions API는 OpenAI 모델에 대한 지원을 확장적으로 제공할 수 있는 Cortex REST API에 대한 컴패니언 API입니다. Cortex REST API에 대해 자세히 알아보려면 Cortex REST API 섹션을 참조하세요.
OpenAI SDK 시작¶
중요
`OpenAI 라이브러리 설명서<https://platform.openai.com/docs/libraries>`_에 명시된 공식 버전의 OpenAI SDK를 사용하고 있는지 확인하세요. 예를 들어, 다음 언어 중 하나에서 제공되는 SDK를 사용할 수 있습니다.
Python
TypeScript 또는 JavaScript
시작하려면 다음이 필요합니다.
Snowflake 계정 URL. 이는 OpenAI 클라이언트에 대한 기본 URL을 구성하는 데 사용됩니다.
Snowflake PAT(프로그래밍 방식 액세스 토큰). 이는 Cortex Chat Completions API를 인증하는 데 사용됩니다. PAT 생성에 대한 자세한 내용은 프로그래밍 방식 액세스 토큰 생성하기 섹션을 참조하세요.
요청에서 사용할 유효한 모델 이름입니다. 지원되는 모델 목록은 모델 가용성 섹션을 참조하세요.
간단한 코드 예제¶
다음 예는 Python, JavaScript 또는 TypeScript 및 ``curl``을 사용하여 OpenAI SDKs를 요청하는 방법을 보여줍니다.
다음 코드를 사용하면 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)
앞의 코드에서 다음에 대한 값을 지정합니다.
base_url: :code:`<account-identifier>`를 Snowflake 계정 식별자로 바꿉니다.api_key: :code:`<SNOWFLAKE_PAT>`를 Snowflake PAT(프로그래밍 방식 액세스 토큰)로 바꿉니다.model:<model_name>`을 사용하려는 모델의 이름으로 바꿉니다. 지원되는 모델 목록은 :ref:`label-cortex_complete_llm_model_availability섹션을 참조하세요.
다음 코드를 사용하면 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);
앞의 코드에서 다음에 대한 값을 지정합니다.
baseURL: :code:`<account-identifier>`를 Snowflake 계정 식별자로 바꿉니다.apikey: :code:`SNOWFLAKE_PAT`를 Snowflake PAT(개인 액세스 토큰)로 바꿉니다.model:<model_name>`을 사용하려는 모델의 이름으로 바꿉니다. 지원되는 모델 목록은 :ref:`label-cortex_complete_llm_model_availability섹션을 참조하세요.
다음 curl 명령을 사용하여 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 매개 변수를 :code:`True`로 설정하여 REST API에서 응답을 스트리밍할 수 있습니다.
다음 Python 코드는 REST API에서 응답을 스트리밍합니다.
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)
다음 JavaScript 또는 TypeScript 코드는 REST API에서 응답을 스트리밍합니다.
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);
}
다음 curl 명령은 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
}
}'
제한 사항¶
다음은 Snowflake 호스팅 모델에서 OpenAI SDK를 사용할 때의 제한 사항입니다.
Chat Completions만 지원됩니다.
설정 해제할 경우 :code:`max_completion_tokens`의 기본값은 4096입니다. Cortex Chat Completions API의 이론적 최대값은 131,072입니다. 각 모델에는 131,072 미만일 수 있는 자체 출력 토큰 제한이 있습니다.
도구 호출은 OpenAI 및 Claude 모델에 대해 지원됩니다. 도구 호출을 효과적으로 사용하는 예는 사고 체인을 이용한 도구 호출 예제 섹션을 참조하세요.
오디오는 지원되지 않습니다.
이미지 이해는 OpenAI 및 Claude 모델에 대해서만 지원됩니다. 이미지는 20MiB로 최대 요청 크기가 제한되며 대화당 20개로 제한됩니다.
Claude 모델만 프롬프트 캐싱을 위해 임시 캐시 제어 지점을 지원합니다. OpenAI 모델은 암시적 캐싱을 지원합니다.
Claude 모델만 응답에서 추론 세부 정보 반환을 지원합니다.
오류 메시지는 OpenAI가 아닌 Snowflake에서 생성됩니다. 보고된 오류는 로깅 및 디버깅 목적으로만 사용하는 것이 좋습니다.
상세 호환성 차트¶
다음 표에는 다양한 Snowflake 호스팅 모델에서 Cortex Chat Completions API를 사용할 때 지원되는 요청 및 응답 필드와 헤더가 요약되어 있습니다.
필드 |
OpenAI 모델 |
Claude 모델 |
기타 모델 |
|---|---|---|---|
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
❌ 오류 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
✔ 사용자, 어시스턴트, 시스템만 해당 |
✔ 사용자, 어시스턴트, 시스템만 해당 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
:code:`messages[].content[]`(배열) |
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
❌ 오류 |
|
❌ 무시됨 |
✔ 지원됨(임시만 해당) |
❌ 무시됨 |
|
❌ 오류 |
❌ 오류 |
❌ 무시됨 |
|
❌ 오류 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원됨(사용되지 않음) |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
✔ 지원 |
❌ 무시됨 |
|
✔ 지원 |
✔ |
❌ 무시됨 |
|
❌ 무시됨 |
✔ OpenRouter 형식 |
❌ 무시됨 |
|
❌ 오류 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
❌ 오류(사용 중단됨) |
❌ 오류(사용 중단됨) |
❌ 오류(사용 중단됨) |
|
✔ 지원됨(기본값 4096, 최대 131072) |
✔ 지원됨(기본값 4096, 최대 131072) |
✔ 지원됨(기본값 4096, 최대 131072) |
|
❌ 무시됨 |
❌ 무시됨 |
❌ 무시됨 |
|
❌ 무시됨 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
❌ 무시됨( |
❌ 무시됨 |
|
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
✔ 지원됨( |
✔ :code:`reasoning.max_tokens`로 변환됨 |
❌ 무시됨 |
|
❌ 무시됨 |
✔ 지원 |
❌ 무시됨 |
|
✔ 지원 |
✔ Only |
❌ 무시됨 |
|
❌ 무시됨 |
❌ 무시됨 |
❌ 무시됨 |
|
❌ 오류 |
❌ 오류 |
❌ 오류 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
❌ 오류 |
❌ 오류 |
❌ 오류 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
❌ 무시됨 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ |
❌ 무시됨 |
|
✔ 지원 |
✔ |
❌ 오류 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
❌ 무시됨 |
❌ 무시됨 |
|
❌ 오류 |
❌ 무시됨 |
❌ 무시됨 |
필드 |
OpenAI 모델 |
Claude 모델 |
기타 모델 |
|---|---|---|---|
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
✔ 지원 |
✔ 단일 선택 항목만 |
✔ 단일 선택 항목만 |
|
✔ 지원 |
❌ 지원되지 않음 |
✔ :code:`stop`만 해당 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
:code:`choices[].message`(비스트리밍) |
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
✔ |
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
✔ OpenRouter 형식 |
❌ 지원되지 않음 |
:code:`choices[].delta`(스트리밍) |
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
✔ |
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
✔ OpenRouter 형식 |
❌ 지원되지 않음 |
|
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
✔ 지원 |
✔ 지원 |
✔ 지원 |
|
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
❌ 지원되지 않음 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 캐시 읽기만 |
✔ 캐시 읽기 + 쓰기 |
❌ 지원되지 않음 |
|
하위 필드 참조 |
하위 필드 참조 |
하위 필드 참조 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
|
✔ 지원 |
❌ 지원되지 않음 |
❌ 지원되지 않음 |
헤더 |
지원 |
|---|---|
|
✔ 필수 |
|
✔ 지원됨( |
|
✔ 지원됨( |
헤더 |
지원 |
|---|---|
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
|
❌ 지원되지 않음 |
자세히 알아보기¶
사용 예의 전체 개요는 `OpenAI의 Chat Completions API 참조<https://platform.openai.com/docs/guides/completions/>`_ 또는 `OpenAI Cookbook<https://cookbook.openai.com/>`_을 참조하세요.
Snowflake는 Chat Completions API와의 호환성을 제공할 뿐만 아니라 Claude 모델에 대한 OpenRouter 호환 기능도 지원합니다. 이러한 기능은 요청 시 추가 필드로 노출됩니다.
프롬프트 캐싱의 경우
cache_control필드를 사용합니다. 자세한 내용은 `OpenRouter 프롬프트 캐싱 설명서<https://openrouter.ai/docs/features/prompt-caching>`_를 참조하세요.추론 토큰의 경우
reasoning필드를 사용합니다. 자세한 내용은 `OpenRouter 추론 설명서<https://openrouter.ai/docs/use-cases/reasoning-tokens>`_를 참조하세요.