0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Supabaseを用いたRAGをIBM Cloud CodeEngineでセルフホストするまで

Last updated at Posted at 2025-05-18

はじめに

以下のように、人気の「Dify」を使ってRAGを用いたチャットボットをつくり、AIアバター等につなげて運用していたのですが、運用が長くなってくると、RAGに用いるドキュメントをデータベースとして運用管理したくなります。

そこで、セルフホスト版と、パブリッククラウドの両方で運用でき、PostgreSQLベースのSupabaseで、RAGに用いるドキュメントを運用管理することにしました。このように、表形式で管理できることで、運用管理の生産性が向上します。

image.png

(あくまで個人的な感想です。LLMおよびSLMのファインチューニング向けデータを作ることもあるので、表形式で管理できると安心します。)

Flowiseを選択した理由

Supabaseを使う影響で、Supabaseに対応する、Difyに代わるAIエージェント作成ツールとして、Flowiseを使うことにしました。Supabase対応以外にも、Flowiseを選定した理由があります。

1. IBM watsonx.aiにつなげることができる
Flowiseでチャット等を実現する際に、watsonx.aiにつなげるノードがあります。
image.png

2. Supabaseをはじめとして、RAGにおけるベクトルストア(ベクトルデータベース)の選択肢が多い
この点はDifyにはできないこと。
https://docs.flowiseai.com/integrations/langchain/vector-stores

3. GraphRAG 対応
Neo4jによるグラフデータベースをつなげることができるので、通常のRAG以外に、Graph RAGもいけます。
image.png

DifyでもAPI連携をがんばればできなくもないですが、ツール側で用意されていることで、取り組みやすさはあります。

IBM Cloud CodeEinge でセルフホスト

Flowiseには、パブリッククラウド版がありFree版もあります。
現在運用している生成AIアプリが、個人情報ではありませんが、アプリを使う人にとっては信頼できる場所で運用されていることが重要な情報になりますので、セルフホスト環境である必要があります。
以前に、IBM Cloud上の仮想マシンでFlowiseを動かしたことがありますので、今回は、サーバーレス環境でもあるIBM Cloud CodeEngine上でFlowiseを動かしてみることにします。

下準備を行う

Flowiseを使って今回作るRAGを用いたチャットボットは、RAGのベクトルストア(ベクトルデータベース)としてSupabase、LLMの部分にGoogle Geminiを使うことにします。

完成図
image.png

Supabaseは、今回はパブリッククラウド版を使いますが、セルフホスト版に切り替えることができます。
LLM部分は、watsonx.aiやOllamaを使ったIBMのLLMである、「Granite3.3」などに変更して動かすこともできます。「Granite4.0」は、この記事を書いている段階ではプレビュー版の状態でした。

Supabaseの準備

今回はパブリッククラウド版を使います。セルフホスト版をつなげる方法は次回以降にあつかいます
Flowiseのオンラインヘルプに、FlowiseにおけるSupabaseの設定ついて説明したドキュメントがあるので、それを参考にSupabaseのテーブルを作成します。
上記のドキュメントとは異なり、テーブルに格納するデータは日本語にしました。
image.png

Google GeminiのAPIキーを取得

Google AI Studioにアクセスし、GeminiのAPIを使うために必要なAPIキーを取得してください。

CodeEngineで、RAGを用いたチャットボットをつくる

まずは、CodeEngine上でFlowiseを起動し、その後、チャットボットを作成していきます。

CodeEngineで認証機能付きのFlowise環境を構築する

サーバーレスであるCodeEngineを用いて、Flowiseの実行環境をつくっていきます。
IBM Cloud Catalogで、CodeEngineを選びます。

image.png

「Start creating」をクリックします。

image.png

「Create project」をクリックします。

image.png

画面右側に「Create Project」が表示されるので、Locationなどを選び、「Create」をクリックします。

image.png

画面中央に戻り、「Component type」に「Application」を選びます。

image.png

「Name」に「Flowise」と入力します。

image.png

Codeの「Use an existing container image」を選び、「Image reference」の項目に、以下を入力します。

docker.io/flowiseai/flowise:latest

下図のようになるはずです。

image.png

試しに動かすレベルであれは、リソース設定についてはそのままでも良いですが、安定して運用する場合は「Min number of instances」の数値を「0」→「1」にしましょう。

image.png

画面下に移動し、「Optional settings」の「Environment variables」をクリックします。

image.png

環境変数を設定し、Flowiseの画面にアクセスしたとき、あらかじめ設定したユーザー名とパスワードで認証が行われるようにします。
「Add」をクリックします。最初はユーザー名の設定です。

image.png

「Literal value」を選び、

  • 「Environment variable name」の値として、「FLOWISE_USERNAME」を入れます。
  • 「Value」の値として、「admin」を入れます。admin以外でも構いませんので任意のユーザー名にします。

image.png

その後、「Add」をクリックします。
同じ動作で、パスワードを設定します。

  • 「Environment variable name」の値として、「FLOWISE_PASSWORD」を入れます。
  • 「Value」の値として、「zxcvfr45」を入れます。この値はあくまで例です。適切な文字数のパスワードにしましょう。

