AI实战之地dify应用-nlp数据库查询agent助手的搭建与发布

基于MySQL的数据库查询agent

首先我们要有MySQL,可以查询一下别的地方怎么装

我这里装好拥有了,用了DBeaver去连接,现在新增一个数据库

复制代码
CREATE DATABASE dify_test;
USE dify_test;
CREATE TABLE student_grades (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_id VARCHAR(20) NOT NULL,
    student_name VARCHAR(50) NOT NULL,
    class_name VARCHAR(50) NOT NULL,
    subject VARCHAR(50) NOT NULL,
    score DECIMAL(5,2) NOT NULL,
    exam_date DATE NOT NULL,
    semester VARCHAR(50) NOT NULL,
    grade VARCHAR(50) NOT NULL,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL
);
复制代码
INSERT INTO student_grades (student_id, student_name, class_name, subject, score, exam_date, semester, grade, created_at, updated_at) VALUES 
('2023001', '李一', '高一(1)班', '数学', 85.00, '2023-09-15', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023002', '王二', '高一(1)班', '英语', 92.50, '2023-09-20', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023003', '张三', '高一(2)班', '物理', 78.00, '2023-10-05', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023004', '赵四', '高一(2)班', '化学', 88.00, '2023-10-10', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023005', '孙五', '高一(3)班', '生物', 95.00, '2023-11-01', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023006', '周六', '高一(3)班', '历史', 82.00, '2023-11-05', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023007', '吴七', '高一(4)班', '地理', 90.00, '2023-12-01', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023008', '郑八', '高一(4)班', '政治', 87.00, '2023-12-05', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023009', '冯九', '高二(1)班', '数学', 76.00, '2024-01-10', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023010', '陈十', '高二(1)班', '英语', 94.00, '2024-01-15', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023011', '褚十一', '高二(2)班', '物理', 89.00, '2024-02-01', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023012', '卫十二', '高二(2)班', '化学', 81.00, '2024-02-05', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023013', '蒋十三', '高二(3)班', '生物', 93.00, '2024-03-01', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023014', '沈十四', '高二(3)班', '历史', 86.00, '2024-03-05', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023015', '韩十五', '高二(4)班', '地理', 91.00, '2024-04-01', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023016', '杨十六', '高二(4)班', '政治', 84.00, '2024-04-05', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023017', '朱十七', '高三(1)班', '数学', 79.00, '2024-05-10', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023018', '秦十八', '高三(1)班', '英语', 96.00, '2024-05-15', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023019', '尤十九', '高三(2)班', '物理', 88.00, '2024-06-01', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023020', '许二十', '高三(2)班', '化学', 83.00, '2024-06-05', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023021', '何二十一', '高三(3)班', '生物', 92.00, '2024-07-01', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023022', '吕二十二', '高三(3)班', '历史', 85.00, '2024-07-05', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023023', '施二十三', '高三(4)班', '地理', 90.00, '2024-08-01', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023024', '张二十四', '高三(4)班', '政治', 87.00, '2024-08-05', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023025', '孔二十五', '高一(1)班', '数学', 77.00, '2023-09-25', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023026', '曹二十六', '高一(1)班', '英语', 95.00, '2023-09-30', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023027', '严二十七', '高一(2)班', '物理', 89.00, '2023-10-15', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023028', '华二十八', '高一(2)班', '化学', 82.00, '2023-10-20', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023029', '金二十九', '高一(3)班', '生物', 94.00, '2023-11-10', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023030', '魏三十', '高一(3)班', '历史', 86.00, '2023-11-15', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023031', '陶三十一', '高一(4)班', '地理', 91.00, '2023-12-10', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023032', '姜三十二', '高一(4)班', '政治', 84.00, '2023-12-15', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023033', '戚三十三', '高二(1)班', '数学', 78.00, '2024-01-20', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023034', '谢三十四', '高二(1)班', '英语', 96.00, '2024-01-25', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023035', '邹三十五', '高二(2)班', '物理', 88.00, '2024-02-10', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023036', '喻三十六', '高二(2)班', '化学', 83.00, '2024-02-15', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023037', '吴三十七', '高二(3)班', '生物', 93.00, '2024-03-10', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023038', '柏三十八', '高二(3)班', '历史', 85.00, '2024-03-15', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023039', '水三十九', '高二(4)班', '地理', 90.00, '2024-04-10', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023040', '窦四十', '高二(4)班', '政治', 87.00, '2024-04-15', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023041', '章四十一', '高三(1)班', '数学', 79.00, '2024-05-20', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023042', '云四十二', '高三(1)班', '英语', 96.00, '2024-05-25', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023043', '苏四十三', '高三(2)班', '物理', 88.00, '2024-06-10', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023044', '潘四十四', '高三(2)班', '化学', 83.00, '2024-06-15', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023045', '葛四十五', '高三(3)班', '生物', 92.00, '2024-07-10', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023046', '奚四十六', '高三(3)班', '历史', 84.00, '2024-07-15', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023047', '范四十七', '高三(4)班', '地理', 90.00, '2024-08-10', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023048', '彭四十八', '高三(4)班', '政治', 87.00, '2024-08-15', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023049', '郎四十九', '高一(1)班', '数学', 77.00, '2023-10-01', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023050', '鲁五十', '高一(1)班', '英语', 95.00, '2023-10-05', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023051', '韦五十一', '高一(2)班', '物理', 88.00, '2023-10-25', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023052', '昌五十二', '高一(2)班', '化学', 82.00, '2023-10-30', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023053', '马五十三', '高一(3)班', '生物', 94.00, '2023-11-20', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023054', '苗五十四', '高一(3)班', '历史', 86.00, '2023-11-25', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023055', '凤五十五', '高一(4)班', '地理', 91.00, '2023-12-20', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023056', '花五十六', '高一(4)班', '政治', 83.00, '2023-12-25', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023057', '方五十七', '高二(1)班', '数学', 78.00, '2024-01-30', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023058', '俞五十八', '高二(1)班', '英语', 96.00, '2024-02-01', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023059', '任五十九', '高二(2)班', '物理', 88.00, '2024-02-20', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023060', '袁六十', '高二(2)班', '化学', 83.00, '2024-02-25', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023061', '柳六十一', '高二(3)班', '生物', 92.00, '2024-03-20', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023062', '酆六十二', '高二(3)班', '历史', 85.00, '2024-03-25', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023063', '鲍六十三', '高二(4)班', '地理', 90.00, '2024-04-20', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023064', '史六十四', '高二(4)班', '政治', 87.00, '2024-04-25', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023065', '唐六十五', '高三(1)班', '数学', 79.00, '2024-05-30', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023066', '费六十六', '高三(1)班', '英语', 95.00, '2024-06-01', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023067', '廉六十七', '高三(2)班', '物理', 88.00, '2024-06-20', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023068', '岑六十八', '高三(2)班', '化学', 82.00, '2024-06-25', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023069', '薛六十九', '高三(3)班', '生物', 94.00, '2024-07-20', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023070', '雷七十', '高三(3)班', '历史', 86.00, '2024-07-25', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023071', '贺七十一', '高三(4)班', '地理', 91.00, '2024-08-20', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023072', '倪七十二', '高三(4)班', '政治', 84.00, '2024-08-25', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023073', '汤七十三', '高一(1)班', '数学', 78.00, '2023-10-10', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023074', '滕七十四', '高一(1)班', '英语', 96.00, '2023-10-15', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023075', '殷七十五', '高一(2)班', '物理', 88.00, '2023-11-01', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023076', '罗七十六', '高一(2)班', '化学', 83.00, '2023-11-05', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023077', '毕七十七', '高一(3)班', '生物', 93.00, '2023-11-30', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023078', '郝七十八', '高一(3)班', '历史', 85.00, '2023-12-01', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023079', '邬七十九', '高一(4)班', '地理', 90.00, '2023-12-30', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023080', '安八十', '高一(4)班', '政治', 87.00, '2024-01-01', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023081', '常八十一', '高二(1)班', '数学', 79.00, '2024-02-05', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023082', '乐八十二', '高二(1)班', '英语', 96.00, '2024-02-10', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023083', '于八十三', '高二(2)班', '物理', 88.00, '2024-03-01', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023084', '时八十四', '高二(2)班', '化学', 83.00, '2024-03-05', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023085', '傅八十五', '高二(3)班', '生物', 92.00, '2024-03-30', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023086', '皮八十六', '高二(3)班', '历史', 84.00, '2024-04-01', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023087', '卞八十七', '高二(4)班', '地理', 90.00, '2024-04-30', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023088', '齐八十八', '高二(4)班', '政治', 87.00, '2024-05-01', '2023-2024学年第二学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023089', '康八十九', '高三(1)班', '数学', 77.00, '2024-06-05', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023090', '伍九十', '高三(1)班', '英语', 95.00, '2024-06-10', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023091', '余九十一', '高三(2)班', '物理', 88.00, '2024-07-01', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023092', '元九十二', '高三(2)班', '化学', 82.00, '2024-07-05', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023093', '卜九十三', '高三(3)班', '生物', 94.00, '2024-07-30', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023094', '顾九十四', '高三(3)班', '历史', 86.00, '2024-08-01', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023095', '孟九十五', '高三(4)班', '地理', 91.00, '2024-08-30', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023096', '平九十六', '高三(4)班', '政治', 83.00, '2024-09-01', '2024-2025学年第一学期', '高三', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023097', '黄九十七', '高一(1)班', '数学', 78.00, '2023-10-20', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023098', '和九十八', '高一(1)班', '英语', 96.00, '2023-10-25', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023099', '穆九十九', '高一(2)班', '物理', 88.00, '2023-11-10', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023100', '萧一百', '高一(2)班', '化学', 83.00, '2023-11-15', '2023-2024学年第一学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023101', '李一', '高一(1)班', '数学', 90.00, '2024-03-15', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023102', '王二', '高一(1)班', '英语', 88.00, '2024-03-20', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023103', '张三', '高一(2)班', '物理', 85.00, '2024-04-05', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023104', '赵四', '高一(2)班', '化学', 92.00, '2024-04-10', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023105', '孙五', '高一(3)班', '生物', 55.00, '2024-05-01', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023106', '周六', '高一(3)班', '历史', 70.00, '2024-05-05', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023107', '吴七', '高一(4)班', '地理', 65.00, '2024-06-01', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023108', '郑八', '高一(4)班', '政治', 95.00, '2024-06-05', '2023-2024学年第二学期', '高一', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023109', '冯九', '高二(1)班', '数学', 60.00, '2024-07-10', '2024-2025学年第一学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00'),
('2023110', '陈十', '高二(1)班', '英语', 75.00, '2024-07-15', '2024-2025学年第一学期', '高二', '2026-02-03 08:00:00', '2026-02-03 08:00:00');

