AGENT_RUN
AGENT_RUN (SNOWFLAKE.CORTEX)
SNOWFLAKE.CORTEX.AGENT_RUN() 함수는 에이전트 객체 없이 Cortex Agent를 실행하고 응답을 JSON으로 반환해요. 이 함수를 사용하면 에이전트 객체를 먼저 만들 필요 없이 Cortex Agents와 직접 상호작용할 수 있어요. 오케스트레이션 모델과 도구를 포함한 구성을 요청 본문에서 제공하면 돼요.
참고:
SNOWFLAKE.CORTEX.AGENT_RUN은 Cortex Agents Run REST API를 둘러싼 유틸리티 래퍼예요. 대부분의 애플리케이션 통합에서는 Snowflake가 스트리밍 REST API를 직접 호출할 것을 권장해요.
본문
문법
SNOWFLAKE.CORTEX.AGENT_RUN( <request_body> [, <create_thread_if_not_present> ] )
인자
request_body — 에이전트에 보낼 JSON 요청 본문이에요. 이 값은 문자열(예: $$...$$ 리터럴)이어야 해요.
요청 본문에서 지원되는 필드는 다음과 같아요.
| 필드 | 타입 | 설명 |
|---|---|---|
| thread_id | integer | 대화의 스레드 ID. thread_id를 사용하면 parent_message_id도 함께 전달해야 함. |
| parent_message_id | integer | 스레드에서 부모 메시지의 ID. 첫 메시지라면 parent_message_id는 0이어야 함. |
| messages | array of Message | 요청에 thread_id와 parent_message_id를 전달하면, messages는 대화의 현재 사용자 메시지를 포함함. 그렇지 않으면 messages는 대화 기록과 현재 메시지를 포함함. Messages는 사용자 질의와 어시스턴트 응답을 시간순으로 모두 담음. |
| background | boolean | 에이전트를 비동기로 실행할지 여부. true면 클라이언트가 연결을 끊어도 에이전트가 백그라운드에서 6시간 타임아웃으로 비동기 실행됨. stream을 false로 한 백그라운드 실행에서는 API가 status: in_progress와 run_id로 즉시 응답하며, 실행 완료 후 응답은 run_id로 Stream Agent Run 엔드포인트를 스트리밍하거나(REST API) 스레드 ID로 THREAD_MESSAGES SQL 함수를 폴링해 가져옴. stream이 true면 응답이 Server-Sent Events로 스트리밍됨. background가 false면 에이전트가 15분 타임아웃으로 동기 실행됨. 스레드로 대화 기록을 관리할 때만 사용 가능. |
| stream | boolean | 스트리밍 응답(text/event-stream)을 반환할지, 비스트리밍 JSON 응답(application/json)을 반환할지 여부. true면 응답이 Server-Sent Events로 스트리밍되고, false면 JSON으로 반환됨. |
| tool_choice | ToolChoice | 상호작용 중 에이전트가 도구를 어떻게 선택·사용할지 구성. 도구 사용이 자동인지, 필수인지, 특정 도구를 사용할지 제어함. |
| models | ModelConfig | 에이전트의 모델 구성. 오케스트레이션 모델(예: claude-4-sonnet)을 포함함. 제공하지 않으면 모델이 자동 선택됨. 현재 오케스트레이션 단계에서만 사용 가능. |
| instructions | AgentInstructions | 에이전트 동작 지침. 응답, 오케스트레이션, 샘플 질문을 포함함. |
| orchestration | OrchestrationConfig | 예산 제약(예: 초, 토큰)을 포함한 오케스트레이션 구성. |
| tools | array of Tool | 에이전트가 사용할 수 있는 도구 목록. 각 도구는 type, name, description, input schema를 가진 tool_spec을 포함함. 도구는 tool_resources에 대응하는 구성이 있을 수 있음. |
| tool_resources | map of ToolResource | tools 배열에서 참조된 각 도구의 구성. 키는 해당 도구의 이름과 일치해야 함. |
예제:
{
"thread_id": 0,
"parent_message_id": 0,
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is the total revenue for 2023?"
}
],
"status": "completed",
"error": {
"code": "399504",
"message": "Error during execution"
}
}
],
"background": false,
"stream": false,
"tool_choice": {
"type": "auto",
"name": [
"analyst_tool",
"search_tool"
]
},
"models": {
"orchestration": "claude-4-sonnet"
},
"instructions": {
"response": "You will respond in a friendly but concise manner",
"orchestration": "For any query related to revenue we should use Analyst; For all policy questions we should use Search"
},
"orchestration": {
"budget": {
"seconds": 30,
"tokens": 16000
}
},
"tools": [
{
"tool_spec": {
"type": "generic",
"name": "get_revenue",
"description": "Fetch the delivery revenue for a location.",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
}
},
"required": [
"location"
]
}
}
],
"tool_resources": {
"get_revenue": {
"type": "function",
"execution_environment": {
"type": "warehouse",
"warehouse": "MY_WH"
},
"identifier": "DB.SCHEMA.UDF"
}
}
}
create_thread_if_not_present — 요청 본문에 thread_id가 없을 때 새 스레드를 자동으로 만들지 지정하는 BOOLEAN 값이에요. 기본값: FALSE.
중요: 요청 본문에서 stream을 true로 설정하는 것은 지원되지 않아요.
"stream": true를 포함하면 함수는 오류를 반환해요. 항상 비스트리밍 응답이 반환돼요.
비동기(백그라운드) 실행:
- 요청 본문에서
"background": true로 설정해 에이전트를 비동기로 실행할 수 있어요. 백그라운드 실행은 AWS와 Azure에서 일반적으로 사용 가능해요(GA). 이때:- 요청 본문에 thread_id가 필요해요.
- 함수는
"status": "in_progress"와 run_id를 담은 응답으로 즉시 반환돼요. - 실행 완료 후 어시스턴트 응답을 가져오려면 스레드 ID로 THREAD_MESSAGES (SNOWFLAKE.CORTEX)를 폴링하세요.
반환
에이전트의 응답을 담은 JSON 문자열을 반환해요.
접근 제어 요구사항
에이전트를 실행하려면 Cortex Agents에 접근할 수 있는 역할을 사용해야 해요. 자세한 내용은 API 접근 역할을 참고하세요.
사용 노트
- 함수는 JSON 문자열을 반환해요. 이 문자열을 TRY_PARSE_JSON에 전달해 응답을 VARIANT 값으로 변환하세요.
- DATA_AGENT_RUN (SNOWFLAKE.CORTEX)과 달리 이 함수는 에이전트 객체를 먼저 만들 필요가 없어요. 대신 구성을 요청 본문에서 직접 제공하면 돼요.
- create_thread_if_not_present를 TRUE로 설정하면, 요청 본문에 thread_id가 없을 때 새 스레드가 자동으로 만들어져요. 응답에는 새로 만든 스레드의 thread_id가 포함되어, 이후 요청에서 대화를 계속하는 데 사용할 수 있어요.
- 에이전트를 비동기로 실행하려면 요청 본문에서
"background": true로 설정하고 thread_id를 포함하세요. 함수는 진행 중(in-progress) 상태와 run_id로 즉시 반환돼요. THREAD_MESSAGES (SNOWFLAKE.CORTEX)를 사용해 완료된 응답을 폴링하세요.
예제
에이전트를 실행하고 응답 JSON을 파싱해요:
SELECT
TRY_PARSE_JSON(
SNOWFLAKE.CORTEX.AGENT_RUN(
$${
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is the total revenue for 2025?"
}
]
}
],
"models": {
"orchestration": "claude-sonnet-4-6"
}
}$$
)
) AS resp;
샘플 반환 값:
{
"content": [
{
"text": "The total revenue for 2025 was $100,000.",
"type": "text"
}
],
"metadata": {
"usage": {
"tokens_consumed": [
{
"context_window": 200000,
"input_tokens": {
"cache_read": 0,
"cache_write": 0,
"total": 67,
"uncached": 67
},
"model_name": "claude-sonnet-4-6",
"output_tokens": {
"total": 38
}
}
]
}
},
"role": "assistant"
}
자동 스레드 생성을 사용해 에이전트를 실행해요:
SELECT
TRY_PARSE_JSON(
SNOWFLAKE.CORTEX.AGENT_RUN(
$${
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is the total revenue for 2025?"
}
]
}
],
"models": {
"orchestration": "claude-sonnet-4-6"
}
}$$,
TRUE
)
) AS resp;