Cortex 分析是一款由大型语言模型支持的 Snowflake Cortex 功能,帮助您创建能够可靠回答自然语言提出的业务问题的应用程序。它提供了一个方便的 REST API,因此您可以轻松地将其集成到任何应用程序中去。
在这篇博文中,我们将看到如何将 Cortex Analyst REST API (公测版,截至2024年11月13日)与Slack整合。
选择Cortex分析平台的原因?企业用户通常依赖BI仪表板和报告来获取数据洞察,但这些工具通常不够灵活,用户需要等待忙碌的数据分析师进行更新。Cortex Analyst 通过一个自然语言界面解决了这个问题,该界面具有高文本到SQL的准确性,使组织能够创建会话应用程序。这样,企业用户可以用自然语言查询数据并几乎实时获得准确的答案。了解更多详情关于Cortex Analyst。
丹麦为什么不使用Slack? 为什么用Slack?Slack 是一个旨在简化工作场所的交流和协作的沟通和协作平台。它允许团队通过频道组织讨论,发送私信,共享文件,并与其他工具集成,以实现无缝的工作流。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 分析师用图表回复
注意: 虽然生成图表的代码非常特定于本示例中的数据,但其流程和逻辑具有广泛的适用性。
- 根据数据生成图表
- 将图表保存为本地图像 — app.py 中的第 211 行代码
- 通过 Slack API(https://api.slack.com/methods/files.getUploadURLExternal 和 https://api.slack.com/methods/files.completeUploadExternal)安全地上传图像文件
- 使用 Slack 提供的永久链接查看图像 — app.py 中的代码 215 到 230 行
感谢您抽出时间。希望您觉得这篇博客既有教育意义又令人振奋。欢迎在 LinkedIn 和 X 上与我联系,在这两个平台上我会分享视频演示、代码片段、QuickStart 指南和技术博客。别忘了还可以查看 Snowflake 方案中心 上针对开发者的解决方案。我非常期待看到您的成果!
相关资源: