构建代理

您可以使用以下方法为 Snowflake Intelligence 构建代理:

以下部分提供了有关如何使用 SQL 命令为 Snowflake Intelligence 构建代理的信息。每个部分都提供有关代理配置不同部分的信息。最后一部分显示了包含本主题中描述的所有组件的代理配置示例。

有关创建代理的其他方法和可用选项的更多信息,请参阅 Configure and interact with Agents

代理结构

代理由以下部分组成:

  • 为代理行为奠定基础的基础模型

  • 解释意图、选择正确工具并规划操作序列的模型(协调器)

  • 有关代理行为的说明

  • 供代理使用的工具

  • 工具的资源

以下部分提供有关模型选择和工具配置的信息。此示例使用语义视图、Cortex Search Service 和自定义工具来提供答案。尽管您可以创建不使用任何这些工具的基本代理,但该基本代理仅使用基本模型来提供答案。因此,该代理无法访问您的 Snowflake 账户中的数据,并且获得答案的背景有限。

有关代理的其他组件的信息,请参阅 Cortex Agents

先决条件

要创建 Cortex Agent,必须使用具有以下权限的角色:

权限

对象

备注

CREATE AGENT

架构

这是创建 Cortex 代理所必需的。

USAGE

数据库、架构

在指定的数据库和架构中创建 Cortex Agent 时需要此权限。

以下代码授予创建 Cortex Agent 所需的权限:

GRANT USAGE ON DATABASE <database_name> to ROLE <role_name>;
GRANT USAGE ON SCHEMA <database_name>.<schema_name> to ROLE <role_name>;
GRANT CREATE AGENT ON SCHEMA <database_name>.<schema_name> to ROLE <role_name>;

除了创建 Cortex Agent 所需的权限外,将代理连接到特定工具还需要满足以下先决条件:

  • 用于连接到代理的语义视图

    有关创建语义视图的信息,请参阅 语义视图概述

  • 用于连接到代理的 Cortex Analyst 工具

    有关创建 Cortex Analyst 工具的信息,请参阅 Cortex Analyst

  • 数据库中用于连接到代理的非结构化数据

  • 用于连接到代理的 Cortex Search 工具

    有关创建 Cortex Search 工具的信息,请参阅 Cortex Search

  • 用于连接到代理的自定义工具

    有关创建用户定义函数 (UDFs) 和用作自定义工具的存储过程的信息,请参阅 使用函数和过程扩展 Snowflake

要将工具附加到代理,用于创建代理的角色必须具有以下权限:

权限

对象

备注

USAGE

Cortex Search Service

将 Cortex Search Service 添加到 Cortex Agent 时需要此权限。

SELECT

表/视图

访问代理的语义视图/模型中引用的对象时需要。

USAGE

工具

访问所有要附加到代理的自定义工具时需要。例如,如果自定义工具是存储过程,则您必须对该过程具有 USAGE 权限。

USAGE

语义视图/模型

访问要附加到代理的语义视图/模型时需要。

代理配置基础知识

创建代理时,必须指定有关代理的信息,例如名称、描述和模型。您还可以指定代理可以使用的工具以及代理可以访问的资源。这些资源作为 YAML 规范在 CREATE AGENT 命令的 FROM SPECIFICATION 子句中传递。

以下建议提供了此配置的最佳实践:

缩小代理范围: 在添加工具或编写指令之前,定义代理存在的原因、其服务对象以及它应回答的具体问题。这一步决定了后续的一切,从工具选择到性能和信任。Snowflake 建议您将代理的范围缩小到特定的高价值用例。

在代理证明其在某一领域可靠后,您可以为其他领域复制该模式。例如,您可以让一个代理分析商店最近的销售和营销数据,而让另一个代理推荐最适合向零售商推销的 SKUs。

仔细选择工具的数量: 每个代理都应该只能访问其需要的工具。要确定这一点,请考虑代理实现其目的所需的文件或数据。如果代理需要访问非结构化数据,请使用 Cortex Search。如果代理需要访问结构化数据,请使用 Cortex Analyst。如果代理需要其他工具,您可以使用自定义工具。

