Dify + FastAPIで“ユーザー任せ”のナレッジチャットを作る方法

企業内で「FAQチャット」や「ナレッジボット」を作りたいというニーズは多いですが、実際にはこんな課題が付きまといます。

  • Difyのナレッジ機能を使うには管理者権限が必要
  • ナレッジの更新をエンジニアや管理者が担うと負担が重い
  • 各部署ごとにチャット内容をカスタマイズしたい

このブログでは、Excelで作ったQ&Aをそのまま読み込み、各自が独自にチャットを持てる“ユーザー任せ”のナレッジチャットを構築する方法を紹介します。


🛠 環境・前提

  • OS:Windows 11
  • 言語:Python 3.10
  • LLMフロント:Dify1.3.0
  • バックエンド:FastAPI
  • ナレッジ管理:共有フォルダ内のExcelファイル

📘 コンセプト

この仕組みでは、ナレッジの構成をユーザー自身に任せることで、運用のハードルを大きく下げることができます。

  • 各ユーザーがExcelで質問と回答を入力
  • 共有フォルダに配置(例:\\fileserver\faq\部門A.xlsx
  • FastAPIがExcelを読み込んで、チャット用のベクトル検索エンジンに登録
  • Dify経由でチャットを開始

これにより、「管理者が全てのナレッジを登録・保守する必要がない」状態を作れます。


💬 Excelのフォーマット(例)

質問回答
勤怠の打刻忘れはどうすれば?勤怠システムから「修正申請」を行ってください。
出張精算はいつまでに?毎月5日までに申請してください。

🔧 FastAPI 側の実装

Excelを読み込み,そのまま返します。

必要なライブラリをインストールします。

pip install fastapi uvicorn

main.pyは以下のようにしました。

from fastapi import FastAPI, HTTPException, Response
from fastapi.responses import FileResponse, StreamingResponse
import os

app = FastAPI()

EXCEL_FILE = r"\\fileserver\faq\部門A.xlsx"

@app.get("/excel_qa")
async def download_excel_file():
    filename=os.path.basename(EXCEL_FILE)
    # ファイルの存在を確認
    if not os.path.exists(EXCEL_FILE):
        raise HTTPException(status_code=404, detail="ファイルが見つかりません。")

    # ファイルがExcelファイルであることを確認(拡張子で簡易チェック)
    if not filename.lower().endswith(('.xlsx', '.xls')):
        raise HTTPException(status_code=400, detail="指定されたファイルはExcelファイルではありません。")

    try:
        # FileResponse を使用すると、ファイルを直接ストリームで返せます
        # media_type を適切に設定することで、ブラウザがファイルタイプを正しく認識します
        return FileResponse(
            path=EXCEL_FILE,
            media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", # .xlsx のMIMEタイプ
            filename=filename # ダウンロード時のファイル名を指定
        )

    except Exception as e:
        raise HTTPException(status_code=500, detail=f"ファイルの読み込み中にエラーが発生しました: {str(e)}")

FastAPIの起動は以下のコマンドでやりました。

uvicorn main:app --host 0.0.0.0 --port 8000 --reload
Python FastAPI本格入門

Python FastAPI本格入門

Amazonで詳細を見る

🤖 Dify 側との連携

Dify側で「チャットフロー」で新規作成
「HTTPリクエスト」ブロックと「テキスト抽出」ブロックを追加しただけのシンプルなフローです。

「HTTPリクエスト」ブロックには

API:GET http://[FastAPI立ち上げたPCのIPアドレス]:8000/excel_qa

「テキスト抽出」ブロックには

入力変数:HTTPリクエスト files Array[file]

コーディング不要で毎日の仕事が5倍速くなる!Difyで作る生成AIアプリ完全入門

コーディング不要で毎日の仕事が5倍速くなる!Difyで作る生成AIアプリ完全入門

Amazonで詳細を見る

📚 運用イメージ

  • 解答を任せたいテーマごとにExcelファイルを作成・更新
  • ファイルを更新するだけでチャットが使える
  • 管理者はコードや設定変更をしなくていい

✅ メリットまとめ

項目内容
管理コスト各部署に分散。Excelだけでナレッジ登録が完結。
拡張性Excelを複製するだけで、複数チャットボットの展開が可能。
セキュリティ面ファイル共有で権限制御がしやすく、Difyの管理権限を渡さなくてよい。

📝 まとめ

Excel + FastAPI + Dify で「ユーザー任せのナレッジチャット」は簡単に構築できます。
管理者が手を出さずとも、現場主体で運用できるチャットボットを目指しましょう。

ソースコードが必要な方はnoteからご購入をお願いいたします。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA