Skip to content

一个 SQL 接口,就是一个 AI 工具 ​

一句话:写一条聚合 SQL 存成数据接口,把它登记成一把自定义工具,绑给一个智能体。然后问它「各个状态的订单分别有多少笔」——它不会凭记忆报数,而是先去调那把工具,拿到实时结果再照着说。屏幕上会明明白白出现一行「正在调查:order_status_summary」,那就是它在调工具的证据。这一章是首页视频的第 05 章。

演示环境里已经有成品

用 admin / admin123 登录:

  • 基础设施 → 数据管理 → 接口管理 里的 订单状态汇总(编码 demo_order_status_summary)——点行内「测试」→「执行」,当场能看到结果;
  • AI → AI 助手 → 工具管理 → 自定义工具 页签里的 order_status_summary;
  • AI → AI 助手 → 智能体管理 里的 订单数据助手(编码 doc_order_helper)——去智能助手新建对话选它,问「现在各个状态的订单分别有多少笔?」。

功能在哪 ​

页面菜单路径这一章用它干什么
接口管理 ★基础设施 → 数据管理 → 接口管理写 SQL、存成正式接口、在线测试
工具管理 ★AI → AI 助手 → 工具管理 → 自定义工具把接口登记成一把 AI 能调的工具
智能体管理 ★AI → AI 助手 → 智能体管理建智能体、绑这把工具、发布
智能助手 ★AI → AI 助手 → 智能助手提问,看它调工具、看答案

前置条件 ​

  1. 有一张能查的表。这一章用的是在线示例自带的 test_demo_order(演示环境里 3 行未删除数据,订单状态分别是 1 / 2 / 4)。你的实例上没有这张表就换一张,SQL 改改字段名即可,步骤一模一样。
  2. 已配好 API 密钥 与 模型配置。
  3. 这一章不需要知识库。

为什么用演示表而不是第 01 章 AI 建的那张

第 01 章那张表是 AI 当轮生成的,字段名每轮都可能不同;用它的话这一章的 SQL 每次都得重写。演示表的结构是固定的,SQL 可以照抄。

常用操作 ​

第 1 步:写 SQL,存成数据接口 ​

进 基础设施 → 数据管理 → 接口管理,点「新增」。弹出的面板标题是「新建接口」。

字段填什么
接口名称订单状态汇总
接口编码demo_order_status_summary
标签多选下拉里勾 AI 工具
类型 / 动作类型 / 是否分页都不动,保持默认(SQL 查询 / 查询 / 关)

「配置」那一栏是个 SQL 编辑器,把下面这条整段贴进去:

sql
SELECT
  CASE order_status WHEN '1' THEN '待付款' WHEN '2' THEN '待发货'
    WHEN '3' THEN '已发货' WHEN '4' THEN '已完成'
    WHEN '5' THEN '已取消' ELSE order_status END AS status_name,
  COUNT(*) AS order_count,
  IFNULL(SUM(pay_amount), 0) AS pay_amount_total,
  IFNULL(SUM(goods_amount), 0) AS goods_amount_total
FROM test_demo_order
WHERE deleted = 0
GROUP BY order_status
ORDER BY order_status

新建接口面板:名称、编码、标签「AI 工具」,配置栏里是那条聚合 SQL(超级管理员视角)

点「保 存」(两字按钮中间有个空格)。做对了弹绿色提示,含「成功」。

这条 SQL 里有三处是刻意的,别「顺手优化」

  1. WHERE deleted = 0 得自己写。平台的逻辑删除不会自动帮你加,不写就会把删掉的行也统计进去。
  2. 不要自己写租户条件。这张表没有 tenant_id 列,租户拦截器对「查不到表信息的表」直接放行;你自己加一个 tenant_id = 1 会报「未知列」。同理不要 join system_dict_data 去取状态名——它有实体类但没有 tenant_id 列,一旦被拦截器注入条件就会报错。所以状态名用 CASE 硬写。
  3. 这条 SQL 故意不带参数。带参数就得在测试面板里填值、在对话里让模型猜值,两处都可能翻车。想带参数等这一章走通了再加。