编写有用的工具描述: 这些描述用于帮助代理理解该工具的功能以及如何使用它。不清晰的工具描述可能会导致级联故障并产生“幻觉”。

要创建有用的工具描述,请遵循以下准则:

  • 添加清晰且具体的工具名称,以明确工具的领域(“Customer”、“Sales”)和功能(“Analytics”、“Search”)。

  • 编写以目的为导向的工具描述,告知代理:

    • 该工具的用途

    • 它访问哪些数据

    • 何时使用

    • 何时 NOT 使用

  • 明确工具的预期输入。对工具的模糊输入会导致不正确的工具调用和错误。

    • 具体明确。

    • 指定数据格式。

    • 提供清晰的数据说明。

    • 提供默认指导。

    • 使用一致的术语。

有关更多代理配置建议,请参阅 构建 Cortex Agent 的最佳实践

模型选择

创建代理时,我们建议您为模型选择 auto。使用此选项,Cortex 会自动为您的账户选择最高质量的模型,并且随着新模型的推出,质量会自动提高。有关可用模型的更多信息,请参阅 支持的模型和区域

以下示例演示如何为代理指定模型:

models:
  orchestration: auto

跨区域推理

重要

默认情况下,跨区域推理处于禁用状态。我们建议使用跨区域推理来访问完整的 LLMs,并避免单个区域内的限制。

使用本地区域不可用的模型时,必须使用 Cortex 跨区域推理。此设置允许在与默认区域不同的区域中处理推理请求。跨区域推理的参数只能在账户级别由 ACCOUNTADMIN 角色设置,而不能在用户或会话级别设置。

要设置参数,请使用以下命令:

ALTER ACCOUNT SET CORTEX_ENABLED_CROSS_REGION = 'ANY_REGION';

有关配置 Cortex 跨区域推理的更多信息,请参阅 跨区域推理

使用 Cortex Analyst 连接语义视图(结构化数据)

Snowflake Intelligence 支持语义视图,这是一种带有指令的结构化数据,用于告诉代理如何查询或解释数据。Cortex Agent 使用 Cortex Analyst 从语义视图中检索结构化数据,方法是将自然语言请求转换为 SQL 查询。代理可以在多个语义视图之间路由以提供响应。

每个语义视图都应涵盖一组相似的表。您可以设置特定于数据的默认值,例如:如果未指定,则始终添加过去三个月的日期筛选器,或者始终排除内部账户。

您可以通过将语义视图指定为工具资源的一部分,将其连接到代理。以下示例演示如何将语义视图连接到代理,以及如何指定 Cortex Analyst 工具从语义视图中检索结构化数据:

tools:
  - tool_spec:
      type: "cortex_analyst_text_to_sql"
      name: "<your cortex analyst tool name>"
      description: "<clear and specific tool description>"

tool_resources:
  <your cortex analyst tool name>:
    semantic_view: "<db>.<schema>.<semantic_view>"

语义视图的最佳实践

语义视图为 Snowflake Intelligence 理解和查询数据提供支持。精心设计的语义视图可以提高准确性、减少延迟并建立用户信任。以下最佳实践旨在帮助您创建准确且高效的语义视图:

从小处着手,重点突出: 从单个业务域中的 5-10 个表开始。按用例(销售业绩、客户支持指标)而不是按数据结构进行组织。在验证准确性后再进行扩展。

编写清晰的描述: 描述是最重要的元素。每个表和列都应该有一个适合业务的描述,解释数据所代表的内容,而不仅仅是其名称。包括计算逻辑、业务定义和任何旧术语等上下文。

添加已验证的查询: 这些是将问题与经过验证的 SQL 配对的示例。它们可以提高类似问题的准确性,减少延迟,并帮助系统了解您的业务模式。从涵盖最常见问题的 10 到 20 个查询开始,然后根据实际使用情况添加更多查询。

