返回
RSS Snowflake Engineering (Medium) AI 逐段翻译 发布 2026-08-26 05:01

优化Snowflake Cortex Analyst:提升准确率、降低延迟并构建反馈闭环

DataHot 速览

本文介绍如何优化Snowflake Cortex Analyst,使自然语言查询企业数据更准确高效。核心方法包括精简语义模型、优化底层数据库结构、利用已验证查询构建优化循环,以及通过监控和追踪数据消除瓶颈。Snowflake官方建议语义模型应面向业务用户而非数据库结构设计,并围绕销售、财务等业务域组织。

为什么值得关注:面向Text-to-SQL Agent的落地优化方法,涉及语义模型、准确性和性能调优,对数据Agent实践者有直接参考价值。

本文目录 22 节
  1. 1. 精简语义模型
  2. 降低语义模型复杂度
  3. 清理同义词
  4. 更好的方法
  5. 明确定义关系
  6. 避免大型字面列表
  7. 2. 优化Cortex Analyst背后的数据库结构
  8. 扁平化复杂的连接结构
  9. 预计算复杂的业务逻辑
  10. 示例
  11. 减少过于宽泛的数据类型
  12. 示例
  13. 3. 使用已验证查询构建优化循环
  14. 为什么已验证查询很重要
  15. 示例:活跃用户定义
  16. 语义视图自动驾驶仪
  17. 4. 使用监控和跟踪数据消除瓶颈
  18. 理解跟踪跨度
  19. 查看跟踪数据
  20. 在Snowsight中查看跟踪条目
  21. 最后想法
  22. 参考资料:

译文

AI 逐段翻译

Snowflake Cortex Analyst极大地简化了使用自然语言查询企业数据的过程。它不需要业务用户理解表结构、连接条件和SQL语法,而是通过描述业务概念、指标、维度和关系的语义模型,将自然语言问题转换为可执行的SQL。然而,组织经常发现,仅仅部署Cortex Analyst并不足以实现持续准确和低延迟的响应。

最成功的Cortex Analyst实施关注四个领域:

  1. 精简语义模型
  2. 优化底层数据库结构
  3. 使用已验证查询构建优化循环
  4. 使用监控和跟踪数据消除瓶颈

根据Snowflake的官方指南,高质量的语义视图是提供准确、直观和可信答案的基础。Snowflake明确建议从业务用户的角度而不是从数据库模式的角度设计语义模型。

1. 精简语义模型

语义模型实际上是Cortex Analyst用来理解业务语言的知识层。在生成SQL之前,每个自然语言请求都必须通过该模型进行解释。

降低语义模型复杂度

最常见的错误之一是试图在单个语义模型中捕获所有可能的业务规则、同义词和边界情况。

Snowflake建议将语义视图集中在业务领域和用例上而不是创建一个庞大的“所有企业数据”模型。语义视图应围绕销售、市场营销、客户支持或财务等主题组织,使Cortex Analyst能够在更小且更相关的上下文中推理。

这减少了LLM在生成SQL期间必须评估的上下文量。

理由很简单:大型语言模型在呈现聚焦的上下文时比呈现大量松散相关的元数据时表现更好。

清理同义词

同义词有助于连接业务语言和数据库术语,但过多的同义词使用常常会产生歧义。

如果用户一直要求“客户”和“客户”,那么剩余的同义词可能增加很少的价值,同时增加模型的复杂性。

Snowflake建议从最终用户的角度设计语义视图,并使用用户实际使用的业务术语。

更好的方法

分析真实的用户问题,只保留频繁使用的术语。例如,客户的常用同义词是客户。歧义较少通常会导致更可靠的SQL生成。

明确定义关系

Cortex Analyst严重依赖实体之间的逻辑关系。

Snowflake文档强调准确语义建模的重要性,以便平台能够正确理解业务概念之间的相互关系。

明确的关系减少了Cortex Analyst生成无效连接或在聚合过程中重复数据的可能性。

