Slide 1

Slide 1 text

© 2024 Loglass Inc. 0 © 2024 Loglass Inc. LangChainと Supabaseを活用して、 RAGを実装してみた 宮本 淳志 2024.11.20

Slide 2

Slide 2 text

© 2024 Loglass Inc. 1 自己紹介 自動車整備士としてキャリアをスタートし、退職後カナダのバンクーバーへ渡航。その後、プログラ ミングを現地の学校で勉強した後に、機械学習エンジニアとして現地のスタートアップでエンジニア としてのキャリアをスタートさせる。 2年半カナダに滞在したのち、福岡へ移住。 福岡の受託開発会社でバックエンドエンジニアとして3年ほど勤務。バックエンド・フロント・インフ ラの経験を積む。 2024年10月に株式会社ログラスへクラウドエンジニアとして入社。 生成AI入門中 株式会社ログラス クラウドエンジニア 宮本 淳志 Atsushi Miyamoto

Slide 3

Slide 3 text

© 2024 Loglass Inc. 2

Slide 4

Slide 4 text

© 2024 Loglass Inc. 3 Loglassについて

Slide 5

Slide 5 text

© 2024 Loglass Inc. 4 Loglassについて

Slide 6

Slide 6 text

© 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

Slide 7

Slide 7 text

© 2024 Loglass Inc. 6 個人開発でAI Chatbotを開発していて、その過程でLangChainとSupabaseを使って、RAG(Retrieval Augmented Generation)を実装したので、その経験を共有したいと思います。 また開発の過程で、 GCP Vertex AI Agent BuilderからSupabaseへ乗り換えたので、その辺りもお話しできればと 思います。 実際に実務で活用してる、みたいなお話はできないのでご了承ください..! 00|背景 背景

Slide 8

Slide 8 text

© 2024 Loglass Inc. 7 01 RAGとは

Slide 9

Slide 9 text

© 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/

Slide 10

Slide 10 text

© 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を使用

Slide 11

Slide 11 text

© 2024 Loglass Inc. 10 02 Supabase Vector DBについて

Slide 12

Slide 12 text

© 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

Slide 13

Slide 13 text

© 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

Slide 14

Slide 14 text

© 2024 Loglass Inc. 13 03 GCP Vertex AI Agent Builderから Supabaseに乗り換えた話

Slide 15

Slide 15 text

© 2024 Loglass Inc. 14 ● 検証のために、コストが安いかつ迅速にRAGの仕組みを実 装したかった ○ Cloud Storageをデータソースとして指定可能 ○ ノーコードで構築可能 03|GCP Vertex AI Agent BuilderからSupabaseに乗り換えた話 そもそもなぜVertexAIを使用 していたか

Slide 16

Slide 16 text

© 2024 Loglass Inc. 15 Supabaseに乗り換えた理由 ● テナントごとにデータの管理をしたかった ○ Vertex AI Searchアプリ構築時に一つのデータ ストアしか紐付けできなかった ○ 別テナントのデータもまとめて管理すると、異なる テナントのデータに対してもアクセスできてしまう ので、情報が取得できてしまう懸念があった 03|GCP Vertex AI Agent BuilderからSupabaseに乗り換えた話

Slide 17

Slide 17 text

© 2024 Loglass Inc. 16 04 Supabase x LangChain を使ってRAGの実装

Slide 18

Slide 18 text

© 2024 Loglass Inc. 17 ● OpenAIのembeddingのモデルを指定 ○ ベクトル化に使用 ● Supabaseをベクトルデータベースとして指定 ● Supabaseで事前に作成してある、テーブルと functionを指定 04|Supabase x LangChainを使ってのRAGの実装 VectorStore作成 参考: https://js.langchain.com/docs/integrations/vectorstores/supabase/ #instantiation

Slide 19

Slide 19 text

© 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

Slide 20

Slide 20 text

© 2024 Loglass Inc. 19 04|Supabase x LangChainを使ってのRAGの実装 Document型

Slide 21

Slide 21 text

© 2024 Loglass Inc. 20 04|Supabase x LangChainを使ってのRAGの実装 保存内容 ● id ● content ○ 元々のテキスト ● metadata ○ domainId(テナント固有) ● embedding (vector) ○ contentがベクトル化されたもの

Slide 22

Slide 22 text

© 2024 Loglass Inc. 21 04|Supabase x LangChainを使ってのRAGの実装 検索 ● 受け取ったクエリ(質問)でベクトルデータベースに対して、検索をかける ○ metadataとして保存したdomainIdでフィルタリングすることで、該当のテナントデータにのみアクセスさせる

Slide 23

Slide 23 text

© 2024 Loglass Inc. 22 05 まとめと今後の展望

Slide 24

Slide 24 text

© 2024 Loglass Inc. 23 05|まとめと今後の展望 まとめと今後の展望 ● SupabaseとLangChainを組み合わせることで、サクッとRAGの実装ができる ● IDで強引にフィルタリングしていたが、ちゃんとRLS使っていきたい ○ NEONをメインDBとして使っているので、現状使えてない ■ https://neon.tech/ ● 来年こそ個人開発で収益出す

Slide 25

Slide 25 text

© 2024 Loglass Inc. 24