「存下来」意味着什么

它不是一个临时查询,而是一个正式接口:有版本号、能回滚、每次调用都记流水(在访问日志里查得到)。这也是它后面能被当成工具的原因。

第 2 步:在线测试,确认数字对得上 ​

回列表,在 demo_order_status_summary 那一行点「测试」。面板标题是「在线测试」,点「执行」。

面板会回显实际执行的 SQL(租户条件注入得对不对,一眼能核对)和结果 JSON。本轮实测三行:

status_nameorder_countpay_amount_totalgoods_amount_total
待付款18480.008480.00
待发货137254.6041394.00
已完成145588.6047988.00

在线测试面板:回显实际执行的 SQL 与三个分组的结果(超级管理员视角)

「测试」不是干跑

它走的是和正式调用同一套后端逻辑,包括租户条件注入与权限判定。所以这一步测出来的数字,就是待会儿模型能拿到的数字——把这张表记下来,第 5 步要拿它对账。

第 3 步:把接口登记成一把工具 ​

进 AI → AI 助手 → 工具管理,点「自定义工具」页签,再点「新增」。面板标题是「新增工具」。

字段填什么
工具键order_status_summary
展示名订单状态汇总
分组数据接口
关联数据接口demo_order_status_summary
风险等级不动,默认「只读」
执行方式显式选「只读查询」

「工具说明」填这段(这是整章最重要的一段文字,原因见下面的 warning):

text
查询演示订单按状态分组的汇总:每种状态各有多少笔、付款金额合计、商品金额合计。凡是要回答「各状态订单数量 / 金额合计 / 哪类占比最高」都先调它,拿到实时数字再作答,不要凭记忆报数。

新增工具面板:工具键、展示名、分组、关联数据接口、执行方式「只读查询」(超级管理员视角)

点「保 存」。

「关联数据接口」是远程搜索,不打字就是空下拉

点开那个下拉看不到任何选项——它要你先打字才去查。输入 demo_order_status_summary,等一两秒,选项才出现。

工具说明会原样进模型提示词,是模型选对工具的唯一依据

模型看不到你的 SQL,也看不到接口名称背后的业务含义。它决定「这个问题该不该调这把工具」时,读的就是这段说明。写「查询订单」这种一句话说明,模型会在该调的时候不调、不该调的时候乱调。

上面那段说明的写法值得照抄:先说它返回什么(每种状态各有多少笔、金额合计),再说什么时候必须调它(凡是要回答某某某都先调它),最后说反面(不要凭记忆报数)。

保存即生效,不用再发布一步

自定义工具和智能体不一样:没有发布环节。工具键(order_status_summary)就是模型能点的那个名字,存下来立刻可以被绑。

第 4 步:建一个绑这把工具的智能体 ​

进 AI → AI 助手 → 智能体管理,点「新增」:

字段填什么
名称订单数据助手
编码doc_order_helper
知识库留空
工具(只读)选 order_status_summary

人设填这段:

text
你是「启凌智搭」平台的订单数据问答助手。

职责:回答演示订单的分布问题——各状态多少笔、金额合计多少、哪一类占比最高。
方法:凡是要报具体数字,必须先调用「订单状态汇总」工具拿到实时结果,再照着返回值说;不许凭记忆或估算编数。
格式:先一句话给结论,再列一张「状态 / 笔数 / 付款金额」的小表。金额保留两位小数,单位元。
边界:工具没返回的项就说「这个接口没查这一项」;不执行任何写操作。

点「保存并发布」,弹「已保存并发布」。

智能体设计器:工具卡里绑上了 order_status_summary,知识库留空(超级管理员视角)

知识库这一栏必须留空

绑了工具就走「思考 → 调工具 → 再思考」的调查循环,而工具与知识库检索在这一版是互斥的。这一章要演的是工具,知识库绑上只会让检索被跳过、白配。互斥的另一半见第 04 章。

不要复用第 04 章那个「使用手册助手」

它的人设写死了「只依据检索到的手册片段作答」「与本平台无关的问题不答」。拿它问订单数据,它很可能当着你的面拒答。工具型智能体必须单独建、人设单独写。

