OllamaとKibanaを使用して、RAG用にDeepSeek R1をローカルでテストします。
DeepSeekのローカルインスタンスを実行し、Kibana内から接続する方法を学びましょう。
中国のヘッジファンドHigh-Flyerの新しい大規模言語モデルDeepSeek R1が話題になっています。オープンウェイトの有能で思考の連鎖的推論法が導入された今、業界にとってこれが何を意味するのかについての憶測が飛び交っています。RAGとElasticsearchのすべてのベクトルデータベース機能を使用してこの新しいモデルを試してみたい方のために、ローカル推論を使用してDeepSeek R1を使い始めるための簡単なチュートリアルを以下に示します。その過程で、ElasticのPlayground機能を使用し、RAGに対するDeepseek R1の良い点と悪い点も発見します。
このチュートリアルで設定する内容の図を以下に示します。

Ollamaを使用したローカル推論の設定
Ollamaは、ローカル推論用に厳選されたオープンソースモデルのセットを迅速にテストするための優れた方法であり、AI開発者に人気のツールです。
Ollamaをベアメタルで実行
Mac、Linux、またはWindowsでのローカルインストールは、特にMシリーズのAppleチップを使用しているユーザーにとって、ローカルのGPU機能を活用する最も簡単な方法です。Ollamaをインストールしたら、次のコマンドを使用してDeepSeek R1をダウンロードして実行できます。
ハードウェアに適したパラメータサイズに調整することをお勧めします。利用可能なサイズはこちらでご確認いただけます。
ollama run deepseek-r1:7bターミナルでモデルとチャットできますが、CTL+dでコマンドを終了するか「/bye」と入力しても、モデルは実行されたままです。モデルがまだ実行中であることを確認するには、次のように入力します。
ollama psOllamaをコンテナ内で実行
最も簡単な方法としては、OllamaをDockerのようなコンテナエンジンを利用して実行することもできます。ローカルマシンのGPUの使用は、環境によっては必ずしも簡単ではありませんが、コンテナに数GBモデルに適合するRAMとストレージがあれば、簡単なテストセットアップを行うことは難しくありません。
OllamaをDockerで起動して実行するには、次のコマンドを実行するだけです。
mkdir ollama_deepseek
cd ollama_deepseek
mkdir ollama
docker run -d -v ./ollama:/root/.ollama -p 11434:11434 \
--name ollama ollama/ollamaこれにより、現在のディレクトリに「ollama」というディレクトリが作成され、コンテナ内にマウントされ、Ollamaの設定とモデルを格納します。使用するパラメータの数によって、数GBから数十GBまでの範囲になるため、十分な空き容量があるボリュームを選択してください。
注意:マシンにNvidia GPUが搭載されている場合は、必ずNvidia コンテナツールキットをインストールし、上記のdocker 実行コマンドに「--gpus=all」を追加してください。
Ollamaコンテナがマシン上で起動したら、deepseek-r1のようなモデルを次のコマンドでプルできます。
docker exec -it ollama ollama pull deepseek-r1:7bベアメタルアプローチと同様に、ハードウェアに合ったサイズにパラメーターサイズを調整したい場合があります。利用可能なサイズについては、https://ollama.com/library/deepseek-r1をご覧ください。
モデルのプルが終了したら、「/bye」と入力してプロンプトを終了できます。モデルがまだ実行中であることを確認するには以下の手段を実行します。
docker exec -it ollama ollama pscurlを使用したローカル推論のテスト
curlを使用してローカル推論をテストするには、次のコマンドを実行します。JSONナラティブ応答を簡単に読み取れるように、stream:falseを使用しています。
curl http://localhost:11434/api/generate -d '{
"model": "deepseek-r1:7b",
"stream": false,
"prompt":"Why is Elastic so cool?"
}'「OpenAI互換」のOllamaとRAGプロンプトをテスト
便利なことに、OllamaはKibanaを含む幅広いツールとの互換性のために、OpenAIの動作を模倣するRESTエンドポイントも提供しています。
curl http://localhost:11434/v1/chat/completions -d '{
"model": "deepseek-r1:7b",
"stream": false,
"messages": [
{
"role": "system",
"content": "You are a helpful AI Assistant that uses the following context to answer questions only use the following context. \n\nContext: The color of the sky today is purple. "},
{ "role": "user",
"content": "What does the sky look like today?"
}
]
}'このより複雑なプロンプトをテストすると、<think>セクションを含むコンテンツが生成されます。このセクションでは、モデルが問題を推論するようにトレーニングされています。
<think>
Okay, so I need to figure out what the user is asking for here. They provided a context where the sky is described as purple today and then asked about how the sky looks. At first glance, it seems straightforward—maybe they just want confirmation or more details on why the sky is that color.
Wait, but maybe there's something deeper. Purple skies aren't something I encounter every day. It usually happens at certain times of the year, like during sunrise or sunset with the sun setting in pink or orange. Could this be a hint about the time of day? Or perhaps it's just an unusual natural phenomenon?
I should consider if \"purple\" is a typo. Maybe they meant something else like blue or gray. But since they specifically said purple, I'll go with that. Purple skies can happen when there are atmospheric conditions that scatter light differently, maybe due to pollution or cloud cover affecting the sunset.
So, putting it all together, the user might be looking for an explanation of why today's sky is purple and what that implies about the weather or time of day. Alternatively, they could just want a simple statement confirming that the sky looks purple today.
</think>
The color of the sky today is described as purple. This unusual shade can occur due to atmospheric conditions affecting light scattering, such as during sunrise/sunset with pollution or cloud cover influencing the sunset's hues.OllamaをKibanaに接続する
Elasticsearchを使用する優れた方法は、「start-local」開発スクリプトを使うことです。
KibanaとElastisearchがネットワーク上でOllamaにアクセスできることを確認します。Elastic Stackのローカルコンテナ設定を使用している場合は、「localhost」を「host.docker.internal」または「host.containers.internal」に置き換える必要があるかもしれません。これは、ホストマシンへのネットワークパスを取得するためです。
Kibanaで、[Stack Management] > [アラートと洞察] > [コネクタ]に移動します。
この一般的な設定の警告が表示された場合の対処方法
xpack.encryptedSavedObjects.encryptionKeyが正しく設定されていることを確認する必要があります。これは、KibanaのローカルDockerインストールを実行する際によく見落とされる手順であるため、Docker構文で修正する手順をリストします。

