Ollamaを使ってみる その6(ネットでの検索結果との併用、Node-RED)
はじめに
今回は以前試していたPythonによる検索と、ローカルLLMを組み合わせてみました。
LLMが学習していないデータを、ネット上の最新の情報で補うというやり方に、RAG(Retrieval-Augmented Generation)という名前がつけられていることを最近知りました。
▼IBMのRAGに関する記事はこちら。エージェント型というものもあるようですね。
https://www.ibm.com/jp-ja/think/topics/agentic-rag?mhsrc=ibmsearch_a&mhq=rag
▼AWSのRAGに関する記事はこちら
https://aws.amazon.com/jp/what-is/retrieval-augmented-generation
RAGと呼んでいいのかは分かりませんが、ネットでの検索結果とローカルLLMの組み合わせを、Node-REDで試してみました。
▼以前の記事はこちら
フローを作成する
Node-REDでのPythonの実行は、私が開発したpython-venvノードを利用しています。Pythonの仮想環境を作成して、Node-REDのノードとしてコードを実行できます。
▼年末に開発の変遷を書きました。
https://qiita.com/background/items/d2e05e8d85427761a609
検索には、PythonのDuckDuck Goを利用できるパッケージを使います。
▼以下の記事で利用しています。
ローカルLLMはOllamaのPythonライブラリを利用して、TCPサーバーとして起動します。会話の履歴も保持することができます。
▼以下の記事で利用しています。
試行錯誤の末、最終的に以下のようなフローになりました。
▼フローの全体はこちら

検索結果はJSONファイルに保存されます。その内容にURLが含まれるので、リンク先のHTML形式のデータから必要な内容を読み込み、1つのテキストファイルにします。その後、ローカルLLMに送信しています。
▼以下のような内容がローカルLLMに送信されています。

ダッシュボード画面は、Dashboard 2.0を利用しています。検索やローカルLLMとの対話ができるようになっています。
▼以下のような画面になっています。

実行してみる
ローカルLLMが知らないであろう新しい情報として、去年の12月にGitHubに公開されたばかりのGenesisについて聞いてみました。
▼Genesisについては、以下の記事で試したことがあります。
Genesis Simulationという単語で検索した結果を、Gemma3:4Bに渡してみました。
▼検索結果を要約してくれています。

この結果をもとに、さらに質問できるようにしてみました。検索機能と併用する前に、Gemma3:4BがGenesisについて知っているかを聞いてみました。
▼スマートフォン用のゲームらしいものが提示されました。知らないようです。

検索を実行した後に、同じ質問をしてみました。
▼最新のGenesisについての回答が返ってきています。

ChatGPTにも同じ質問をしてみました。
▼全然違うものが提示されました。

▼検索機能を有効にすると、最新の情報を参照した回答が返ってきました。

MuJoCoについても聞いてみました。
▼MuJoCoについては、以下の記事で試したことがあります。
MuJoCo simulationで検索してみました。
▼検索を実行すると要約してくれました。

回答が英語だったので、日本語に直してもらいました。
▼日本語で要約してくれています。MuJoCo Playgroundの内容でした。

MuJoCo Playgroundについてははじめて知りました。また試してみようと思います。
▼サイトに面白そうなデモ動画がありました。
▼MuJoCo PlaygroundのGitHubのリポジトリはこちら
https://github.com/google-deepmind/mujoco_playground
▼arxivに論文がありました。2025年の2月なので、2か月程前ですね。最新すぎて知らなかったようです。
https://arxiv.org/html/2502.08844v1
最後に
Node-REDで検索機能とローカルLLMを併用することができました。やはりローカルLLMは最新の情報については知らないようなので、検索機能は重要になりそうです。
私も最新の情報を追うのは大変で、今回の検索結果で出てきたMuJoCo Playgroundは知りませんでした。フローをさらに拡大して、情報収集を自動化していきたいなと思っています。