缺少连接定义可能不会导致每个查询都失败,但通常会对聚合指标产生不一致的答案。

避免大型字面列表

许多组织将数千个可能值直接放在语义模型中:

Snowflake建议使用专注于可维护性和性能的语义建模技术,而不是在模型本身中嵌入过多的元数据。在许多情况下,Cortex Search集成提供了更可扩展的替代方案,可以动态解析大型值集。

好处有两个方面:

  • 更小的语义模型
  • LLM推理更快

2. 优化Cortex Analyst背后的数据库结构

即使有了完美的语义模型,当底层数据结构过于复杂时,查询生成仍然困难。

语言模型不仅必须识别业务意图,还必须推理连接、聚合、过滤和计算。

降低这种复杂性既提高了SQL生成的成功率,也提高了执行性能。

扁平化复杂的连接结构

许多企业报表视图包含:

  • 8-12个连接
  • 嵌套视图
  • 基于其他派生视图的派生视图

尽管经验丰富的数据工程师可以导航这些结构,但LLM经常难以处理它们。

结构越扁平,Cortex Analyst就越容易生成准确的SQL。

Snowflake的语义视图指南始终强调围绕清晰的业务概念组织数据,而不是暴露原始的技术复杂性。

预计算复杂的业务逻辑

复杂的运行时逻辑通常会导致延迟和SQL生成错误。

常见示例包括:

  • 窗口函数
  • CASE语句
  • 多级子查询
  • 自定义排名逻辑

示例

例如,要确定最近的订单,而不是要求Cortex Analyst每次查询都生成SQL代码:

ROW_NUMBER() OVER (
PARTITION BY CUSTOMER_ID
ORDER BY ORDER_DATE DESC
)

预计算以下值:

IS_MOST_RECENT_ORDER

在报表表中。

同样,使用SQL确定以下值:

ACTIVE_CUSTOMER_FLAG

在ETL期间计算,而不是强迫语言模型每次都重新构建活跃客户的定义。

这大大提高了可靠性。

减少过于宽泛的数据类型

许多Snowflake环境包含定义为以下内容的列:

VARCHAR(16777216)

即使实际值只包含50个字符。

虽然Snowflake可以管理这些定义,但清晰的范围列有助于创建更易于理解的语义模型和更简单的元数据结构。

示例

不要使用:

PRODUCT_NAME VARCHAR(16777216)

使用:

PRODUCT_NAME VARCHAR(255)

这会产生更清晰的元数据,并在整个语义层中更好地传达意图。

3. 使用已验证查询构建优化循环

Cortex Analyst最强大的功能之一是从已验证的业务问题中学习的能力。

Snowflake提供了一个已验证查询仓库(VQR),允许组织存储经批准的问题和SQL对。Cortex Analyst在回答类似业务问题时可以利用这些示例。

为什么已验证查询很重要

业务指标通常包含隐藏的定义。

考虑这个问题:

我们上个月有多少活跃用户?

“活跃”的定义在不同组织之间可能有很大差异。

Snowflake的优化功能分析已验证查询,并识别这些已批准SQL语句中嵌入的通用业务概念。然后它可以提出语义改进建议,使未来的答案更准确。

示例:活跃用户定义

已验证SQL:

SELECT COUNT(*)
FROM CUSTOMERS
WHERE LAST_LOGIN_DATE >= DATEADD(day,-30,CURRENT_DATE)

Snowflake可能识别出:

ACTIVE_USER

意味着:

LAST_LOGIN_DATE within 30 days

优化引擎然后可以推荐创建一个可重用的业务过滤器,Cortex Analyst将在未来的问题中一致地应用它。

这减少了歧义并提高了答案的一致性。

语义视图自动驾驶仪

Snowflake的语义视图自动驾驶仪提供了用于构建和改进语义视图的人工智能辅助工作流。