コンテナのシャットダウン時に変更が保存されるように、kibana/configディレクトリを永続化してください。私のKibanaコンテナのボリュームは、docker-compose.ymlで次のようになります。
services:
kibana:
...
volumes:
- certs:/usr/share/kibana/config/certs
- kibanadata:/usr/share/kibana/data
- kibanaconfig:/usr/share/kibana/config
...
volumes:
certs:
driver: local
esdata01:
driver: local
kibanadata:
driver: local
kibanaconfig:
driver: localこれで、キーストアを作成し、値を入れて、コネクタのキーが平文で格納されないようにすることができます。
## generate some new keys for me and print them to the terminal
docker exec -it kibana_1 bin/kibana-encryption-keys generate
## create a new keystrore
docker exec -it kibana_1 bin/kibana-keystore create
docker exec -it kibana_1 bin/kibana-keystore add xpack.encryptedSavedObjects.encryptionKey
## You'll be prompted to paste in a value変更を確実に有効にするには、クラスター全体を完全に再起動してください。
コネクタの作成
コネクタ構成画面(Kibana では、[Stack Management] > [アラートと洞察] > [コネクタ] に移動)からコネクタを作成し、[OpenAI] タイプを選択します。
コネクタを次の設定で構成します。
コネクタ名:Deepseek(Ollama)
OpenAIプロバイダーを選択:その他(OpenAI互換サービス)
URL: http://localhost:11434/v1/chat/completions
ollamaへの正しいパスを調整してください。コンテナ内から呼び出す場合は、host.docker.internalまたは同等のものに置き換えてください。
デフォルトモデル:deepseek-r1:7b
APIキー:何か適当に入力してください。入力は必要ですが、値は重要ではありません。
コネクタセットアップでのOllamaへのカスタムコネクタのテストは現在8.17では機能しませんが、Kibanaの今後の8.18ビルドでは修正される予定です。
コネクタは次のようになります。

Elasticsearchにベクトル埋め込みデータを取り込む
すでにPlaygroundに精通していてデータが設定されている場合は以下のPlaygroundの手順にスキップできますが、簡単なテストデータが必要な場合は、_inference APIが設定されていることを確認する必要があります。8.17以降、機械学習の割り当ては動的であるため、e5多言語高密度ベクトルをダウンロードして有効にするには、Kiban Devツールで次のコマンドを実行する必要があります。
GET /_inference
POST /_inference/text_embedding/.multilingual-e5-small-elasticsearch
{
"input": "are internet memes about deepseek sound investment advice?"
}まだダウンロードしていない場合は、Elasticのモデルリポジトリからe5モデルのダウンロードが開始されます。
次に、RAGのコンテキストとしてパブリックドメインの書籍を読み込みましょう。こちらのリンクから、プロジェクト・グーテンベルクで「不思議の国のアリス」をダウンロードできます。これを.txtファイルとして保存してください。
[Elasticsearch] > [ホーム] > [ファイルのアップロード] に移動します。

