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
370
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
270
MCPコードリーディングすると得られるもの
icck
1
81
Audio and Video Processing with Generative AI
icck
0
56
Postmanと仲良くなる。API簡易実行にしか使ってなかった初心者の第二歩目
icck
1
190
APIフレームワークを Lambdaで動かす
icck
1
120
Other Decks in Technology
See All in Technology
PostgreSQL 18 cancel request key長の変更とRailsへの関連
yahonda
0
120
Fabric + Databricks 2025.6 の最新情報ピックアップ
ryomaru0825
1
130
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.1k
20250623 Findy Lunch LT Brown
3150
0
850
M3 Expressiveの思想に迫る
chnotchy
0
100
SalesforceArchitectGroupOsaka#20_CNX'25_Report
atomica7sei
0
140
Amazon S3標準/ S3 Tables/S3 Express One Zoneを使ったログ分析
shigeruoda
3
460
実践! AIエージェント導入記
1mono2prod
0
160
BigQuery Remote FunctionでLooker Studioをインタラクティブ化
cuebic9bic
3
270
Snowflake Summit 2025 データエンジニアリング関連新機能紹介 / Snowflake Summit 2025 What's New about Data Engineering
tiltmax3
0
310
Абьюзим random_bytes(). Фёдор Кулаков, разработчик Lamoda Tech
lamodatech
0
330
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
How STYLIGHT went responsive
nonsquared
100
5.6k
Speed Design
sergeychernyshev
32
1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Scaling GitHub
holman
459
140k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
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札幌 勉強会