根据Snowflake的说法,自动驾驶仪可以生成描述、建议建模改进、分析语义结构,并帮助优化生产级语义模型。

In the navigation menu, select AI & ML » Cortex Analyst, then select Create new » Create new Semantic View

这允许基于实际使用模式进行持续优化。

4. 使用监控和跟踪数据消除瓶颈

性能优化需要可见性。

当用户抱怨Cortex Analyst“慢”时,实际的问题可能不是SQL执行。

延迟可能源于:

  • 提示规划
  • 模型推理
  • 工具选择
  • SQL生成
  • 查询执行

Snowflake的可观测性功能暴露了span级跟踪信息,有助于准确识别延迟发生的位置。Span类型(规划、工具执行、SQL执行、响应生成)描述了Cortex Agent的跟踪结构。这种span级监控适用于Cortex Analyst作为工具在Cortex Agent中调用的情况。独立的Cortex Analyst调用则使用CORTEX_ANALYST_REQUESTS_RAW。

To view Cortex Agent conversation logs in Snowsight, do the following:

- Sign in to Snowsight.
- In the navigation menu, select AI & ML » Agents.
- Select the Agent whose logs you wish to view.
- Navigate to the Monitoring pane of the Agent view.

The Monitoring pane lists each conversation thread with its first input, 
user feedback, thread length, the user who ran it, and when it was last 
updated. The Version column shows the agent configuration version that handled
each thread, so you can tell which version of the agent produced a given 
conversation.

Cortex Analyst将直接请求和响应遥测存储在SNOWFLAKE.LOCAL.CORTEX_ANALYST_REQUESTS_RAW中,可通过CORTEX_ANALYST_REQUESTS表函数访问。当Cortex Analyst作为Cortex Agent中的工具被调用时,这些步骤会作为代理跟踪的一部分出现在SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS中。

理解跟踪跨度

Snowflake跟踪捕获详细的执行时间线。

这些跨度可以揭示:

  • LLM规划持续时间
  • 工具执行持续时间
  • SQL运行时间
  • 响应生成延迟

Snowflake文档解释说,span级跟踪通过监控界面和事件表可用于审计、故障排除和性能分析。

查看跟踪数据

您可以通过Snowsight或查询存储跟踪数据的事件表来查看跟踪数据。

在Snowsight中查看跟踪条目

您可以使用Snowsight查看事件表中捕获的跟踪数据。

  1. 登录Snowsight
  2. 在导航菜单中,选择监控 » 跟踪与日志

更多详情请参阅查看跟踪数据

最后想法

提升Cortex Analyst的最快方式不仅仅是增加更大的仓库或更多计算资源。最大的收益通常来自减少语义复杂性、简化数据结构,以及建立有意的优化循环。

取得最佳结果的组织通常遵循四个原则:

  1. 构建按业务领域组织的焦点语义模型。
  2. 扁平化并简化报表数据结构。
  3. 持续将已验证的业务查询反馈到Cortex Analyst的优化工作流中。
  4. 监控跟踪跨度,以识别延迟是源于LLM推理还是SQL执行。

Snowflake自身的指导始终强调语义模型质量、已验证查询反馈循环、自动驾驶辅助优化和可观测性,作为准确且高性能自然语言分析的基础。

参考资料

  1. 为Cortex Analyst创建语义视图的最佳实践
  2. Cortex Analyst已验证查询仓库
  3. 使用已验证查询优化现有的语义视图或模型
  4. 监控Cortex Agent请求
  5. 可观测性
  6. 查看跟踪数据

优化Snowflake Cortex Analyst:提高准确性、减少延迟并构建… 最初发表在Snowflake Builders Blog:数据工程师、应用开发者、AI与数据科学 上,在Medium上,人们通过突出和回应这个故事继续对话。

这篇内容对你有用吗?

反馈只用于改善内容筛选,不等同于收藏

分享这条资讯
分享海报
保存图片
iOS 也可以长按图片保存