テキストファイルを選択またはドラッグアンドドロップし、インポートボタンを押します。
「データのインポート」画面で「詳細設定」タブを選択し、インデックス名を「book_alice」に設定します。
「自動的に作成されたフィールド」のすぐ下にある小さな「追加フィールドを追加」オプションを選択します。「セマンティックテキストフィールドの追加」を選択し、推論エンドポイントを「.multilingual-e5-small-elasticsearch」に変更します。[追加] を選択し、[インポート] を選択します。

ロードと推論が完了したら、Playgroundに向かう準備が整います。
PlaygroundでのRAGのテスト
Kibanaで [Elasticsearch] > [Playground] に移動します。
Playground画面には、コネクタが存在することを示す緑色のチェックマークと「LLM接続済み」と表示されます。これは、上記で作成したOllamaコネクタです。Playgroundのより詳しいガイドについては、こちらをご覧ください。
青色の [データソースを追加] をクリックし、以前に作成したbook_aliceインデックス、または埋め込みに推論APIを利用する以前に構成した別のインデックスを選択します。
Deepseekは、強力なアライメント特性を備えた思考連鎖モデルです。これはRAGの観点から見ると良い点と悪い点の両方があります。思考連鎖のトレーニングは、Deepseekが引用文の中で一見矛盾しているように見える記述を合理化するのに役立つかもしれませんが、トレーニング知識への強力な整合性により、コンテキストの根拠よりも独自の世界の事実を優先する可能性があります。善意ではありますが、この強固な整合性により、LLMが個人的な知識が一致しないトピックや、トレーニングデータセットで十分に表現されていないトピックについて話し合う際に、指導が困難になることが知られています。
Playgroundのセットアップでは、「You are an assistant for question-answering tasks using relevant text passages from the book Alice in wonderland」というシステムプロンプトを入力し、他のデフォルトを受け入れました。
「Who was at the tea party?」という質問に対する答えはこうです。「Answer: The March Hare, the Hatter, and the Dormouse were at the tea party. [Citation: position 1 and 2]」これは正しいです。

<think>タグを見ると、Deepseekが質問に答えるために引用の内容をしっかりと検討したことがわかります。
アライメントの限界をテスト
Deepseekのために知的に挑戦的なシナリオをテストとして作成しましょう。Deepseekのトレーニングデータが真実ではないと知っている陰謀論のインデックスを作成します。
Kibana開発ツールで、次のインデックスとデータを作成しましょう。
PUT /classic_conspiracies
{
"mappings": {
"properties": {
"content": {
"type": "text",
"copy_to": "content_semantic"
},
"content_semantic": {
"type": "semantic_text",
"inference_id": ".multilingual-e5-small-elasticsearch"
}
}
}
}
POST /classic_conspiracies/_doc/1
{
"content": "birds aren't real, the government replaced them with drones a long time ago"
}
POST /classic_conspiracies/_doc/2
{
"content": "tinfoil hats are necessary to prevent our brains from being read"
}
POST /classic_conspiracies/_doc/3
{
"content": "ancient aliens influenced early human civilizations, this explains why things made out of stone are marginally similar on different continents"
}これらの陰謀論は、LLMの基礎となるでしょう。積極的にシステムプロンプトを出したにもかかわらず、Deepseekは私たちが説明した事実を受け入れません。自分の個人データの方が信頼性が高く、根拠があり、組織のニーズに合っていることがわかっている状況だったら、これは受け入れられないでしょう。
「are birds real?」というテストの質問(説明はknow your meme)に対して、次の答えが得られます。「In the provided context, birds are not considered real, but in reality, they are real animals. [Context: position 1]」。このテストにより、DeepSeek R1は7Bパラメータレベルでも強力であることが証明されました。ただし、データセットによっては、RAGにとって最適な選択ではない可能性があります。

今回学んだ内容
まとめると以下のようになります。
Ollamaなどのツールでモデルをローカルで実行することは、モデルの動作を確認するのに最適なオプションです。
DeepSeek R1は推論モデルであるため、RAGのようなユースケースには利点と欠点があります。
Playground は、AIホスティングの初期の時代にデファクトスタンダードになりつつあるOpenAIのようなREST APIを介してOllamaなどの推論ホスティングフレームワークに接続できます。
全体として、ローカルの「エアギャップ」RAGがここまで進歩したことに感銘を受けました。Elasticsearch、Kibana、そして利用可能なオープンウェイトモデルのツールは、2023年にプライバシー重視のAI検索について初めて記事を書いたときから大幅に進歩しました。
よくあるご質問
DeepSeekとは?
Deepseek は、中国のヘッジファンド High-Flyer によって作成された大規模な言語モデルです。




