SLM+RAGでAIエージェントを構築する
親記事
前記事
1. RAGチャットのワークフロー作成
-
前記事の時点でLangflowまでAPIが疎通しているので、本項ではLangflowのRAGチャットワークフロー作成だけを扱います。
(そこまでは紆余曲折あったので、興味がおありの方は親記事から、適当に見たいところをご覧ください) -
前提として、この記事までにWSL2を使ったUbuntu環境上(WD-Ubuntu-PC)にpython仮想環境(pc-env)が構築済みで、その環境内に必要なパッケージを全て登録してあります
-
なお、ワークフロー作成前に、前項で設定したLMStudioがAPIモードで起動している事が必要です。
(ノートが一部、ここから情報を拾うので)

① WSL環境へのログイン
- 管理者権限でのPowerShellを起動します。
- 以下のコマンドで実証環境(WSL)を起動し、
wdadminユーザーでログインします。PS> wsl -d WD-Ubuntu-PC
② 仮想環境への切り替え
WSLターミナルにログイン後、Python仮想環境 pc-env に切り替えます。
# wslターミナル内で以下を実行
$ cd
$ source pc-env/bin/activate
③ Langflow起動
# wslターミナル内で以下を実行
$ langflow run

数件errorが出るが、google周りの外部モジュールであり、関係あるワークフローを組まない限り使わないのでOK
「Open Langflow」でURL(起動ポート番号含む)が出る
④ ブラウザを起動して、上記URLを開く
⑥ テンプレート中央「Vector Store RAG」を選択
(これは厳密にはRAGチャットだけではなく、RAGチャットへの書き込みも含むフローのテンプレート)
⑦ これで出てくるのは、OpenAII(クラウド)に接続し、astlaDB(同じくクラウド)を利用するフローなので、参考以上には意味がない。
(必要な部分を切り替えてみた結果を出します)
⑧ 必要なノードを作る。
最初、フローには「Compornents」(Langflowにさせたい動作の集合)が出ている。

これを「Discover more Compornent」に切り替える。
すると、非常に豊富なコンポーネントが出て来るので、ここから

Chromaをクリックで開き

ChromaDBをクリックして作る。

同じくLMStudioを開き、LM StudioとLM Studion Embeddingsをクリックして作る。

⑨-1 ノード接続(1)LMStudio
Promptの繋がる先を「LM Studio」に切り替え。
(OpenAIを消してLMStudioに)

繋ぎ方は、青や赤で指定されているポートをクリックして引っ張り、接続先に持って行くと自動で繋がります。
その次に「Base URL」を設定。
これは、前項でAPIを設定したLM Studioのエンドポイント(同じ環境でLM Studioが起動していれば取って来れる)。

Base URLを設定後、そこで「Model Name」を選択すると、自動的にBase URLからリストを引っ張って来て選択肢に入れてくれるので、使いたいモデル(SLM)を選ぶ。
この実証環境の場合、gemma-3n-e4bをダウンロードしてあるので、これを選択。
LM StudioのModel Response先をChat OutputのInputsにつなぐ。

なお、設定時はノードをクリック後、「…」ハンバーガーボタンをクリックして「Save」を選んでください。

設定変更と見做された時は以下の表示が出るので「Replace」で上書きしてください

これで、OpenAIの有料サービスに繋がる代わりに、ローカルで起動しているモデルに繋がっています。
⑨-2 ノード接続(2)ChromaDB
Chat InputのChat MessageをChroma DBのSearch Queryに

さらに、Persist Directoryを/home/wdadmin/pc-env以下(この場合はshare等)に設定
これはChromaDBのデータファイルが収まる場所です。起動したユーザーの権限で書ける場所になるので、
/home/wdadmin配下ですが、仮想環境から起動しているのでさらにその下に置きました。
そして、DataFrameをParserのDataFrameに接続。
これが意味するのは「ユーザーが入力したプロンプトをChromaDBに流して検索し、その結果をParserに流して新しいプロンプトにし、モデルに流すという仕組み」です。
さらに、EmbeddingにLM Studio Embeddingsを接続します。

ここで「Embeddings」に特別な注意が必要です。
キーワード検索などでは必要ないのですが、ベクトル検索を行うデータベースをノードに選んだ場合、
入力には普通のテキストをベクトルデータに変換するためのモデルが別途、必要になります。
このモデルは、LMStudioでロードしておかねばなりません。
つまり「ベクトルでRAGを行うには、モデルが同時に2つ必要になるのです」。
但し、これらが働くタイミングはそれぞれ違うので、同時にGPUを占領する事なく、RAG実行中に衝突する事はありません。
これをするための、特別に教育されたモデルは、名前に「embed」を冠しています。
LMStudioで、API画面で選ぶと複数のモデルをロードする事が出来ます(事前にダウンロードしておく必要がありますが/ダウンロード方法は前項を参照)

今回はテストなので、非常に小型のnomic-embedding-embed-text-v1.5を選択しました

これがロード済みの状態なら、先のLM Studioのノードと同じく、LM Studio Embeddingsのノードにも、モデルを正しく設定できます。

これで、RAGチャット自体の準備は出来ています。
⑨-3 ノード接続(3)ChromaDB(データ登録用)
このワークフロー設定には、RAGチャット用以外に、RAGチャットのためのデータを登録するフローがもう一つあります。
こちらも、⑨-2のように設定したLMStudio EmbeddingsとChromaDBのノードを作り、接続してください。

※これらはもう1組作って繋いでください(さっき使ったノードを使うと、フローが混乱しますので)。
Split Textのchankを、Input Dataに繋いでください。
このフローは、テキストファイルを登録すると動き、チャンクに分解したデータをChromaDBに入れるためにあります(今回はテスト予定がないですが・・・)
⑩ RAGチャットテスト
「Playground」のボタンを押下

チャット画面が出て来るので

Hello Worldには応答しました。

日本語は分かるか、と聞いたら少しわかるそうです(笑)。

一応、RAGチャットのRAGそのものは試していないのですが、「RAGチャット可能な」ワークフローは作れて、実行も出来たので、次のテストはまた、日とフローを改めて行う事にします。


