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
LangChainとSupabaseを活用して、RAGを実装してみた
Search
Atsushi Miyamoto
December 05, 2024
Technology
980
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LangChainとSupabaseを活用して、RAGを実装してみた
Supabase LW13 Tokyo MeetupのLT資料です!
Atsushi Miyamoto
December 05, 2024
More Decks by Atsushi Miyamoto
See All by Atsushi Miyamoto
Agentic RAG with LangGraph
atsushii
1
620
Asynqを使って、サクッと非同期処理を実現する
atsushii
0
650
Checkpointerを介して、DynamoDBに状態を保存してみた
atsushii
1
370
OOM発生時のトラブルシューティング Profilerを活用できるか調査してみた
atsushii
1
710
Other Decks in Technology
See All in Technology
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
2
1k
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.1k
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
0
160
Ruby::Boxでできること、Refinementsでできること
joker1007
3
400
サイバーセキュリティ概論 / Introduction to Cybersecurity
ks91
PRO
0
170
「気づいたら仕事が終わっている」バクラクAIエージェント本番運用の裏側 / layerx-bakuraku-aie2026
yuya4
19
11k
AI Testing Talks: Challenges of Applying AI in Software Testing: From Hype to Practical Use
exactpro
PRO
1
140
LLMと共に進化するプロセスを目指して
ymatsuwitter
12
3.5k
noUncheckedIndexedAccess、3時間、1万円。 / noUncheckedIndexedAccess, 3 Hours, 10,000 JPY.
kaonavi
1
320
Agentic Defenseとともにセキュリティエンジニアが輝き続けるには / How Security Engineers Can Keep Excelling with Agentic Defense
yuj1osm
0
120
Diagnosing performance problems without the guesswork
elenatanasoiu
0
170
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
280
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
250
It's Worth the Effort
3n
188
29k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
570
RailsConf 2023
tenderlove
30
1.5k
How to make the Groovebox
asonas
2
2.2k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
150
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Claude Code のすすめ
schroneko
67
230k
How to build a perfect <img>
jonoalderson
1
5.6k
Transcript
© 2024 Loglass Inc. 0 © 2024 Loglass Inc. LangChainと
Supabaseを活用して、 RAGを実装してみた 宮本 淳志 2024.11.20
© 2024 Loglass Inc. 1 自己紹介 自動車整備士としてキャリアをスタートし、退職後カナダのバンクーバーへ渡航。その後、プログラ ミングを現地の学校で勉強した後に、機械学習エンジニアとして現地のスタートアップでエンジニア としてのキャリアをスタートさせる。 2年半カナダに滞在したのち、福岡へ移住。
福岡の受託開発会社でバックエンドエンジニアとして3年ほど勤務。バックエンド・フロント・インフ ラの経験を積む。 2024年10月に株式会社ログラスへクラウドエンジニアとして入社。 生成AI入門中 株式会社ログラス クラウドエンジニア 宮本 淳志 Atsushi Miyamoto
© 2024 Loglass Inc. 2
© 2024 Loglass Inc. 3 Loglassについて
© 2024 Loglass Inc. 4 Loglassについて
© 2024 Loglass Inc. 5 今日話すこと 0. 背景 1. RAGとは
2. Supabase Vector DBについて 3. GCP Vertex AI Agent BuilderからSupabaseに乗り換えた話 4. Supabase x LangChainを使ってRAGの実装 5. まとめ Agenda
© 2024 Loglass Inc. 6 個人開発でAI Chatbotを開発していて、その過程でLangChainとSupabaseを使って、RAG(Retrieval Augmented Generation)を実装したので、その経験を共有したいと思います。 また開発の過程で、
GCP Vertex AI Agent BuilderからSupabaseへ乗り換えたので、その辺りもお話しできればと 思います。 実際に実務で活用してる、みたいなお話はできないのでご了承ください..! 00|背景 背景
© 2024 Loglass Inc. 7 01 RAGとは
© 2024 Loglass Inc. 8 01|RAGとは RAG(Retrieval Augmented Generation)の概要 大規模言語モデル(LLM)の出力を最適化するプロセス
LLMの応答生成前に外部の信頼できる知識ベースを参照して、回答の質を向上させることが可能 利点: • 最新の情報へのアクセス ◦ OpenAIのgpt-4o-2024-11-20のモデルの場合2023/10月カットオフ • 信頼性の強化 ◦ 出力へ参照元の資料のURLなども含めることが可能 • ハルシネーションの低減 ◦ 外部知識に基づいて回答を生成させるため、LLMが誤った回答をするリスクを軽減 ※参考: https://aws.amazon.com/what-is/retrieval-augmented-generation/
© 2024 Loglass Inc. 9 01|RAGとは RAGの基本構成 ※参考: https://aws.amazon.com/jp/blogs/news/a-practical-guide-to-im prove-rag-systems-with-advanced-rag-on-aws/
1. 外部データ(ドキュメント)をベクトル化して、ベクトル データベースへ保存 2. ユーザが何かしらの質問を投げる 3. 埋め込みモデルが質問をベクトル化 4. データベースから質問に類似したチャンクを検索 5. LLMへの入力コンテキスト構築 6. LLMが回答生成 → 今回はベクトルデータベースとして、Supabaseを使用
© 2024 Loglass Inc. 10 02 Supabase Vector DBについて
© 2024 Loglass Inc. 11 情報をデータオブジェクトの数値表現であるベクトルにして保存するデータ ベース 画像、テキストや音声などの非構造データをベクトル化して保存が可能 ベクトル化することで、非構造データに対して検索をかけることができる 02|Supabase
Vector DBについて Vector DBとは? • Semantic Search ◦ 正確なキーワードではなく、ユーザーのクエリの背後にある意味を解釈して 検索する方法 • Keyword Search ◦ 主に検索語とデータ内のテキストとの完全一致に基づいて、特定の単語やフ レーズを含む文書やレコードを検索方法 • Hybrid Search ◦ Semantic SearchとKeyword Searchの長所を組み合わせた検索方法 例: ベクトル化されたテキスト 参考: https://supabase.com/docs/guides/ai
© 2024 Loglass Inc. 12 PostgreSQL拡張(pgvector)を利用してベクトルDBとして の機能を追加している 使用したい場合は、ダッシュボードもしくはSQLで有効化するだ けでOK 様々なサードパーティツールと統合可能
• LangChain • Hugging Face etc… (初期費用もかからず無料で試せます 02|Supabase Vector DBについて SupabaseでのVector DBの活用 拡張機能を有効化 参考: https://supabase.com/docs/guides/ai
© 2024 Loglass Inc. 13 03 GCP Vertex AI Agent
Builderから Supabaseに乗り換えた話
© 2024 Loglass Inc. 14 • 検証のために、コストが安いかつ迅速にRAGの仕組みを実 装したかった ◦ Cloud
Storageをデータソースとして指定可能 ◦ ノーコードで構築可能 03|GCP Vertex AI Agent BuilderからSupabaseに乗り換えた話 そもそもなぜVertexAIを使用 していたか
© 2024 Loglass Inc. 15 Supabaseに乗り換えた理由 • テナントごとにデータの管理をしたかった ◦ Vertex
AI Searchアプリ構築時に一つのデータ ストアしか紐付けできなかった ◦ 別テナントのデータもまとめて管理すると、異なる テナントのデータに対してもアクセスできてしまう ので、情報が取得できてしまう懸念があった 03|GCP Vertex AI Agent BuilderからSupabaseに乗り換えた話
© 2024 Loglass Inc. 16 04 Supabase x LangChain を使ってRAGの実装
© 2024 Loglass Inc. 17 • OpenAIのembeddingのモデルを指定 ◦ ベクトル化に使用 •
Supabaseをベクトルデータベースとして指定 • Supabaseで事前に作成してある、テーブルと functionを指定 04|Supabase x LangChainを使ってのRAGの実装 VectorStore作成 参考: https://js.langchain.com/docs/integrations/vectorstores/supabase/ #instantiation
© 2024 Loglass Inc. 18 04|Supabase x LangChainを使ってのRAGの実装 データの保存 •
受け取ったURLからhtmlを取得 • 前処理 ◦ textに変換 ◦ 不要な文字列を置き換え • チャンク • テナント固有のidを含めたmetadata作成 ◦ Document型で扱う • Vectorに保存 ◦ 内部的にベクトル化されたコンテンツが 保存される 参考: https://js.langchain.com/docs/integrations/vectorstores/supabase/#instantiation
© 2024 Loglass Inc. 19 04|Supabase x LangChainを使ってのRAGの実装 Document型
© 2024 Loglass Inc. 20 04|Supabase x LangChainを使ってのRAGの実装 保存内容 •
id • content ◦ 元々のテキスト • metadata ◦ domainId(テナント固有) • embedding (vector) ◦ contentがベクトル化されたもの
© 2024 Loglass Inc. 21 04|Supabase x LangChainを使ってのRAGの実装 検索 •
受け取ったクエリ(質問)でベクトルデータベースに対して、検索をかける ◦ metadataとして保存したdomainIdでフィルタリングすることで、該当のテナントデータにのみアクセスさせる
© 2024 Loglass Inc. 22 05 まとめと今後の展望
© 2024 Loglass Inc. 23 05|まとめと今後の展望 まとめと今後の展望 • SupabaseとLangChainを組み合わせることで、サクッとRAGの実装ができる •
IDで強引にフィルタリングしていたが、ちゃんとRLS使っていきたい ◦ NEONをメインDBとして使っているので、現状使えてない ▪ https://neon.tech/ • 来年こそ個人開発で収益出す
© 2024 Loglass Inc. 24