# NL2SQL：表字段说明、强制约束与动态查询

在知识库“语义配置 → NL2SQL 语义”展开“高级配置”，进入表和字段说明、强制约束或动态查询。

```{figure} /assets/images/agents/guide-5-hd/53-nl2sql-advanced-categories.png
:alt: 展开高级配置后出现表和字段说明、强制约束与动态查询入口。
:class: agent-guide-image
:figclass: agent-guide-shot

高级配置入口；知识库没有可用结构化数据时，新建按钮可能禁用，应先准备数据源。
```

## 表和字段说明

用于解释表或字段自身稳定的业务含义。数据库原生注释与补充说明分别保留，便于区分已有信息和业务维护内容。

选择目标表进入配置，阅读表描述，填写表补充说明；搜索列名或列描述，为所需列填写补充说明并检查启用项。没有原生表描述时，应补充表的业务含义与适用范围。

例如把 `amount` 解释为“含税金额，单位为元”，把状态值含义说明清楚。保存后检查同一个字段在查询和回答中是否被正确理解。

(query-constraints)=

## 强制约束

强制约束用于为某张表的查询固定添加过滤条件。一条约束只绑定一张表；该表参与查询时，约束条件会加入 SQL。

1. 新建强制约束，填写标识并选择关联表。
2. 添加字段、比较方式和值，按需组合 AND／OR 与条件组。
3. 查看 WHERE 条件预览，检查括号和过滤范围。
4. 保存后用包含与不包含目标数据的问题验证。

例如业务只统计人民币记录，可以配置币种条件。不要把这类查询口径配置当作数据库访问权限的替代；目标系统的数据权限仍需按实际权限管理。

条件组合方法见[筛选条件与条件组](nl2sql-metrics.md)。

## 动态查询

动态查询按需执行预先配置的只读 SQL，为回答提供实时业务数据。例如查询当前的科目映射或业务字典，再供智能体解释用户问题。

新建动态查询时，填写标识、查询说明和 SQL，并选择查询结果处理方式。说明应写清查询目的、返回内容和适用场景。

| 处理方式 | 作用 | 如何选择 |
| --- | --- | --- |
| 调用子 Agent 分析 | 先筛选、汇总和分析结果，再把分析结果交给主 Agent | 原始结果较多，需要先整理时 |
| 直接注入主 Agent 上下文 | 将原始结果完整交给主 Agent 继续回答 | 结果较小，且需要保留原始细节时 |

SQL 只允许一条只读 SELECT 或 WITH 查询，不能写入、修改结构或执行多条语句；动态查询 SQL 大小限制为 16 KiB。通过页面校验后保存，再检查实际查询结果和回答是否使用了正确数据。

查询应只返回回答所需字段和范围。避免把大量无关明细直接放入上下文；选择子 Agent 分析时，也应核对汇总是否遗漏关键条件。

## 修改后的共同检查

重新打开配置确认保存值，再用小范围数据验证。分别检查配置内容、实际生成或执行的 SQL、返回数据和最终回答，避免只看到一个成功状态就跳过口径检查。
