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?

ローカルSLMでRAG

Last updated at Posted at 2024-11-18

はじめに

前回の記事で構築したOllama + Difyの環境でRAGの修行です。

モデル

モデルは次のものを追加しました。

image.png

ナレッジ

アウトドアウェアでお世話になってるフルマークスストアの製品情報をテキストファイルでまとめてみました。

image.png

ナレッジの作成で、テキストファイルからインポートします。

image.png

自動で高品質のベクトル検索にしました。

image.png

「保存して処理」をクリックするとナレッジの作成が完了します。
埋め込みの完了もすぐ100%で完了します。

image.png

アプリ

上部の「スタジオ」を開き、アプリを作成する画面で「最初から作成」をクリックします。
「BETA」がなかなか取れないですが、「ワークフロー」を選択します。

image.png

RAGのテンプレフロー

よく見るRAGのテンプレフローです。Difyに慣れてくると、1分で作れると思います。

image.png

有名なフローですが、精度が出ないテンプレなのであまり使い物になりません。
試しに「暑い日でも涼しいウェアとパンツを列挙してください。」と質問してみます。

image.png

結果は以下です。パンツを無視しちゃってますね。

image.png

原因は、ベクトル検索でのクエリを見れば分かると思います。このクエリの類似文を1回検索しているだけという事になります。

image.png

少し改良したフロー

ベクトル検索を細かく複数回に分けて実行した結果をまとめれば、大体のものはコンテキストに入るはずなので、少しフローを改良したものを作成します。

image.png

最初に「LLM」を仕込んで、複数回の単語検索をする事を想定とした場合の情報をJSON形式で出力してもらいます。

image.png

検索語をJSON文字列で出してもらったら、次に「コード」でオブジェクトに変換します。

image.png

コードの次は「イテレーション」を配置します。

image.png

入力は「コード」で変換したオブジェクトです。
※出力変数はイテレーションの作成が終わってから設定します。

image.png

イテレーション内に「コード」を配置してオブジェクトから検索語を取得します。

image.png

「知識取得」でコードの検索語を使って検索させます。

image.png

検索結果だけを「コード」で抜き取ります。

image.png

最後に「コード」の結果を「イテレーション」の出力変数に設定しておきます。

「イテレーション」に続けて「LLM」を配置します。

image.png

内容は通常のRAGで良いと思いますが、コンテキストにイテレーションの出力変数を指定しておきます。

image.png

再度同じ質問をすると、今度はパンツも回答しています。

image.png

トレースを見ると、知識取得を2回実施しています。

image.png

知識取得の内容を見ると、単語検索LLMが「夏 涼しい ウェア」と「夏 涼しい パンツ」に分けてくれました。

image.png

パンツもウェアなのですが、「ウェア」と「パンツ」で分けているのは、単に私が類似検索を意識しているだけかもしれません。

image.png

ともあれ、若干精度の良くなったRAGができました。
フローやプロンプトを改良していけばもっと精度が良くなりそうですね。

おわりに

イテレーションで「知識取得」を使ってますが、GoogleなどのWeb検索や社内の検索システムに変えても面白そうですね。

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?