Configuração e interação com Agents¶
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.
Nota
As Snowflake REST APIs oferecem suporte à autenticação por meio de tokens de acesso programático (PATs), autenticação de par de chaves usando tokens Web JSON (JWTs) e OAuth. Para obter mais detalhes, consulte Autenticando o Snowflake REST APIs com Snowflake.
Criação de agente¶
Crie um objeto de agente especificando o banco de dados e o esquema onde o agente deve estar localizado, juntamente com um nome e uma descrição para o agente. Além disso, especifique o nome de exibição, o atalho e a cor. Esses atributos são usados pelo aplicativo cliente para exibir o agente. O nome de exibição também é usado como identificador para fazer referência ao agente nas conversas.
For best practices when creating an agent, see Best Practices to Building Cortex Agents.
Os exemplos a seguir mostram como criar um objeto de agente a partir do Snowsight ou usando a API REST:
Faça login no Snowsight.
No menu de navegação, selecione AI & ML » Agents.
Selecione Create agent.
Em Agent object name, especifique um nome para o agente, que será exibido aos usuários na UI.
Em Display name, especifique um nome para o agente, que será exibido aos administradores na lista de agentes.
Selecione Create agent.
Envie um prompt ao agente com solicitações de conhecimento geral.
Crie um objeto de agente especificando o banco de dados e o esquema onde o agente será criado, bem como os parâmetros necessários para o agente. Você também pode especificar campos de ferramenta ao criar o objeto agente.
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>" $$;
Adição de ferramentas¶
Depois de criar o agente, você precisa adicionar ferramentas e fornecer instruções sobre como orquestrar as ferramentas. Os Agents oferecem suporte aos seguintes tipos de ferramentas:
Cortex Analyst: você especifica as exibições semânticas para que o Cortex Analyst possa usá-las para recuperar dados estruturados. Os Agents podem ser roteados por vários exibições semânticas para fornecer a resposta.
Cortex Search: você fornece os índices do Cortex Search como ferramentas, incluindo informações relacionadas, como filtros de pesquisa, nomes de colunas e metadados. O Cortex Agent usa os índices do Cortex Search para recuperar dados não estruturados.
Ferramentas personalizadas: você pode implementar código para uma lógica de negócios específica como um procedimento armazenado ou função definida pelo usuário (UDF). Como alternativa, você pode usar as ferramentas personalizadas para recuperar dados de seus sistemas de backend usando APIs.
Você também especifica os recursos usados por cada ferramenta. Por exemplo, no Cortex Analyst, você especifica o warehouse junto com o tempo limite para execução da consulta SQL. Da mesma forma para o Cortex Search, você especifica os filtros e nomes de colunas usados na consulta de pesquisa, juntamente com os resultados máximos na resposta da pesquisa. Para ferramentas personalizadas, você fornecerá os detalhes do warehouse.
To modify the configuration for an existing agent, follow these steps:
No menu de navegação, selecione AI & ML » Agents.
- From the list of agents, select the agent that you want to modify.
The configuration details for the agent are displayed.
Selecione Edit.
Em Description, descreva o agente e como os usuários podem interagir com ele.
Para adicionar perguntas de amostra que os usuários podem fazer ao agente, insira uma e selecione Add a question.
Selecione Tools. Adicione uma ou mais das seguintes ferramentas:
Para adicionar uma exibição semântica no Cortex Analyst ao agente: Esta seção pressupõe que você já tenha criado uma exibição semântica. Para obter informações sobre exibições semânticas e como criá-las, consulte Visão geral das exibições semânticas.
Localize o Cortex Analyst e selecione o respectivo botão + Add.
Em Name, insira um nome para a exibição semântica.
Selecione Semantic view.
Selecione a exibição semântica que o agente usa.
Em Warehouse, selecione o warehouse que o agente usa para executar as consultas.
Em Query timeout (seconds), especifique o tempo máximo em segundos que o agente aguarda para que uma consulta seja concluída antes de atingir o tempo limite.
Em Description, descreva a exibição semântica.
Selecione Add.
Para adicionar um Cortex Search Service ao agente: Esta seção pressupõe que você já tenha criado um Cortex Search Service. Para obter informações sobre como criar um Cortex Search Service, consulte Cortex Search. É possível também usar uma Cortex Knowledge Extension (CKE) que seja compartilhada com você. Para acessar o tutorial que usa uma CKE, consulte Solução de problemas.
Localize o Cortex Search Services e selecione o respectivo botão + Add.
Em Name, insira um nome para o Cortex Search Service.
Em Description, descreva o Cortex Search Service.
Em Search service, selecione o Cortex Search Service que o agente usa.
Selecione Add.
Para adicionar uma ferramenta personalizada ao agente: Ao adicionar ferramentas personalizadas, você estende a funcionalidade dos agentes. Com ferramentas personalizadas, o agente pode chamar procedimentos armazenados e funções que você definiu para executar ações ou fazer cálculos. Esta seção pressupõe que você já tenha criado uma ferramenta personalizada. Para obter informações sobre procedimentos e funções, consulte Como estender o Snowflake com funções e procedimentos.
Localize o Custom tools e selecione o respectivo botão + Add.
Em Name, insira um nome para a ferramenta personalizada.
Em Resource type, selecione se a ferramenta personalizada é uma função ou um procedimento. Para obter informações de quando usar uma função ou um procedimento, consulte Escolha se deseja escrever um procedimento armazenado ou uma função definida pelo usuário.
Em Custom tool identifier, selecione a função ou o procedimento existente que você quer adicionar como uma ferramenta personalizada.
Os parâmetros relacionados à função ou ao procedimento aparecem automaticamente. Você pode adicionar manualmente os parâmetros para a ferramenta personalizada inserindo nome, tipo, descrição e indicando se o parâmetro é obrigatório. Você também pode modificar os parâmetros que são preenchidos automaticamente.
Nota
O Snowflake Cortex não oferece suporte a procedimentos armazenados e ferramentas personalizadas com um parâmetro do tipo
object.Em Warehouse, selecione o warehouse que o agente usa para executar a ferramenta personalizada. Você deve selecionar um warehouse manualmente.
Em Description, descreva a ferramenta personalizada e como usá-la.
Selecione Add.
Depois de criar a ferramenta personalizada, certifique-se de que os usuários recebam os privilégios USAGE para a função ou o procedimento que você adicionou como uma ferramenta personalizada. Ao usar procedimentos armazenados, os agentes mantêm se o procedimento é executado com os direitos do proprietário ou do chamador. Para obter informações sobre direitos do proprietário e do autor da chamada, consulte Procedimentos armazenados com direitos do chamador e direitos do proprietário.
Selecione Save.
Para adicionar ferramentas a um agente usando a API REST, adicione as seguintes cargas úteis como parte de uma solicitação para Atualização do Cortex Agent. Você também pode especificar esses campos ao criar o objeto de agente.
Adição de uma ferramenta Cortex Analyst e recursos de ferramenta: O exemplo a seguir mostra como adicionar uma ferramenta Cortex Analyst e recursos de ferramenta a um objeto de agente existente.
Adição de uma ferramenta 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" } } ] }'Adição de um recurso de ferramenta 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"} } } }'Adição de uma ferramenta Cortex Search e recursos de ferramenta: O exemplo a seguir mostra como adicionar uma ferramenta Cortex Search e recursos de ferramenta a um objeto de agente existente.
Adição de uma ferramenta 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" } }'Adição de um recurso de ferramenta 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 } } }'Adição de uma ferramentas personalizadas e recursos de ferramenta: O exemplo a seguir mostra como adicionar uma ferramenta personalizada e recursos de ferramenta a um objeto de agente existente.
Adição de uma ferramenta personalizada
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" } } ] }'Adição de um recurso de ferramenta personalizada
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 Criação de agente.
Especificação da orquestração¶
Os Cortex Agents orquestram a tarefa dividindo-a em uma sequência de subtarefas e identificando a ferramenta certa para cada subtarefa. Você especifica o LLM que o agente deve usar para realizar essa orquestração. Você também pode influenciar a orquestração fornecendo instruções. Por exemplo, considere um agente criado para responder a perguntas sobre produtos de varejo. Você pode usar a instrução de orquestração "Use the search tool for all requests related to refunds" para garantir que o Agent forneça apenas detalhes da política de reembolso (usando o Cortex Search) e não calcule realmente os valores de reembolso (usando o Cortex Analyst). Você também pode especificar instruções para alinhar a resposta a uma marca ou tom, como "Always provide provide a concise response; maintain a friendly tone".
Selecione Orchestration.
Em Orchestration model, selecione o modelo que o agente usa para processar a orquestração.
Em Planning instructions, insira instruções que influenciam a seleção de ferramentas pelo agente com base na entrada feita pelo usuário. Isso pode incluir instruções específicas sobre quando usar cada ferramenta ou até para sempre usar uma ferramenta no início ou no fim de uma resposta.
Em Response instruction, insira as instruções que o modelo usa para gerar as respostas. Por exemplo, especifique se você quer que o agente priorize a criação de gráficos ou mantenha um determinado tom com os usuários.
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.
Selecione Save.
Para atualizar um agente usando a API REST, adicione as seguintes cargas úteis como parte de uma solicitação para Atualização do Cortex Agent. Você também pode especificar esses campos ao criar o objeto de agente. O procedimento a seguir mostra como atualizar o agente com instruções de planejamento e resposta e especificar o modelo de LLM usado para orquestração.
Atualização do modelo de 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" }'
Especificação das instruções de planejamento e resposta
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 Criação de agente.
Configuração do acesso ao agente¶
Importante
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 Requisitos de controle de acesso.
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>;
Configuração de políticas de acesso da UI do Snowsight ou usando SQL para que os usuários possam acessar o agente. Especifique a função para fornecer acesso ao agente.
Selecione Access.
Para conceder acesso de função ao agente, selecione Add role e selecione a função no menu suspenso.
Selecione Save.
GRANT USAGE ON AGENT myagent TO ROLE test_rl;
Revisão do agente¶
Depois de criar o Agent, você poderá revisá-lo para verificar todos os parâmetros.
Nota
Ao revisar agentes do Snowsight, você só poderá visualizar os agentes na UI de administração do agente. Não é possível visualizar os agentes no explorador de objetos de banco de dados.
No menu de navegação, selecione AI & ML » Agents.
Na lista de agentes, selecione o agente cujos detalhes deseja visualizar. Isso abre uma nova página que fornece uma visão geral dos detalhes do agente.
Para revisar todos os detalhes do agente, selecione Next.
Você pode listar e descrever agentes usando as APIs REST.
Liste todos os agentes.
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" \
Descreva o agente desejado.
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.
Liste todos os agentes.
SHOW AGENTS IN ACCOUNT;
Descreva o agente desejado.
DESCRIBE AGENT myagent;
Teste do agente¶
Após criar o agente, você pode testá-lo para ver como ele responde às consultas do usuário. Você também pode testar o agente usando Solicitação de execução do agente com objeto de agente.
Para testar o agente, siga estas etapas:
Faça login no Snowsight.
No menu de navegação, selecione AI & ML » Agents.
Selecione o agente na lista de agentes.
Na página de detalhes do agente, insira um de consulta no Playground do agente.
Verifique se o agente responde à consulta conforme o esperado. Se o agente não responder como esperado, modificar a configuração do agente seguindo as etapas em Adição de ferramentas.
Interação com o agente¶
Após criar o objeto do agente, você pode integrar o agente diretamente em seu aplicativo usando a API REST. Para manter o contexto durante a interação, use um thread. O objeto do agente e o thread combinados simplificam o código do aplicativo do cliente.
Criação de um thread¶
Crie um thread para manter o contexto durante uma conversa. Quando o thread é criado com sucesso, o sistema retorna um 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>,
}'
Envio de uma solicitação ao agente¶
Para interagir com o agente, você deve passar o objeto do agente, o ID do thread e um parent_message_id exclusivo como parte de sua solicitação da API REST. O parent_message_id inicial deve ser 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"
]
}
}'
Coleta de feedback sobre o agente¶
Você pode coletar feedback dos usuários sobre as respostas dadas pelo agente. Esse feedback pode ajudar você a refinar o agente à medida que itera no seu caso de uso. Os usuários podem fornecer uma classificação objetivo (positivo/negativo), bem como detalhes mais subjetivos com uma mensagem. Além disso, os usuários podem classificar o feedback em uma das muitas categorias.
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>"
}'
Interação sem um objeto de agente¶
Em alguns casos, você pode querer começar a usar os Cortex Agents usando agent:run sem um objeto de agente. Por exemplo, isso pode ser útil quando você deseja experimentar rapidamente um caso de uso. Para obter mais informações sobre a API REST, consulte Execução do agente sem um objeto de agente.
Nota
Ao interagir com um agente sem criar um objeto de agente, você deve manter manualmente o contexto para o agente a cada solicitação.