关于 AskTable
AskTable 如何工作
AskTable 如何理解问题、查询数据并生成可核查的结果。
AskTable 在用户权限范围内查询和分析数据,并保留查询、计算和生成结果的过程。
一次提问的完整链路
检索语义
问题发出后,智能体会先在你的数据语义里检索:表结构、字段备注、业务文档、技能、历史 SQL。
它先确定自己能「看到」什么,应该回答什么。
补齐口径
如果问题缺时间范围、粒度或指标定义,会先向你反问(需开启智能体的用户澄清)。不开启澄清时,它会自行按已有语义做合理假设,并在结论里说明。
生成并校验 SQL
生成的 SQL 会先过校验:只允许读,拒绝写操作、DDL 和 SELECT *。同时在这一步注入权限——
- 行级过滤条件直接拼进 WHERE
- 你不可见的字段从查询里排除
- 训练样本的召回也在检索阶段就按可见表过滤
也就是说,权限在查询执行之前就生效,不是查完再遮挡。
执行并返回
SQL 交给数据源执行。结果落成数据制品,界面上显示为查询结果,并给出行数与列数。需要图表时会调用生成图表,需要复杂计算时会调用执行 Python。
记录来源
结果里保留本次实际执行的 SQL 和使用的数据源,所以你可以展开核查,也可以改条件重跑。同一轮执行的完整链路会写进智能体的审计日志。
如何保证结果可靠
大模型本身是会编的。AskTable 的做法是不给它编的机会:
| 机制 | 具体做法 |
|---|---|
| 数字只能来自工具 | 涉及具体数据的问题,答案里的数字必须由只读 SQL 工具或代码沙箱执行产生,不允许模型凭记忆给一个 |
| 失败就报错 | 工具调用失败时如实返回错误,不降级成「大致估算」;界面上能看到报错原文 |
| 可追溯 | 每个结论都能展开看到实际执行的 SQL、数据源和耗时,条件可以改完重跑 |
| 不确定就反问 | 开启用户澄清后,条件不全时先确认,而不是替用户假设一个口径 |
权限怎么挡
权限在 SQL 生成阶段就改写查询:
| 层 | 作用方式 |
|---|---|
| 行级过滤 | 按你当前的角色,把过滤条件直接注入 SQL 的 WHERE 子句,从数据层面限制可见行 |
| 字段可见性 | 你无权查看的字段在语义检索阶段就不进入模型视野,模型不知道它存在,因此也无法被提示词诱导去查 |
| 训练样本召回 | 历史 Q-SQL 样本在召回时就按可见表过滤,不会通过示例泄漏不可见结构 |
| 入口身份 | 从飞书、嵌入页、API 进来的请求,身份和范围在入口层先确定,再进入上面的链路 |
三处配置的位置和优先级见权限与数据范围。
跨安全域怎么接数据
机房隔离、物理网闸、不允许给数据库开外网端口的场景,不必把数据库直接暴露出来:可以部署轻量代理,由它向内提供数据访问,AskTable 侧只连这个代理。配置方式见连接数据源的 DAP 一节。
对象模型
项目
├── 数据源 可被查询的数据库、文件或工作簿
├── 数据智能体 面向使用者的问数入口
│ ├── 技能 可复用的分析方法
│ ├── 业务文档与偏好 常驻的分析背景
│ └── 频道 / 定时任务 / 嵌入 对外的使用入口
├── 分析画卷 节点式的深入分析过程
├── 数据看板 由可刷新结果组成的持续查看页面
├── 人员 / 角色 / 策略 成员、数据范围和行级条件
└── 结果资产 保存下来的数据表和图表项目是隔离单元,资源都在项目内。数据智能体是把数据源、技能、能力开关和权限打包好的成品,业务人员只需要面对它,不用关心底层连了哪些库。
数据语义是准确率的来源
AskTable 不认识你的业务,它靠这几样东西理解「销售额」「活跃用户」指什么:
| 语义来源 | 作用 |
|---|---|
| 字段备注 | 说明字段的业务含义,优先级:人工 > 数据库原生描述 > AI 生成 |
| 语义类型 | 标记主键、外键、邮箱、地区等,帮助判断关联和分组方式 |
| 字段可见性 | 决定该字段是否进入 AI 的视野 |
| 脱敏类型 | 对人名、手机号、身份证号、银行卡号、邮箱按类型处理 |
| AI 索引 | 把问题里的简称映射到字段里的实际值 |
| 训练集 | 问题与正确 SQL 的样本,供检索参考 |
| 业务文档 | 指标口径、业务规则与行业术语,见业务文档 |
所以口径不对时,改数据语义比改问题更有效。
边界
- 只读。 不执行写操作、DDL,不支持
SELECT *。 - 不编数字。 涉及具体数据的问题必须由工具调用产生结果;工具失败会如实报错。
- 不跨项目。 所有资源都在项目内隔离。
- 私有部署可完全离线。 模型也可以走内网自建服务,数据不出域。