工具下拉里那个选项可能是灰的

如果 order_status_summary 在列表里显示为不可选,说明这把工具当前不允许被绑(比如风险等级或执行方式与这个智能体的能力不匹配)。回去检查第 3 步的「风险等级 = 只读」「执行方式 = 只读查询」。

第 5 步:问它,并且确认它真的调了工具 ​

进 AI → AI 助手 → 智能助手,点「新建对话」,在智能体选择器里选「订单数据助手」,输入框填:

text
现在各个状态的订单分别有多少笔?付款金额合计各是多少?

点「发送」。

关键的一帧在这里:回答出来之前,界面上会先出现一行进行中的提示——

正在调查:order_status_summary

「正在调查:order_status_summary」——模型没有凭空作答,它先去调了那把只读工具(超级管理员视角)

这行字就是「模型真的调了工具」的唯一直接证据。它只在调用期间出现,答案一出来就被清掉——看到的时候别急着往下读,先确认它出现过。

然后是最终答案,按人设要求给一句话结论 + 一张小表。

最终答案:一句话结论 + 「状态 / 笔数 / 付款金额」小表,数字与第 2 步测试面板一致(超级管理员视角)

第 6 步:对账 ​

把答案里的数字和第 2 步测试面板的结果逐个对:

状态测试面板模型答案应该说
待付款1 笔 / 8480.001 笔 / 8480.00
待发货1 笔 / 37254.601 笔 / 37254.60
已完成1 笔 / 45588.601 笔 / 45588.60

对上了,说明数字是查出来的,不是编的。这一章就成立了。

想更狠一点:改一条数据再问一次

去在线示例的订单表把某条记录的金额改掉,回来再问同一个问题。答案应该跟着变——这才彻底排除「模型记住了上一轮的答案」。

视角对照 ​

视角表现
超管 admin本章视角。能建接口、建工具、建智能体
租户管理员 docadmin有对应菜单就能建。注意工具是以发布者身份执行的——发布者能查什么,工具就能查什么
普通员工 salesman01没有这些菜单;能不能在助手页选中这个智能体,取决于它有没有授给他的角色
套餐受限租户 aoteman看套餐里有没有「接口管理」与 AI 相关菜单

进阶 ​

常见问题 ​

Q:模型没调工具,直接给了个答案? A:这一轮不算数——答案的来路不明,数字很可能是编的。三个方向排:① 工具说明写得太笼统,模型没意识到该调它(回第 3 步照那段说明的三段式重写);② 人设里没写「必须先调用工具」;③ 问法太泛,换成明确要数字的问法(「各状态分别多少笔」比「订单情况怎么样」更容易触发)。

Q:工具说明到底要写多细? A:判断标准是一句话:一个没见过你系统的同事,只读这段说明,能不能判断出「这个问题该不该调它」。能就够了。所以要点明返回什么、什么情况下必须调、以及不该干什么。

Q:能不能让这把工具改数据(写入/更新)? A:技术上能,但风险等级和执行方式就不再是「只读 / 只读查询」了,平台会按更严的口径对待它,智能体那边也可能不允许绑。真要写,参照第 02 章的做法:把写操作放进流程里,上游加一个人工闸口,让人点头再动手——而不是让对话里的模型自己决定写什么。

Q:SQL 改了,工具会跟着变吗? A:会。工具绑的是接口编码,接口内容改了、保存了,下次调用就是新 SQL。但接口有版本,改完记得确认线上生效的是哪一版。

Q:在线测试的结果和模型答案对不上? A:先看在线测试面板回显的实际执行 SQL——租户条件注入之后可能和你写的不一样。再看两次查询之间有没有人改过数据。最后才怀疑模型算错(它一般只是照抄返回值,不会自己算)。

Q:结果 JSON 解出来是个 {code, msg, data} 信封? A:在线测试面板会把返回值原样贴出来,可能是行数组,也可能是信封或分页对象 {total, list}。核对数字时记得往里剥一层。

相关页面 ​