AI在线 AI在线

图驱动的自然语言接口:混合LLM与意图分类方法

在当今数据驱动的商业环境中,数据分析人员和营销人员经常需要与复杂的数据库交互以获取洞察。 然而,并非所有人都精通SQL等结构化查询语言,这就催生了对自然语言接口的需求。 本文将深入探讨一种创新的意图驱动自然语言接口,该接口结合了大型语言模型(LLM)和意图分类技术,为数据洁净室(Data Clean Rooms, DCRs)等隐私敏感环境提供了安全、高效的解决方案。

在当今数据驱动的商业环境中,数据分析人员和营销人员经常需要与复杂的数据库交互以获取洞察。然而,并非所有人都精通SQL等结构化查询语言,这就催生了对自然语言接口的需求。本文将深入探讨一种创新的意图驱动自然语言接口,该接口结合了大型语言模型(LLM)和意图分类技术,为数据洁净室(Data Clean Rooms, DCRs)等隐私敏感环境提供了安全、高效的解决方案。

自然语言接口的挑战与机遇

当数据分析师输入“我们应该重新定位哪些队列?”这样的查询时,他们实际上是在表达一种意图,而非直接发出SQL命令。这种简单的句子可能隐含着不同的操作,如细分排名、相似匹配或队列比较。将这些模糊的提示转化为结构化、符合政策的分析,需要的不仅仅是语言建模,更需要基于业务上下文和技术约束的语义理解。

传统的文本到SQL模型在处理这类问题时往往力不从心,尤其是在隐私优先的环境中,如数据洁净室,其中只能查询经过批准的模型和自定义估计函数,无法访问客户可识别数据。在这种情况下,意图分类成为关键技术,它将模糊的人类语言映射到结构化、可预测的类别,使下游系统能够采取行动。

本文介绍的混合自然语言接口旨在将用户意图转化为安全的SQL查询,并将其应用于数据洁净室等实际场景。在这些场景中,分析师和营销人员跨品牌协作,他们拥有不同的技能组合,但通常不精通SQL,而是最了解自己的品牌业务,并且可能跨地区使用母语表达品牌意图。

系统架构概述

我们的系统架构借鉴了现代搜索引擎的语义搜索原理,将用户意图和SQL提示模板嵌入到同一向量空间中,使用FAISS(Facebook AI Similarity Search)等技术将用户查询高效匹配到最合适的SQL模板。这种混合架构结合了以下关键组件:

  1. 基于嵌入的意图分类:使用OpenAI的text-embedding-3-small等模型将文本转换为高维向量。
  2. 基于FAISS的语义检索:快速查找最近邻意图。
  3. 模板驱动的SQL生成:考虑商店/品牌和队列元数据。
  4. 严格的模式引导LLM补全(作为备用):当模板无法安全解析查询时使用。

这种架构确保了系统的准确性、快速性和合规性,特别适合数据洁净室中跨企业边界的隐私保护数据协作。生成的查询自动遵守分析师的访问规则,例如:

  • 无行级访问(如无原始客户ID)
  • 仅应用所需的预批准转换(如HyperLogLog草图、标准化聚合)
  • 只读SQL(仅SELECT查询)
  • 由策略强制执行的模式和函数约束

意图分类:系统的核心

意图分类是该系统的基础,它将非结构化的自然语言映射到结构化类别,从而驱动下游逻辑,如SQL模板选择。一个单一的提示,例如“ComfyWearCo和SportStyleShop之间哪些队列有重叠?”,可以被提炼为核心意图:两个品牌之间的队列重叠。

意图分类的重要性体现在以下几个方面:

  1. 消歧:帮助区分比较、查找、排名和探索性任务。
  2. 安全:在任意文本到SQL生成之上强制执行基于模板的SQL路径。
  3. 速度:实现提示的快速路由,避免调用大型模型和产生幻觉输出。

这些意图使用每类5-10+个提示示例进行训练、嵌入和索引。例如,队列推荐、相似请求、队列重叠、队列比较和自然语言到SQL查询等不同意图都有相应的示例集。