結果として、このように設定されているはずです。

image.png

画面右側の「Summary」に表示されている、「Create」をクリックします。

image.png

「Ready」の状態が表示されるまで待ちます。

image.png

「Ready」と表示された後、画面右側の「Test application」>>「Application URL」の順にクリックします。

image.png

Flowiseのログイン画面が表示されるので、先ほど設定した「FLOWISE_USERNAME」と「FLOWISE_PASSWORD」のそれぞれの値を入力し、「Login」をクリックします。これで、Flowiseの画面を使う際に認証を行う、少しだけセキュアな環境が手に入りました。

image.png

ログイン後は、Flowiseの通常画面が表示されるので、「Add new」をクリックして、チャットボットをつくりましょう。

image.png

Flowiseで、RAGを用いたチャットボットをつくる

CodeEngineで稼働するサーバーレスなFlowise実行環境が手に入りましたので、SuapbaseやGoogle Geminiを使って、RAGを用いたチャットボットをつくっていきます。

Flowiseの画面で「Add new」をクリックすることで、1つ目の「Chatflow」をつくることができます。

image.png

画面左上の「+」をクリックすることで、様々なノード(箱状のもの)を追加し、ノードを複数配置して線で結ぶことでチャットボットとして動かすことができます。

Supabaseノードの配置

Supabase環境に接続するノードを、画面の余白部分にドラッグ&ドロップで配置します。

image.png

配した「Supabase」ノードについて、「Connect Credential」の「▼」をクリックします。

image.png

「Create New」をクリックします。

image.png

「Supabase API」の画面に表示される各項目に必要な値を入力します。

  • 「CREDENTIAL NAME」:英数字で任意の値を入力します。例 Supabase
  • 「Supabase API Key」:Supabaseの画面の「Project Settings」内に「Data API」に表示される「anon」「public」に表示されている文字列をコピーして入力します。

image.png

この後の作業で使う「Project URL」の値も控えておきます。
Supabaseのノードに戻り、以下の項目に必要な値を入力します。

  • 「Project URL」
  • 「Table Name」
  • 「Query Name」

image.png

Buffer Memoryノードの配置

「Buffer Memory」ノードを画面の余白部分に配置します。「Buffer Memory」ノードは、チャットボット内の会話を記録/取得するために必要です。

image.png

Googleの生成AIサービス、Gemini関係ノードの配置

「ChatGoogleGenerativeAI」ノードと「GoogleGenerativeAI Embeddings」ノードの2つを配置します。

image.png

ひとまず、2つ並べます。

image.png

Supabaseノードを設定した時と同じ要領で、それぞれのノードの「Connect Credential」の「▼」をクリックします。

  • 「CREDENTIAL NAME」は、「ChatGoogleGenerativeAI」ノードと「GoogleGenerativeAI Embeddings」ノードは、別々の値にします。
  • 「Google AI API Key」は、Google AI Studioで取得したAPIキーを入力します。こちらは両ノードともに同じ値です。

例として、下図のように設定します。

  • 「GoogleGenerativeAI Embeddings」ノードの「Model Name」に「embedding-001」を選んでいます。選択できるモデルであれば、他のモデルでも構いません。
  • 「ChatGoogleGenerativeAI」ノードでは、「Model Name」に「gemini-2.0-flash-lite」を選んでいます。選択できるモデルであれば、他のモデルでも構いません。
  • 「Temperature」の値は、通常は1以下が推奨されます。標準では0.9が設定されており、0に近づけば近づくほど、RAGに用いるデータ(Supabase内のドキュメント)に近い結果がでるようになります。

image.png

Conversational Retrieval QA Chainノードの配置

チャットボットの機能を提供する「Conversational Retrieval QA Chain」ノードを配置します。

image.png

各ノードを線で結ぶ

下図のようになるように、各ノードを線で結びます。

完成図
image.png

画面右上のフロッピーディスクのアイコン(Save Chatflow)をクリックし、保存します。

image.png

作成したChatflowに名前をつけます。

image.png

チャットボットの動作確認を行う

画面右上に表示されている「Chat」をクリックします。

image.png

チャットUIが表示されるので、質問してみましょう。質問に対して、ベクトルストアに指定したSupabaseのテーブルに登録されている内容に近いレスポンスが生成されるはずです。

image.png

チャットボットを公開する

Chatflowが完成した場合は、チャットボットとして公開しましょう。
画面右上の「API Endpoint」をクリックします。

image.png

「Embed in website or use as API」の画面が表示されます。
「Share Chatbot」のタブをクリックします。「Make Public」をクリックし公開します。表示されているURLにアクセスします。

image.png

チャットボットとして利用できることがわかります。

image.png

今後の展開

これで、サーバーレス環境であるCodeEngineで、Flowiseを実行できることが確認できました。
「Supabase」のセルフホスト版や「watsonx.ai」、Ollama+IBM Granite3.3の活用、AIアバターとの連携など続けて取り組んでいきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?