LangChainとWorkers AI / Vectorizeを使ってイベント情報RAGを作ってみた話

1.8K Views

February 26, 24

スライド概要

Workers Tech Talks in Osaka #1の資料です

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

LangChainと Workers AI / Vectorizeを使って RAGを作ってみた話 Workers Tech Talks in Osaka #1

2.

Hidetaka Okamoto (@hidetaka_dev) - WordCamp Kyoto 2017 WordCamp Kansai 2024 Stripe DevRel AWS Samurai 2017 Alexa Champions https://hidetaka.dev

3.

RAG Retrieval Augmented Generation 検索 によって 拡張 された 生成 処理

4.

RAGの処理フロー

5.

要はこういうこと

6.

前提知識と質問をプレースホルダーにする

7.

RAGに「ベクトル検索」は必須じゃない ● {context} に追加情報を動的に追加できればOK ● 検索APIやDBへのクエリ結果を利用することもできる ● その場合、 「入力された質問文」を 「検索クエリ」に変換するLLM API呼び出しを追加する ● ただし「効率的な回答生成」にはベクトル検索が効果的

8.

contextに「必要な情報を詰め込む」 ● LLMには「トークン数制限」がある ● {context}情報が多すぎると、制限に引っかかる恐れがある ○ ● ● 詳細に解説している記事ほど、contextに使い辛い 「関係性の高い部分だけ」を{context}に渡したい ○ 記事を細かく分割 ○ 質問に関係性の高い部分だけを取得する 「関連性・類似性」で検索できる、ベクトル検索が選ばれやすい

9.

RAGアプリ開発のポイント ● {context} に効率よく参考情報を詰め込む ○ 文章の分割・再構成 ○ 検索手法の検討 ● 言語やユースケースにあったLLMを採用する ● 検索や回答生成時間の短縮と、 Event Streamを利用したインタラクションの提供

10.

作ってみたもの

12.

カンファレンス セッション情報アプリ - Cloudflare Workers AI - Cloudflare Vectorize - Cloudflare Workers + Hono(v4) + LangChain.js https://github.com/hideokamoto/react-wordpress-template

13.

Step1: データのインデックス Step2: RAGアプリの構築

14.

Step1: データのインデックス Step2: RAGアプリの構築

15.

WordPressから データを取得

16.

HTMLタグや 画像など、 検索に利用しない 情報を削除 + 情報を 文字数などで 分割する

17.

https://www.langchain.com/

18.

LangChain.jsで具体的な処理を抽象化 ● テキストの分割: TextSplitter クラス ● 保存する文書データ: Document クラス ● ベクトルデータへの変換: Embeddingsクラス ● ベクトルDBへの保存処理: VectorStore クラス ● 検索処理: Retriever クラス ● 文章生成: LLM / Chat クラス ● etc..

19.

事前処理の流れ(ざっくり)

20.

Step1: データのインデックス Step2: RAGアプリの構築

21.

RAGの処理フロー(おさらい)

22.

LangChainが 処理を管理する

23.

RunnableXXXで プロンプトや モデル・引数を 指定

24.

RunnableMapで、 検索結果と回答文 両方を返す

25.

Honoの jsxRendererと HTMLモジュールで GUIを作成

26.

Q: Workers AIのモデル、 日本語不得意では? A: 70%くらいは頑張ってくれる & 保険で翻訳処理も用意した

28.

Q: Pages使わないの? A: Vectorizeが現状Bindできない

29.

作ってみた感想 ● 「それっぽいレコメンド」はしてくれる ○ ● 5回中3回は「まぁそのセッション推すよね」となる印象 事前処理を頑張れば、精度は10 - 20%くらいあげれる 「この検索結果はプロンプトに使えるか?」で検証しよう ● 70%の精度ではproductionは難しい ○ スピーカーとセッションタイトルがあべこべになるケースも ○ Vectorize検索結果を返すだけなら、70%〜でもいけるかも?

30.

Q: なんでそんなに頑張ってるの? A: 自分の過去記事・資料を活かしたい

31.

過去記事が増えすぎて把握しきれていない ● ● 個人ブログで1,000記事、Stripe Qiitaで200+記事 + 登壇資料 etc.. ○ 「この説明書いたのどの記事だっけ・・・?」 ○ 「前に書いた記事に古い情報あるか調べたい」 ○ 「過去記事を組み合わせた記事作りたい」 全文検索( Algolia / OpenSearch )とベクトル検索を活用したい ○ まずはテキスト記事から ○ 画像(キャプチャ)やPDF資料も将来的には

32.

関西でも LLM / RAGの話がしたい!

33.

Thank you! - x.com/@hidetaka_dev - wp.org/hideokamoto - hidetaka.dev