Configuração e interação com Agents¶
Você pode criar um agente no Snowsight ou usando a API REST, e depois integrar o agente em seu aplicativo para executar tarefas ou responder a consultas. Primeiro você deve criar um objeto de agente que contenha informações como metadados, ferramentas e instruções de orquestração que o agente pode usar para executar uma tarefa ou responder a perguntas. Você pode então fazer referência ao objeto do agente em seu aplicativo para integrar a funcionalidade do agente. Você pode configurar um thread para manter o contexto na memória, para que o cliente não tenha que enviar o contexto a cada vez da conversa.
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.
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": "llama3.3-70B" } }'
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.
Para modificar a configuração de um agente existente, conclua as seguintes etapas:
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.
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" } } }'
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.
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." } }'
Configuração do acesso ao agente¶
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 PRIVILEGE ON AGENT my_agent 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" \
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.