基于嵌入的意图分类数学原理

基于嵌入的意图分类的核心是将自然语言提示转换为高维向量空间中的点,使得语义相似的提示在空间中距离较近。我们使用OpenAI的text-embedding-3-small模型来生成这些嵌入,该模型能够将文本转换为1024维的向量。

在数学上,嵌入过程可以看作是一个函数f: T→V,其中T是文本提示的集合,V是d维向量空间(d=1024)。该函数保留了文本的语义相似性,即如果两个提示在语义上相似,它们的嵌入向量在V中的欧几里得距离或余弦相似度就会很近。

一旦生成了嵌入,我们就使用FAISS来构建索引,以便快速查找与新输入提示最相似的示例。FAISS使用局部敏感哈希(LSH)等技术来加速高维空间中的最近邻搜索,使得在大规模数据集上的实时检索成为可能。

意图分类器:嵌入+引导标注

在实现方面,我们使用OpenAI的text-embedding-3-small来嵌入每个意图类别的精选标注提示示例,并使用FAISS对这些嵌入进行索引。以下是一个示例提示集:

  • 队列推荐

建议我们可以在ComfyWearCo尝试的未测试高价值队列。

SportStyleShop中有哪些尚未使用的有前途的细分市场?

列出ComfyWearCo中尚未定位的高价值队列。

  • 相似请求

SportStyleShop中哪些队列与ComfyWearCo的队列4相似?

在SportStyleShop中为ComfyWearCo的队列2查找相似细分市场。

显示ComfyWearCo队列4与其他商店的最佳匹配。

  • 队列重叠

跨品牌的哪些队列有重叠用户?

ComfyWearCo的队列3和SportStyleShop的队列4是否重叠?

  • 队列比较

比较ComfyWearCo的队列1和SportStyleShop的队列2的指标。

显示每个品牌的队列1及其KPI。

  • 自然语言到SQL查询

列出ComfyWearCo中客户生命周期超过2.0的队列。

按总订单数显示ComfyWearCo的顶级队列。

索引代码的大致流程如下:

  1. 准备意图示例,包括文本、预期意图和语言。
  2. 使用OpenAI API生成嵌入。
  3. 将嵌入转换为适合FAISS的格式。
  4. 创建FAISS索引并添加嵌入。
  5. 保存索引和元数据(意图标签和原始提示)用于运行时预测。

选择FAISS而非基于SentenceTransformer的分类器,主要是因为FAISS具有以下优势:

  1. 零样本泛化:通过添加更多标注示例即可轻松扩展,无需重新训练。
  2. 可解释性:意图由其最近邻支持,可以进行检查。
  3. 无需模型训练或托管:部署更快,维护更简单。
  4. 灵活性:支持开放世界分类和备用行为。

模式感知解析和商店映射

在数据洁净室环境中,我们假设有多个品牌,如ComfyWearCo和SportStyleShop。基于队列的数据模型的关键组件包括:

  • hll_cohort_sketches_store_x1/hll_cohort_sketches_store_y1:存储每个商店的队列级指标的表,每个表由(store_id, cohort_id)键控,包含隐私保护的HLL草图和标准化指标。
  • Cohort_Similarity:表示跨商店队列之间的相似性分数,引用草图表中的(store_a, cohort_a)和(store_b, cohort_b)。

所有查询生成,无论是通过模板还是LLM,都遵循这个实体关系模型,只使用可用字段和安全操作进行估计,如hll_estimate或hll_merge_agg。

由于自然语言中的品牌名称(如“ComfyWearCo”)与内部表名和商店ID不同,我们使用brand_registry.json来捕获映射关系,例如:

复制
{
  "ComfyWearCo": {
    "store_id": "comfy_wear_store_view",
    "table": "hll_cohort_sketches_store_x1"
  },
  "SportStyleShop": {
    "store_id": "sporty_style_store_view",
    "table": "hll_cohort_sketches_store_y1"
  }
}

