🤖
Difyのテンプレートを改良してSQLを作成/解説させるエージェントを作成してみた
Dify上では、アプリの作成を用意にするために様々なテンプレートが用意されています。
今回は、SQLを作成してくれる、SQL Creator を使って、もっとリッチなSQL作成ツールを作ろう思います。
現行のSQL Creater
データベースの、type (MySQL, SQL Server, PostgreSQL)などを選び、その上で作って欲しいSQLをinputで指示する構成となっている。
例) MySQLを選び、以下のように指示する。
カラム名「社員区分」のデータが、アルバイトである、ユーザーを検索したい
# テーブル名
User
# テーブル構成
・ID
・社員名
・社員区分
・所属部門
・created_at
・updated_at
すると、以下のように正しいSQLを出力してくれました。
SELECT * FROM User WHERE 社員区分 = 'アルバイト';
現行のSQL Createrとやりたいこと
現行のSQL Createrの仕様
- データベースのtypeを選ぶ
- SQL文の作成のみ
- 作って欲しいSQL文への指示の出し方の自由度が高い
やりたいこと
- データベースのtypeを選び、関連するDDL(データベース定義書)もアップロードできるようにする
- SQL文の作成と、SQL文の解読作成を両方やってくれる
- 後者のイメージとしては、既にあるSQL文を入れたら日本語で解説してくれる。
作成したもの
データベースの種類、SQL文を作成or解読モードを選択し、自由記述に説明(SQL文を作成を選択の場合は、SQL文をベタ貼り)を入力、テーブル構造を入力することで、タスクをこなしてくれるエージェントを作成しました!
DSLはこちらです。
DSL
app:
description: SQLを生成/ または解読します。
icon: 🤖
icon_background: null
mode: workflow
name: SQL Creator(改良版)
kind: app
version: 0.1.1
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
image:
enabled: false
number_limits: 3
transfer_methods:
- remote_url
- local_file
opening_statement: ''
retriever_resource:
enabled: false
sensitive_word_avoidance:
configs: []
enabled: false
type: ''
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
isInIteration: false
sourceType: if-else
targetType: llm
id: 1723610158385-true-llm-target
source: '1723610158385'
sourceHandle: 'true'
target: llm
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
sourceType: llm
targetType: end
id: 17236113185300-source-1723611740384-target
source: '17236113185300'
sourceHandle: source
target: '1723611740384'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
sourceType: start
targetType: if-else
id: start-source-1723610158385-target
source: start
sourceHandle: source
target: '1723610158385'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
sourceType: llm
targetType: end
id: llm-source-end-target
source: llm
sourceHandle: source
target: end
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
sourceType: if-else
targetType: llm
id: 1723610158385-false-17236113185300-target
source: '1723610158385'
sourceHandle: 'false'
target: '17236113185300'
targetHandle: target
type: custom
zIndex: 0
nodes:
- data:
selected: true
title: START
type: start
variables:
- default: ''
description: null
hint: null
label: データベースの種類
max_length: null
options:
- MySQL
- SQL Server
- PostgreSQL
- BigQuery
- Snowflake
required: true
type: select
variable: database_type
- label: 選択
max_length: 48
options:
- SQLを作成
- SQLを解読
required: true
type: select
variable: opiton
- label: 自由記述
max_length: null
options: []
required: true
type: paragraph
variable: default_input
- label: テーブル構造(DDLでもOK)
max_length: null
options: []
required: false
type: paragraph
variable: table_structure
height: 167
id: start
position:
x: -67
y: 282
positionAbsolute:
x: -67
y: 282
selected: true
type: custom
width: 243
- data:
context:
enabled: false
variable_selector: null
memory: null
model:
completion_params:
frequency_penalty: 0
max_tokens: 512
presence_penalty: 0
stop: []
temperature: 0
top_p: 1
mode: chat
name: gpt-4
provider: openai
prompt_template:
- id: 82a945fb-233e-4336-a238-7c69864bd974
role: system
text: 'あなたは、ユーザーが{{#start.default_input#}}に入力した 文章を解読して、データベース種類 {{#start.database_type#}}と、テーブル構造{{#start.table_structure#}}基づいてSQLを作成する、SQLジェネレーターです。
'
- id: 2918a515-9b59-44a9-a0c4-eb7f0da3e593
role: assistant
text: 日本語
- id: 95e8c7d0-4ef1-44b0-a0f6-200bd8fab74a
role: user
text: SQL文を生成した後に、生成したSQL文を解説してください。
selected: false
title: SQL作成
type: llm
vision:
enabled: false
height: 97
id: llm
position:
x: 926
y: 176
positionAbsolute:
x: 926
y: 176
selected: false
type: custom
width: 243
- data:
outputs:
- value_selector:
- llm
- text
variable: result
selected: false
title: SQL文返す
type: end
height: 89
id: end
position:
x: 1347
y: 176
positionAbsolute:
x: 1347
y: 176
selected: false
type: custom
width: 243
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: is
id: 99533033-aa8e-4194-95f6-b5dfa4f94b7b
value: SQLを作成
varType: string
variable_selector:
- start
- opiton
id: 'true'
logical_operator: and
desc: ''
selected: false
title: IF/ELSE
type: if-else
height: 125
id: '1723610158385'
position:
x: 369
y: 282
positionAbsolute:
x: 369
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
context:
enabled: false
variable_selector: null
desc: ''
memory: null
model:
completion_params:
frequency_penalty: 0
max_tokens: 5001
presence_penalty: 0
stop: []
temperature: 0
top_p: 1
mode: chat
name: gpt-4
provider: openai
prompt_template:
- id: 82a945fb-233e-4336-a238-7c69864bd974
role: system
text: 'あなたは、ユーザーが{{#start.default_input#}}に入力した SQL文から、データベース種類{{#start.database_type#}}と、テーブル構造{{#start.table_structure#}}に基づいてステップバイステップでコードごとに解説する
SQL 解読者です。
'
- id: a4ae0d52-eb71-463a-a0fa-225753389046
role: assistant
text: 日本語
- id: 1a1131b6-e7f3-42dd-86b9-98ad603ad829
role: user
text: SQLを出力した後、SQL文をコードごとにわかりやすく解説してください。
selected: false
title: SQL解読
type: llm
variables: []
vision:
enabled: false
height: 97
id: '17236113185300'
position:
x: 926
y: 428.00390625
positionAbsolute:
x: 926
y: 428.00390625
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
- data:
desc: ''
outputs:
- value_selector:
- '17236113185300'
- text
variable: result
selected: false
title: SQL解読文返す
type: end
height: 89
id: '1723611740384'
position:
x: 1347
y: 428.00390625
positionAbsolute:
x: 1347
y: 428.00390625
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 243
viewport:
x: 434.44893476272705
y: 282.1567144424356
zoom: 0.7192811456241748
SQLを解読
複雑なSQLを入れるとステップパイステップで解説してくれます。
続き
SQLを作成
作りたいSQLを入れると作成してくれて、さらに解説もしてくれます。もちろんSQLをコピペできます。
今後の展望
DDLをアップロードし、それを読み込ませた上で、作成/解読させるようにしたいですね!
Discussion