Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NL2SQLの世界
Search
Issei.Komori
March 13, 2025
Technology
0
300
NL2SQLの世界
第41回 JAWS-UG札幌 勉強会 登壇資料
https://jawsug-sapporo.connpass.com/event/343883/
Issei.Komori
March 13, 2025
Tweet
Share
More Decks by Issei.Komori
See All by Issei.Komori
mnt_data_とは?ChatGPTコード実行環境を深堀りしてみた
icck
0
190
MCPコードリーディングすると得られるもの
icck
1
71
Audio and Video Processing with Generative AI
icck
0
49
Postmanと仲良くなる。API簡易実行にしか使ってなかった初心者の第二歩目
icck
1
180
APIフレームワークを Lambdaで動かす
icck
1
120
Other Decks in Technology
See All in Technology
オープンソースのハードウェアのコンテストに参加している話
iotengineer22
0
490
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
2
7.2k
継続戦闘能⼒
sansantech
PRO
0
210
Machine Intelligence for Vision, Language, and Actions
keio_smilab
PRO
0
470
超簡単!RAGアプリケーション構築術
oracle4engineer
PRO
0
110
Things you never dared to ask about LLMs — v2
glaforge
1
480
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
12k
シンプルな設定ファイルで実現する AWS IAM Identity Center のユーザー管理と開発チームへの委譲 / Delegating AWS IAM Identity Center User Management with a Simple DSL
yamaguchitk333
3
530
Redmineの意外と知らない便利機能 (Redmine 6.0対応版)
vividtone
0
1.1k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
38k
iOS/Androidで無限循環Carousel表現を考えてみる
fumiyasac0921
0
120
Rebase エンジニアリング組織の現状とこれから
rebase_engineering
0
130
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
25
2.8k
Rails Girls Zürich Keynote
gr2m
94
13k
Designing Experiences People Love
moore
142
24k
For a Future-Friendly Web
brad_frost
178
9.7k
The Invisible Side of Design
smashingmag
299
50k
Balancing Empowerment & Direction
lara
1
83
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
460
How to Think Like a Performance Engineer
csswizardry
23
1.6k
A designer walks into a library…
pauljervisheath
205
24k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
How to train your dragon (web standard)
notwaldorf
92
6k
Transcript
NL2SQLの世界 生活協同組合コープさっぽろ 2025/03/14 小森一成(@icckx) 第41回 JAWS-UG札幌 勉強会
小森 一成(@icckx)
今日は生成AIのRAGの話です (みなさん、そろそろN回目?)
RAG(検索 拡張 生成) 生成AIが知るはずがない情報を、事前に検索して 指示プロンプトに得た検索結果を追加拡張してから、 テキストを生成する N回目だと思うので雑めに説明すると...
NL2SQL しってる方?✋ 本題
NL2SQL(Natural Language to SQL) 自然言語(ユーザーが普段使う言葉)で書かれた質問や命令を、 データベースから情報を取得するためのSQLクエリに変換する技術 別名:Text-to-SQL / Semantic Parsing
RAGの全体像 https://github.com/bRAGAI/bRAG-langchain/
今日のはなし https://github.com/bRAGAI/bRAG-langchain/
RAG: Vector / NL2SQL の違い Vector NL2SQL / Text-to-SQL /
Semantic Parsing わがはいは 猫 わがはいは 犬 猫 類似度 検索 1月の売上は? SQL 生成 自然言語から類似度が高いベクトルを検索 自然言語から最適なSQLを生成
RAG: Vector / NL2SQL の違い Vector わがはいは 猫 わがはいは 犬
猫 類似度 検索 自然言語から類似度が高いベクトルを検索 NL2SQL / Text-to-SQL / Semantic Parsing 1月の売上は? SQL 生成 【大きな違い】 SQLでデータ集計(SUM)できる ↓ 生成AIで数字のビックデータを 「柔軟に」扱える!!! SQLだから計算ハルシネーション なし!
knowledge base with structured data store Amazon Bedrock Amazon Redshift
+
knowledge base with structured data store 〜 AWS版のNL2SQLによるRAG構築手段 〜 Users
SQL 生成&実行 Amazon Bedrock Amazon Redshift 返答 DB/Table スキーマ定義 SQL 生成時のメタデータ SQL実行履歴 データの扱われ方を理解 Descriptions テーブルまたは列名へ説明拡張 Inclusions/exclusions SQL 生成の対象または除外にしたい テーブル名や列名を明示 Curated queries 事前に想定される質問と期待される SQL の情報をキュレーションされた クエリとして登録 GenerateQuery API : $2/1000 Query , Generative AI model selection not available Optional 参考:https://qiita.com/hayao_k/items/460bf6aa8b0424eb0d82
作成してみる。
Create User + GRANT → DB同期 CREATE USER "IAMR:KBロール名" WITH
PASSWORD DISABLE; GRANT SELECT ON sales TO "IAMR:KBロール名"; GRANT SELECT ON date TO "IAMR:KBロール名"; knowledge base Role A Amazon Redshift sales User Role A date ※ KBロール名ユーザーを作ることでで接続できます
実行してみる(マネジメントコンソールから) SELECT "date".month, SUM(public.sales.pricepaid) AS total_sales FROM public.sales JOIN public.date
ON public.sales.dateid = public.date.dateid GROUP BY "date".month; 17万件をサマリ
SQLはあっているが、Claudeが嘘をつかないかは別の話 あれ、10月より3月の売上のほうが高いよね ...
検索失敗も... SELECT SUM(pricepaid) AS total_sales FROM public.sales INNER JOIN public.date
ON public.sales.dateid = public.date.dateid WHERE public.date.month = 'Jan'; 1月の合計を教えてと伝えても、すべて大文字にな らず、検索が失敗した。 ※本当は”JAN”で検索してほしかった どうすべきか?
検索失敗の原因:値の仕様による検索失敗 SELECT SUM(pricepaid) AS total_sales FROM public.sales INNER JOIN public.date
ON public.sales.dateid = public.date.dateid WHERE public.date.month = 'Jan'; DBの値がJANとすべて大文字であり検索が失敗した。 どうすべきか?
Optionを追加....しても動かなかった monthとは 3文字で大文字と教えてみた 1月限定で実行すべき SQLを 指定してみた
解決方法1:システム的な指示プロンプトにする SELECT SUM(pricepaid) AS total_sales FROM public.sales INNER JOIN public.date
ON public.sales.dateid = public.date.dateid WHERE public.date.month = 'JAN'; エンドユーザーがつかわない 内部構造を知っているような自然言語指示 ↓ ”JAN” といった具合に、 ダブルクォーテーションでくくると SQL変換がやりやすいのか意図した動きになった 自然言語指示 指示拡張層 knowledge base できればやりたくない...
解決方法2:DB側の定義にコメントをつける COMMENT ON COLUMN public.date.month IS '3-letter uppercase month abbreviation
(e.g. JAN, FEB, MAR...)'; ↑ RedShift のTableにコメントを付けて同期した
knowledge base with structured data store 〜 AWS版のNL2SQLによるRAG構築手段 〜 Users
SQL 生成&実行 Amazon Bedrock Amazon Redshift 返答 DB/Table スキーマ定義 SQL 生成時のメタデータ SQL実行履歴 データの扱われ方を理解 Descriptions テーブルまたは列名へ説明拡張 Inclusions/exclusions SQL 生成の対象または除外にしたい テーブル名や列名を明示 Curated queries 事前に想定される質問と期待される SQL の情報をキュレーションされた クエリとして登録 GenerateQuery API : $2/1000 Query , Generative AI model selection not available Optional 参考:https://qiita.com/hayao_k/items/460bf6aa8b0424eb0d82 解決1 解決2 解決せず... 解決せず...
まとめ • 売上など集計したいビックデータなら NL2SQL ◦ 大量データを1度に扱える ◦ 数値計算ミスが絶対おきない • 文字列など、値を条件に分岐する
SQLは失敗リスク ◦ DB側をきれいな世界に持っていくと成功率向上 • お手軽にお試し可能 ◦ RedShift Serverless $0.00 / month(17万件、数十回の実行) ◦ KnowledgeBase $0.03 / month(数十回の実行)
NL2SQLの世界 生活協同組合コープさっぽろ 2025/03/14 小森一成(@icckx) 第41回 JAWS-UG札幌 勉強会