实体提取使用正则表达式和字符串匹配来检测提示中的商店和队列提及,这也使得该系统可以扩展到支持N个商店而无需更改实现。

基于模板的SQL生成

给定预测的意图和提取的实体,我们使用特定于意图的SQL模板。以下是队列比较的示例:

复制
SELECT 'ComfyWearCo' AS store_name, cohort_id,
       hll_estimate(cohort_hll_sketch) AS estimated_users,
       avg_standardized_avg_order_value,
       avg_standardized_total_orders,
       avg_standardized_customer_lifetime,
       avg_standardized_days_since_last_purchase
FROM hll_cohort_sketches_store_x1
WHERE cohort_id = 2 AND store_id = 'comfy_wear_store_view'
UNION ALL
SELECT 'SportStyleShop' AS store_name, cohort_id,
       hll_estimate(cohort_hll_sketch) AS estimated_users,
       avg_standardized_avg_order_value,
       avg_standardized_total_orders,
       avg_standardized_customer_lifetime,
       avg_standardized_days_since_last_purchase
FROM hll_cohort_sketches_store_y1
WHERE cohort_id = 4 AND store_id = 'sporty_style_store_view';

这种方法通过完全基于可用模式来避免生成幻觉SQL。

具有模式感知提示的LLM备用机制

如果没有匹配的模板,我们会回退到LLM(在我们的示例中使用GPT-4),使用以下提示:

复制
你是一名在安全数据洁净室工作的数据分析师。仅使用SELECT语句。
仅使用提供的模式和函数。不要发明任何列或函数。
选择单个队列时使用hll_estimate(cohort_hll_sketch)。
除非跨行聚合,否则不要使用hll_merge_agg。
模式:
<SCHEMA TEXT>
用户问题:
ComfyWearCo中哪些队列的总订单数最高?

这种受模式约束的提示大大减少了生成SQL中的错误。

示例查询

意图:相似请求

问题:SportStyleShop中哪些队列与ComfyWearCo的队列5最相似?

复制
SELECT cohort_b, similarity_score_proxy
FROM cohort_similarity
WHERE store_a = 'comfy_wear_store_view'
  AND cohort_a = 5
  AND store_b = 'sporty_style_store_view'
ORDER BY similarity_score_proxy DESC
LIMIT 5;

意图:队列推荐

问题:建议ComfyWearCo中尚未使用的高价值队列。

复制
SELECT cohort_id, avg_standardized_avg_order_value, 
       avg_standardized_total_orders,
       avg_standardized_customer_lifetime, 
       avg_standardized_days_since_last_purchase
FROM hll_cohort_sketches_store_x1
WHERE store_id = 'comfy_wear_store_view' AND cohort_hll_sketch IS NULL
ORDER BY avg_standardized_avg_order_value DESC
LIMIT 5;

对高级数据洁净室功能的可扩展性

我们的方法的一个关键优势是它支持高级隐私保护功能,如HyperLogLog(HLL)草图,这在数据洁净室中常用于近似用户计数而不暴露原始标识符。

HLL在数据洁净室中的重要性

  • 禁止行级数据,因此基数估计(如用户计数)必须通过草图计算。
  • 允许使用hll_estimate和hll_merge_agg等函数,而不允许直接使用COUNT(DISTINCT user_id)。
  • 跨品牌队列之间的安全重叠和相似性依赖于HLL草图的相似性。

我们的系统如何支持HLL

  • 模板编码为在选择单个队列时使用hll_estimate。
  • 系统防止滥用,例如避免在非聚合查询中使用hll_merge_agg。
  • LLM备用机制使用有效的HLL函数用法和约束进行模式初始化。

评估:覆盖范围和准确性

为了验证我们的方法,我们对30多个自然语言输入运行了提示测试套件,每个输入映射到我们支持的五个意图之一。结果显示,在各种意图类型上都具有很高的准确性和语义覆盖范围。以下是一些代表性示例:

  1. 提示:SportStyleShop中哪些队列与ComfyWearCo的队列3最相似? 预测:lookalike_request | 预期:lookalike_request
  2. 提示:比较ComfyWearCo的队列4和SportStyleShop的队列1。 预测:cohort_comparison | 预期:cohort_comparison
  3. 提示:建议ComfyWearCo中我们尚未使用的新高价值队列。 预测:cohort_recommendation | 预期:cohort_recommendation

