
企业微信

飞书
选择您喜欢的方式加入群聊

扫码添加咨询专家
Text-to-SQL(自然语言转 SQL)技术近年来取得了显著进展,让非技术人员也能通过自然语言查询数据库。然而,在企业级应用中,单纯的 Text-to-SQL 却面临着严峻的准确性挑战:
典型场景:
SELECT SUM(amount) FROM orders WHERE date >= '2026-01-01' AND date < '2026-02-01'这就是为什么许多 Text-to-SQL 系统在实验室环境中表现优异,但在真实业务场景中却频频出错。
业务语义层正是为了解决这一问题而生——它在数据库和用户之间增加了一层业务逻辑抽象,确保 AI 生成的 SQL 符合企业的业务规则。
业务语义层(Business Semantic Layer)是一个介于用户和数据库之间的抽象层,它将业务术语、业务规则、数据关系等业务知识编码化,使得 AI 系统能够理解业务语言,生成符合业务逻辑的 SQL 查询。
业务语义层通常包含以下几个核心组成部分:
定义企业中常用的业务术语及其对应的数据库字段和计算逻辑。
示例:
术语: "销售额"
定义: 已支付订单的总金额(排除退款和测试订单)
SQL 映射:
SELECT SUM(amount)
FROM orders
WHERE status = 'paid'
AND is_test = false
AND refund_status IS NULL
描述数据库中不同表之间的关系,以及如何进行 JOIN 操作。
示例:
关系: orders <-> customers
连接方式: orders.customer_id = customers.id
业务含义: 订单与客户的一对多关系
定义企业的业务规则,如数据过滤条件、计算公式、权限控制等。
示例:
规则: "有效订单"
条件:
- status IN ('paid', 'shipped', 'delivered')
- is_test = false
- created_at >= '2020-01-01' # 只统计 2020 年后的数据
定义不同用户角色可以访问哪些数据,实现行级权限控制。
示例:
角色: "区域经理"
权限:
- 只能查看本区域的数据
- WHERE region = user.region
在企业中,同一个术语可能在不同部门有不同的含义。
示例:
业务语义层通过明确定义每个术语的含义和计算逻辑,避免了歧义。
企业的数据库中往往存在脏数据、测试数据、历史遗留数据等。业务语义层可以通过业务规则,自动过滤这些无效数据。
示例:
-- 没有业务语义层的查询
SELECT COUNT(*) FROM users; -- 可能包括测试用户、已删除用户
-- 有业务语义层的查询
SELECT COUNT(*) FROM users
WHERE is_test = false
AND deleted_at IS NULL
AND created_at >= '2020-01-01'; -- 只统计有效用户
企业的业务逻辑往往非常复杂,涉及多表关联、复杂计算、条件判断等。业务语义层可以将这些复杂逻辑封装起来,用户只需用简单的业务术语提问。
示例:
SELECT AVG(order_amount)
FROM (
SELECT o.customer_id, SUM(o.amount) as order_amount
FROM orders o
WHERE o.status = 'paid'
AND o.is_test = false
GROUP BY o.customer_id
HAVING SUM(o.amount) > 10000
) high_value_customers;
在企业中,不同用户只能查看自己权限范围内的数据。业务语义层可以自动在 SQL 查询中添加权限过滤条件。
示例:
SELECT SUM(amount)
FROM orders
WHERE date >= '2026-01-01'
AND date < '2026-02-01'
AND region = 'East' -- 自动添加区域过滤
业务语义层的核心是元数据管理,包括:
这些元数据通常存储在配置文件或专门的元数据库中。
业务语义层需要理解用户的自然语言提问,识别其中的业务术语、时间范围、筛选条件等。
技术手段:
基于业务语义层的元数据和用户的提问,生成符合业务逻辑的 SQL 查询。
生成流程:
生成 SQL 后,业务语义层还需要验证查询结果的合理性,并提供反馈机制。
验证手段:
AskTable 在业务语义层方面进行了深度实践,确保 AI 查数的准确性和可靠性。
AskTable 提供了灵活的元数据配置方式,企业可以根据自己的业务需求,定义业务术语、业务规则、数据关系等。
配置方式:
AskTable 的 AI 引擎可以理解企业的业务术语,即使用户使用的是口语化的表达。
示例:
AskTable 支持行级权限控制,不同用户只能查看自己权限范围内的数据。
实现方式:
AskTable 的业务语义层不是静态的,而是可以持续优化和学习的。
优化机制:
| 维度 | 传统 Text-to-SQL | 业务语义层 + Text-to-SQL |
|---|---|---|
| 业务术语理解 | 有限(依赖数据库字段名) | 强(理解业务术语) |
| 业务规则应用 | 不支持 | 支持(自动应用业务规则) |
| 数据质量保障 | 无(可能查询脏数据) | 有(自动过滤无效数据) |
| 权限控制 | 不支持 | 支持(行级权限控制) |
| 准确性 | 低(容易出错) | 高(符合业务逻辑) |
| 适用场景 | 简单查询、实验环境 | 企业级应用、复杂业务 |
不要试图一次性定义所有业务术语,而是从最核心、最常用的术语开始。
优先级:
业务语义层的构建不是技术团队单独的工作,需要与业务团队紧密协作。
协作方式:
业务语义层的元数据需要持续维护和治理,避免元数据腐化。
治理机制:
业务语义层的构建是一个渐进的过程,不要追求一步到位。
迭代策略:
Text-to-SQL 技术让非技术人员也能查询数据,但要在企业级应用中真正落地,业务语义层是不可或缺的。
业务语义层不仅仅是一个技术组件,更是企业业务知识的数字化沉淀。通过业务语义层,企业可以:
AskTable 正是基于业务语义层的理念,为企业提供准确、安全、易用的 AI 数据查询服务。
了解更多:访问 AskTable 官网 或联系我们获取技术白皮书。