Ollama を推論 API と共に使用する

Ollama API は OpenAI API と互換性があるため、Ollama を Elasticsearch と統合するのは非常に簡単です。

Elasticsearchは、業界をリードする生成AIツールやプロバイダーとネイティブに統合されています。RAG応用編やElasticベクトルデータベースで本番環境対応のアプリを構築する方法についてのウェビナーをご覧ください。

ユースケースに最適な検索ソリューションを構築するには、無料のクラウドトライアルを始めるか、ローカルマシンでElasticを試してみてください。

この記事では、Ollama を使用してローカル モデルを Elasticsearch 推論モデルに接続し、Playground を使用してドキュメントに質問する方法を学習します。

Elasticsearch を使用すると、ユーザーは Open Inference APIを使用して LLM に接続でき、Amazon Bedrock、Cohere、Google AI、Azure AI Studio、HuggingFace などのプロバイダーをサービスとしてサポートします。

Ollama は、独自のインフラストラクチャ (ローカル マシン/サーバー) を使用して LLM モデルをダウンロードおよび実行できるツールです。ここでは、Ollama と互換性のある利用可能なモデルのリストを見つけることができます。

Ollama は、各モデルをセットアップする方法の違いや、モデル関数にアクセスするための API の作成方法について心配することなく、さまざまなオープンソース モデルをホストしてテストしたい場合に最適なオプションです。Ollama がすべてを処理します。

Ollama API は OpenAI API と互換性があるため、推論モデルを簡単に統合し、Playground を使用して RAG アプリケーションを作成できます。

要件

  1. エラスティックサーチ 8.17
  2. キバナ 8.17
  3. Python

ステップ

  1. Ollama LLMサーバーのセットアップ
  2. マッピングの作成
  3. データのインデックス作成
  4. Playgroundを使って質問する

Ollama LLMサーバーのセットアップ

Ollama を使用して、LLM サーバーを設定し、Playground インスタンスに接続します。以下のことが必要です:

  • Ollamaをダウンロードして実行します。
  • ngrokを使用して、インターネット経由でOllamaをホストするローカルWebサーバーにアクセスします。

Ollamaをダウンロードして実行する

Ollama を使用するには、まずダウンロードする必要があります。Ollama は Linux、Windows、macOS をサポートしているので、ここからお使いの OS と互換性のある Ollama バージョンをダウンロードしてください。Ollama がインストールされると、サポートされている LLM のリストからモデルを選択できます。この例では、汎用多言語モデルであるllama3.2モデルを使用します。セットアップ プロセスでは、Ollama のコマンド ライン ツールを有効にします。ダウンロードが完了したら、次の行を実行できます。

出力は次のようになります:

インストールしたら、次のコマンドでテストできます。

質問してみましょう:

モデルを実行すると、Ollama はポート「11434」でデフォルトで実行される API を有効にします。公式ドキュメントに従って、その API にリクエストを送信してみましょう。

私たちが受け取った回答は次のとおりです。

このエンドポイントの特定の応答はストリーミングであることに注意してください。

ngrokを使用してエンドポイントをインターネットに公開する

エンドポイントはローカル環境で動作するため、Elastic Cloud インスタンスなどの別のポイントからインターネット経由でアクセスすることはできません。ngrok を使用すると、パブリック IP を提供するポートを公開できます。ngrok でアカウントを作成し、公式のセットアップ ガイドに従ってください。

ngrok エージェントをインストールして構成したら、Ollama が使用しているポートを公開できます。

注: ヘッダー--host-header="localhost:11434"、リクエスト内の「Host」ヘッダーが「localhost:11434」と一致することを保証します。

このコマンドを実行すると、ngrok と Ollama サーバーがローカルで実行されている限り機能するパブリック リンクが返されます。

「転送」では、ngrok が URL を生成したことがわかります。後で使用するために保存します。

ngrok によって生成された URL を使用して、エンドポイントへの HTTP リクエストを再度実行してみましょう。

応答は前のものと同様になるはずです。

マッピングの作成

ELSERエンドポイント

この例では、 Elasticsearch 推論 API を使用して推論エンドポイントを作成します。さらに、 ELSERを使用して埋め込みを生成します。

この例では、2 種類の薬を販売する薬局があるとします。

  • 処方箋が必要な医薬品。
  • 処方箋を必要としない医薬品。

