🤖

Difyのテンプレートを改良してSQLを作成/解説させるエージェントを作成してみた

2024/08/15に公開

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文を入れたら日本語で解説してくれる。

https://x.com/gijigae/status/1813485596620492910

作成したもの

データベースの種類、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をアップロードし、それを読み込ませた上で、作成/解読させるようにしたいですね!

株式会社QED AIブログ

Discussion