Upgrade to Pro — share decks privately, control downloads, hide ads and more …

低コストで実現する社内文書RAG機能を搭載したAIチャットボット開発

Takanobu Nozawa
September 27, 2024

 低コストで実現する社内文書RAG機能を搭載したAIチャットボット開発

2024/09/27に開催された、PyCon JP 2024で発表した資料です。
- 公式HP:https://2024.pycon.jp/ja
- 発表タイムテーブル:https://2024.pycon.jp/ja/talk/JYG9FT

#Python #LLM #RAG #LangChain #LlamaIndex

Takanobu Nozawa

September 27, 2024
Tweet

More Decks by Takanobu Nozawa

Other Decks in Technology

Transcript

  1. 自己紹介 5 名前:野澤 哲照(Nozawa Takanobu) 所属:コネヒト株式会社 :たかぱい@takapy0210 PdM / ML

    Engineer, EngineeringManagerとして データ周辺の仕事+マネジメントをしています。 猫とマンションとラーメンが好きです。 PR:友人とPodcast配信してます。 wipfm
  2. VISIONが目指す先 9 KGI:希望出生数と予定出生数のギャップの解消 日本における希望出生数と予定出生数の間には 約0.24人の差分が存在します。 コネヒトはこの差分の大きな要因となる4つの 課題を事業領域に定め、両者のギャップの解消 を目指します。 希 望

    2.25人 = 予定 2.01人 − 0.24人 差分 参考:国立社会保障・人口問題研究所 2022年・第16回出生動向基本調査(結婚と出産に関する全国調査) ※2022年・第16回出生動向基本調査(結婚と出産に関する全国調査)の内、夫婦調査を参考
  3. コネヒトの事業 10 01 家計 の悩み 02 不妊 の悩み 03 育児

    の悩み 04 社会 の意識 4つの課題を事業領域に定め、 事業開発・アライアンスなど様々な手法で解決を目指す
  4. 26 弊社の場合 • 全社のAI活用促進 & 技術検証の2点が目的 • RAGの実装に関しては様々なHowをPros/Cons並べて検 討した ◦

    本当にやりたいことはなんなのか?を言語化し、そ こから逆算してHowを決める • 方向性が固まったら動くものを作ってフィードバック をもらう
  5. 29 実際にPros/Consを言語化したドキュメント 一例)RAGに関して、最初はSlack, Notion, Google Driveの3つのソース を検索対象にしようと提案が出た →いきなりすべての文書を対象にする必要性はあるのか?という問い 以下2点の理由から最初はNotionのみを検索対象にするよう推進 •

    RAG機能を追加してもまったく使われないor使えない可能性がある。 なので、はじめは最小限の機能(= MVP)でいいからクイックに機能 を作ってユーザーの反応を見るべき • 社内制度やMTGの議事録等、検索してまで知りたいニーズがある社内 の情報は大半のNotionに集約されている
  6. 30 実際にPros/Consを言語化したドキュメント 一例)RAGに関して、最初はSlack, Notion, Google Driveの3つのソース を検索対象にしようと提案が出た →いきなりすべての文書を対象にする必要性はあるのか?という問い 以下2点の理由から最初はNotionのみを検索対象にするよう推進 •

    RAG機能を追加してもまったく使われないor使えない可能性がある。 なので、はじめは最小限の機能(= MVP)でいいからクイックに機能 を作ってユーザーの反応を見るべき • 社内制度やMTGの議事録等、検索してまで知りたいニーズがある社内 の情報は大半のNotionに集約されている このようなプロセスを経ながら 推進していきました
  7. 31 実際にPros/Consを言語化したドキュメント 一例)RAGに関して、最初はSlack, Notion, Google Driveの3つのソース を検索対象にしようと提案が出た →いきなりすべての文書を対象にする必要性はあるのか?という問い 以下2点の理由から最初はNotionのみを検索対象にするよう推進 •

    RAG機能を追加してもまったく使われないor使えない可能性がある。 なので、はじめは最小限の機能(= MVP)でいいからクイックに機能 を作ってユーザーの反応を見るべき • 社内制度やMTGの議事録等、検索してまで知りたいニーズがある社内 の情報は大半のNotionに集約されている ここから実装部分の話をしていきます!
  8. 33 Slack Botを利用したシンプルなチャットボット • Slack Botを使って実現 • Slack上で特定メンションに反応し て回答してくれる •

    回答はスレッドに送られる • スレッド内では過去の会話を考慮 しながら会話できる
  9. 35 Slack Botの事前準備 事前準備で必要なもの • OpenAI API Key • Slack

    Bot tokens & App-level tokens Slack周りのtoken取得が結構面倒だが、手順は会社のブログ に載せているので、詳細はこちらを参照してください LangChainとOpenAI APIを組み合わせて、文脈を考慮して会話できるSlack Botを作った話
  10. 39 LangChainの提供コンポーネント 代表的なものを紹介 • Model I/O:共通のインターフェースを通じて各LLM API を使うことができる • Prompt

    Template:モデルへの入力を組み立てることがで きる • Memory:LLMとのやり取りを保持することができる • Chain:各モジュールを連結し実行することができる https://python.langchain.com/docs/how_to/#components
  11. 41 Memoryについて • LangGraphを用いる方法とLCEL(LangChain Expression Language) と呼ばれる表現言語を使う方法がある ◦ LangGraphを用いる方法 :https://python.langchain.com/docs/versions/migrating_memory/conversation_buffer_

    memory/#langgraph ◦ LCELを用いる方法 :https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/#lcel • 今回はLCELを用いた ◦ AIとの過去のやりとりはSlackのスレッドに残っているので、そこ からデータを取得すれば履歴は追えるため、プログラム側でキャッ シュしておく必要もない
  12. 52 そもそもRAGとは • Retrieval Augmented Generationの略称 • プライベートデータなど、モデルの学習に使われていないデータについ て推論できるようにするために、モデルに必要な情報をLLMに渡し知識 を補う手法の1つ

    • 基本的に以下2つのコンポーネントから構成される ◦ インデックス作成:ソースからデータを取り込み、インデックスを 作成する処理(基本的にはオフライン処理) ◦ 検索&生成:関連するデータをインデックスから検索し、LLMに投 げるプロンプトに渡し、回答を生成する処理(基本的にはオンライ ン処理)
  13. 67 低コストで実現させるポイント • 商用利用可能で公開されているEmbedding Modelを用いる ◦ 本当にミニマムでやるなら、モデルのサイズも小さい方がコスト的 にはお得(その分APIサーバのメモリも少なくて済むので) ◦ https://huggingface.co/spaces/mteb/leaderboard

    でモデルの サイズや性能が分かる • どうしても品質に納得がいかなかったら、大きいサイズのモデル or OpenAI Embedding などを検討する ◦ もちろん精度の良いモデルに切り替える以外にも、精度向上のHow はいくつかあるので、本当にベクトル検索(≒RAG)じゃなきゃダ メなの?などは要議論
  14. 78