Cortex Agents REST API¶
対話型チャットアプリケーションの作成を簡素化するには、この API を使用します。
実行エージェント¶
POST <アカウントURL>/api/v2/cortex/agent:run
リクエスト本文でプロバイダーが提供するCortex Agentサービスにユーザークエリを送信し、その応答を返します。
リクエスト¶
パスパラメーター¶
パラメーター |
説明 |
---|---|
|
(必須) お客様の Snowflake アカウント URL。アカウント URL の見つけ方については、 アカウントの組織名とアカウント名の検索 を参照してください。 |
リクエストヘッダー¶
ヘッダー |
説明 |
---|---|
|
(必須)認証トークン詳細については、 REST API 認証の構成 をご参照ください。 |
|
(必須)application/json |
リクエスト本文¶
リクエスト本文は、モデル、応答命令、実験フィールド、ツール、ツールリソース、メッセージを含みます。
フィールド |
型 |
説明 |
---|---|---|
|
string |
Agent が応答を生成するために使用するモデルの名前。対応モデルのリストについては、 対応モデル を参照してください。 |
|
string |
モデルが応答を生成する際に従う指示。 |
|
object |
エージェントに渡される実験フラグ。 |
|
array |
Agent が利用可能なツール仕様の配列。 |
|
object |
ツールに必要なリソース。 |
|
object |
ツールの選択に使用される構成。 |
|
array |
会話中のメッセージの配列。 |
応答指示¶
response_instruction
フィールドは、モデルに対してレスポンス生成の指示を与える文字列です。
ツール構成¶
このセクションでは、サポートされているツールのタイプ、構成オプション、各ツールに必要なリソースの指定方法について詳しく説明します。
ツール仕様¶
tools
フィールドには、利用可能なツールが配列されています:
フィールド |
型 |
説明 |
---|---|---|
|
string |
ツールのタイプ。タイプと名前の組み合わせは、一意の識別子です。 |
|
string |
ツールの名前。タイプと名前の組み合わせは、一意の識別子です。 |
サポートされている tool_spec.type
の値は以下の通りです。
cortex_search
: Cortexの検索関数に使用。cortex_analyst_text_to_sql
: Cortex Analystの SQL テキストに使用します。sql_exec
: SQL クエリの実行に使用。SQL クエリを実行し、結果をツールの結果として提供する責任があります。詳しくは、 下記の回答サンプルリクエスト を参照してください。data_to_chart
: チャートの生成に使用
ツールリソース¶
tool_resources
オブジェクトは、各ツールの構成オブジェクトを提供します。
tool_resources: {
"toolName1": {configuration object for toolName1},
"toolName2": {configuration object for toolName2},
// ...
}
各ツールタイプの構成は以下の通りです。
cortex_search
SearchName
オブジェクトにはCortex Searchツールの構成が含まれています。"SearchName": { // Required: The Snowflake search service identifier "name": "database.schema.service_name", // Optional: Number of search results to include "max_results": 5, // Optional: Column to use as document title "title_column": "title", // Optional: Column to use as document identifier "id_column": "id", // Optional: Filters to apply to search results (such as @eq for equality) "filter": { "@eq": {"<column>": "<value>"} } }
cortex_analyst_text_to_sql
AnalystName
オブジェクトには、Cortex Analyst text-to-SQL ツールの構成が含まれています。構成には、使用するセマンティックモデルまたは表示を含める必要があります。例:"AnalystName": { // Stage path to semantic model file in `semantic_model_file` "semantic_model_file": "@database.schema.stage/my_semantic_model.yaml" }
セマンティックビューの概要 を使用するか
"AnalystName": { // Fully qualified name of the semantic view object "semantic_view": "@database.schema.semantic_view" }
ツール選択¶
tool_choice
フィールドはツール選択の動作を構成します。
フィールド |
型 |
説明 |
---|---|---|
|
string |
ツールの選び方。 有効な値:
|
|
array |
使用するツール名の配列 (オプション)。 |
メッセージ¶
messages
配列はユーザーとアシスタントの会話履歴を含みます。
フィールド |
型 |
説明 |
---|---|---|
|
string |
メッセージ送信者のロール。 有効な値:
|
|
array |
メッセージを構成するコンテンツ要素の配列。 |
メッセージの内容構成¶
各メッセージの content
配列には、タイプの異なる複数のコンテント・エレメントを含めることができます。
フィールド |
型 |
説明 |
---|---|---|
|
string |
コンテンツのタイプ。 有効な値:
|
- テキストコンテンツ
type
が"text"
の場合:フィールド
型
説明
messages[].content[].text
string
メッセージのテキスト内容。
例:
{ "type": "text", "text": "Show me sales by region for Q1 2024" }
- チャートコンテンツ
type
が「チャート」の場合:フィールド
型
説明
messages[].content[].chart
object
メッセージのチャート内容。
messages[].content[].chart.chart_spec
string
Vega-Lite仕様のチャート。
例:
{ "type": "chart", "chart": { "chart_spec": "{\"$schema\":\"https://vega.github.io/schema/vega-lite/v5.json\",\"data\":{\"values\":[{\"REGION\":\"NORTH_AMERICA\",\"SUM(SALES)\":\"2000.00\"},{\"REGION\":\"EUROPE\",\"SUM(SALES)\":\"1700.00\"},{\"REGION\":\"SAUTH_AMERICA\",\"SUM(SALES)\":\"1500.00\"}]},\"encoding\":{\"x\":{\"field\":\"REGION\",\"sort\":null,\"type\":\"nominal\"},\"y\":{\"field\":\"SUM(SALES)\",\"sort\":null,\"type\":\"quantitative\"}},\"mark\":\"bar\"}", } }
- テーブル の内容
type
が「テーブル」の場合:フィールド
型
説明
messages[].content[].table
object
メッセージのテーブルの内容。
messages[].content[].table.query_id
string
実行されたクエリの ID 。
例:
{ "type": "table", "table": { "query_id": "01bbff92-0304-c8c7-0022-b7869a076c22" } }
- ツール使用
type
が「tool_use」の場合:フィールド
型
説明
messages[].content[].tool_use
object
ツール用コンテナー リクエスト詳細。
messages[].content[].tool_use.tool_use_id
string
このツール使用リクエストの一意識別子。
messages[].content[].tool_use.name
string
実行するツール名。ツール配列のツール名と一致する必要があります。
messages[].content[].tool_use.input
object
ツール実行時の入力パラメーター。
例:
{ "type": "tool_use", "tool_use": { "tool_use_id": "tu_01", "name": "Analyst1", "input": { "query": "Show me sales by region for Q1 2024" } } }
- ツール結果
type
が"tool_results"
の場合:フィールド
型
説明
messages[].content[].tool_results
object
ツールの実行結果とメタデータのコンテナー。
messages[].content[].tool_results.tool_use_id
string
これらの結果を生成した tool_use_id をリファレンスします。
messages[].content[].tool_results.name
string
実行されたツール名。ツール配列のツール名と一致する必要があります。
messages[].content[].tool_results.status
string
ツールの実行ステータス。
有効な値:
"success"
"error"
messages[].content[].tool_results.content
array
ツール実行によって生成されるコンテンツ要素の配列。
以下のタイプの要素を含むことができます:
型
フィールド
説明
text
type: "text"
text: string
ツールが返すプレーンテキストの内容。
json
type: "json"
json: object
ツールから返される構造化された JSON データ。
例:
{ "type": "tool_results", "tool_results": { "tool_use_id": "tu_01", "status": "success", "content": [ { "type": "json", "json": { "sql": "SELECT region, SUM(sales) FROM sales_data WHERE quarter='Q1' AND year=2024 GROUP BY region" "text": "This is our interpretation of your question: Show me sales by region for Q1 2024. We have generated the following SQL query for you: SELECT region, SUM(sales) FROM sales_data WHERE quarter='Q1' AND year=2024 GROUP BY region" } } ] } }
完了メッセージの例¶
この例では、ユーザーのクエリ (role
is user
) とレスポンス (role
is assistant
) を含む完全なメッセージを示しています。応答には、 Analyst1
というツールのツール使用イベントと、同じツールのツール結果イベントが含まれます。
{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Show me sales by region for Q1 2024"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"tool_use": {
"tool_use_id": "tu_01",
"name": "Analyst1",
"input": {
"query": "Show me sales by region for Q1 2024"
}
}
},
{
"type": "tool_results",
"tool_results": {
"tool_use_id": "tu_01",
"name": "Analyst1",
"status": "success",
"content": [
{
"type": "json",
"json": {
"sql": "SELECT region, SUM(sales) FROM sales_data WHERE quarter='Q1' AND year=2024 GROUP BY region"
"text": "This is our interpretation of your question: Show me sales by region for Q1 2024. We have generated the following SQL query for you: SELECT region, SUM(sales) FROM sales_data WHERE quarter='Q1' AND year=2024 GROUP BY region"
}
}
]
}
}
]
}
]
}
応答¶
ストリームでは、各イベントはServer-Sent Events (SSE) 形式で届き、主なパターンは以下の通りです。
出力のチャンクに対する増分
message.delta
イベント何か問題が発生した場合の
error
イベント。
message.delta
イベント¶
フィールド |
型 |
説明 |
---|---|---|
|
string |
部分的なメッセージデータの場合の |
|
object |
インクリメンタルアップデートデータを含みます。 |
|
string |
メッセージの一意識別子。 |
|
string |
|
|
array |
チャンクまたは部分的なメッセージセグメントのリスト。 |
|
integer |
現在のメッセージ内でのこのチャンクの位置。 |
|
string |
コンテンツのタイプ有効な値:
|
|
string |
|
|
object |
|
|
string |
Vega-Lite仕様のチャート。 |
|
object |
|
|
string |
実行されたクエリの ID 。 |
|
object |
|
|
string |
ツールコールの一意識別子。 |
|
string |
呼び出されるツールの名前。 |
|
object |
ツールの JSON ペイロード。 |
|
object |
|
|
string |
ツール出力の一意識別子。 |
|
string |
ツールの実行ステータス。有効な値:
|
|
array |
ツールの返送データを説明する項目のリスト。 |
|
string |
ツールが返すコンテンツのタイプ。有効な値:
|
|
object |
|
|
string |
|
error
イベント¶
フィールド |
型 |
説明 |
---|---|---|
|
string |
エラーイベント用 |
|
object |
エラーの詳細を含みます。 |
|
string |
Snowflakeエラーコード。例えば、 |
|
string |
何が悪かったのかの説明。例えば、 |
会話の流れのサンプル¶
このセクションでは、Cortex Agent REST API を使った、ユーザーとアシスタントの会話フローのサンプルを示します。
サンプルリクエスト¶
{
"model": "llama3.3-70b",
"response_instruction": "You will always maintain a friendly tone and provide concise response.",
"experimental": {},
"tools": [
{
"tool_spec": {
"type": "cortex_analyst_text_to_sql",
"name": "Analyst1"
}
},
{
"tool_spec": {
"type": "cortex_analyst_text_to_sql",
"name": "Analyst2"
}
},
{
"tool_spec": {
"type": "sql_exec",
"name": "sql_execution_tool"
}
},
{
"tool_spec": {
"type": "data_to_chart",
"name": "data_to_chart"
}
},
{
"tool_spec": {
"type": "cortex_search",
"name": "Search1"
}
}
],
"tool_resources": {
"Analyst1": { "semantic_model_file": "stage1"},
"Analyst2": { "semantic_model_file": "stage2"},
"Search1": {
"name": "db.schema.service_name",
"filter": {"@eq": {"region": "North America"} }
}
},
"tool_choice": {
"type": "auto"
},
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What are the top three customers by revenue?"
}
]
}
]
}
サンプル応答¶
{
"id": "msg_001",
"object": "message.delta",
"delta": {
"content": [
{
"index": 0,
"type": "tool_use",
"tool_use": {
"tool_use_id": "toolu_XXXXXX",
"name": "analyst1",
"input": {
"messages": [
"role:USER content:{text:{text:\"What are the top three customers by revenue?\"}}"
],
"model": "snowflake-hosted-semantic",
"experimental": ""
}
}
},
{
"index": 0,
"type": "tool_results",
"tool_results": {
"tool_use_id": "toolu_XXXXXX",
"content": [
{
"type": "json",
"json": {
"suggestions": [],
"sql": "WITH __customers AS (\n SELECT\n customer_id,\n revenue\n FROM user_database.user_schema.user_table\n)\nSELECT\n customer_id, revenue FROM __customers ORDER BY revenue DESC LIMIT 3\n -- Generated by Cortex Analyst\n;",
"text": "This is our interpretation of your question:\n\n__What are the top three customers by revenue?\n\n"
}
}
],
"status": "success"
}
},
{
"type": "tool_use",
"tool_use": {
"tool_use_id": "tool_002",
"name": "sql_execution_tool",
"input": {
"sql": "WITH __customers AS (SELECT customer_id, revenue FROM user_database.user_schema.user_table) SELECT customer_id, revenue FROM __customers ORDER BY revenue DESC LIMIT 3"
}
}
}
]
}
}
サンプル回答リクエスト¶
Cortex Agentは、実行された SQL クエリに基づいて、テキストや図表による回答を生成できます。次の例は、Cortex Agent API を使用して、そのような回答を生成する方法を示しています。
答えを得るために、クライアントはCortex Agent API に、クライアント側で実行された SQL の query_id
でフォローアップリクエストを行います。実行される SQL は、最新の応答メッセージの sql_exec
ツールタイプの tool_use
イベントでプロバイダーされます。
リクエストは、 cortex_analyst_text_to_sql
および sql_exec
ツールを使用してテキストによる回答を得る必要があり、さらに data_to_chart
ツールを使用してチャートによる回答を得る必要があります。チャートは、エージェントがチャートが答えを提示する良い方法であると判断した場合にのみ返されます。
注釈
4000 セルを超える結果セットでは、 text
および chart
の回答の代わりに table
の回答が返されます。
{
"model": "llama3.3-70b",
"response_instruction": "You will always maintain a friendly tone and provide concise response.",
"experimental": {},
"tools": [
{
"tool_spec": {
"type": "cortex_analyst_text_to_sql",
"name": "Analyst1"
}
},
{
"tool_spec": {
"type": "cortex_analyst_text_to_sql",
"name": "Analyst2"
}
},
{
"tool_spec": {
"type": "sql_exec",
"name": "sql_execution_tool"
}
},
{
"tool_spec": {
"type": "data_to_chart",
"name": "data_to_chart"
}
},
{
"tool_spec": {
"type": "cortex_search",
"name": "Search1"
}
}
],
"tool_resources": {
"Analyst1": { "semantic_model_file": "stage1"},
"Analyst2": { "semantic_model_file": "stage2"},
"Search1": {
"name": "db.schema.service_name",
"filter": {"@eq": {"region": "North America"} }
}
},
"tool_choice": {
"type": "auto"
},
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What are the top three customers by revenue?"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"tool_use": {
"tool_use_id": "tool_001",
"name": "Analyst1",
"input": {
"messages": [
"role:USER content:{text:{text:\"What are the top three customers by revenue?\"}}"
],
"model": "snowflake-hosted-semantic",
}
}
},
{
"type": "tool_results",
"tool_results": {
"status": "success",
"tool_use_id": "tool_001",
"content": [
{
"type": "json",
"json": {
"sql": "select * from table",
"text": "This is our interpretation of your question: What are the top three customers by revenue? \n\n"
}
}
]
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_results",
"tool_results": {
"tool_use_id": "tool_002",
"result": {
"query_id": "01bbff92-0304-c8c7-0022-b7869a076c22"
}
}
}
]
}
]
}
回答サンプル¶
{
"id": "msg_001",
"object": "message.delta",
"delta": {
"content": [
{
"index": 0,
"type": "text",
"text": "This is a textual answer to your question"
},
{
"index": 0,
"type": "chart",
"chart": {
"chart_spec": "{\"$schema\": \"https://vega.github.io/schema/vega-lite/v5.json\", \"title\": \"Example chart\", \"mark\": \"bar\", \"encoding\": {\"x\": {\"field\": \"column_x\", \"type\": \"nominal\", \"sort\": null}, \"y\": {\"field\": \"column_y\", \"type\": \"quantitative\"}}, \"data\": {\"values\": [{\"column_x\": \"A\", \"column_y\": \"1\"}, {\"column_x\": \"A\", \"column_y\": \"1\"}]}}"
}
}
]
}
}
Cortex Agentの制限事項¶
Streamlit in Snowflake (SiS) アプリは 所有者の権限 の下で実行されるため、 SiS アプリ内で SQL ステートメントを実行することはサポートされていません。
Azure OpenAI モデルには対応していません。