评估证实,我们的基于FAISS的分类器与特定于意图的模板相结合,为数据洁净室中的各种探索性和诊断性查询提供了准确、可解释和安全的SQL。

扩展到其他LLM

尽管此实现使用OpenAI的GPT-4作为备用SQL生成,但该架构设计为与LLM无关。可以轻松替换为其他模型,如Anthropic的Claude、Google的Gemini或本地LLM如LLaMA 3。

如何替换LLM

重要的是,无论使用哪种LLM,基于FAISS的意图分类器都保持不变。但是,如果选择的LLM(如Claude或开源模型)不提供嵌入API,则需要在本地生成嵌入。

用SentenceTransformers替换OpenAI嵌入

可以通过sentence-transformers库切换到本地嵌入模型,如all-MiniLM-L6-v2:

复制
from sentence_transformers import SentenceTransformer
import numpy as np
model = SentenceTransformer("all-MiniLM-L6-v2")
def get_embedding(text):
    return model.encode([text])[0].astype("float32").reshape(1, -1)

这保持了基于FAISS的分类逻辑,同时与OpenAI的嵌入API解耦,还支持在气隙或受监管环境中进行本地推理。

我们展示了一种混合系统,该系统将语义搜索(通过嵌入+FAISS)与为数据洁净室环境量身定制的安全SQL生成相结合。通过将SQL生成基于模式和意图模板,并仅在必要时回退到LLM,该架构在表达能力和安全性之间取得了实际平衡。

这种方法为在隐私受限的分析环境中构建智能接口提供了蓝图。未来的工作可以包括使用置信度分数对FAISS结果进行排名,进一步提高系统的准确性和可靠性。随着数据隐私要求的不断发展,这种意图驱动的自然语言接口将在促进跨品牌数据协作方面发挥越来越重要的作用。

相关资讯

RASA:LLM系统中实现智能体记忆的认知框架(含代码)

大语言模型(LLMs)和智能体不断进化,已不再局限于简单的响应和输出,而是在推理与行动能力上持续成熟。 随着智能体架构的进步,记忆、回忆和知识应用的方式,在系统设计和可信度方面变得愈发关键且复杂。 RASA(Role-Aligned Software Architecture,角色对齐软件架构)作为一个创新性的认知框架,为构建具备强大记忆能力、能够灵活适应各种场景的智能体提供了全新的思路和方法。
5/12/2025 2:50:00 AM
大模型之路

构建生产级LLM应用完整指南:从原型到落地的全流程实践

一、LLM应用落地的真实挑战当Jasper AI的写作助手因意外流量在数小时内崩溃时,人们意识到:让LLM应用从实验室走向真实用户,绝非简单的代码迁移。 根据Anthropic 2024年开发者调查,73%的LLM应用在触达用户前折戟沉沙,问题并非出在AI模型本身,而是支撑系统无法应对真实世界的复杂性——用户的不可预测输入、API的偶发故障、成本的突然飙升,这些都是原型阶段未曾遭遇的“暗礁”。 本文将以实战为导向,结合代码示例与架构设计,详解如何将一个基于OpenAI API的简单聊天机器人,升级为具备容错能力、成本可控且可弹性扩展的生产级系统。
6/5/2025 2:45:00 AM
大模型之路

你的LLM评估方法过时了吗?这三个范式转变不容错过

在我的职业生涯中,我一直致力于为机器学习系统打造评估体系。 在担任 Quora 数据科学部门负责人时,我们为新闻源排序、广告投放、内容审查等构建了评估机制。 在 Waymo,我们团队为自动驾驶汽车开发了评估标准。
1/21/2025 10:56:41 AM
Baihai IDP
  • 1