AIは仕事を奪うのか? ~DifyでローカルAIチャットボットを構築した半年間の奮闘記~02
Photo by Giorgio Trovato on Unsplash
お待たせいたしました!前回の続きとなる第2回目!立ちはだかる壁とは一体…
第2章:立ちはだかる壁 ~Difyの欠点と独自カスタマイズの道~
Difyは「作る分」には最高に便利なツールなのですが、そのまま組織で使うにはいくつか厄介な欠点がありました。備忘録も兼ねて、私が直面した3つの壁を紹介します。
1. 利用者の「Cookie」に左右されてしまう
Difyの標準画面は、ウェブブラウザに保存される履歴データ(Cookie)に依存しています。そのため、ブラウザのキャッシュをクリアするなどしてCookieが消えると、それまでのチャット履歴がすべて消え去ってしまいます。真っ先にこれに気づき、思わず「使えねー!」と何度かぼやいてしまいました。
2. 読み込ませた資料が全員に見えてしまう問題
AIに社内資料などを読み込ませて答えてもらう機能がありますが、極端な話、アクセスできる利用者全員がそのファイルを見れてしまいます。「管理者」「幹部」「一般社員」のように権限を分けて扱うファイルを変えるのが手っ取り早いですが、そうするとアクセスするためのURLも3つに分かれてしまうという不便さがありました。
3. URLさえ知っていれば誰でも使えてしまう
URLを知っていればアクセスできてしまうため、セキュリティ上の懸念があります。特定のインターネット住所からのアクセスのみを許可する「ホワイトリスト化」をすれば良いのですが、専用のクラウド環境などがないと、それを完璧に用意するのは結構難しく、穴もできやすいのが実情です。
この3つの欠点を解決するためには、Difyの標準画面を使うのをやめ、「API」と呼ばれる外部と連携するための窓口機能を使って、チャットボットの画面を「外出し」して独自に作る必要がありました。
そこで私は、「Streamlit(ストリームリット)」というPythonで簡単にウェブ画面を作れるツールを使ってチャット画面を自作し、DifyのAPIと繋ぎ合わせることにしました。
さらに、以下のような仕組みも構築しました。
・Streamlitと連携し、「PostgreSQL(情報を整理して保存するデータベース)」にチャット履歴を保存する。
・データベース上でユーザーを管理し、権限(管理者・幹部・一般社員)の強弱をつける。
・ユーザーのパスワード設定を行い、平文(そのままの文字)ではなく暗号化してデータベースに安全に保存する。
Dify側で作った3つの権限用ボットのAPIをStreamlitに登録し、ユーザーの権限に合わせて1つの画面の裏側で自動的に切り替える。
これらを、インターネット上のAIではなく「Gemma3 12B(Geminiのミニサイズ版のような、パソコン内で動くAIモデル)」と「Ollama(ローカルAIを動かすツール)」を使って実装してみたのですが……これが中々大変でした。一度作ったフォルダ構成が無茶苦茶になり、Macの中身を一度全部消して一からやり直すという大工事にまで発展しました。
ここで一つ強調しておきたいのです。
現在構築しているこの仕組みは、あくまで今後の本格的な展開を見据えた「テスト環境(砂場)」です。
AIに読み込ませているナレッジ(資料)なども、「すべて仮の内容(ダミーデータ)」を使用しています。
(この部分はGeminiにプロンプトで指示を出し数ページのテキスト生成、PDF化してナレッジに保存をしています。)
こうして苦労の末に独自の土台(テスト環境)が完成し、いよいよ理想の機能を盛り込んでいく段階へ。
しかし、欲張って機能を詰め込んだ結果、システムの裏側では「ある魔物」が目を覚まそうとしていました。
次回は、「第3章:理想と現実のギャップ ~多機能化がもたらす悲劇~」をお届けしたいと思います!乞うご期待ください。