手记

将Snowflake Cortex Analyst REST API集成到Slack中实现自然语言查询数据

概要

Cortex 分析是一款由大型语言模型支持的 Snowflake Cortex 功能,帮助您创建能够可靠回答自然语言提出的业务问题的应用程序。它提供了一个方便的 REST API,因此您可以轻松地将其集成到任何应用程序中去。

在这篇博文中,我们将看到如何将 Cortex Analyst REST API (公测版,截至2024年11月13日)与Slack整合。

选择Cortex分析平台的原因?

企业用户通常依赖BI仪表板和报告来获取数据洞察,但这些工具通常不够灵活,用户需要等待忙碌的数据分析师进行更新。Cortex Analyst 通过一个自然语言界面解决了这个问题,该界面具有高文本到SQL的准确性,使组织能够创建会话应用程序。这样,企业用户可以用自然语言查询数据并几乎实时获得准确的答案。了解更多详情关于Cortex Analyst

丹麦为什么不使用Slack?
为什么用Slack?

Slack 是一个旨在简化工作场所的交流和协作的沟通和协作平台。它允许团队通过频道组织讨论,发送私信,共享文件,并与其他工具集成,以实现无缝的工作流。Slack 还支持部署机器人和应用,使其成为提高工作效率、信息快速共享和跨项目团队协同的中心。

试用版

演示版

行,开始吧!

前置条件
  • 在这些区域中的一个拥有Snowflake账号。如果没有Snowflake账号,你可以注册一个免费试用账号
  • 一个可以在工作空间中安装应用程序的Slack账号。

第一步:安装 Slack

按照说明操作此步骤指南,创建并设置您最基础的Python Slack应用。注意:您可以跳过“发送和响应操作消息”这部分内容,因为我们应用中不会用到这些功能。

在继续之前,请确保您已经按照上面的指南运行了 Slack 的样板应用程序。

@app.message("你好")  
def message_hello(message, say):  
  # say() 会将消息发送到触发事件的频道  
  say(f"嗨,<@{message['user']}> 哦!")  

# 开始你的应用  
if __name__ == "__main__":  
  SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

步骤2:设置Snowflake

  • 在一个 SQL 工作表中运行以下代码以创建_SUPPORTTICKETS 表并从 AWS S3 导入数据。
    使用 <your-db-name>.<your-schema-name> 数据库和模式;  

    创建或替换文件格式 csvformat  
      skip_header = 1  
      field_optionally_enclosed_by = '"'  
      type = 'CSV';  

    创建或替换存储阶段 support_tickets_data_stage  
      file_format = csvformat  
      url = 's3://sfquickstarts/finetuning_llm_using_snowflake_cortex_ai/';  

    创建或替换表 SUPPORT_TICKETS (  
      ticket_id VARCHAR(60),  
      customer_name VARCHAR(60),  
      customer_email VARCHAR(60),  
      service_type VARCHAR(60),  
      request VARCHAR,  
      contact_preference VARCHAR(60)  
    );  

    将 @support_tickets_data_stage 中的数据复制到 SUPPORT_TICKETS 表中;
  • 运行以下命令来创建一个用于存储语义模型文件的Snowflake管理的内部阶段。
    创建或替换阶段 SEMANTIC_MODELS 为 加密类型 = 'SNOWFLAKE_SSE' 启用目录 = true;
步骤 3:安装应用
  • 克隆 GitHub 仓库 到你的本地机器上。
  • 使用 Snowsight语义模型规范文件 上传到 _SEMANTICMODELS 阶段。
  • 在 Snowflake 中配置密钥对身份验证,将公钥关联到你的用户,并将私钥文件(.p8)保存并复制到克隆的文件夹中。
  • 在本地机器上更改或浏览到克隆的仓库文件夹 sfguide-snowflake-cortex-analyst-slack-app,并在您喜欢的 IDE(如 VS Code)中打开该文件夹。
  • 在同一文件夹中,创建一个名为 .env 的新文件,并设置以下环境变量:
    # 设置变量  
    USER='your-snowflake-username'  
    PASSWORD='your-snowflake-password'  
    ACCOUNT='your-snowflake-account-name'  
    RSA_PRIVATE_KEY_PATH='your-rsa-key-filename.p8'  
    DATABASE='your-db-name'  
    SCHEMA='your-schema-name'  
    ANALYST_ENDPOINT='https://your-account-name.snowflakecomputing.com/api/v2/cortex/analyst/message'  
    SLACK_APP_TOKEN='your-slack-app-token'  
    SLACK_BOT_TOKEN='your-slack-bot-token'  

    # 不要修改这些值  
    SEMANTIC_MODEL_STAGE='semantic_models'  
    SEMANTIC_MODEL_FILE='support_tickets_semantic_model.yaml'

    # 设置Snowflake连接参数和一些固定的模型路径

注意, 关于如何设置账户名称的帮助,请参阅相关文档。

在终端窗口中,导航到克隆后的文件夹 sfguide-snowflake-cortex-analyst-slack-app 并运行以下命令来安装应用所需的 Python 包和依赖。

创建虚拟环境
python3 -m venv .venv  
激活虚拟环境
source .venv/bin/activate  
请运行以下命令来安装依赖项
pip install -r requirements.txt
第五步,运行应用

