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.4k
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
86
Postmanと仲良くなる。API簡易実行にしか使ってなかった初心者の第二歩目
icck
1
210
APIフレームワークを Lambdaで動かす
icck
1
150
Other Decks in Technology
See All in Technology
AIにより大幅に強化された AWS Transform Customを触ってみる
0air
0
280
OpenClawでPM業務を自動化
knishioka
2
370
AWS DevOps Agent or Kiro の使いどころを考える_20260402
masakiokuda
0
140
Bref でサービスを運用している話
sgash708
0
220
TUNA Camp 2026 京都Stage ヒューリスティックアルゴリズム入門
terryu16
0
670
GitHub Advanced Security × Defender for Cloudで開発とSecOpsのサイロを超える: コードとクラウドをつなぐ、開発プラットフォームのセキュリティ
yuriemori
1
120
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
1
230
15年メンテしてきたdotfilesから開発トレンドを振り返る 2011 - 2026
giginet
PRO
2
260
AIエージェント勉強会第3回 エージェンティックAIの時代がやってきた
ymiya55
0
220
JEDAI認定プログラム JEDAI Order 2026 受賞者一覧 / JEDAI Order 2026 Winners
databricksjapan
0
480
昔話で振り返るAWSの歩み ~S3誕生から20年、クラウドはどう進化したのか~
nrinetcom
PRO
0
140
Datadog で実現するセキュリティ対策 ~オブザーバビリティとセキュリティを 一緒にやると何がいいのか~
a2ush
0
190
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Docker and Python
trallard
47
3.8k
Producing Creativity
orderedlist
PRO
348
40k
Designing Powerful Visuals for Engaging Learning
tmiket
1
320
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
92
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
230
Designing Experiences People Love
moore
143
24k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
54k
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札幌 勉強会