🐾

最小限のリソースで作った社内向けSQL自動生成ツールの話

はじめに

データサイエンティスト(機械学習エンジニア)の須田です。
社内向けに、テーブルデータを考慮したSQL生成ツールをリリースしました。最小限のリソースで超絶スモールスタートで開発したため、同じような境遇にある方々に少しでも役立つ情報をお届けできればと思い、この記事を書きます。

チームの基本情報

  • メンバー構成:PM(兼エンジニア)1名、エンジニア2名の計3名
  • 稼働: 一人最大20%(全員が複数のプロジェクトを掛け持ちしているため)
  • 目標: 半期以内にターゲット選定、課題抽出、検証環境でのPoC、本番環境へのリリース

リリースまでの開発エピソード

仮説の設定と課題抽出

チームのミッションを元に、社内の課題解決に貢献できそうな分野で仮説を立てました。その後、実際にその分野でタスクを担当している11名の方々にヒアリングを行い、仮説が実際に存在しているかを検証しました。

業務フローの詳細も伺い、見えてきた課題は次の通りです。
「複雑な条件のクエリ作成・レビューに時間と工数がかかっている」

AIの精度は100%ではないため、「レビューは結局人間の目でもレビューした方が良いよね。だったらまずはクエリの作成を自動生成する方が良いのではないか」という議論がチーム内でありました。少しでも課題解決につなげるため、まずは「社内のデータの情報を考慮したSQLのクエリを自動で生成してくれるアプリ」を開発しよう!という流れになりました。

ソリューション


アーキテクチャとしては、以下の流れで構築しました。

  • AWSのECSでStreamlitを使ったアプリを作成
  • テーブルのDDLをS3に格納し、アプリ内で参照しプロンプトに組み込む
  • langchain_awsを使用してAWS Bedrockにプロンプトを投げ、結果をStreamlitで表示

(将来的には東京リージョンにあるDBと連携し、DDLを直接取得できるようにする予定です。)

設計のポイント

  • DDLのみを使用: 扱うデータがDDLのみであるため、データのハードルが低く、すぐに試せて本番環境に適用可能。
    • AthenaでDDLを出力してS3に格納するだけなので、追加データの対応もスムーズ
  • プロンプトベースの設計: RAGでは参照元情報のみを使うのに対し、プロンプトベースでは一般的なクエリの情報も考慮できる点が強み

PoCの時点でRAGを検証するが、うまくいかなかった

Knowledge Bases for AWS Bedrockを用いて検証した結果、以下の理由でRAGの採用を見送りました。

  • 一般的な知識を組み込んだ回答を生成したかったが、AWSサポートとの相談やプロンプトテンプレートのカスタマイズを試みても、望んだ結果は得られませんでした。

そのため、プロンプトエンジニアリングをベースにした設計を選びました。

UI(Streamlit)

UIはシンプルで、左側のサイドバーでクエリ対象のDBとテーブルを選択し、中央のテキストボックスに要件を入力して送信すると、下部にSQLクエリが出力される仕組みです。

最小限のリソースで開発するため、DBとテーブルは選択式にしましたが、今後は自然言語で読み取れるように改良したいと考えています。

精度の評価

出力されたSQLクエリはG-Evalを使用して5段階で評価しました。詳細については別の記事で紹介予定ですので、元論文のリンクを貼っておきます。
https://arxiv.org/abs/2303.16634

成果と学び

ユーザーの反応

  • 複雑な条件指定を含むクエリ作成が楽になったとの声をいただきました。
  • ターゲット以外の方々からも使用したいという声があり、利用の拡大を感じています。
  • DB.TABLE選択式ではなく、自然言語で読み取ってほしいという要望もあり、今後の改善点として考えています。
  • 既存のクエリテンプレートを考慮できる機能の追加を希望する声もありました。

今はまだ使用ユーザーが少ないですが、これからのフィードバックを元に、プロダクトを改良し、多くの方に使っていただけるように努力していきます。

今後の展望

機能の拡張計画

  • 機能検討

    • 質問履歴の保持:過去のやり取りを参照して効率化
    • 会話のクリア:リセット機能でスムーズに再スタート
    • 使用ユーザーごとの履歴保持:個別の利用状況を反映
    • DB.TABLEのレコメンド:入力内容に基づいた最適なテーブルを提案
    • テンプレートの使用:テーブルや案件ごとに必要な条件を考慮した出力
  • 改善機能

    • ユーザーログイン機能
    • 動作速度の向上
    • 条件の固定設定
    • 精度の向上

DB.TABLEのレコメンドは多くのリクエストを受けており、今期中のリリースを目指して検証を行っています!

おわりに

いかがでしたでしょうか?
3人での開発、稼働が20%という制約の中で、開発期間にも限りがありましたが、なんとかリリースに至りました。
現時点では最低限の機能しか実装されていませんが、これから更にプロダクトを育てていく予定です。
新しい機能が追加されたらまた記事を更新しようと思っていますので楽しみにお待ちいただけると嬉しいです。

最後に、AIで作成したイメージキャラクターの画像を紹介します!(肉まんに見えるかもしれませんが、お団子です)かわいくないですか?^^

ここまでお読みいただき、ありがとうございました。

D2C m-tech

Discussion