非常に大規模でコストのかかる [大規模言語モデル(LLM)](https://www.ibm.com/jp-ja/think/topics/large-language-models)を必要とせずに、[エージェント型ワークフロー](https://www.ibm.com/jp-ja/think/topics/agent-workflows)を構築することは可能でしょうか?答えはイエスです。このチュートリアルでは、IBM [Granite™](https://www.ibm.com/jp-ja/granite)を使用して、AutoGenでローカルにマルチエージェントRAGシステムを構築する方法を説明します。
検索拡張生成(RAG)は、高価な微調整を必要とせずに、さまざまなデータ・ソースからの追加データセットをLLMに提供する効果的な方法です。同様に、エージェント型RAGは、AIエージェントのサブタスクを計画および実行する能力と関連情報の取得を活用して、LLMの知識ベースを補完します。この機能により、従来のチャットボットと比較して、RAGアプリケーションの最適化が可能となり、拡張性が向上します。知識ベースから関連データを抽出するために、複雑なSQLクエリーを作成する必要はもうありません。
エージェントRAGの将来は、複数の専門エージェントが連携して最適なレイテンシーと効率を実現するマルチエージェントRAGにあります。IBMは、このコラボレーションを、Granite 3.2などの小規模で効率的なモデルを使用し、それをモジュール式エージェント・アーキテクチャーと組み合わせることで実証します。IBMは、複数の専門化された「ミニ・エージェント」を使用し、それらは適応型計画やツールまたは関数呼び出しを通じて、連携してタスクを実現します。人間と同様に、エージェントのチーム、またはマルチ・エージェント・システムは、特に明確に定義された役割と効果的なコミュニケーション性能を備えている場合、個人の英雄的な努力よりも優れたパフォーマンスを発揮することがよくあります。
この連携におけるオーケストレーションでは、ワークフローと意思決定を管理するためのコア・フレームワークとしてAutoGen(AG2)を使用し、ローカルLLMサービス用のOllamaやインタラクション用のOpen WebUIなどの他のツールも使用できます。AutoGenは、Microsoftが開発したマルチ・エージェントAIアプリケーションを作成するためのフレームワークです。1注目すべきは、このチュートリアルで活用されるすべてのコンポーネントがオープンソースであることです。これらのツールを組み合わせることで、ノートPCを離れることなく、強力でプライバシーに配慮したAIシステムを構築できます。
IBM® Graniteの検索エージェントは、各エージェントが専門的な役割を持つモジュール式アーキテクチャーを採用しています。人間と同様、エージェントは、情報に基づいた決定を下すための明確な指示と十分なコンテキストがある場合に最も優れたパフォーマンスを発揮します。フィルタリングされていないチャット履歴など、無関係な情報が多すぎると、「大海の一滴」問題が発生し、ノイズから信号を解読することがますます困難になる可能性があります。
このエージェント型AIアーキテクチャーでは、エージェントは目標を達成するために順番に連携します。生成AIシステムは次のように構成されています。
プランナー・エージェント:ワークフローの開始時に、最初の高レベルの計画を一度作成します。たとえば、あるユーザーが「私のチームが使用しているオープンソース・プロジェクトと同等のオープンソース・プロジェクトは何か?」と尋ねるとします。次に、エージェントは次のような段階的な計画をまとめます。「1. チームのドキュメントでオープンソース・テクノロジーを検索します。2. ステップ1で見つけたものと類似したオープンソース・プロジェクトをウェブで検索します。」これらのステップのいずれかが失敗した場合、または不十分な成果が得られた場合、そのステップは反省エージェントによって後から適応されることがあります。
リサーチ・アシスタント:リサーチ・アシスタントはシステムのエンジンです。「オープンソース・テクノロジーについてチームのドキュメントを検索する」などの指示を取り込んで実行します。計画のステップ1では、プランナー・エージェントからの最初の指示を使用します。後続のステップでは、前のステップの結果からキュレートされたコンテキストも受け取ります。
たとえば、「同様のオープンソース・プロジェクトをウェブで検索する」と尋ねると、前のドキュメント検索ステップからの出力も受け取ります。指示に応じて、リサーチ・アシスタントはWeb検索や文書検索、あるいはその両方のツールを使用してタスクを遂行できます。
ステップ・クリティック:ステップ・クリティックは、前のステップの出力が与えられた指示を十分に満たしているかどうかを判断する役割を持ちます。クリティックは、実行されたばかりのシングルステップ命令と、その命令の出力という2つの情報を受け取ります。ステップ・クリティックに、その対話を評価させることで、目標が達成されたかどうかが明確になります。これは次のステップの計画のために必要です。
ゴール・ジャッジ:ゴール・ジャッジは、提供されたゴールのすべての要件、それを達成するために立案された計画、これまでに収集された情報に基づいて、最終的な目的が達成されたかどうかを判断します。ジャッジの出力は「達成済み」または「未達成」のいずれかで、その後に1~2文の短い説明が続きます。
リフレクション・エージェント:リフレクション・エージェントは、経営上の意思決定を行います。このエージェントは、次に実行する手順は何か、それが次の計画されたステップに影響するかどうか、誤りを補うために進路を転換することなのか、あるいは目標が完了したことを確認することなのかを決定します。現実のCEOと同様に、明確な目標を念頭に置き、その目標の達成に向けて行われたまたは行われていない進捗状況に関する簡潔な調査結果が提示されると、最良の意思決定を行います。反省エージェントの出力は、実行すべき次のステップか、目標に達成した場合に終了する指示のいずれかです。反省エージェントには、次の項目を提示します。
これらの項目を構造化されたフォーマットで提示することで、意思決定者は何が行われたのかが明確になり、次に必要な事象を決定できます。
レポート・ジェネレーター:目標が達成されると、レポート・ジェネレーターはすべての調査結果を、元のクエリーに直接答える、一貫性のある出力に統合します。プロセスの各ステップでは、目標とする出力が生成されますが、レポート・ジェネレーターはすべてを最終レポートにまとめます。
初心者にとって、エージェント型AIアプリケーションをゼロから構築することは困難な場合があります。したがって、ここでは一連のオープンソース・ツールを使用します。Granite検索エージェントは、エージェント型RAG用の複数のツールを統合します。
Open WebUI:ユーザは、Open WebUIにホストされた直感的なチャット・インターフェイスを通じてシステムと対話します。このインターフェースは、クエリー(「プロジェクト・ノートに関する最新のニュース記事を入手してください」など)を送信し、出力を表示するための主なポイントとして機能します。
Pythonベースのエージェント(AG2フレームワーク):システムの中核には、AutoGen(AG2)を使用して構築されたPythonベースのエージェントがあります。このエージェントは、タスクを分解し、ツールを動的に呼び出してステップを実行することでワークフローを調整します。
エージェントは、次の2つの主要なツールにアクセスできます。
ドキュメント検索ツール:アップロードされたプロジェクト・ノートや埋め込みとして保管されたドキュメントを含むベクトル・データベースから関連情報を取得します。このベクトル検索は、完全に別のデータ・ストアをセットアップするのではなく、Open WebUI内に組み込まれた文書検索APIを活用します。
Web検索ツール: Webベースの検索を実行して、外部の知識とリアルタイムの情報を収集します。この場合、メタ検索エンジンとしてSearXNGを使用します。
Ollama:IBM Granite 3.2 LLMは、システムを強化する言語モデルとして機能します。Ollamaを使用してローカルにホストされているため、高速な推論、コスト効率、データ・プライバシーが確保されます。このプロジェクトをより大きなモデルで実行することに興味をお持ちの場合は、IBM® watsonx.aiまたはOpenAIなどでAPIにアクセスすることが推奨されます。ただし、このアプローチでは、watsonx.aiまたはOpenAIのAPIキーが必要となります。このチュートリアルでは、代わりにローカルでホストされているOllamaを使用しています。
このチュートリアルで取り上げていないその他の一般的なオープンソースのエージェント・フレームワークには、LangChain、LangGraph、crewAIなどがあります。
詳細なセットアップ手順とプロジェクト全体については 、IBM Granite Community GitHubでご覧いただけます。このチュートリアルのJupyter NotebookバージョンもGitHubでご覧いただけます。
次の手順では、Granite検索エージェントの簡単なセットアップを提供します。
Ollamaのインストールはシンプルで、Ollamaの公式サイトからクライアントをダウンロードするだけです 。Ollamaをインストールした後、以下のコマンドを実行してGranite 3.2 LLMを取得します。
これで、OllamaとGraniteが連携できました。
python3.11 -m venv venv
source venv/bin/activate
このシンプルなエージェントには、いくつかのライブラリとモジュールが必要になります。以下を必ずインストール・インポートします。
!pip install -qU langchain chromadb tf-keras pyautogen "ag2[ollama]" sentence_transformers
import getpass
from autogen.agentchat.contrib.retrieve_assistant_agent import AssistantAgent
from autogen.agentchat.contrib.retrieve_user_proxy_agent import RetrieveUserProxyAgent
Ollamaを使用して実現した正しいLLMを呼び出すためにローカルに設定するためのいくつかの構成パラメーターがあります。
ollama_llm_config = {
"config_list": [
{
"model": "granite3.2:8b",
"api_type": "ollama",
}
],
}
これらの構成パラメータを「AssistantAgent」クラスの「llm_config」パラメータに渡して、最初のAIエージェントをインスタンス化できます。
assistant = AssistantAgent(
name="assistant",
system_message="You are a helpful assistant.",
llm_config=ollama_llm_config,
)
このエージェントは、Granite 3.2を使用して、「ragproxyagent」エージェントから返された情報を合成します。追加のコンテキストとしてRAGエージェントに提供するドキュメントは、GitHubのAutoGenリポジトリにある生のREADME Markdownファイルです。さらに、検索エージェントに固有の構成の新しいディクショナリを渡すことができます。便利な追加キーとして、「vector_db」、「chunk_token_size」、「Embedding_model」などがあります。
構成キーの完全なリストについては、公式のドキュメンテーションを参照してください。
ragproxyagent = RetrieveUserProxyAgent(
name="ragproxyagent",
max_consecutive_auto_reply=3,
is_termination_msg=lambda msg: msg.get("content") is not None or "TERMINATE" in msg["content"],
system_message = "Context retrieval assistant.",
retrieve_config={
"task": "qa",
"docs_path": "https://raw.githubusercontent.com/microsoft/autogen/main/README.md",
"get_or_create": True,
"collection_name": "autogen_docs",
"overwrite": True
},
code_execution_config=False,
human_input_mode="NEVER",
)
ここで、RAG エージェントとのチャットをインスタンス化して、コンテキストとして提供されたドキュメントに関連する質問をすることができます。
qs = "What languages does AutoGen support?"
result = ragproxyagent.initiate_chat(
assistant, message=ragproxyagent.message_generator, problem=qs
)
print(result)
簡潔にするために、READMEファイルのMarkdownコンテンツは出力から削除されていることに注意してください。出力:
コレクションを作成しようとしています。
2025-07-21 12:20:36,125 - autogen.agentchat.contrib.retrieve_user_proxy_agent - INFO - 1つのチャンクが見つかりました。
2025-07-21 12:20:36,129 - autogen.agentchat.contrib.vectordb.chromadb - INFO - 提供されるコンテンツの埋め込みはありません。VectorDBの埋め込み関数を使用して、コンテンツの埋め込みを生成します。
VectorDBはdoc_ids: [['8e9131c7']]を返します。
doc 8e9131c7の内容をコンテキストに追加。
ragproxyagent(アシスタントへ):
あなたは検索拡張チャットボットです。あなたは、あなた自身の知識とユーザーから提供されたコンテキストに基づいて、ユーザーの質問に答えます。
現在の文脈の有無にかかわらず、質問に答えられない場合は、「文脈を更新してください」と答えてください。
回答はできる限り短くします。
ユーザーからの質問:AutoGenはどの言語をサポートしていますか?
コンテキストは次のとおりです。
[修正済み]
アシスタント(ragproxyagentへ):
提供されたテキストは、Microsoftのオープンソース・イニシアチブであるAutoGenプロジェクトのREADMEファイルであるように表示されます。その内容の概要は次のとおりです。
READMEには、各サポート言語(C#およびPython)とそれぞれのパッケージマネージャー(NuGetおよびPyPI)で利用可能なパッケージを要約した表も含まれています。これにより、開発者は希望の言語でAutoGenを使い始めるために必要なコンポーネントをすぐに特定できます。
>>>>>>>> TERMINATING RUN (601a53dc-8a5d-4e19-8503-1517fe3c7634):エージェント「ragproxygent」の終了メッセージ条件が満たされました
成功です。私たちのアシスタントエージェントとRAGエージェントは、追加のコンテキストを正常に合成し、現在AutoGenでサポートされているプログラミング言語でユーザーのクエリーに正しく応答しました。これは、情報を交換するエージェント間のグループ・チャットと考察することができます。この例は、AutoGenを使用してローカルにエージェントRAGを実装する簡単なデモンストレーションです。### ステップ3. Open WebUIをインストールする
それでは、より高度なエージェントRAGシステムの動きに進みましょう。ターミナルで、Open WebUI をインストールして実行します。
pip install open-webui
open-webui serve
Web検索の場合、Open WebUIに組み込まれたWeb検索機能を活用します。
Open WebUIは多数の検索プロバイダーをサポートしています。大まかに言うと、サードパーティのアプリケーション・プログラミング・インターフェース(API)サービスを使用するか(この場合、APIキーを取得する必要があります)、SearXNG Dockerコンテナをローカルにセットアップするかのいずれかを選択できます。いずれの場合も、Open WebUIコンソールで検索プロバイダーを設定する必要があります。
SearXNGへのポインターまたはAPIキーのインプットのいずれの場合も、この設定はOpen WebUIコンソールの [管理パネル] > [設定] > [Web検索] にあります。
詳細な手順については、Open WebUIドキュメンテーションの説明を参照してください。
1.ブラウザで、http://localhost:8080/にアクセスして、Open Web UIを開きます。Open WebUIインターフェースを初めて開く場合は、ユーザー名とパスワードを登録します。この情報は、すべてローカル・マシンに保持されます。
2. ログイン後、ユーザー名の左下にあるアイコンをクリックします。メニューから [管理] パネルを選択します。
3. [関数] タブで、「+」をクリックして新しい関数を追加します。
4. 関数に「Granite RAG Agent」などの名前と説明を付けます。両方が
5. Pythonのスクリプトgranite_autogen_rag.pyを指定されたテキスト・ボックスに貼り付け、既存のコンテンツと置き換えます。
6. 画面下部の[保存]を選択します。
7. [関数] ページに戻り、エージェントが [有効] に切り替わっていることを確認します。
8. 有効化トグルの横にある歯車のアイコンをクリックし、推論エンドポイント、SearXNGエンドポイント、モデルIDなどの設定をカスタマイズします。
これで、まったく新しいAutoGenエージェントがOpen WebUIインターフェイスにモデルとして表示されます。それを選択して、ユーザークエリーを提供できます。### ステップ 6. ドキュメントをOpen WebUI 1にロードします。Open WebUIで、**[ワークスペース] > [ナレッジ]**に移動します。 2. [+] を選択して新しいコレクションを作成します。3. Granite取得エージェントがクエリーを実行できるようにドキュメントをアップロードします。
検索プロバイダー(SearXNGなど)を設定するには、このガイドに従ってください。
設定パラメーターは次のとおりです。
| パラメーター | 説明 | 既定値 |
|---|---|---|
| task_model_id | タスク実行の主要なモデル | granite3.2:8b |
| vision_model_id | 画像分析のためのビジョン・モデル | granite-vision3.2:2b |
| openai_api_url | OpenAIスタイルのモデル呼び出しのためのAPIエンドポイント | http://localhost:11434 |
| openai_api_key | 認証用APIキー | ollama |
| vision_api_url | ビジョン関連タスクのエンドポイント | http://localhost:11434 |
| model_temperature | 応答のランダム性を制御 | 0 |
| max_plan_steps | エージェント計画の最大ステップ数 | 6 |
注意:これらのパラメーターは、機能を追加した後に、Open WebUI管理パネルの「機能」セクションにある歯車アイコンから設定できます。### ステップ8. エージェント・システムのクエリー Granite検索エージェントは、ローカル・ドキュメントやWebソースにクエリーを実行し、マルチエージェント・タスク・プランニングを実行し、適応型実行を行うことによって、AG2ベースのRAGを実行します。チャットを開始し、RAGチェーンの動作を確認するために、提供されたドキュメントに関連するクエリーをエージェント・システムに送信します。
マルチエージェント・セットアップにより、Granite 3.2などの中規模のオープンソース・モデルを最大限に活用して、実用的で使いやすいツールを作成できます。このエージェント型RAGアーキテクチャーは、全面的にオープンソース・ツールで構築されており、質問応答エージェントとAIアルゴリズムを設計およびカスタマイズするための開始点として利用できます。また、定型的な用途にとらわれずに、幅広いユースケースに使用することもできます。このチュートリアルでは、AutoGenの機能を活用して、単純なエージェント・システムと複雑なエージェント・システムを詳しく掘り下げる機会を設けました。Granite LLMはOllamaを使用して呼び出され、これらのシステムを完全にローカルで探索できるようになりました。次のステップとして、さらに多くのカスタム・ツールをエージェント型システムに統合することを検討します。
業界をリードするIBMのAI専門知識とソリューション製品群を使用すれば、ビジネスにAIを活用できます。
AIの導入で重要なワークフローと業務を再構築し、エクスペリエンス、リアルタイムの意思決定とビジネス価値を最大化します。
[1] Wu, Qingyun, et al. “AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework.” GitHub, 2023, github.com/microsoft/autogen.