数据库表创建好了,数据也好了.回到dify去安装两个插件,一个是database,一个是echarts

复制代码
mysql+pymysql://root:123456@host.docker.internal:3306/dify_test

回到dify创建一个chatflow

这是默认的

把llm改为qwen3max

然后prompt写

复制代码
## 角色
你是一个专业的SQL查询生成器,负责根据用户查询创建标准的MySQL数据库SQL语句。

## 任务
根据以下问题,生成一个格式清晰、结构明确的JSON数组,其中每个元素是一条合法且性能优化的MySQL查询语句。

### 表信息
表名:student_grades(学生成绩信息表)

### 字段说明
- id: 主键
- student_id: 学号
- student_name: 学生姓名
- class_name: 班级
- subject: 科目
- score: 分数
- exam_date: 考试日期
- semester: 学期
- grade: 年级
- created_at: 记录创建时间
- updated_at: 记录更新时间

### 输出要求
1. 根据用户的问题,生成最多10条直接关联问题的SQL查询语句。
2. 每条SQL应从不同分析角度(如按科目、班级、学期、年级等维度)切入,确保覆盖多维统计需求。
3. 所有SQL必须语法正确、可执行,并注重性能优化(如避免SELECT *,合理使用索引字段等)。
4. 若问题涉及多维统计(例如"各班各科平均分"),请为每个统计维度单独生成子查询。
5. 对于全量数据查询,必须按semester(学期)进行聚合或排序。
6. 最终输出必须是纯JSON数组格式,以 ```json 开头,以 ``` 结尾,不包含任何额外解释或文本,其中每个元素必须是对象,且仅包含一个字段:`"sql"`**(字符串类型),格式示例:
   ```json
   [
     { "sql": "SELECT ...;" },
     { "sql": "SELECT ...;" }
   ]

请严格按照上述格式和要求生成响应。

然后再系统prompt下点击添加,添加用户提示词和助手提示词相当于给大模型一个例子

测试成功

在代码执行后添加输出,然后测试一下可以

添加一个迭代处理查询,循环查询

这时候就能设置迭代的输出了

处理循环结果

复制代码
def main(args) -> dict:
    return {
        "result": "".join(str(item) for item in args)
    }

测试一下

复制代码
import re
import json

def main(args: str) -> dict:
    # 默认返回值
    default_output = {
        "results": "",
        "ECHarts": "0",
        "chartType": "",
        "chartTitle": "",
        "chartData": "",
        "chartXAxis": ""
    }
    
    try:
        # 使用正则表达式提取被 ```json 和 ``` 包裹的内容
        match = re.search(r'```json\s*([\s\S]*?)\s*```', args)
        if not match:
            raise ValueError("输入字符串中未找到有效的 JSON 数据")
        
        # 提取 JSON 字符串
        json_str = match.group(1).strip()
        
        # 将 JSON 字符串解析为 Python 字典
        results_dict = json.loads(json_str)
    except Exception as e:
        # 如果解析失败,打印错误信息并返回默认输出
        print(f"解析失败: {e}")
        return default_output
    
    # 检查是否包含 ECHarts 字段
    if "ECHarts" not in results_dict:
        results_dict["ECHarts"] = "0"  # 默认设置为 "0"
    
    # 根据 ECHarts 的值动态检查图表相关字段
    if results_dict["ECHarts"] == "1":
        required_chart_fields = ["chartType", "chartTitle", "chartData", "chartXAxis"]
        for field in required_chart_fields:
            if field not in results_dict:
                results_dict[field] = ""  # 自动补全缺失字段为空字符串
    
    # 构造返回值
    return {
        "results": str(results_dict.get("results", "")),
        "ECHarts": str(results_dict.get("ECHarts", "0")),
        "chartType": str(results_dict.get("chartType", "")),
        "chartTitle": str(results_dict.get("chartTitle", "")),
        "chartData": str(results_dict.get("chartData", "")),
        "chartXAxis": str(results_dict.get("chartXAxis", ""))
    }
复制代码
### 角色
你是一个数据分析师,需要基于前一个模型生成的SQL语句及其执行结果,优先针对用户问题进行回答,确保回答内容紧扣主题不发散,同时对相关维度的数据进行分析,并以JSON格式输出给用户。

### 参数
- **用户输入**:{{#sys.query#}}
- **SQL 模型生成**:{{#llm.text#}}
- **SQL 查询结果**:{{#context#}}

### 图表使用场景
- 线性图:适用于展示趋势变化的数据,例如时间序列数据(如每月或每年的变化趋势)。
- 柱状图:适用于比较不同类别之间的数量或占比,例如各城市的占比情况。
- 饼状图:适用于展示整体组成部分及其比例,通常用于单维度的比例分布。

### 要求:
1. 优先回答用户问题,确保回答内容紧扣主题不发散。
2. 根据用户问题选择合适的线性图、柱状图或饼状图。
3. 将输出内容封装到JSON中,格式如下:
​```json
{
  "results": "用Markdown格式先回复用户问题,其他维度数据简单概括,但必须完整展示数据",
  "ECHarts": "1", // 如果需要生成图表,则为 "1";否则为 "0"
  "chartType": "线性图/柱状图/饼状图", // 图表类型(仅当 ECHarts 为 "1" 时提供)
  "chartTitle": "图表标题", // 图表标题(仅当 ECHarts 为 "1" 时提供)
  "chartData": "图表的数据,多个用;隔开", // 图表数据(仅当 ECHarts 为 "1" 时提供)
  "chartXAxis": "图表的X轴,多个用;隔开" // 图表的X轴数据(仅当 ECHarts 为 "1" 时提供)
}
​```

#### 注意事项:
- 如果查询结果适合生成图表,则将 ECHarts 设置为 "1",并补充 chartType、chartTitle、chartData 和 chartXAxis 字段。
- 如果查询结果不适合生成图表,则将 ECHarts 设置为 "0",并省略 chartType、chartTitle、chartData 和 chartXAxis 字段。
- 对于占比查询,必须使用饼状图进行展示,且在饼状图的 chartData 中返回百分比值。

添加条件分支

大功告成

测试全校各班平均成绩

然后可以点击发布了.

复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数据库分析助手</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            display: flex;
            flex-direction: column;
        }

        .header {
            background: rgba(255, 255, 255, 0.95);
            padding: 20px 0;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }

        .header-content {
            max-width: 1200px;
            margin: 0 auto;
            padding: 0 20px;
            display: flex;
            align-items: center;
            gap: 15px;
        }

        .logo {
            width: 40px;
            height: 40px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            border-radius: 8px;
            display: flex;
            align-items: center;
            justify-content: center;
            color: white;
            font-weight: bold;
            font-size: 20px;
        }

        h1 {
            color: #333;
            font-size: 26px;
            font-weight: 500;
        }

        .container {
            flex: 1;
            max-width: 1200px;
            width: 100%;
            margin: 30px auto;
            padding: 0 20px;
            display: flex;
            flex-direction: column;
        }

        .chat-container {
            background: white;
            border-radius: 12px;
            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
            flex: 1;
            display: flex;
            flex-direction: column;
            overflow: hidden;
            min-height: 500px;
        }

        .chat-messages {
            flex: 1;
            padding: 30px;
            overflow-y: auto;
            display: flex;
            flex-direction: column;
            gap: 20px;
        }

        .message {
            display: flex;
            gap: 12px;
            animation: fadeIn 0.3s ease-in;
        }

        @keyframes fadeIn {
            from {
                opacity: 0;
                transform: translateY(10px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        .message.user {
            flex-direction: row-reverse;
        }

        .avatar {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            flex-shrink: 0;
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: bold;
            color: white;
        }

        .message.user .avatar {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }

        .message.assistant .avatar {
            background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
        }

        .message-content {
            max-width: 70%;
            padding: 12px 18px;
            border-radius: 18px;
            line-height: 1.6;
            word-wrap: break-word;
        }

        .message.user .message-content {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border-bottom-right-radius: 4px;
        }

        .message.assistant .message-content {
            background: #f5f5f5;
            color: #333;
            border-bottom-left-radius: 4px;
        }

        .input-area {
            padding: 20px 30px;
            background: #fafafa;
            border-top: 1px solid #e0e0e0;
        }

        .input-container {
            display: flex;
            gap: 12px;
            align-items: flex-end;
        }

        #messageInput {
            flex: 1;
            padding: 12px 18px;
            border: 2px solid #e0e0e0;
            border-radius: 24px;
            font-size: 15px;
            font-family: inherit;
            resize: none;
            max-height: 120px;
            transition: border-color 0.3s;
        }

        #messageInput:focus {
            outline: none;
            border-color: #667eea;
        }

        #sendButton {
            padding: 12px 30px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border: none;
            border-radius: 24px;
            cursor: pointer;
            font-size: 15px;
            font-weight: 500;
            transition: transform 0.2s, box-shadow 0.2s;
        }

        #sendButton:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
        }

        #sendButton:active {
            transform: translateY(0);
        }

        #sendButton:disabled {
            opacity: 0.5;
            cursor: not-allowed;
            transform: none;
        }

        .welcome-message {
            text-align: center;
            padding: 60px 20px;
            color: #666;
        }

        .welcome-message h2 {
            font-size: 24px;
            margin-bottom: 10px;
            color: #333;
        }

        .welcome-message p {
            font-size: 16px;
        }

        .suggestions {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: 12px;
            margin-top: 30px;
        }

        .suggestion-card {
            background: white;
            padding: 16px;
            border-radius: 12px;
            cursor: pointer;
            transition: all 0.2s;
            border: 2px solid transparent;
        }

        .suggestion-card:hover {
            border-color: #667eea;
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(102, 126, 234, 0.2);
        }

        .suggestion-card h3 {
            font-size: 15px;
            color: #333;
            margin-bottom: 6px;
        }

        .suggestion-card p {
            font-size: 13px;
            color: #666;
        }

        ::-webkit-scrollbar {
            width: 8px;
        }

        ::-webkit-scrollbar-track {
            background: #f1f1f1;
        }

        ::-webkit-scrollbar-thumb {
            background: #ccc;
            border-radius: 4px;
        }

        ::-webkit-scrollbar-thumb:hover {
            background: #999;
        }
    </style>
</head>
<body>
    <div class="header">
        <div class="header-content">
            <div class="logo">DB</div>
            <h1>数据库分析助手</h1>
        </div>
    </div>

    <div class="container">
        <div class="chat-container">
            <div class="chat-messages" id="chatMessages">
                <div class="welcome-message">
                    <h2>👋 欢迎使用数据库分析助手</h2>
                    <p>我可以帮助您分析数据库性能、优化查询、设计数据结构等</p>
                    <div class="suggestions">
                        <div class="suggestion-card" onclick="sendSuggestion('如何优化慢查询?')">
                            <h3>🚀 查询优化</h3>
                            <p>如何优化慢查询?</p>
                        </div>
                        <div class="suggestion-card" onclick="sendSuggestion('数据库索引设计的最佳实践是什么?')">
                            <h3>📊 索引设计</h3>
                            <p>数据库索引设计的最佳实践是什么?</p>
                        </div>
                        <div class="suggestion-card" onclick="sendSuggestion('如何分析数据库性能瓶颈?')">
                            <h3>⚡ 性能分析</h3>
                            <p>如何分析数据库性能瓶颈?</p>
                        </div>
                    </div>
                </div>
            </div>
            <div class="input-area">
                <div class="input-container">
                    <textarea 
                        id="messageInput" 
                        placeholder="请输入您的问题..." 
                        rows="1"
                        onkeydown="handleKeyDown(event)"
                    ></textarea>
                    <button id="sendButton" onclick="sendMessage()">发送</button>
                </div>
            </div>
        </div>
    </div>
    <script>
        let isFirstMessage = true;

        function handleKeyDown(event) {
            if (event.key === 'Enter' && !event.shiftKey) {
                event.preventDefault();
                sendMessage();
            }
        }

        function sendSuggestion(text) {
            document.getElementById('messageInput').value = text;
            sendMessage();
        }

        function sendMessage() {
            const input = document.getElementById('messageInput');
            const message = input.value.trim();
            
            if (!message) return;

            // 如果是第一条消息,清除欢迎界面
            if (isFirstMessage) {
                document.getElementById('chatMessages').innerHTML = '';
                isFirstMessage = false;
            }

            // 添加用户消息
            addMessage(message, 'user');
            
            // 清空输入框
            input.value = '';
            input.style.height = 'auto';

            // 模拟助手回复
            setTimeout(() => {
                const responses = [
                    '我理解您的问题。针对数据库优化,我建议:\n\n1. 首先分析查询执行计划,找出性能瓶颈\n2. 合理创建索引,但避免过度索引\n3. 优化查询语句,避免SELECT *\n4. 考虑使用缓存机制减少数据库压力\n\n您需要针对哪个方面进行深入了解吗?',
                    '关于这个问题,让我为您详细分析:\n\n数据库性能优化是一个系统工程,需要从多个维度考虑。建议您从监控当前系统指标开始,识别出真正的性能瓶颈所在。',
                    '很好的问题!根据最佳实践,我建议您:\n\n• 定期进行数据库维护和优化\n• 监控关键性能指标\n• 建立合理的备份策略\n• 考虑读写分离和分库分表方案\n\n需要我详细讲解某个方面吗?'
                ];
                const randomResponse = responses[Math.floor(Math.random() * responses.length)];
                addMessage(randomResponse, 'assistant');
            }, 1000);
        }

        function addMessage(text, type) {
            const messagesContainer = document.getElementById('chatMessages');
            const messageDiv = document.createElement('div');
            messageDiv.className = `message ${type}`;
            
            const avatar = document.createElement('div');
            avatar.className = 'avatar';
            avatar.textContent = type === 'user' ? '我' : 'AI';
            
            const content = document.createElement('div');
            content.className = 'message-content';
            content.textContent = text;
            
            messageDiv.appendChild(avatar);
            messageDiv.appendChild(content);
            messagesContainer.appendChild(messageDiv);
            
            // 滚动到底部
            messagesContainer.scrollTop = messagesContainer.scrollHeight;
        }

        // 自动调整输入框高度
        document.getElementById('messageInput').addEventListener('input', function() {
            this.style.height = 'auto';
            this.style.height = Math.min(this.scrollHeight, 120) + 'px';
        });
    </script>
    
    <script>
        
 window.difyChatbotConfig = {
  token: 'jMrsD65xLeDqUxaD',
  baseUrl: 'http://localhost',
  inputs: {
    // You can define the inputs from the Start node here
    // key is the variable name
    // e.g.
    // name: "NAME"
  },
  systemVariables: {
    // user_id: 'YOU CAN DEFINE USER ID HERE',
    // conversation_id: 'YOU CAN DEFINE CONVERSATION ID HERE, IT MUST BE A VALID UUID',
  },
  userVariables: {
    // avatar_url: 'YOU CAN DEFINE USER AVATAR URL HERE',
    // name: 'YOU CAN DEFINE USER NAME HERE',
  },
 }
</script>
<script
 src="http://localhost/embed.min.js"
 id="jMrsD65xLeDqUxaD"
 defer>
</script>
<style>
  #dify-chatbot-bubble-button {
    background-color: #1C64F2 !important;
  }
  #dify-chatbot-bubble-window {
    width: 24rem !important;
    height: 40rem !important;
  }
</style>
<script>
 window.difyChatbotConfig = {
  token: 'JovcQ66zO1K6yyFZ',
  baseUrl: 'http://localhost',
  inputs: {
    // You can define the inputs from the Start node here
    // key is the variable name
    // e.g.
    // name: "NAME"
  },
  systemVariables: {
    // user_id: 'YOU CAN DEFINE USER ID HERE',
    // conversation_id: 'YOU CAN DEFINE CONVERSATION ID HERE, IT MUST BE A VALID UUID',
  },
  userVariables: {
    // avatar_url: 'YOU CAN DEFINE USER AVATAR URL HERE',
    // name: 'YOU CAN DEFINE USER NAME HERE',
  },
 }
</script>
<script
 src="http://localhost/embed.min.js"
 id="JovcQ66zO1K6yyFZ"
 defer>
</script>
<style>
  #dify-chatbot-bubble-button {
    background-color: #1C64F2 !important;
  }
  #dify-chatbot-bubble-window {
    width: 24rem !important;
    height: 40rem !important;
  }
</style>
</body>
</html>

下面是api方法

然后打开apifox测试一下接口

成功了

相关推荐
2301_780943841 小时前
第五阶段:高级主题
人工智能
knight_9___1 小时前
大模型project面试6
人工智能·python·agent·rag·mcp
Wilber的技术分享2 小时前
【大模型面试八股 2】Function Call、MCP、Skill的区别
人工智能·面试·职场和发展·大模型·llm·agent·智能体开发
OidEncoder2 小时前
工况适配:光电 / 磁电 / 电感编码器选型攻略
人工智能·机器人·自动化·电机
数据皮皮侠AI2 小时前
基于经济学季刊方法测算的中国城市蔓延指数
大数据·人工智能·笔记·数据挖掘·回归
QuestLab2 小时前
本地大模型部署工具实战手册②:Ollama实战——RTX 4060上从安装到跑起来
人工智能
石小石Orz2 小时前
给Claude增加状态栏显示:claude-hud保姆级教程
前端·人工智能·后端
2601_958352902 小时前
从模拟到数字全接口打通:A-59P 为通话设备提供灵活音频升级方案
人工智能·语音识别·嵌入式开发·ai降噪·回音消除
郑寿昌2 小时前
2026年AI新趋势:智能代理崛起
人工智能