定义指标和筛选器: 预定义可重复使用的计算(如总收入或平均订单价值)和常用条件(如活跃客户或当前会计年度)。这些可以显著提高一致性。

为业务逻辑使用自定义指令: 为数据特性、会计年度定义、默认筛选器或特定于域的规则添加 SQL 生成指令。具体说明:“如果未提供日期筛选器,则默认为过去 12 个月”比“按日期筛选”更好。

启用 Cortex Search 进行文本匹配: 对于高基数文本列(如产品名称、客户名称或公司名称),当用户输入与数据不完全匹配时,Cortex Search 会启用模糊匹配。

测试和迭代: 创建代表性问题的评估集,衡量准确性,并根据实际使用模式进行完善。定期查看建议,以便添加经过验证的查询并随着时间的推移改进描述。

有关创建语义视图的最佳实践的更多信息,请参阅 Cortex Analyst 中语义视图的最佳实践

Connect Cortex Search(非结构化数据)

要处理非结构化数据,您可以通过在 YAML 规范中将 Cortex Search 工具指定为工具资源的一部分,将其连接到代理。Cortex Search 服务使用语义搜索从非结构化数据源中检索文档和记录。Cortex Search 的两个主要用例是检索增强生成 (RAG) 和企业搜索。有关创建 Cortex Search Service 的信息,请参阅 Cortex Search。您也可以使用与您共享的 Cortex Knowledge Extension (CKE)。

将 Cortex Search 工具连接到代理时,包含以下有关参数及其预期值的信息尤为重要:

  • 类型和格式(包括示例)

  • 是必填还是可选(含默认值)

  • 有效值或约束(枚举、范围、格式)

  • 与其他参数的关系(依赖关系、冲突)

  • 如何获取值(尤其是针对 IDs)

以下示例演示了如何将 Cortex Search 工具连接到代理,以及如何在 YAML 规范中指定 Cortex Search 工具:

tools:
  - tool_spec:
      type: "cortex_search"
      name: "<your cortex search tool name>"
      description: "<clear and specific tool description>"

tool_resources:
  <your cortex search tool name>:
    name: "<db>.<schema>.<search_service_name>"
    max_results: "5"
    filter:
      "@eq":
        region: "North America"
    title_column: "<title_name>"
    id_column: "<column_name>"

添加自定义工具

Snowflake Intelligence 支持自定义工具,这些工具是用户定义的函数或存储过程,可用于实现自定义业务逻辑。您可以通过在 YAML 规范中将自定义工具指定为工具资源的一部分,从而将其连接到代理。

以下示例展示了如何将自定义工具连接到代理,以及如何在 YAML 规范中指定该自定义工具:

tools:
  - tool_spec:
      type: "custom_tool"
      name: "<your custom tool name>"
      description: "<clear and specific tool description>"

tool_resources:
  <your custom tool name>:
    user-defined-function-argument: "argument1"

创建代理

  • 结合使用所有工具和组件,并使用 SQL 来创建代理:

    CREATE OR REPLACE AGENT <agent_name>
        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 questions, 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: "<your cortex analyst tool name>"
            description: "<clear and specific tool description>"
        - tool_spec:
            type: "cortex_search"
            name: "<your cortex search tool name>"
            description: "<clear and specific tool description>"
        - tool_spec:
            type: "data_to_chart"
            name: "data_to_chart"
            description: "Generates visualizations from data"
    
        tool_resources:
        <your cortex analyst tool name>:
            semantic_view: "<db>.<schema>.<semantic_view>"
        <your cortex search tool name>:
            name: "<db>.<schema>.<search_service_name>"
            max_results: "5"
            filter:
            "@eq":
                region: "North America"
            title_column: "<title_name>"
            id_column: "<column_name>"
        $$;
    

修改现有代理

有关修改现有代理配置(包括添加工具及更新其他详细信息)的操作说明,请参阅 Add tools