继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕婉清6462132
关注TA
已关注
手记 267
粉丝 14
获赞 86

概要

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 方案中心 上针对开发者的解决方案。我非常期待看到您的成果!

相关资源:
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP