现代企业面临海量非结构化数据,如客户支持记录、邮件往来、法律文档等。传统上,从中提取有效信息需要复杂的数据科学流程、NLP模型、API集成和编排工具。而 Snowflake Cortex LLM 的出现,彻底改变了这一局面。它是一个在数据云中原生运行的预训练大语言模型(LLM)函数套件,让你无需离开SQL环境,就能轻松驾驭非结构化数据,实现 AI驱动的洞察。本文将带你亲身体验如何使用 Snowflake Cortex LLM 分析呼叫中心记录,感受其强大功能和易用性。
Cortex LLM 简介:SQL即AI
Snowflake Cortex LLM 核心在于它将复杂的人工智能任务抽象为简单的SQL函数。无需学习复杂的ML框架、部署API或将数据移出Snowflake,你只需编写几行SQL代码,就能完成文档摘要、分类、问答、情感分析和翻译等任务。这极大降低了AI应用的门槛,让更多业务人员能够参与到数据分析中来。
Cortex LLM 的优势体现在以下几个方面:
- 简单性: 无需机器学习专业知识,仅通过SQL即可调用强大的LLM功能。
- 易用性: 将复杂的LLM工作负载简化为一行SQL函数。
- 安全性: 数据始终在Snowflake内部,由你完全控制。
- 高性能: 利用Snowflake原生的计算资源进行扩展,无需额外基础设施。
环境搭建:为LLM分析做好准备
在使用 Snowflake Cortex LLM 之前,我们需要搭建一个干净的环境,包括创建数据库、配置计算仓库、设置Schema和准备用于文件上传的Stage。
-
创建数据库:
CREATE DATABASE IF NOT EXISTS LLM_CORTEX_DEMO_DB;
这条命令初始化一个专门用于存储本次实验相关对象的数据库。
-
创建计算仓库:
CREATE OR REPLACE WAREHOUSE USER_STD_XSMALL_WH WITH WAREHOUSE_SIZE = 'XSMALL' WAREHOUSE_TYPE = 'STANDARD' AUTO_SUSPEND = 60 AUTO_RESUME = TRUE INITIALLY_SUSPENDED = TRUE;
这定义了一个轻量级的计算资源,用于运行你的SQL和 Cortex LLM 查询,并启用了自动挂起功能,以提高成本效益。
WAREHOUSE_SIZE
定义了计算资源的大小,AUTO_SUSPEND
定义了自动挂起前的空闲时间(秒),AUTO_RESUME
则允许计算仓库在接收到查询时自动恢复。 -
创建Schema:
CREATE SCHEMA IF NOT EXISTS LLM_CORTEX_DEMO_DB.RAW; CREATE SCHEMA IF NOT EXISTS LLM_CORTEX_DEMO_DB.STAGE;
RAW
schema用于存放原始文件,STAGE
schema用于存放解析和转换后的内容。 -
创建内部Stage:
CREATE OR REPLACE STAGE LLM_CORTEX_DEMO_DB.RAW.INT_STAGE_DOC_RAW DIRECTORY = ( ENABLE = TRUE ) ENCRYPTION = ( TYPE = 'SNOWFLAKE_SSE' );
这条命令创建了一个安全、加密的内部Stage,用于在解析之前保存PDF文档。
DIRECTORY = ( ENABLE = TRUE )
允许从Stage读取目录中的文件。 -
上传PDF文件:
在Snowsight中,点击Databases标签,导航到
LLM_CORTEX_DEMO_DB > RAW > INT_STAGE_DOC_RAW
,使用+ Files
按钮上传你的.pdf
记录文件。上传完成后,这些文件将可以通过@LLM_CORTEX_DEMO_DB.RAW.INT_STAGE_DOC_RAW
访问。
文档解析:提取非结构化数据的关键信息
Snowflake Cortex LLM 提供了强大的文档解析功能,可以将上传的非结构化文档转换为结构化数据,方便后续分析。
-
设置执行上下文:
USE DATABASE LLM_CORTEX_DEMO_DB; USE SCHEMA STAGE; USE WAREHOUSE USER_STD_XSMALL_WH;
确保你在正确的数据库、Schema和仓库中操作。
-
创建Transcript表:
CREATE OR REPLACE TABLE LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT ( FILE_NAME STRING, TRANSCRIPT VARCHAR );
这个表将存储每个记录的解析内容以及文件名。
-
使用PARSE_DOCUMENT函数解析文档:
INSERT INTO LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT SELECT FILE_NAME, TO_VARCHAR( SNOWFLAKE.CORTEX.PARSE_DOCUMENT( @LLM_CORTEX_DEMO_DB.RAW.INT_STAGE_DOC_RAW, FILE_PATH, { 'mode': 'LAYOUT' } ):content::string ) AS TRANSCRIPT FROM ( SELECT DISTINCT METADATA$FILENAME AS FILE_PATH, SPLIT_PART(METADATA$FILENAME, '/', -1) AS FILE_NAME FROM @LLM_CORTEX_DEMO_DB.RAW.INT_STAGE_DOC_RAW ) AS A;
这个语句处理每个Stage中的PDF文件,使用
PARSE_DOCUMENT
函数提取内容,并将结果插入到TRANSCRIPT
表中。METADATA$FILENAME
是Snowflake提供的用于获取文件元数据的内置变量,SPLIT_PART
函数用于提取文件名。'mode': 'LAYOUT'
参数指示解析器保持文档的布局结构。 -
预览解析后的输出:
SELECT FILE_NAME, TRANSCRIPT FROM LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT;
验证你的PDF文件是否已成功解析并存储。
情感分析:挖掘客户情绪,提升服务质量
情感分析 是理解客户反馈的关键。Snowflake Cortex LLM 提供了强大的情感分析功能,可以帮助你快速了解客户的情绪,从而改进服务质量。
SELECT
SNOWFLAKE.CORTEX.SENTIMENT(TRANSCRIPT) AS SENTIMENT
FROM
LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT
WHERE
FILE_NAME = 'audiofile11.pdf';
这个查询使用 SNOWFLAKE.CORTEX.SENTIMENT
函数来分析指定记录文本的情感,结果将返回 “Positive”、“Negative” 或 “Neutral” 等情感类别。例如,如果大量记录的情感为负面,则可能表明客户对某个产品或服务的体验不佳,需要进行改进。
更进一步,可以使用 ENTITY_SENTIMENT
函数来检测文本中特定实体或主题的情感,从而进行更有针对性的情感分析。
SELECT
f.value:name::string AS category,
f.value:sentiment::string AS sentiment
FROM
LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT t,
LATERAL FLATTEN(
input => SNOWFLAKE.CORTEX.ENTITY_SENTIMENT(
t.TRANSCRIPT,
ARRAY_CONSTRUCT('Tone of voice', 'Issue Resolved', 'Follow up action')
):categories
) f
WHERE
t.FILE_NAME = 'audiofile11.pdf';
此示例提取记录中关于“语气”、“问题解决”和“后续行动”的情感。使用 ARRAY_CONSTRUCT
函数定义要分析的实体列表,然后使用 LATERAL FLATTEN
函数将 ENTITY_SENTIMENT
函数返回的 JSON 结果展平,以便更方便地进行分析。 通过分析这些实体的情感,企业可以深入了解客户对特定方面的满意度。例如,如果客户对问题的解决持积极态度,但对后续行动持消极态度,则可能表明需要改进后续服务。
文本分类:自动识别问题类型,提升工作效率
文本分类 是将文本分配到预定义类别中的过程。 Snowflake Cortex LLM 的文本分类功能可以自动识别问题类型,从而提高工作效率。
SELECT
TRANSCRIPT,
SNOWFLAKE.CORTEX.CLASSIFY_TEXT(
TRANSCRIPT,
ARRAY_CONSTRUCT('Incident', 'Complaint', 'Follow up')
) AS JSON_RESPONSE,
JSON_RESPONSE:label::string AS CLASSIFCIATION
FROM
LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT
WHERE
FILE_NAME = 'audiofile11.pdf';
在这个例子中,CLASSIFY_TEXT
函数将记录文本分类为 “Incident”、“Complaint” 或 “Follow up” 中的一个类别。 ARRAY_CONSTRUCT
函数定义了分类的类别列表。通过自动分类记录,可以快速识别不同类型的问题,并将其分配给相应的团队进行处理。
高级用法可以提供更精细的分类,例如,可以提供每个类别的描述和示例,以提高分类的准确性。
SELECT
SNOWFLAKE.CORTEX.CLASSIFY_TEXT(
TRANSCRIPT,
ARRAY_CONSTRUCT(
OBJECT_CONSTRUCT(
'label', 'Tone of voice',
'description', 'How the speaker sounds during the call (e.g., calm, angry)',
'examples', ARRAY_CONSTRUCT('The agent was calm and professional')
),
OBJECT_CONSTRUCT(
'label', 'Issue Resolved',
'description', 'Whether the customer''s problem was resolved',
'examples', ARRAY_CONSTRUCT('The issue with my account was fixed')
),
OBJECT_CONSTRUCT(
'label', 'Follow up action',
'description', 'Actions promised or required after the call',
'examples', ARRAY_CONSTRUCT('The support team will call me tomorrow')
)
)
) AS JSON_RESPONSE,
JSON_RESPONSE:label::string AS CLASSIFCIATION
FROM
LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT
WHERE
FILE_NAME = 'audiofile11.pdf';
通过为每个类别提供更详细的上下文信息, Snowflake Cortex LLM 可以更准确地对文本进行分类。这对于需要高精度分类的场景非常有用。
文本翻译:打破语言障碍,拓展国际市场
文本翻译 是将文本从一种语言转换成另一种语言的过程。 Snowflake Cortex LLM 提供了强大的文本翻译功能,可以帮助你打破语言障碍,拓展国际市场。
SELECT
SNOWFLAKE.CORTEX.TRANSLATE(TRANSCRIPT,'en_XX','fr_FR') AS "TRANSLATION"
FROM
LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT
WHERE
FILE_NAME = 'audiofile11.pdf';
这个查询使用 SNOWFLAKE.CORTEX.TRANSLATE
函数将记录文本从英语(en_XX
)翻译成法语(fr_FR
)。 通过自动翻译记录,可以轻松地与来自不同国家和地区的客户进行沟通,拓展国际市场。
假设一家跨国公司需要分析来自全球各地的客户反馈。使用 Snowflake Cortex LLM 的翻译功能,可以将所有反馈翻译成同一种语言,然后进行统一分析。这可以帮助公司更好地了解全球客户的需求,并提供更个性化的服务。
文本生成:COMPLETE函数赋能无限可能
COMPLETE
函数是 Snowflake Cortex LLM 中最强大的功能之一,它支持通用文本生成,可以用于摘要、提取、重写、问答和转换文本等多种自然语言处理任务。
SELECT
SNOWFLAKE.CORTEX.COMPLETE(
'snowflake-arctic',
'Identify the name of the caller in the transcript: ' || TRANSCRIPT
) AS COMPLETION
FROM LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT
WHERE FILE_NAME = 'audiofile11.pdf';
这个例子使用 COMPLETE
函数从记录文本中提取呼叫者的姓名。 'snowflake-arctic'
参数指定要使用的模型。通过提供不同的提示,你可以使用 COMPLETE
函数执行各种文本生成任务。
高级用法可以使用结构化的、基于角色的提示来创建类似聊天的体验。
SELECT
SNOWFLAKE.CORTEX.COMPLETE(
'snowflake-arctic',
[
{
'role': 'system',
'content': 'You are a professional summarizer. Extract key information clearly and concisely.'
},
{
'role': 'user',
'content': 'Summarize this transcript in 1-2 sentences: ' || TRANSCRIPT
}
],
{
'temperature': 0.3,
'top_p': 0.9,
'max_tokens': 200
}
) AS JSON_RESPONSE,
JSON_RESPONSE:choices[0]:messages::string As "MESSAGE",
JSON_RESPONSE:model::string AS "MODEL",
JSON_RESPONSE:usage:completion_tokens::number AS "COMPLETION_TOKENS",
JSON_RESPONSE:usage:prompt_tokens::number AS "PROMPT_TOKENS",
JSON_RESPONSE:usage:total_tokens::number AS "TOTAL_TOKENS"
FROM
LLM_CORTEX_DEMO_DB.STAGE.TRANSCRIPT
WHERE
FILE_NAME = 'audiofile11.pdf';
在这个例子中,我们定义了一个系统角色,指示模型作为一个专业的摘要器。 然后,我们定义了一个用户角色,提供要摘要的记录文本。 temperature
参数控制随机性,较低的值使响应更确定。 top_p
参数控制多样性,通过将token选择范围缩小到最高概率值。 max_tokens
参数指定生成的响应的最大长度。通过调整这些参数,你可以控制 COMPLETE
函数的行为,并获得最佳结果。
总结:SQL赋能,AI洞察触手可及
通过 Snowflake Cortex LLM 和简单的SQL语句,你可以轻松地:
- 解析非结构化的PDF文档
- 分析情感并对主题进行分类
- 翻译、总结和提取关键信息
- 自动生成文本
所有这些都无需外部API或额外的工具,只需 Snowflake Cortex LLM 。它真正实现了 SQL驱动的AI洞察 ,让数据分析变得更加简单、高效和安全。
下一步:
- 从 GitHub 下载代码
- 在 docs.snowflake.com 了解更多信息
- 注册 Snowflake 试用版
希望本文能帮助你更好地理解和使用 Snowflake Cortex LLM 。 借助 Snowflake Cortex LLM, AI驱动的洞察不再遥不可及,它已经触手可及!