微信扫码
与创始人交个朋友
我要投稿
01.
导语
Agent工作流和 LLMs (大语言模型)的出现,让我们能够以自然语言交互的模式执行复杂的SQL查询,并彻底改变Text2SQL系统的运行方式。其典型代表是如何处理High-Cardinality Categorical Data (高基数类别数据)。
围绕这一问题,本文将以Waii和Zilliz Cloud(完全托管的Milvus向量数据库)组合为例,展示如何将向量数据库与 Agentic Text2SQL系统集成。
02.
为什么Text2SQL不适合查询高基数类别数据
Categorical data (类别数据)在数据库中无处不在,比如各种产品类别、客户细分或交易类型。其典型代表如,人的性别分为男和女,中国一共有34个省级行政区。
不难发现,以上类别数据,其去重后唯一值的数量(cardinality)是可控的。相应的,这些低基数列对于Text2SQL系统来说相对容易处理,因为自然语言查询和数据库值之间的差距很小。
但当我们遇到高基数类别数据(某一类别特征的取值数量巨大)时,问题就出现了。比如,超过60%的数据库大多长这样:包含数百万个唯一ID的产品目录,或包含数十万企业ID的金融数据库,甚至数据量超过上亿的身份识别库与电商IP地址库。
数据库需要对这些类别进行精确、严格的查找,但基于自然语言描述的查询通常是模糊和不精确的。比如,用户可能会问“最近什么剧比较火”或“最近哪个股票涨的比较好”。如何将这些模糊的描述转化为精准的数据库查询,Text2SQL根本无法做到。
03.
如何补足Text2SQL的短板
通常,Text2SQL 系统在做高基数类别数据的自然语言查询时会采用以下两种方法:
数据预处理技术(Preprocessed Database Techniques):这种方法结合输入预处理并依赖于传统的数据库功能,如文本搜索和正则表达式。虽然它可以处理简单的匹配,但通常由于过于僵化而无法准确表示用户的想法,尤其是在复杂或精细化的查询中,我们的自然语言通常是非常多变的。
基于LLM的翻译(LLM-Based Translation):在这种方法中,使用基于数据或少量示例训练的LLM来预测正确的类别值。虽然LLM在理解上下文和自然语言方面表现出色,但在处理高基数数据时经常产生错误的结果。这是因为LLM缺乏对完整(通常是私有的)数据集的了解,因此很难对那些不在训练数据中的如企业ID等信息进行查询。
对于高基数数据的处理,以上两种方法都有短板。
数据预处理技术过于僵化和字面化,无法有效处理自然语言查询的细微差别;而LLM虽然可以理解查询意图,但无法精准理解不在预训练数据中出现的特殊值。
04.
向量数据库如何解决高基数类别数据查询困境
向量数据库旨在存储和高效查询数据的高维向量表达。不难发现,向量数据库的查询并非基于关键词匹配,而是主要是使用embedding进行语义搜索。因此,查询高基数类别数据,正是向量数据库的擅长之处。
接下来,我们会展示如何利用向量数据库来做基于自然语言的高基数类别数据查询。
工作原理:
创建embedding(Create Vector Embeddings):为高基数列中的每个唯一值创建embedding。该embedding通过将值映射到高维空间中的向量来捕获其语义含义。
在向量数据库中索引(Index in a VectorDB):将这些embedding存储在像Milvus这样的向量数据库中,该数据库针对高维空间中的快速相似性搜索进行了优化。
查询处理(Query Processing):当用户提交自然语言查询时,使用LLM理解意图并生成初步SQL查询。对于高基数列,LLM不是尝试生成特定值,而是生成所需值的描述或特征。
向量搜索(Vector Search):使用此描述的embedding对向量数据库进行相似性搜索,检索相关的类别值。
优化(Refinement):LLM可以根据用户查询的完整上下文过滤掉任何不相关的匹配项。
SQL生成(SQL Generation):通过使用优化的类别值列表构建相应的filter查询以及汇总来生成最终的SQL查询。
05.
在Text2SQL中使用向量搜索的好处
向量数据库增强的方法提供了几个优势:
可扩展性(Scalability):它可以处理具有数百万个唯一值的类别,而不会显著降低性能。
准确性(Accuracy):通过结合LLM的语义理解和向量数据库的精确召回,可以更准确地将用户意图翻译为特定的数据库值。
灵活性(Flexibility):这种方法可以适应数据库的更新,而无需重新训练整个系统。
06.
选型与部署
落地中,我们可以考虑通过结合Waii和Zilliz Cloud,来进行实际部署。
6.1 Waii用于智能Text2SQL
Waii是世界上第一个基于 Agent 工作流构建的Text2SQL API。它结合了编译器技术和自动生成的知识图谱,以实现最准确的查询生成。
自动检测(Automatic Detection):Waii自动识别这些高基数列,无需手动配置。
智能生成(Smart Embedding Generation):它采用定制的工作流为不同类型的列构建和更新embedding,优化准确性和资源效率。
自适应技术(Adaptive Techniques):Waii自动选择适合各种列类型的技术,确保最佳性能,而无需用户具备深厚的专业知识。
6.2 Zilliz Cloud用于向量语义搜索
Zilliz Cloud是支持高性能的向量数据库,它的扩展能力和低延迟精准召回的能力使其成为AI 应用开发中的最佳选择,与Waii相辅相成。
可扩展性(Scalability):Zilliz Cloud可以轻松处理数十亿级的向量规模,使其成为高基数数据场景的理想选择。
高性能查询(Lightning-Fast Queries):其优化的索引可以确保快速相似性搜索,保持低延迟。
安全性和访问控制(Security and Access Control):Zilliz Cloud通过安全网络选项和加密协议提供企业级数据安全和隐私合规性。这确保了数据在传输和静态时的安全性。此外,Zilliz Cloud提供权限分明的身份控制和访问管理,包括基于角色的访问控制(RBAC)和OAuth 2.0,以实现安全的集中式单点登录(SSO)功能。
6.3 Waii和Zilliz Cloud的集成
自动工作流(Seamless Workflow):Waii的自动预处理和Zilliz的强大向量存储相结合,可以创建一个在处理Text2SQL系统中高基数数据的流畅、端到端解决方案。
生产级可用(Production-Ready):专为现实世界的大规模挑战设计,适用于各个场景的生产部署。
通过利用Waii的自动检测和Zilli的高效向量查询,可以建立在Text2SQL系统中处理高基数类别数据的强大解决方案,而无需手动开发代码进行元数据管理或embedding生成。
07.
实例
接下来,我们将展示如何部署一个监控全球数百万个新闻事件的查询平台。
数据库架构如下:
CREATE TABLE events (
event_id INT PRIMARY KEY,
event_name VARCHAR(255),
event_date DATE,
category VARCHAR(100),
total_spent DECIMAL(10, 2)
);
event_name
是一个高基数类别列,包含数百万个唯一的描述性名称,如“Global AI Ethics Summit 2024”、“Sustainable Living Expo: Greening Our Future”或“5th Annual Quantum Computing Breakthrough Conference”。
分析师可能会问:“How much money was spent on AI events last month?”
以下是处理这个问题的不同方法:
方法一:传统的关键词匹配
在这种方法中,我们直接把用户提供的术语作为查询的搜索词。我们在这里使用不区分大小写的全文搜索。
SELECT SUM(total_spent)
FROM events
WHERE event_name ILIKE '%AI%' AND event_date >=
DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND event_date <
DATE_TRUNC('month', CURRENT_DATE);
问题:这种方法错过了像“Machine Learning Symposium”或“Neural Network Workshop”这样与AI相关但不包含“AI”单词的事件,而且也可能错误地将“HAIR styling convention”这样含有“AI”字母的结果。
方法二:单独采用LLM
在这种方法中,LLM生成可能与搜索相关的多个术语,并据此构建filter查询。它通常会生成如下内容:
SELECT SUM(total_spent)
FROM events
WHERE (event_name ILIKE '%AI%' OR event_name ILIKE '%Artificial Intelligence%' OR event_name ILIKE '%Machine Learning%' OR event_name ILIKE '%Neural Network%')
AND event_date >=
DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND event_date <
DATE_TRUNC('month', CURRENT_DATE);
问题:虽然这种方法召回了更多与AI相关的事件,但它仍然局限于预定义的术语列表,可能会错过其他更新颖的AI相关的事件,依然无法实现精准召回。
08.
向量数据库+LLM方法
下图描述了整体流程。左侧是对事件表(events table)进行的预处理,右侧显示了生成查询的流程。
查询生成流程:
Waii解释查询并重写描述:“与人工智能、机器学习、神经网络和其他AI技术相关的事件。”
此描述用于查询Zilliz Cloud,返回基于语义相似性的相关事件ID列表。
Waii优化此列表,过滤掉可能被错误召回的非AI事件。
Waii使用Agent工作流将这些事件ID纳入最终的SQL查询:
SELECT SUM(total_spent)
FROM events
WHERE event_id IN (1234, 5678, 9101, 1121, 3141, 5161, 7181, 9202, 1222, 3242)
AND event_date >=
DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND event_date <
DATE_TRUNC('month', CURRENT_DATE);
这种方法可以准确识别与AI相关的事件,即使它们使用的是专业术语或并不包含明显的AI关键词,比如找到像“3rd Symposium on Generative Adversarial Networks”或“Workshop on Ethical Considerations in Reinforcement Learning”,而其他方法可能会错过。
通过利用向量相似性搜索,我们可以更准确地解释用户的意图,并将其与我们数据库中的高基数事件名称匹配,提供更全面和准确的结果。
09.
结论
随着数据量的持续增长和用户对直观数据交互的期望增加,在Text2SQL系统中处理高基数类别数据将变得更加普遍。通过利用Zilliz Cloud与Waii的结合,可以创建更强大、可扩展和准确的系统。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-06-20
2024-06-14
2024-10-14
2024-06-16
2024-07-03
2024-10-09
2024-06-14
2024-06-06
2024-06-21
2024-05-31