# AskTable 如何工作

AskTable 如何理解问题、查询数据并生成可核查的结果。

AskTable 在用户权限范围内查询和分析数据，并保留查询、计算和生成结果的过程。

## 一次提问的完整链路

**检索语义**

问题发出后，智能体会先**在你的数据语义里检索**：表结构、字段备注、业务文档、技能、历史 SQL。

它先确定自己能「看到」什么，应该回答什么。

**补齐口径**

如果问题缺时间范围、粒度或指标定义，会先向你反问（需开启智能体的[用户澄清](https://docs.asktable.com/agent/capabilities)）。不开启澄清时，它会自行按已有语义做合理假设，并在结论里说明。

**生成并校验 SQL**

生成的 SQL 会先过校验：只允许读，拒绝写操作、DDL 和 `SELECT *`。同时在这一步注入权限——

- 行级过滤条件直接拼进 WHERE
- 你不可见的字段从查询里排除
- 训练样本的召回也在检索阶段就按可见表过滤

也就是说，**权限在查询执行之前就生效**，不是查完再遮挡。

**执行并返回**

SQL 交给数据源执行。结果落成数据制品，界面上显示为查询结果，并给出行数与列数。需要图表时会调用生成图表，需要复杂计算时会调用执行 Python。

**记录来源**

结果里保留本次实际执行的 SQL 和使用的数据源，所以你可以展开核查，也可以改条件重跑。同一轮执行的完整链路会写进智能体的[审计日志](https://docs.asktable.com/agent/logs-feedbacks)。

## 如何保证结果可靠

大模型本身是会编的。AskTable 的做法是不给它编的机会：

| 机制       | 具体做法                                              |
| -------- | ------------------------------------------------- |
| 数字只能来自工具 | 涉及具体数据的问题，答案里的数字必须由只读 SQL 工具或代码沙箱执行产生，不允许模型凭记忆给一个 |
| 失败就报错    | 工具调用失败时如实返回错误，不降级成「大致估算」；界面上能看到报错原文               |
| 可追溯      | 每个结论都能展开看到实际执行的 SQL、数据源和耗时，条件可以改完重跑               |
| 不确定就反问   | 开启用户澄清后，条件不全时先确认，而不是替用户假设一个口径                     |

## 权限怎么挡

权限**在 SQL 生成阶段就改写查询**：

| 层      | 作用方式                                               |
| ------ | -------------------------------------------------- |
| 行级过滤   | 按你当前的角色，把过滤条件直接注入 SQL 的 `WHERE` 子句，从数据层面限制可见行      |
| 字段可见性  | 你无权查看的字段在语义检索阶段就不进入模型视野，模型**不知道它存在**，因此也无法被提示词诱导去查 |
| 训练样本召回 | 历史 Q-SQL 样本在召回时就按可见表过滤，不会通过示例泄漏不可见结构               |
| 入口身份   | 从飞书、嵌入页、API 进来的请求，身份和范围在入口层先确定，再进入上面的链路            |

三处配置的位置和优先级见[权限与数据范围](https://docs.asktable.com/permissions)。

## 跨安全域怎么接数据

机房隔离、物理网闸、不允许给数据库开外网端口的场景，不必把数据库直接暴露出来：可以部署轻量代理，由它向内提供数据访问，AskTable 侧只连这个代理。配置方式见[连接数据源](https://docs.asktable.com/data/connect)的 DAP 一节。

## 对象模型

```text
项目
├── 数据源              可被查询的数据库、文件或工作簿
├── 数据智能体          面向使用者的问数入口
│   ├── 技能            可复用的分析方法
│   ├── 业务文档与偏好   常驻的分析背景
│   └── 频道 / 定时任务 / 嵌入   对外的使用入口
├── 分析画卷            节点式的深入分析过程
├── 数据看板            由可刷新结果组成的持续查看页面
├── 人员 / 角色 / 策略   成员、数据范围和行级条件
└── 结果资产            保存下来的数据表和图表
```

项目是隔离单元，资源都在项目内。数据智能体是把数据源、技能、能力开关和权限打包好的成品，业务人员只需要面对它，不用关心底层连了哪些库。

## 数据语义是准确率的来源

AskTable 不认识你的业务，它靠这几样东西理解「销售额」「活跃用户」指什么：

| 语义来源  | 作用                                                                |
| ----- | ----------------------------------------------------------------- |
| 字段备注  | 说明字段的业务含义，优先级：人工 > 数据库原生描述 > AI 生成                                |
| 语义类型  | 标记主键、外键、邮箱、地区等，帮助判断关联和分组方式                                        |
| 字段可见性 | 决定该字段是否进入 AI 的视野                                                  |
| 脱敏类型  | 对人名、手机号、身份证号、银行卡号、邮箱按类型处理                                         |
| AI 索引 | 把问题里的简称映射到字段里的实际值                                                 |
| 训练集   | 问题与正确 SQL 的样本，供检索参考                                               |
| 业务文档  | 指标口径、业务规则与行业术语，见[业务文档](https://docs.asktable.com/agent/documents) |

**所以口径不对时，改数据语义比改问题更有效。**

## 边界

- **只读。** 不执行写操作、DDL，不支持 `SELECT *`。
- **不编数字。** 涉及具体数据的问题必须由工具调用产生结果；工具失败会如实报错。
- **不跨项目。** 所有资源都在项目内隔离。
- **私有部署可完全离线。** 模型也可以走内网自建服务，数据不出域。

## 下一步

- 想接入自己的数据：见[连接数据源](https://docs.asktable.com/data/connect)
- 想让 AI 更懂你的业务口径：见[表与字段备注](https://docs.asktable.com/data/semantics)
- 想控制谁能看什么：见[权限与数据范围](https://docs.asktable.com/permissions)
- 想看每次执行的实际情况：见[日志与用户反馈](https://docs.asktable.com/agent/logs-feedbacks)
