Difyで超手軽にRAGを構築。アソビュー代表の著書『弱者の戦術』のクイズ出題Botを作ってみた話

この記事はアソビュー! Advent Calendar 2024 の25日目(裏面)です。

アソビュー!CPOの横峯(@tyokomine)です。
今年は裏面のラストにご指名いただいたので裏面っぽく遊び要素を入れた記事を書いてみました。

はじめに

日々進化し続けるAI技術を活用することは、いまや企業が成長を続けるうえで欠かせない要素となりました。しかし、実際に取り組もうとすると「どこから手を付ければいいのか」「自社のリソースで本当に構築できるのか」といったハードルを感じることも多いのではないでしょうか。

そこで本記事では、気軽にどんどん生成AIを実践し、事例を積み重ねていくための具体的なアプローチとして、オープンソースのDifyを活用したRAG(Retrieval-Augmented Generation)構築による事例を紹介します。RAGは、特定の知識を持ったLLMを扱いやすいため、社内ドキュメントやマニュアルなどを効率的に活用できるのが魅力。さらにDifyならローカル環境や社内ネットワーク上で、簡単にチャットBotや応用アプリを構築できます。

本記事を通じて、「RAGを用いた内製LLM」は決してハードルが高くないという点をお伝えするとともに、具体的な構築例や運用のヒントもご紹介します。より身近な手段で導入を進め、自社ならではの活用事例をどんどん創出していきましょう。

RAGとは

この記事だけ見ていただいてもなんとなく理解していただたくため前提知識を簡単に解説しておきます。
RAGは、大規模言語モデル(LLM)の推論に、外部の情報ソースを組み合わせる手法です。モデル単体が持つ知識だけでなく、ドキュメントやデータベース、あるいはAPIなどの外部情報を必要に応じて参照することで、特定ドメインに特化した回答を生成できるのが特徴です。

一般的なLLMとの違いと強み

  • 特定ドメインの知識を組み込める

    • 汎用的なLLMでは答えられない業務や社内限定の情報を扱える。
  • 更新が容易

    • ドメイン知識をどこにどう格納するかを管理すれば、モデルを再学習しなくても最新の情報を反映できる。
  • セキュリティ面の柔軟性

    • 外部APIを使わずオンプレで構築すれば、機密性の高いデータを扱う際にもリスクを抑えられる。

RAGの活用事例

  • FAQ対応:顧客問合せや社内問い合わせを自動化
  • ナレッジ活用:過去の議事録や仕様書などをリファレンスとして活用
  • 教育・研修ツール:社内ドキュメントを学習コンテンツにして新人研修を効率化

などなどがあると思います。

Difyとは

Difyは、オープンソースのLLM開発支援ツールであり、ローカルまたはクラウド環境で気軽にLLMアプリを立ち上げられるのが特徴です。GUIでの操作や簡単な設定ファイルの編集だけで、チャットBotやドキュメント検索などを実装できます。

dify.ai

簡易構築できる理由

  • Dockerなどを使って簡単に起動できる
  • GUI管理画面がわかりやすい
  • EmbeddingsやVector Storeを扱う機能が標準で用意されている

必要な知識・スキル

  • Dockerやコンテナの基本的な取り扱い ※ローカルで立ち上げる場合のみ
  • LLMに関する基礎理解(基本的なPrompt設計など)

Difyを用いてRAGを構築する流れ

弊社では、代表・山野の著書『弱者の戦術』を入社時に全社員へ配布し、会社の歴史や理念、考え方を共有しています。 多くの社員が一度は読んでいるものの、読み返す機会が少なく、どの程度理解が定着しているか把握しづらいという課題がありました。
また、コロナ禍でV字回復を経験した社員とそうでない社員とでは、共通の認識や体験レベルに差が生じる可能性もあります。
そこで、この著書を題材にクイズを作成し、毎日Slack上に投稿することで、楽しく復習しながら理解を深めてもらうことを考えました。クイズ形式にすることで、著書の内容を気軽に思い出すきっかけを作り、考え方のさらなる浸透を期待しています。

以下が実際に作成したステップです。

  1. 対象コンテンツ(著書)の準備

    • PDFやテキストファイルなど、著書の電子データを用意。
  2. Difyをローカルで立ち上げる

    • githubからclone
    • docker compose up -d
      これだけでlocalで立ち上がります。ローカルでRAG作り放題はすごすぎる。。
      ※環境変数などは修正してください
      docker触ったことある方なら、この画面表示するまでたぶん10分くらいでいけます
  3. インデックス化(Embeddingsの作成)

    • ナレッジベースにファイルをアップロードする
    • なんとこれだけでEmbeddingを生成してくれてベクトル検索可能になります
      ナレッジの設定画面
  4. DifyでBotを作成

    • テンプレートから作成
    • 知識取得
    • プロンプト内でコンテキスト読み込んでLLMで出力
    • ストックのためスプレッドシートにHTTPリクエストで出力
  5. SlackBot作成

    • スプレッドシートからGASでSlackに投稿

初期運用の感想・フィードバック

実際の投稿はこちら

サイレントで投稿してあとから告知したので、なにこれぇがついてます。

朝9時に問題を投稿し12:30に回答が投稿されるようにしました。

そこそこリアクションがあったのと、生成AIで作成していることへの驚きがありました。
また社内で生成AIを活用したいと思っているメンバーからどうやって作ったかの質問がありました。推進したいと思ってる人が反応してくれるのはうれしいですね。

ハルシネーションへの対処

DifyでBotを構築してしまえば、クイズを作成することは5秒でやってくれます。 しかし、一定割合でハルシネーションが起きたり、明らかに社内では使っていない言葉で記載されることがありました。 この問題に対処するためDifyから直接Slackになげるのではなくて、スプレッドシートに一度貯めて、内容を確認してからslackに投稿するようにしています。

問題の精度、出し方はモデルやEmbeddingの作り方でかなり変化が見られました。 いくつかのモデルで試してみることをおすすめします。

今後の応用アイデア

ここまで簡単にRAGを作れるようになると、実務レベルで様々な応用ができると思っています。

  • 弊社マネジメントの心得を持ったマネージャー向けコーチChat Bot
  • よくあるエンジニアへの質問集を学ばせた問い合わせ対応Bot

あたりは今検討中のものです。

まとめ

AIを活用したい!けどどこから始めればいいのか、社内で推進できるかなどの懸念から、一歩を踏み出せないケースも少なくないと思います。本記事では、そのようなハードルを下げるアプローチとして、RAGとオープンソースのDifyを組み合わせた方法をご紹介しました。

RAGを活用すると、社内や自社ドメインの専門知識を取り込んだLLMを内製できるため、既存のナレッジをより有効に活用できます。一方、Difyはローカルやプライベート環境でも簡単に立ち上げられ、「とにかく試してみよう」というスモールスタートに非常に向いています。具体的な事例として、著書をベースにしたクイズBotの構築事例を紹介しました。

本記事をきっかけに、AI活用へ向けた取り組みが「思ったよりも簡単に始められる」という実感を持っていただけたら幸いです。実際に運用しながら小さな成功体験を積み重ねることで、自社特有の課題を解決する独自AIソリューションがより一層育っていくはずです。ぜひ、ここで得た知見をもとに、自社の成長を加速させるためのAI活用を前向きに検討してみてください。

弊社で一緒に推進したい!と思っていただけた方はカジュアル面談でお話しましょう。

www.asoview.co.jp