Configurer des agents et interagir avec¶
You can build an agent with the following methods:
In Snowsight
Using the Agents REST API
With the Cortex Agents SQL commands
You can then integrate the agent into your application to perform tasks or respond to queries. You must first create an agent object that contains information such as the metadata, tools, and orchestration instructions that the agent can use to perform a task or answer questions. You can then reference the agent object in your application to integrate the agent’s functionality. You can configure a thread to maintain the context in memory, so that the client does not have to send the context at every turn of the conversation.
Note
Les APIs REST de Snowflake prennent en charge l’authentification par jeton d’accès programmatique (PATs), l’authentification par paire de clés à l’aide de JSON Web Tokens (JWTs), et OAuth. Pour plus de détails, voir Authentification d”Snowflake REST APIs avec Snowflake.
Créer un agent¶
Créez un objet d’agent en spécifiant la base de données et le schéma dans lesquels l’agent doit être situé, ainsi qu’un nom et une description pour l’agent. De plus, spécifiez son nom d’affichage, son avatar et sa couleur. Ces attributs sont utilisés par l’application cliente pour afficher l’agent. Le nom d’affichage est également utilisé comme identifiant pour faire référence à l’agent dans les conversations.
For best practices when creating an agent, see Best Practices to Building Cortex Agents.
Les exemples suivants montrent comment créer un objet d’agent à partir de Snowsight ou à l’aide de l’API REST :
Connectez-vous à Snowsight.
Dans le menu de navigation, sélectionnez AI & ML » Agents.
Sélectionnez Create agent.
Pour Agent object name, indiquez un nom pour l’agent qui est affiché aux utilisateurs dans l’UI.
Pour Display name, indiquez le nom de l’agent qui est affiché aux administrateurs dans la liste des agents.
Sélectionnez Create agent.
Invitez l’agent avec des requêtes de connaissances générales.
Créez un objet d’agent en spécifiant la base de données et le schéma dans lesquels l’agent sera créé, ainsi que les paramètres nécessaires à l’agent. Vous pouvez également spécifier des champs d’outils lors de la création de l’objet d’agent.
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": "claude-4-sonnet" } }'Create an agent object in the database and schema where the agent will be created. When creating an agent object using SQL, you must pass all parameters, tool fields, and orchestration. You cannot update an agent object using SQL.
CREATE OR REPLACE AGENT myagent COMMENT = 'agent level comment' PROFILE = '{"display_name": "My Business Assistant", "avatar": "business-icon.png", "color": "blue"}' FROM SPECIFICATION $$ models: orchestration: claude-4-sonnet orchestration: budget: seconds: 30 tokens: 16000 instructions: response: "You will respond in a friendly but concise manner" orchestration: "For any revenue question use Analyst; for policy use Search" system: "You are a friendly agent that helps with business questions" sample_questions: - question: "What was our revenue last quarter?" answer: "I'll analyze the revenue data using our financial database." tools: - tool_spec: type: "cortex_analyst_text_to_sql" name: "Analyst1" description: "Converts natural language to SQL queries for financial analysis" - tool_spec: type: "cortex_search" name: "Search1" description: "Searches company policy and documentation" tool_resources: Analyst1: semantic_view: "db.schema.semantic_view" Search1: name: "db.schema.service_name" max_results: "5" filter: "@eq": region: "North America" title_column: "<title_name>" id_column: "<column_name>" $$;
Ajouter des outils¶
Après avoir créé l’agent, vous devez ajouter des outils et fournir des instructions sur la manière d’orchestrer les outils. Les agents prennent en charge les types d’outils suivants :
Cortex Analyst : Vous spécifiez les vues sémantiques afin que Cortex Analyst puisse les utiliser pour récupérer des données structurées. Les agents peuvent effectuer des routages sur plusieurs vues sémantiques pour fournir la réponse.
Cortex Search : Vous fournissez les indices Cortex Search sous forme d’outils, y compris les informations connexes comme les filtres de recherche, les noms de colonnes et les métadonnées. L’Agent Cortex utilise les indices Cortex Search pour récupérer des données non structurées.
Outils personnalisés : Vous pouvez implémenter le code d’une logique métier spécifique en tant que procédure stockée ou fonction définie par l’utilisateur (UDF). Vous pouvez également utiliser les outils personnalisés pour récupérer des données à partir de vos systèmes backend à l’aide d’APIs.
Vous indiquez également les ressources utilisées par chaque outil. Par exemple, sur Cortex Analyst, vous spécifiez l’entrepôt ainsi que le délai d’attente pour l’exécution de la requête SQL. De la même manière, pour Cortex Search, vous spécifiez les filtres et les noms de colonnes utilisés dans la requête de recherche, ainsi que les résultats maximums dans la réponse de recherche. Pour les outils personnalisés, vous fournirez les détails de l’entrepôt.
To modify the configuration for an existing agent, follow these steps:
Dans le menu de navigation, sélectionnez AI & ML » Agents.
- From the list of agents, select the agent that you want to modify.
The configuration details for the agent are displayed.
Sélectionnez Edit.
Pour Description, décrivez l’agent et comment les utilisateurs peuvent interagir avec lui.
Pour ajouter des exemples de questions que les utilisateurs peuvent poser à l’agent, saisissez un exemple de questions et sélectionnez Add a question.
Sélectionnez Tools. Ajoutez un ou plusieurs des outils suivants.
Pour ajouter une vue sémantique dans Cortex Analyst à l’agent : Cette section suppose que vous avez déjà créé une vue sémantique. Pour plus d’informations sur les vues sémantiques et sur la manière de les créer, voir Aperçu des vues sémantiques.
Cherchez Cortex Analyst et sélectionnez le bouton:ui:
+ Addrespectif.Pour Name, saisissez un nom pour la vue sémantique.
Sélectionnez Semantic view.
Sélectionnez la vue sémantique utilisée par l’agent.
Pour Warehouse, sélectionnez l’entrepôt que l’agent utilise pour exécuter les requêtes.
Pour Query timeout (seconds), indiquez le temps maximal en secondes pendant lequel l’agent attend une requête pour se terminer avant l’expiration du délai.
Pour Description, décrivez la vue sémantique.
Sélectionnez Add.
Pour ajouter un service Cortex Search à l’agent : Cette section suppose que vous avez déjà créé un Cortex Search Service. Pour plus d’informations sur la création d’un Cortex Search Service, voir Cortex Search. Vous pouvez également utiliser une Cortex Knowledge Extension (CKE) qui est partagée avec vous. Pour un tutoriel qui utilise une CKE, voir Résolution des problèmes.
Cherchez Cortex Search Services et sélectionnez le bouton:ui:
+ Addrespectif.Pour Name, saisissez un nom pour le Cortex Search Service.
Pour Description, décrivez le Cortex Search Service.
Pour Search service, sélectionnez le Cortex Search Service utilisé par l’agent.
Sélectionnez Add.
Pour ajouter un outil personnalisé à l’agent : En ajoutant des outils personnalisés, vous pouvez étendre les fonctionnalités de vos agents. Avec les outils personnalisés, l’agent peut appeler des procédures et des fonctions stockées que vous avez définies pour effectuer des actions ou des calculs. Cette section suppose que vous avez déjà créé un outil personnalisé. Pour des informations sur les procédures et les fonctions, voir Extension de Snowflake avec des fonctions et des procédures.
Cherchez Custom tools et sélectionnez le bouton:ui:
+ Addrespectif.Pour Name, saisissez un nom pour l’outil personnalisé.
Pour Resource type, sélectionnez si l’outil personnalisé est une fonction ou une procédure. Pour plus d’informations sur l’utilisation d’une fonction ou d’une procédure, voir Choisir d’écrire une procédure stockée ou une fonction définie par l’utilisateur.
Pour Custom tool identifier, sélectionnez la fonction existante ou la procédure que vous souhaitez ajouter comme outil personnalisé.
Les paramètres relatifs à la fonction ou à la procédure apparaissent automatiquement. Vous pouvez ajouter manuellement des paramètres pour l’outil personnalisé en ajoutant un nom, un type, une description et en indiquant si le paramètre est obligatoire. Vous pouvez également modifier les paramètres qui sont automatiquement renseignés.
Note
Snowflake Cortex ne prend pas en charge les procédures stockées et les outils personnalisés avec un paramètre de type
object.Pour Warehouse, sélectionnez l’entrepôt que l’agent utilise pour exécuter l’outil personnalisé. Vous devez sélectionner manuellement un entrepôt.
Pour Description, décrivez l’outil personnalisé et comment l’utiliser.
Sélectionnez Add.
Après avoir créé l’outil personnalisé, assurez-vous que les utilisateurs disposent des privilèges USAGE pour la fonction ou la procédure que vous avez ajoutée en tant qu’outil personnalisé. Lorsque vous utilisez des procédures stockées, les agents déterminent si la procédure s’exécute avec les droits du propriétaire ou ceux de l’appelant. Pour plus d’informations sur les droits du propriétaire et de l’appelant, voir Présentation des procédures stockées des droits de l’appelant et des droits du propriétaire.
Sélectionnez Save.
Pour ajouter des outils à un agent à l’aide de l’API REST, ajoutez les charges utiles suivantes dans le cadre d’une requête à Mettre à jour un Agent Cortex. Vous pouvez également spécifier ces champs lors de la création de l’objet d’agent.
Ajouter un outil Cortex Analyst et des ressources d’outils : L’exemple suivant montre comment ajouter un outil Cortex Analyst et des ressources d’outils à un objet d’agent existant.
Ajouter un outil 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" } } ] }'Ajouter une ressource d’outil 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"} } } }'Ajouter un outil Cortex Search et des ressources d’outils : L’exemple suivant montre comment ajouter un outil Cortex Search et des ressources d’outils à un objet d’agent existant.
Ajouter un outil 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" } }'Ajouter une ressource d’outil 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 } } }'Ajouter un outil personnalisé et des ressources d’outils : L’exemple suivant montre comment ajouter un outil personnalisé et des ressources d’outils à un objet d’agent existant.
Ajouter un outil personnalisé
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" } } ] }'Ajouter une ressource d’outil personnalisée
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" } } }'You must pass all parameters, tool fields, and orchestration information when creating an agent object. You cannot update an agent object using SQL. For information about specifying tools when creating an agent object using SQL, see Créer un agent.
Spécifier l’orchestration¶
Les Agents Cortex orchestrent la tâche en la divisant en une séquence de sous-tâches et en identifiant l’outil approprié pour chaque sous-tâche. Vous spécifiez le LLM que l’agent doit utiliser pour effectuer cette orchestration. Vous pouvez également influencer l’orchestration en fournissant des instructions. Prenons l’exemple d’un agent conçu pour répondre à des questions sur des produits vendus au détail. Vous pouvez utiliser l’instruction d’orchestration "Use the search tool for all requests related to refunds" pour vous assurer que l’agent ne fournit que des détails sur la politique de remboursement (à l’aide de Cortex Search) et ne calcule pas réellement le montant des remboursement (à l’aide de Cortex Analyst). Vous pouvez également spécifier des instructions pour aligner la réponse sur une forme ou une tonalité, comme "Always provide provide a concise response; maintain a friendly tone".
Sélectionnez Orchestration.
Pour le Orchestration model, sélectionnez le modèle que l’agent utilise pour gérer l’orchestration.
Pour Planning instructions, fournissez des instructions qui influencent la sélection des outils par l’agent sur la base des données fournies par l’utilisateur. Il peut s’agir d’instructions spécifiques sur l’utilisation de chaque outil, voire sur l’utilisation obligatoire de chaque outil au début ou à la fin d’une réponse.
Pour Response instruction, fournissez des instructions que le modèle utilise pour la génération de réponses. Par exemple, indiquez si vous souhaitez que l’agent donne la priorité à la création de graphiques ou conserve un certain registre avec les utilisateurs.
For Budget configuration, you can specify time limit and token limit for the agent. The budget is the maximum amount of time or tokens that the agent can use to generate a response. After either one of the limits is reached, the agent will stop generating a response. Token limits are used only for orchestration and don’t include tokens used by Cortex Analyst, Cortex Search, and other tools invoked.
Sélectionnez Save.
Pour mettre à jour un agent à l’aide de l’API REST, ajoutez les charges utiles suivantes dans le cadre d’une requête à Mettre à jour un Agent Cortex. Vous pouvez également spécifier ces champs lors de la création de l’objet d’agent. La procédure suivante montre comment mettre à jour l’agent avec des instructions de planification et de réponse et comment spécifier le modèle LLM utilisé pour l’orchestration.
Mettre à jour le modèle 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" }'
Spécifier les instructions de planification et de réponse
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." } }'
You must pass all parameters, tool fields, and orchestration information when creating an agent object. You cannot update an agent object using SQL. For information about specifying tools when creating an agent object using SQL, see Créer un agent.
Configurer l’accès à l’agent¶
Important
By default, Cortex Agents uses the user’s default role and the default warehouse. If another user is using the agent, make sure that they’ve done the following:
Set a default role
Set a default warehouse
Granted USAGE on the agent to the default role
For information about granting usage, see Exigences en matière de contrôle d’accès.
You must use the user’s default role when calling or updating Cortex Agents. To allow another role to use the agent, grant USAGE on the agent to that role:
GRANT USAGE ON AGENT <database_name>.<schema_name>.<agent_name> TO ROLE <role_name>;
Configurez des politiques d‘accès depuis l’UI de Snowsight ou à l’aide de SQL pour que les utilisateurs puissent accéder à l’agent. Spécifiez le rôle permettant d’accéder à l’agent.
Sélectionnez Access.
Pour donner à un rôle l’accès à l’agent, sélectionnez Add role, puis sélectionnez le rôle dans le menu déroulant.
Sélectionnez Save.
GRANT USAGE ON AGENT myagent TO ROLE test_rl;
Examiner l’agent¶
Après avoir créé l’agent, vous pouvez l’examiner pour vérifier tous les paramètres.
Note
Lors de l’examen des agents depuis Snowsight, vous pouvez uniquement voir les agents dans l’UI d’administration des agents. Vous ne pouvez pas voir les agents dans l’explorateur d’objets de la base de données.
Dans le menu de navigation, sélectionnez AI & ML » Agents.
Dans la liste des agents, sélectionnez l’agent dont vous souhaitez voir les détails. Cela ouvre une nouvelle page qui vous donne un aperçu des détails de l’agent.
Pour examiner tous les détails de l’agent, sélectionnez Next.
Vous pouvez lister et décrire des agents à l’aide d’APIs REST.
Listez tous les agents.
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" \
Décrivez l’agent souhaité.
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" \
You can list and describe agents using SQL.
Listez tous les agents.
SHOW AGENTS IN ACCOUNT;
Décrivez l’agent souhaité.
DESCRIBE AGENT myagent;
Tester l’agent¶
Après avoir créé l’agent, vous pouvez le tester pour voir comment il répond aux requêtes des utilisateurs. Vous pouvez également tester l’agent à l’aide de l’Requête d’exécution d’agent avec objet d’agent.
Pour tester l’agent, suivez les étapes suivantes :
Connectez-vous à Snowsight.
Dans le menu de navigation, sélectionnez AI & ML » Agents.
Sélectionnez l’agent dans la liste des agents.
Sur la page des détails de l’agent, saisissez une requête dans le playground de l’agent.
Vérifiez que l’agent répond à la requête comme attendu. Si l’agent ne répond pas comme attendu, modifiez la configuration de l’agent en suivant les étapes à la section Ajouter des outils.
Interagir avec l’agent¶
Après avoir créé l’objet d’agent, vous pouvez intégrer l’agent directement dans votre application à l’aide de l’API REST. Pour maintenir le contexte lors de l’interaction, utilisez un thread. La combinaison de l’objet d’agent et du thread simplifie le code de l’application cliente.
Créer un thread¶
Créez un thread pour maintenir le contexte pendant une conversation. Lorsque le thread est correctement créé, le système renvoie un 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>,
}'
Envoyer une requête à l’agent¶
Pour interagir avec l’agent, vous devez transmettre l’objet d’agent, l’ID du thread et un parent_message_id unique dans le cadre de votre requête d’API REST. L’parent_message_id initial devrait correspondre à 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"
]
}
}'
Recueillir des commentaires sur l’agent¶
Vous pouvez recueillir les commentaires des utilisateurs sur les réponses données par l’agent. Ces commentaires peuvent vous aider à affiner l’agent au fur et à mesure que vous itérez sur votre cas d’utilisation. Les utilisateurs peuvent fournir une évaluation objective (positive ou négative), ainsi que des détails plus subjectifs dans un message. Les utilisateurs peuvent également catégoriser les commentaires dans l’une des nombreuses catégories.
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>"
}'
Interagir sans objet d’agent¶
Dans certains cas, vous souhaiterez peut-être commencer à utiliser des Agents Cortex en utilisant l’agent:run sans objet d’agent. Par exemple, cela peut être utile lorsque vous souhaitez tester rapidement un cas d’utilisation. Pour plus d’informations sur l’API REST, consultez Exécution d’agent sans objet d’agent.
Note
Lorsque vous interagissez avec un agent sans créer d’objet d’agent, vous devez maintenir manuellement le contexte de l’agent à chaque requête.