エージェントの構成と操作¶
Snowsight で、または REST API を使用してエージェントを構築してから、エージェントをアプリケーションに統合して、タスクを実行したり、クエリに応答したりできます。まず、エージェントがタスクを実行したり、質問に回答したりするために使用できるメタデータ、ツール、オーケストレーションの指示などの情報を含むエージェントオブジェクトを作成する必要があります。その後、アプリケーションでエージェントオブジェクトを参照して、エージェントの機能を統合できます。 コンテキストをメモリ内で維持するようにスレッドを構成できるため、クライアントは会話のたびにコンテキストを送信する必要がありません。
注釈
Snowflake REST APIs は、プログラムアクセストークン (PATs) による認証コード、 JSON Web トークン (JWTs) を使用したキーペア認証、および OAuth をサポートしています。詳細については、 Snowflakeでの Snowflake REST APIs 認証 をご参照ください。
エージェントの作成¶
エージェントを配置するデータベースとスキーマを、エージェントの名前と説明とともに指定して、エージェントオブジェクトを作成します。さらに、表示名、アバター、色を指定します。これらの属性は、クライアントアプリケーションがエージェントを表示するために使用します。表示名は、会話でエージェントを参照するためのハンドルとしても使用されます。
次の例は、Snowsight から、または REST API を使用してエージェントオブジェクトを作成する方法を示しています。
エージェントが作成されるデータベースとスキーマ、およびエージェントに必要なパラメーターを指定して、エージェントオブジェクトを作成します。エージェントオブジェクトの作成時にツールフィールドを指定することもできます。
curl -X POST "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "name": "TransportationAgent", "comment": "This agent handles queries related to transportation methods and costs.", "models": { "orchestration": "llama3.3-70B" } }'
ツールを追加する¶
エージェントを作成したら、ツールを追加し、ツール間でオーケストレーションを行う方法を指示する必要があります。エージェントは以下のツールタイプをサポートします。
Cortex Analyst:セマンティックビューを指定すると、Cortex Analystはこれらを使用して構造化データを取得します。Agentは、複数のセマンティックビューにルーティングして応答を提供できます。
Cortex Search:Cortex Searchインデックスを、検索フィルター、列名、メタデータなどの関連情報を含むツールとして提供します。Cortex Agentは、Cortex Searchインデックスを使用して非構造化データを取得します。
カスタムツール:特定のビジネスロジックのコードを、ストアドプロシージャまたはユーザー定義関数(UDF)として実装できます。または、カスタムツールを使用して、APIs を使ってバックエンドシステムからデータを取得することもできます。
また、各ツールが使用するリソースも指定します。例えば、Cortex Analystでは、SQL クエリ実行のタイムアウトとともにウェアハウスを指定します。Cortex Searchと同様に、検索クエリで使用するフィルターと列名を、検索応答結果の最大件数とともに指定します。カスタムツールの場合は、ウェアハウスの詳細を提示します。
既存のエージェントの構成を変更するには、次のステップを実行します:
Edit を選択します。
Description の場合、エージェントとユーザーがそのエージェントをどのように操作できるかを説明します。
ユーザーがエージェントにできるサンプルの質問を追加するには、サンプルの質問を入力して Add a question を選択します。
Tools を選択します。次のツールを1つ以上追加します。
エージェントにCortex Analystのセマンティックビューを追加する場合:このセクションは、既にセマンティックビューが作成されていることを前提としています。セマンティックビューとその作成方法の詳細については、セマンティックビューの概要 をご参照ください。
Cortex Analyst を検索し、+ Add ボタンを選択します。
:ui:`Name`には、セマンティックビューの名前を入力します。
Semantic view を選択します。
エージェントが使用するセマンティックビューを選択します。
Warehouse には、エージェントがクエリを実行するために使用するウェアハウスを選択します。
Query timeout (seconds) には、エージェントがタイムアウトするまでにクエリが完了するまでの最大待機時間を秒単位で指定します。
Description では、セマンティックビューを説明します。
Add を選択します。
エージェントにCortex Search Serviceを追加する場合:このセクションでは、すでにCortex Search Serviceが作成されていることを前提としています。Cortex Search Serviceの作成については、Cortex Search をご参照ください。共有されているCortexナレッジ拡張機能(CKE)も使用できます。CKE を使用するチュートリアルの場合 トラブルシューティング を参照してください。
Cortex Search Services を検索し、+ Add ボタンを選択します。
Name には、 Cortex Search Serviceの名前を入力します。
:ui:`Description`は、 Cortex Searchサービスについて説明しています。
Search service では、エージェントが使用するCortex Search serviceを選択します。
Add を選択します。
エージェントにカスタムツールを追加する場合:カスタムツールを追加することで、エージェントの機能を拡張することができます。カスタムツールを使用すると、エージェントは定義したストアドプロシージャや関数を呼び出して、アクションを実行したり計算を実行したりできます。このセクションでは、すでにカスタムツールが作成されていることを前提としています。プロシージャと関数については、 関数とプロシージャによるSnowflakeの拡張 をご参照ください。
Custom tools を検索し、+ Add ボタンを選択します。
Name のカスタムツールの名前を入力します。
Resource type では、カスタムツールが関数かプロシージャかを選択します。関数を使用するかプロシージャを使用するかどうかの情報については、ストアドプロシージャとユーザー定義関数のどちらを記述するかの選択 をご参照ください。
:ui:`Custom tool identifier`の場合、カスタムツールとして追加する既存の関数またはプロシージャを選択します。
関数またはプロシージャの関連パラメーターが自動的に表示されます。名前、タイプ、説明を追加し、パラメーターが必須かどうかを選択すると、カスタムツールのパラメーターを手動で追加できます。自動的に入力されるパラメーターを変更することもできます。
Warehouse では、エージェントがカスタムツールを実行するために使用するウェアハウスを選択します。手動でウェアハウスを選択する必要があります。
:ui:`Description`では、カスタムツールとその使用方法について説明します。
Add を選択します。
カスタムツールを作成したら、カスタムツールとしてユーザーが追加した関数またはプロシージャに対してUSAGE 権限が付与されていることを確認してください。ストアドプロシージャを使用する場合、プロシージャが所有者権限で実行されるか、呼び出し元権限で実行されるかをエージェントが維持します。所有者と呼び出し元の権利については、呼び出し元権限と所有者権限のストアドプロシージャについて をご参照ください。
Save を選択します。
REST API を使用してエージェントにツールを追加するには、Cortex Agentを更新する へのリクエストの一部として次のペイロードを追加します。エージェントオブジェクトの作成時にこれらのフィールドを指定することもできます。
Cortex Analystツールとツールリソースを追加する:次の例は、既存のエージェントオブジェクトにCortex Analystツールとツールリソースを追加する方法を示しています。
Cortex Analystツールを追加します。
curl -X PUT "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "tools": [ { "tool_spec": { "description": "Analyst to analyze price", "type": "cortex_analyst_text_to_sql", "name": "Analyst1" } } ] }'Cortex Analystツールリソースを追加します。
curl -X PUT "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "tool_resources": { "Analyst1": { "semantic_model_file": "stage1", "semantic_view": "The name of the Snowflake native semantic model object", "execution_environment": {"type":"warehouse", "warehouse":"my_wh"} } } }'** Cortex Searchツールとツールリソースを追加する**:次の例は、既存のエージェントオブジェクトにCortex Searchツールとツールリソースを追加する方法を示しています。
Cortex Searchツールを追加します。
curl -X PUT "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "tool_spec": { "type": "cortex_search", "name": "Search1" } }'Cortex Searchツールリソースを追加します。
curl -X PUT "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "tool_resources": { "Search1": { "search_service": "db.schema.service_name", "filter": {"@eq": {"region": "North America"} }, "max_results": 5 } } }'カスタムツールとツールリソースを追加する:次の例は、既存のエージェントオブジェクトにカスタムツールとツールリソースを追加する方法を示しています。
カスタムツールを追加します。
curl -X PUT "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "tools": [ { "tool_spec": { "description": "Custom tool", "type": "generic", "name": "custom1" } } ] }'カスタムツールリソースを追加します。
curl -X PUT "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "tool_resources": { "Custom1": { "user-defined-function-argument": "argument1" } } }'
オーケストレーションを指定します。¶
Cortex Agentは、タスクをサブタスクのシーケンスに分割し、各サブタスクに適切なツールを特定することで、タスクをオーケストレーションします。Agent がこのオーケストレーションの実行に使用する必要がある LLM を指定します。指示することで、オーケストレーションに影響を与えることもできます。たとえば、小売製品の質問に応答するように構築されたエージェントを考えてみましょう。オーケストレーションの指示 "Use the search tool for all requests related to refunds" を使用すると、確実にAgentが払い戻しポリシーの詳細を提示する(Cortex Searchを使用)だけで、実際に払い戻し金額を計算する(Cortex Analystを使用)ことがないようにできます。"Always provide provide a concise response; maintain a friendly tone" のようなブランドやトーンに合わせた応答指示を指定することもできます。
Orchestration を選択します。
Orchestration model では、エージェントがオーケストレーションを処理するために使用するモデルを選択します。
Planning instructions では、ユーザーからの入力に基づいてエージェントによるツールの選択に影響する指示を提供します。これには、各ツールを使用するタイミングに関する具体的な指示や、応答の最初や最後に常にツールを使用するための指示も含まれます。
Response instruction の場合、モデルが応答生成に使用する指示を提供します。たとえば、エージェントにチャートの作成を優先させるか、ユーザーと一定のトーンを維持するかを指定します。
Save を選択します。
REST API を使用してエージェントを更新するには、Cortex Agentを更新する へのリクエストの一部として次のペイロードを追加します。エージェントオブジェクトの作成時にこれらのフィールドを指定することもできます。次のプロシージャは、計画と応答の指示によりエージェントを更新し、オーケストレーションに使用する LLM モデルを指定する方法を示しています。
LLM モデルを更新します。
curl -X PUT "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "models": { "orchestration": "llama3.3-70B" }'
計画と応答の指示を指定します。
curl -X PUT "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \ --data '{ "instructions": { "response": "Always provide a concise response and maintain a friendly tone.", "orchestration": "<orchestration instructions>", "system": "You are a helpful data agent." } }'
エージェントへのアクセスを設定する¶
Snowsight UI から、または SQL を使用してアクセスポリシーを設定し、ユーザーがAgentにアクセスできるようにします。Agentへのアクセスを提供するロールを指定します。
Access を選択します。
ロールにエージェントへのアクセスを与えるには、 Add role を選択し、ドロップダウンメニューからロールを選択します。
Save を選択します。
GRANT USAGE PRIVILEGE ON AGENT my_agent TO ROLE test_rl;
エージェントを精査する¶
Agentを構築したら、Agentを精査してすべてのパラメーターを確認できます。
注釈
Snowsight からエージェントを確認する場合は、エージェント管理者 UI でのみエージェントを表示できます。データベースオブジェクトエクスプローラーでエージェントを表示することはできません。
ナビゲーションメニューで AI & ML » Agents を選択します。
エージェントのリストから、詳細を表示するエージェントを選択します。エージェントの詳細の概要を表示する新しいページが開きます。
すべてのエージェントの詳細を精査するには、Next を選択します。
エージェントをリストし、説明するには、REST APIs を使用します。
すべてのエージェントをリストします。
curl -X GET "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/{database}/schemas/{schema}/agents:" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \
目的のエージェントを説明します。
curl -X GET "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/{database}/schemas/{schema}/agents/{name}:" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Bearer $PAT" \
エージェントをテストする¶
エージェントを作成したら、ユーザーのクエリにどのように応答するかをテストできます。エージェントオブジェクトによるエージェント実行リクエスト を使用してエージェントをテストすることもできます。
エージェントをテストするには、次のステップに従います。
エージェントとやり取りする¶
エージェントオブジェクトを作成したら、REST API を使用して、エージェントをアプリケーションに直接統合できます。対話中のコンテキストを維持するには、スレッドを使用します。エージェントオブジェクトとスレッドを組み合わせることで、クライアントアプリケーションコードが簡素化されます。
スレッドを作成する¶
会話中のコンテキストを維持するスレッドを作成します。スレッドが正常に作成されると、システムは Thread ID を返します。
curl -X POST "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/cortex/threads" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $PAT" \
--data '{
"origin_application": <application_name>,
}'
エージェントにリクエストを送る¶
Agentとやり取りするには、REST API リクエストの一部として、エージェントオブジェクト、スレッド ID、および一意の parent_message_id を渡す必要があります。初期 parent_message_id は 0 である必要があります。
curl -X POST "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/{database}/schemas/{schema}/agents/{name}:run" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $PAT" \
--data '{
"thread_id": <thread id for context>,
"parent_message_id": <parent message id>,
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What are the projected transportation costs for the next three quarters? "
}
]
}
],
"tool_choice": {
"type": "required",
"name": [
"Analyst1",
"Search1"
]
}
}'
エージェントに関するフィードバックを収集する¶
エージェントの応答について、ユーザーからのフィードバックを収集できます。このフィードバックは、ユースケースを反復する際にエージェントを改良するのに役立ちます。 ユーザーは、客観的な評価(肯定的/否定的)とともに、メッセージにより主観的な詳細も提供できます。また、ユーザーは多くのカテゴリの1つにフィードバックを分類できます。
curl -X POST "$SNOWFLAKE_ACCOUNT_BASE_URL/api/v2/databases/<database-name>/schemas/<schema-name>/agents/<agent-name>:feedback:" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $PAT" \
--data '{
"request_id": "<request-id>",
"positive": true
"feedback_message": "This answer was great",
"categories":[
"category1", "category2", "category3"
],
"thread_id": "<thread-id>"
}'
エージェントオブジェクトなしでやりとりする¶
場合によっては、エージェントオブジェクトなしで、agent:run を使用してCortex Agentを使い始める必要があることもあります。たとえば、ユースケースを素早く試したい場合には、これが役立つ可能性があります。REST API の詳細については、エージェントオブジェクトなしでのエージェントの実行 をご参照ください。
注釈
エージェントオブジェクトを作成せずにエージェントとやりとりする場合は、リクエストごとにエージェントのコンテキストを手動で維持する必要があります。