现在你可以在终端窗口中运行以下命令来运行应用程序。请注意,你需要在之前部分执行命令的sfguide-snowflake-cortex-analyst-slack-app文件夹中。

_./slackbot (一个Slack机器人的命令)

如果一切顺利,你应该看到如下输出。

⚡️ Bolt应用正在运行呢!

常见问题

按照指示运行应用程序时,你可能会碰到一些常见问题。

错误:snowflake.connector.errors.DatabaseError: 250001 (08001): 无法连接到 xxxxxx.snowflakecomputing.com:443,用户名或密码有误。

如果你遇到此错误,请检查 .env 文件中的 USER 和 PASSWORD 环境变量值设置无误。

错误提示: snowflake.connector.errors.接口错误: 250003 (08001): 404 Not Found: POST "https://xxxxx.snowflakecomputing.com:443/session/v1/login-request?request_id=b4e367d4-d8ac-48d3-8e44-96f42defa9c5&request_guid=4f63e07c-e42c-43b8-8f79-f6c577ee0d0e"

如果你遇到这个错误时,请确保在 .env 文件中的 ACCOUNT 环境变量值设置得正确。关于如何设置账户名,可以参考文档

发个 Slack 信息给我吧!

如果你的应用运行正常,进入你之前设置的Slack频道/应用。然后输入以下内容:

你能给我提供一份按服务类型(手机服务和商业互联网服务)划分的客户支持工单数据吗?

只需几秒钟,你很快就会看到这样的响应。

在 Slack 中,Cortex 分析师回应

让我们现在来问这个问题吧

有多少独特的客户提出了带有“蜂窝”服务类型的“支持请求”,并且他们的联系方式偏好是电子邮件?

几秒钟后,你应该看到如下所示的回复:

Cortex 分析师在 Slack 上的回复

如你所见,现在企业用户可以直接在Slack应用中用自然语言提出问题并直接得到答案。

代码走查

你可能已经注意到了,应用程序的代码就在app.py文件里。这里有一些需要注意的地方,如果你想要扩展或修改应用程序的话。

init()(初始化)

在这个方法里,首先与Snowflake建立了安全连接,并生成了一个Java Web令牌(JWT)用于验证。然后使用这个连接来执行Cortex Analyst返回的SQL查询,并使用JWT作为授权令牌调用Cortex Analyst REST API。

处理分析师消息()

当您在 Slack 中输入消息/问题时,这个方法会被调用。首先,它通过调用 _sayquestion() 在 Slack 中打印问题,然后调用 _query_cortexanalyst() 来调用 Cortex Analyst REST API,将用自然语言编写的消息/问题转换成可执行的 SQL 语句。然后,调用 _display_analystcontent() 来展示结果。

query_cortex_analyst()\注:query_cortex_analyst() 是一个技术术语,指的是查询大脑分析专家的函数。

此方法由 process_analyst_message 调用。它通过传递的语义模型文件(格式为 db.schema.stage/file,依据 .env 文件中的配置)、用户通过 Slack 输入的自然语言提示或问题以及作为请求负载一部分的 JWT 访问令牌来调用 Cortex Analyst REST API 端点。如果响应成功(即 HTTP 状态码为 200),则继续执行流程;否则会引发异常。

display_analyst_content()

这个方法是在 process_analyst_message 中调用的。它接收来自 query_cortex_analyst() 函数的响应,并将格式化后的输出发送到 Slack。需要注意的是,Cortex Analyst REST API 的响应包含了基于输入的自然语言提示或问题生成的 SQL 查询。此 SQL 查询会在应用程序中执行(app.py 文件的第 139 行),并在 Slack 中显示结果。

绘制图表()

此方法接收一个Pandas DataFrame作为输入并动态生成一个饼图。默认情况下此功能是禁用的,如果你想看看它的效果,请关闭应用程序,将_app.py文件中第31行的ENABLECHARTS设置为True,然后重新启动应用程序。

启用后,试试在 Slack 里问同样的问题。

你能给我看一下客户支持工单的分类吗?具体是手机服务和商务互联网的工单。

几秒钟后,你应该会看到更新回复,里面包含了图表。

在 Slack 中,Cortex 分析师用图表回复

注意: 虽然生成图表的代码非常特定于本示例中的数据,但其流程和逻辑具有广泛的适用性。

  1. 根据数据生成图表
  2. 将图表保存为本地图像 — app.py 中的第 211 行代码
  3. 通过 Slack API(https://api.slack.com/methods/files.getUploadURLExternalhttps://api.slack.com/methods/files.completeUploadExternal)安全地上传图像文件
  4. 使用 Slack 提供的永久链接查看图像 — app.py 中的代码 215 到 230 行
所以最后

感谢您抽出时间。希望您觉得这篇博客既有教育意义又令人振奋。欢迎在 LinkedInX 上与我联系,在这两个平台上我会分享视频演示、代码片段、QuickStart 指南和技术博客。别忘了还可以查看 Snowflake 方案中心 上针对开发者的解决方案。我非常期待看到您的成果!

相关资源:
0人推荐
随时随地看视频
慕课网APP