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
1.5k
0
Share
NL2SQLの世界
第41回 JAWS-UG札幌 勉強会 登壇資料
https://jawsug-sapporo.connpass.com/event/343883/
Issei.Komori
March 13, 2025
More Decks by Issei.Komori
See All by Issei.Komori
mnt_data_とは?ChatGPTコード実行環境を深堀りしてみた
icck
0
1.2k
MCPコードリーディングすると得られるもの
icck
1
160
Audio and Video Processing with Generative AI
icck
0
88
Postmanと仲良くなる。API簡易実行にしか使ってなかった初心者の第二歩目
icck
1
210
APIフレームワークを Lambdaで動かす
icck
1
150
Other Decks in Technology
See All in Technology
AWS認定資格は本当に意味があるのか?
nrinetcom
PRO
2
270
「責任あるAIエージェント」こそ自社で開発しよう!
minorun365
9
2k
ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~
gotalab555
4
1.7k
レビューしきれない?それは「全て人力でのレビュー」だからではないでしょうか
amixedcolor
0
330
The Journey of Box Building
tagomoris
4
2.7k
Data Hubグループ 紹介資料
sansan33
PRO
0
2.9k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
23k
EBS暗号化に失敗してEC2が動かなくなった話
hamaguchimmm
2
200
社内エンジニア勉強会の醍醐味と苦しみ/tamadev
nishiuma
0
210
Standards et agents IA : un tour d’horizon de MCP, A2A, ADK et plus encore
glaforge
0
170
自立を加速させる神器 - EMOasis #11
stanby_inc
0
140
Azure Static Web Apps の自動ビルドがタイムアウトしやすくなった状況に対応した件/global-azure2026
thara0402
0
410
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
680
The agentic SEO stack - context over prompts
schlessera
0
750
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
330
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
340
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
210
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
130
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
180
Designing for Timeless Needs
cassininazir
0
190
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札幌 勉強会