dify+mysql的诗词助手

发布于:2025-03-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

数据库表结构:

数据库查询的http服务搭建:

流程引擎搭建:

开始,

HTTP查询数据库,

LLM数据分析,

直接回复,

效果测试:

下载链接:


数据库表结构:

数据库poetry中包含4张表,分别是poems,poems_author,poetry,poetry_author。

poems:

poems_author:

Poetry:

poetry_author:

通过执行desc指令,分别获取到4张表的表结构

desc poems;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int          | NO   | PRI | NULL    | auto_increment |
| author_id | int          | YES  |     | 0       |                |
| title     | varchar(255) | NO   |     | NULL    |                |
| content   | text         | NO   |     | NULL    |                |
| author    | varchar(255) | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

desc poems_author;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int          | NO   | PRI | NULL    | auto_increment |
| name    | varchar(255) | NO   |     | NULL    |                |
| intro_l | text         | YES  |     | NULL    |                |
| intro_s | text         | YES  |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+

desc poetry;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int          | NO   | PRI | NULL    | auto_increment |
| author_id  | int          | YES  |     | 0       |                |
| title      | varchar(255) | NO   |     | NULL    |                |
| content    | text         | NO   |     | NULL    |                |
| yunlv_rule | text         | YES  |     | NULL    |                |
| author     | varchar(255) | NO   |     | NULL    |                |
| dynasty    | char(1)      | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

desc poetry_author;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int          | NO   | PRI | NULL    | auto_increment |
| name    | varchar(255) | NO   |     | NULL    |                |
| intro   | text         | YES  |     | NULL    |                |
| dynasty | char(1)      | NO   |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+

数据库查询的http服务搭建:

通过搭建一个支持post请求的http服务,基于该服务实现SQL的查询结果输出。

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import pymysql
import uvicorn
from contextlib import contextmanager

app = FastAPI()

class SQLQuery(BaseModel):
    sql_query: str

@contextmanager
def get_db_connection(config):
    # 数据库连接的上下文管理器
    conn = None
    try:
        conn = pymysql.connect(**config)
        yield conn
    finally:
        if conn:
            conn.close()

@app.post("/execute_query")
async def execute_query(
    query: SQLQuery
):
    # 处理POST请求以执行SQL查询
    try:
        sql_queries = query.sql_query.strip()

        if not sql_queries:
            raise HTTPException(status_code=400, detail="Missing sql_query parameter")

        with get_db_connection(app.db_config) as conn:
            results = []
            with conn.cursor(pymysql.cursors.DictCursor) as cursor:
                for sql_query in sql_queries.split(';'):
                    if sql_query.strip():
                        cursor.execute(sql_query)
                        result = cursor.fetchall()
                        if result:
                            results.extend(result)
                conn.commit()
        return results
    except pymysql.Error as e:
        raise HTTPException(status_code=500, detail=f"数据库错误: {str(e)}")
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"服务器错误: {str(e)}")

if __name__ == '__main__':
    # 数据库配置
    app.db_config = {
        "host": "172.86.222.28",
        "user": "root",
        "password": "123456",
        "database": "poetry",
        "port": 3306,
        "charset": 'utf8mb4'
    }
    uvicorn.run(app, host='0.0.0.0', port=35005)

流程引擎搭建:

开始-->LLM-->Http请求-->LLM-->直接回复

开始,

LLM生成SQL,

第一个LLM实现将用户提问转化为SQL,模型选择qwen2.5-14b模型,

System里面输入数据库中表的结构,

# 你是数据分析专家,精通MySQL,能够根据用户的问题生成高效的SQL查询。

## 数据库表结构

### 1. poetry(唐诗宋诗表);
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| author_id | int(11) | YES | | 0 | |
| title | varchar(255) | NO | | NULL | |
| content | text | NO | | NULL | |
| yunlv_rule | text | YES | | NULL | |
| author | varchar(255) | NO | | NULL | |
| dynasty | char(1) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+

### 2. poetry_author(唐诗宋诗作者表);
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| intro | text | YES | | NULL | |
| dynasty | char(1) | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+

### 3. poems(宋词表);
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| author_id | int(11) | YES | | 0 | |
| title | varchar(255) | NO | | NULL | |
| content | text | NO | | NULL | |
| author | varchar(255) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+

### 4. poems_author(宋词作者表);
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| intro_l | text | YES | | NULL | |
| intro_s | text | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+

注意:dynasty字段存储的是缩写:S代表宋,T代表唐

USER中输入问答要求,
问题:开始/{x}sys.query
请严格按照以下要求回答:
1. 仅使用提供的表和字段
2. 输出内容直接给完整SQL,不要任何Markdown格式,不要有注释,不要有换行

HTTP查询数据库,

API链接http://10.1.12.10:35005/execute_query,请求模式为POST,

HEADERS设置Content-Type为application/json

BODY选择JSON

Json格式为,

{"sql_query": "LLM-生成SQL/{x}text"}

失败重试次数为3

LLM数据分析,

该模型选用qwen2.5-7b,

SYSTEM中设置如下,

# 数据分析专家工作指南

## 角色定位

专业的SQL数据分析专家,负责解读MySQL poetry数据库的查询结果:

## 核心规则

1. 直接分析已提供数据,默认数据已满足查询条件

2. 接受数据原貌,不质疑数据有效性

3. 无需二次筛选或验证数据范围

4. 空数据集统一回复"没有查询到相关数据"

5. 避免使用提示性语言

6. 分析结果以markdown格式输出

7. 整理sql查询结果,以markdown表格格式输出放置输出开头

8. 整理sql查询结果, 以echarts图表格式输出放最后,图表配置需要尽量简洁,不要有太多冗余的配置项输出格式如下:

```echarts
{
"title": {
"text": "示例图表",
"subtext": "ECharts 示例"
},
"tooltip": {
"trigger": "item",
"formatter": "{a} <br/>{b}: {c} ({d}%)"
},
"legend": {
"orient": "vertical",
"left": "left",
"data": ["A", "B", "C", "D"]
},
"series": [
{
"name": "示例数据",
"type": "pie",
"radius": "50%",
"data": [
{ "value": 335, "name": "A" },
{ "value": 310, "name": "B" },
{ "value": 234, "name": "C" },
{ "value": 135, "name": "D" }
],
"emphasis": {
"itemStyle": {
"shadowBlur": 10,
"shadowOffsetX": 0,
"shadowColor": "rgba(0, 0, 0, 0.5)"
}
}
}
]
}
```

9. 注意:如果sql查询结果为标量或者仅有一个结果,就取消Echarts图表。另外,根据结果自行决定使用不同的ECharts类型,eg: 柱状图、饼图、折线图、雷达图等。

## 分析报告规范

### 数据处理原则

1. 严格基于JSON数据集

2. 数据已预筛选,直接进行统计分析

3. 不进行数据条件的二次确认

### 报告结构要求

1. 数据概览

2. 详细分析

3. 结论部分

USER中填写,

数据分析

直接回复,

输出最终LLM的结果{x}text

效果测试:

可以基于数据库进行多表的查询汇总,输出结果,并以表格、柱状图等形式展示。

下载链接:

包括数据库、dify的DSL文件、数据库服务脚本https://download.csdn.net/download/qq_14845119/90482856