大規模言語モデル(LLM)のツール呼び出しは、LLMが外部ツール、サービス、またはAPIと対話してタスクを実行する機能です。これにより、LLMは機能を拡張し、外部データ、リアルタイム情報、または特定のアプリケーションへのアクセスが必要になる現実世界のタスクの処理能力を強化できます。LLMがWeb検索ツールを使用する場合、Webを呼び出して、モデルのトレーニング・データにはないリアルタイムのデータを取得できます。他のタイプのツールには、計算、データ分析、視覚化のためのPythonや、データのサービス・エンドポイントの呼び出しなどのためのPythonが含まれる場合があります。ツール呼び出しにより、チャットボットはより動的かつ適応的になり、ライブ・データや直接のナレッジ・ベース外の特殊なタスクに基づいて、より正確で関連性が高く詳細な応答を提供できるようになります。ツール呼び出し用の一般的なフレームワークには、LangchainとOllamaがあります。
Ollamaは、個人のデバイスで使用するためのオープンソースのローカルAIモデルを提供するプラットフォームであり、ユーザーは自分のコンピューター上でLLMを直接実行できます。OpenAI APIなどのサービスとは異なり、モデルはローカル・マシン上にあるため、アカウントは不要です。Ollamaはプライバシー、パフォーマンス、使いやすさに重点を置いており、ユーザーは外部サーバーにデータを送信することなくAIモデルにアクセスして対話できます。これは、データ・プライバシーに懸念がある人や、外部APIへの依存を回避したい人にとって、特に魅力的です。Ollamaのプラットフォームは、セットアップと使用が簡単になるように設計されており、さまざまなモデルをサポートしているため、自然言語処理、コード生成、その他のAIタスクのためのさまざまなツールを自分のハードウェア上で直接利用できます。データ、プログラム、カスタム・ソフトウェアを含めてローカル環境のすべての機能にアクセスできるため、ツール呼び出しアーキテクチャーに適しています。
このチュートリアルでは、Olllamaを使用してローカル・ファイルシステムを調べ、ツール呼び出しをセットアップする方法について説明します。このタスクは、リモートLLMでは実行が困難です。ツール呼び出しやMistralやLlama 3.2などのAIエージェントの構築では、多数のOllamaモデルを利用できます。完全なリストはOllamaのWebサイトで確認できます。今回は、ツール・サポートを備えたIBM Granite 3.2 Denseを使用します。2Bモデルと8Bモデルは、ツールベースのユースケースをサポートし、検索拡張生成(RAG)、コード生成、翻訳、バグ修正の合理化のために設計された、テキストのみの高密度LLMでトレーニングされています。
このチュートリアルのノートブックは、こちらのGithubからダウンロードできます。
まず、 https://ollama.com/downloadからollamaをダウンロードし、オペレーティングシステム用にインストールします。これは、macOSでは.dmgファイルを介して行われ、Linuxでは単一のシェル・コマンド、Windowsではインストーラーで実行されます。インストーラーを実行するには、マシンの管理者アクセス権が必要になる場合があります。
ターミナルまたはコマンド・プロンプトを開いて、次の入力を実行することで、ollamaが正しくインストールされていることを確認できます:
次に、初期インポートを追加します。このデモでは、olllama Python libraryを使用してollamaと通信し、pymupdfライブラリーを使用してファイル・システム内のPDFファイルを読み取ります。
次に、このチュートリアル全体で使用するモデルを取得します。これにより、ollamaからローカル・コンピューターにモデルの重みがダウンロードされ、後でリモートAPI呼び出しを行うことなく使用できるように保管します。
次に、ollamaのツール・インスタンスがアクセスできるツールを定義します。このツールの目的はローカル・ファイル・システムにあるファイルを読み取って画像を調べることであるため、それらのツールごとに2つのPython関数を作成します。1つ目に
単純な文字列のマッチングを使用すれば、キーワードが文書内にあるかどうかを確認できますが、ollamaではローカルLLMの呼び出しが簡単なため、
モデルが「はい」と応答すると、関数はユーザーがプロンプトで指定したキーワードを含むファイル名を返します。どのファイルにも情報が含まれていない場合、この関数は文字列として「None」を返します。
olllamaはGranite 3.2 Denceをダウンロードするため、最初は関数の実行が遅くなる可能性があります。
2つ目のツールは
この関数は、ユーザーがプロンプトで指定したキーワードを含む説明を持つファイルの名前と一致する文字列を返します。
ollamaが呼び出す関数が定義されたので、olllama自体のツール情報を構成します。最初のステップは、次のollama関数を呼び出すため、ツールの名前を関数にマッピングするオブジェクトを作成することです:
次に、olllamaにどのツールにアクセスできるか、またそれらのツールが何を必要とするかを指示するツール配列を構成します。これは、ツールごとに1つのオブジェクト・スキーマを持つ配列であり、olllamaツールの呼び出しフレームワークにツールの呼び出し方法と返されるものを指示します。
先ほど作成した両方のツールの場合、それらは
ユーザー・インプットでollamaを呼び出すときに、このツール定義を使用します。
次に、ユーザー・インプットをollamaに渡して、ツール呼び出しの結果を返します。まず、llamaがシステム上で実行されていることを確認します:
Ollamaが実行されている場合は、次が返されます:
次に、ユーザーにインプットを求めます。また、アプリケーションの構成に応じて、インプットをハードコードしたり、チャット・インターフェースから取得したりすることもできます。
例として、ユーザーが「犬に関する情報」と入力すると、このセルは以下を出力します:
これで、ユーザー・クエリがollama自体に渡されます。メッセージには、ユーザーの役割とそのユーザーがインプットした内容が必要です。これは、
モデルがツール呼び出しをアウトプットに生成したので、モデルが生成したパラメーターを使用してすべてのツール呼び出しを実行し、アウトプットを確認します。このアプリケーションでは、Granite 3.2 Denseは最終的なアウトプットの生成にも使用されるため、ツール呼び出しの成果は最初のユーザーインプットに追加され、その後モデルに渡されます。
複数のツール呼び出しによってファイルの一致が返される場合、応答は配列に収集され、Granite 3.2に渡されて応答が生成されます。データの前にあるプロンプトは、モデルに応答方法を指示します:
最終的なアウトプットは、返されたファイル名または
このチュートリアルで提供されているファイルを使用すると、「犬に関する情報」というプロンプトは以下を返します:
Granite 3.2がインプットから正しいキーワード「犬」を選択し、フォルダー内のファイルを検索して、PDFファイル内のキーワードを見つけたことがわかります。LLMの結果は完全に確定的ではないため、同じプロンプトまたは非常に類似したプロンプトでも、わずかに異なる結果が得られる可能性があります。
生成AIを使用してワークフローとプロセスを自動化する強力なAIアシスタントとエージェントを構築、デプロイ、管理しましょう。
信頼できるAIソリューションでビジネスの未来を構築します。
IBMコンサルティングAIサービスは、企業がAIをトランスフォーメーションに活用する方法を再考するのに役立ちます。