多智能体的数据代理流程的搭建

81 阅读6分钟

1.进入实验平台

环境部署在本地docker

在浏览器输入127.0.0.1/apps进入平台

输入提供的账号密码

2.配置环境

进入dify平台后点右上角我的,然后配置模型

然后再系统模型设置里,按以下要求设置保存

image-20251207014132754.png

3.时间查询

如下位置

image-20251207015245170.png

新建 Chatbot → 取名「TimeBot」,logo不用换,然后点创建

然后是工具配置

image-20251207015416231.png

提示词:

你是一个专业的时间查询助手,会根据用户的输入和给定的时间工具查询当前实时的时间信息,并正确返回结果
格式:yyyy-MM-dd HH:mm:ss E  
示例:2025-12-07 15:20:30 星期六

你是一个专业的时间查询助手,会根据用户的输入和给定的时间工具查询当前实时的时间信息,并根据用户的提问精准正确的返回结果。

然后就可以在右侧的调试与预览界面提问:今天是星期几,几时几分

可以关闭思考模式

image-20251207015806579.png

注意设置一下时区,免得弄错了

image-20251207021040195.png

做完之后需要发布

4.数据库智能代理工作流

先创建工作流

image-20251207025251716.png

节点1

创建节点1

image-20251207025805973.png

配置好数据库设置,其中,实验环境中的数据库地址需要在任务管理器中去找(应该找WIFI的网卡)

image-20251207030010007.png

如图

image-20251207030216717.png

然后节点1的sql查询语句这里,需要获取整个数据库的表的结构信息,比如表名和字段信息等,这一步可以找AI

带别名

SELECT TABLE_NAME            AS tbl,
       COLUMN_NAME           AS col,
       ORDINAL_POSITION      AS col_order,
       COLUMN_TYPE           AS col_type,
       COLUMN_COMMENT        AS col_comment,
       CASE WHEN COLUMN_KEY = 'PRI' THEN 1 ELSE 0 END AS is_pk
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'emp'
ORDER BY TABLE_NAME, ORDINAL_POSITION;

不带别名
SELECT TABLE_SCHEMA,
       TABLE_NAME,
       COLUMN_NAME,
       ORDINAL_POSITION,
       COLUMN_TYPE,
       COLUMN_COMMENT,
       CASE WHEN COLUMN_KEY = 'PRI' THEN 1 ELSE 0 END AS is_pk
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'emp'
ORDER BY TABLE_NAME, ORDINAL_POSITION;

image-20251207030936746.png

然后运行测试一下,确保无误

这一步过后,相当于告诉了大模型我们需要查询的这个数据库的表名和字段名等信息,方便我们后续继续用大模型对这个数据库进行操作

节点2

需要LLM大模型节点

image-20251207032538874.png

这个节点作用是基于上一步我们给定的数据库结构信息和用户的要求生成一个sql语句

提示词:

你是一个专业的数据库专家,请根据用户的输入和sql查询的表结构信息,生成一个正确的可运行的sql语句。
# 要求
1.必须是select语句,不能是DML语句
2.必须是安全可运行的select语句
3.结构必须和给定的表结构匹配

# 输出格式:
必须是完整可运行的sql语句,不能有其他额外的信息。

用户的数据:{{#sys.query#}}
sql查询的表结构:{{#1765047547597.text#}}

-----------------------------------------------------------

你是一名资深数据库专家,会根据用户的输入和sql查询的表结构信息生成安全、只读的 SELECT 语句。  

# 要求:
1. 仅输出一条标准的 SELECT 语句,禁止 INSERT/UPDATE/DELETE/CREATE/DROP/TRUNCATE/ALTER2. 字段、表名必须与结构完全一致,区分大小写,保留字加反引号。  
3. 日期字段用 DATE() 截断;动态时间一律用 DATE_SUB(CURDATE(),INTERVAL n DAY/MONTH/QUARTER)。  
4. 度量可能为 NULL 时包 IFNULL(x,0);GROUP 字段放在 SELECT 列表。  
5. 多表 JOINON 后主表;复杂逻辑可写子查询再 JOIN7. 返回 JSON 且仅 JSON:{"sql":"...","unit":"元//%","comment":"口径一句话"}
8. 你要正确理解表名和字段名的含义,避免出现歧义.

用户的数据:{{#sys.query#}}
sql查询的表结构:{{#1765047547597.text#}}



你是一个专业的数据库专家,请根据用户的输入和sql查询的表结构信息,生成一个正确的,满足用户需求的,可运行的sql语句。 

# 要求 
1.必须是select语句,不能是DML语句 
2.必须是安全可运行的select语句 
3.结构必须和给定的表结构匹配
4.要是能够满足客户需求的,能正确运行的select语句 

# 输出格式: 必须是完整可运行的sql语句,不能有其他额外的信息。 
用户的数据:{{#sys.query#}}
sql查询的表结构:{{#1765376903495.text#}}

要求

1.必须是select语句,不能是DML语句

2.必须是安全可运行的select语句

3.结构必须和给定的表结构匹配

4.要是能够满足客户需求的,能正确运行的select语句

输出格式: 必须是完整可运行的sql语句,不能有其他额外的信息。

用户的数据:

sql查询的表结构:

要求

1.必须是select语句,不能是DML语句

2.必须是安全可运行的select语句

3.结构必须和给定的表结构匹配

4.要是能够满足客户需求的,能正确运行的select语句

输出格式: 必须是完整可运行的sql语句,不能有其他额外的信息。

用户的数据:

sql查询的表结构:

节点3

通过上一节点已经生成了一条sql语句,现在需要将这条sql语句交给SQL查询工具进行查询

注意这个节点的sql查询语句是来自上一个LLM节点的变量

image-20251207040047756.png

这一步没有问题的话就会正确输出查询的结果了

image-20251207040423605.png

节点4

这一步需要将查询出来的数据做成可视化的报表

用到的可视化工具是echarts

相当于要对上一节点查询出的结果进行处理,让数据的格式转化为echarts可识别的类型

在上一SQL查询工具节点后新建一个LLM节点

image-20251208133253133.png

提示词:

你是一个数据报表可视化专家,根据用户的输入和sql查询结果,可以将结果转换成可视化报表的格式,用json输出。
json的格式是:{"category":["A","B","C"], values:[1,2.3]}
两个数组的位置是一一对应的。
# 要求:
必须是json格式输出,不能有json以外的其他标识信息

用户的输入:
sql查询结果:(上一节点的查询结果)

然后对当前这个大模型节点的输出内容做一个结构化输出

image-20251208133958548.png

image-20251208134046104.png

然后测试看看输出是否结构化

节点5

这个节点的作用是将上一个LLM节点输出的结构化内容拼接成echarts需要的格式

接一个代码执行节点

image-20251208134606200.png

def main(arg1, arg2):
    return {
        "category": ";".join(arg1),
        "values": ";".join([str(x) for x in arg2])
    }

设置输出变量

image-20251208135034675.png

输出结果示例

image-20251208135119032.png

节点6

该节点进行echarts可视化

image-20251208135231074.png

按如下设置

image-20251208135313582.png

测试一下能不能正常输出

节点7

直接回复节点

image-20251208135538003.png

提示词:
查询的结果是:
(sql查询的结果)
----------------------
可视化:
(echarts输出的结果)

image-20251208135734507.png

tips

可用外部AI辅助

将表结构查出来丢给AI,让它生成可能的6个问题进行测试