この情報は各薬剤の説明欄に含まれます。

LLM はこのフィールドを解釈する必要があるため、次のデータ マッピングを使用します。

フィールドtext_descriptionは説明のプレーンテキストが格納され、 semantic_textフィールド タイプであるsemantic_fieldには ELSER によって生成された埋め込みが格納されます。

プロパティcopy_to は、フィールド名とtext_descriptionの内容をセマンティック フィールドにコピーし、それらのフィールドの埋め込みが生成されます。

データのインデックス作成

ここで、 _bulk APIを使用してデータをインデックス化してみましょう。

対応:

Playgroundを使って質問する

Playground は、Elasticsearch インデックスと LLM プロバイダーを使用して RAG システムをすばやく作成できる Kibana ツールです。詳細については、この記事をお読みください。

ローカルLLMをPlaygroundに接続する

まず、作成したパブリック URL を使用するコネクタを作成する必要があります。Kibana で、 「検索」>「プレイグラウンド」に移動し、「LLM に接続」をクリックします。

このアクションにより、Kibana インターフェースの左側にメニューが表示されます。そこで、「OpenAI」をクリックします。

これで、OpenAI コネクタの設定を開始できます。

「コネクタ設定」に移動し、OpenAI プロバイダーの場合は「その他 (OpenAI 互換サービス)」を選択します。

次に、他のフィールドを設定しましょう。この例では、モデル名を「medicines-llm」とします。URLフィールドには、ngrokによって生成されたURL( /v1/chat/completions )を使用します。「デフォルトモデル」フィールドで、「llama3.2」を選択します。API キーは使用しないので、任意のテキストを入力して続行します。

「保存」をクリックし、「データ ソースの追加」をクリックしてインデックス医薬品を追加します。

素晴らしい!これで、RAG エンジンとしてローカルで実行している LLM を使用して Playground にアクセスできるようになりました。

テストする前に、エージェントにさらに具体的な指示を追加し、モデルに送信されるドキュメントの数を 10 に増やして、回答にできるだけ多くのドキュメントが含まれるようにします。コンテキスト フィールドはsemantic_fieldになり、copy_to プロパティにより、薬剤の名前と説明が含まれます。

さて、質問しましょう:処方箋なしでクロナゼパムを購入できますか?そして何が起こるか見てみましょう:

予想通り、正しい答えが得られました。

今後の見通し

次のステップは、独自のアプリケーションを作成することです。Playground は、マシン上で実行し、ニーズに合わせてカスタマイズできる Python のコード スクリプトを提供します。たとえば、 FastAPIサーバーの背後に配置して、UI で使用される QA 医薬品チャットボットを作成します。

このコードは、Playground の右上のセクションにある[コードの表示]ボタンをクリックすると見つかります。

また、エンドポイントと API キーを使用して、コードで必要なES_API_KEY環境変数を生成します。

この特定の例では、コードは次のようになります。

Ollama で動作させるには、OpenAI クライアントを OpenAI サーバーではなく Ollama サーバーに接続するように変更する必要があります。OpenAI の例と互換性のあるエンドポイントの完全なリストについては、こちらをご覧ください。

また、補完メソッドを呼び出すときにモデルを llama3.2 に変更します。

質問を追加しましょう:処方箋なしでクロナゼパムを購入できますか?Elasticsearch クエリへ:

また、いくつかの出力を伴う完了呼び出しでは、質問のコンテキストの一部として Elasticsearch の結果が送信されていることを確認できます。

ではコマンドを実行してみましょう

pip install -qU elasticsearch openai

python main.py

次のような画面が表示されます。

まとめ

この記事では、Ollama などのツールを Elasticsearch 推論 API および Playground と組み合わせて使用した場合の、その強力さと汎用性について説明します。

いくつかの簡単な手順を実行するだけで、LLM を使用したチャット機能を備えた RAG アプリケーションが、コストゼロで独自のインフラストラクチャで稼働するようになりました。これにより、さまざまなタスクのさまざまなモデルにアクセスできるだけでなく、リソースと機密情報をより細かく制御できるようになります。

よくあるご質問

Ollamaとは何ですか?

Ollama は、独自のインフラストラクチャ (ローカル マシン/サーバー) を使用して LLM モデルをダウンロードおよび実行できるツールです。

関連記事

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう