使用 Ollama 和 Kibana 在本地為 RAG 測試 DeepSeek R1

作者:來自 Elastic?Dave Erickson?及?Jakob Reiter

每個人都在談論 DeepSeek R1,這是中國對沖基金 High-Flyer 的新大型語言模型。現在他們推出了一款功能強大、具有開放權重的思想鏈推理 LLM,這則新聞充滿了對行業意味著什么的猜測。對于那些想嘗試使用 RAG 和 Elasticsearch 的所有向量數據庫智能的新模型的人,這里有一個快速教程,幫助你開始使用 DeepSeek R1 進行本地推理。在此過程中,我們將使用 Elastic 的 Playground 功能,甚至發現 Deepseek R1 對 RAG 的一些優缺點。

這是我們將在本教程中配置的內容的圖表:

使用 Ollama 設置本地推理

Ollama 是一種快速測試精選的本地推理開源模型集的好方法,也是 AI 開發人員的熱門工具。

運行 Ollama 裸機

在 Mac、Linux 或 Windows 上本地安裝是利用你可能擁有的任何本地 GPU 功能的最簡單方法,尤其是對于那些擁有 M 系列 Apple 芯片的用戶。 安裝 Ollama 后,你可以使用以下命令下載并運行 DeepSeek R1。

你可能需要將參數大小調整為適合你硬件的大小。 可用大小可在此處找到。

ollama run deepseek-r1:7b

你可以在終端中與模型聊天,但當你按 CTL+d 退出命令或輸入 “/bye” 時,模型仍會繼續運行。要查看仍在運行的模型,請輸入:

ollama ps

在容器中運行 Ollama

或者,運行 Ollama 的最快方法是利用 Docker 等容器引擎。使用本地機器的 GPU 并不總是那么簡單,這取決于你的環境,但只要你的容器具有適合多 GB 模型的 RAM 和存儲空間,快速測試設置并不困難。

在 Docker 中啟動和運行 Ollama 非常簡單,只需執行:

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 run 命令中添加 “--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 ps

使用 curl 測試我們的本地推理

要使用 curl 測試本地推理,你可以運行以下命令。我們使用 stream:false 以便我們可以輕松讀取 JSON 敘述響應:

curl http://localhost:11434/api/generate -d '{"model": "deepseek-r1:7b","stream": false,"prompt":"Why is Elastic so cool?"
}'

測試 “與 OpenAI 兼容” 的 Ollama 和 RAG 提示

方便的是,Ollama 還提供一個 REST 端點,模仿 OpenAI 的行為,以便與包括 Kibana 在內的各種工具兼容。

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 堆棧的本地容器設置,則可能意味著將“localhost”替換為“host.docker.internal”或“host.containers.internal”以獲取到主機的網絡路徑。

在 Kibana 中,導航到Stack Management > Alerts and Insights > Connectors。

如果你看到這是常見的設置警告,該怎么辦

你需要確保 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: localesdata01:driver: localkibanadata:driver: localkibanaconfig: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 > Alerts and Insights?> Connectors),創建一個連接器并選擇 “OpenAI” 類型。

使用以下設置配置連接器

  • Connector name:Deepseek (Ollama)
  • 選擇 OpenAI? provider:other (OpenAI Compatible Service)
  • 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 /_inferencePOST /_inference/text_embedding/.multilingual-e5-small-elasticsearch
{"input": "are internet memes about deepseek sound investment advice?"
}

如果你還沒有這樣做,這將觸發從 Elastic 的模型存儲庫下載 e5 模型。

接下來,讓我們加載一本公共領域的書作為我們的 RAG 上下文。這是從 Project Gutenberg 下載 “愛麗絲夢游仙境” 的地方:鏈接。將其保存為 .txt 文件。

導航到 Elasticsearch > Home > Upload a file

選擇或拖放文本文件,然后點擊 “Import” 按鈕。

在 “Import data” 屏幕上,選擇 “Advanced” 選項卡,然后將索引名稱設置為 “book_alice”。

選擇 Add additional field” 選項,它位于 “Automatically created fields” 正下方。選擇“ Add semantic text field” 并將推理端點更改為 “.multilingual-e5-small-elasticsearch”。選擇 “Add”,然后選擇 “Import”。

當加載和推理完成后,我們就可以前往 Playground 了。

在 Playground 中測試 RAG

在 Kibana 中導航到 Elasticsearch > Playground。

在 Playground 屏幕上,你應該會看到一個綠色復選標記和 “LLM Connected”,表示連接器已存在。這是我們剛剛在上面創建的 Ollama 連接器。可以在此處找到 Playground 的詳細指南。

單擊藍色的 Add data sources,然后選擇我們之前創建的 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? - 誰參加了茶話會?”這個問題,我們得到的答案是:“The March Hare, the Hatter, and the Dormouse were at the tea party. [Citation: position 1 and 2] - 答案:三月兔、帽匠和睡鼠參加了茶話會。[引用:位置 1 和 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] - 在提供的上下文中,鳥類不被認為是真實的,但實際上,它們是真實的動物。[上下文:位置 1]”。這個測試證明 DeepSeek R1 非常強大,即使在 7B 參數級別也是如此……然而,它可能不是 RAG 的最佳選擇,這取決于我們的數據集。

那么我們學到了什么?

總結:

  • 在 Ollama 等工具中本地運行模型是了解模型行為的絕佳選擇。
  • DeepSeek R1 是一個推理模型,這意味著它對于 RAG 等用例有優點和缺點。
  • Playground 能夠通過類似 OpenAI 的 REST API 連接到 Ollama 等推理托管框架,這種方式正逐漸成為 AI 托管的事實標準。

總體而言,我們對本地 “隔離” RAG(檢索增強生成)技術的發展感到驚喜。自 2023 年我們首次撰寫關于隱私優先的 AI 搜索以來,Elasticsearch、Kibana 以及可用的開源權重模型都取得了顯著進步。

想要獲得 Elastic 認證?了解下一次 Elasticsearch 工程師培訓何時開始!

Elasticsearch 包含許多新功能,可幫助你為你的用例構建最佳搜索解決方案。深入了解我們的示例筆記本以了解更多信息,開始免費云試用,或立即在你的本地機器上試用 Elastic。

原文:Testing DeepSeek R1 locally for RAG with Ollama and Kibana - Elasticsearch Labs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67966.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67966.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67966.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年大年初一篇,C#調用GPU并行計算推薦

C#調用GPU庫的主要目的是利用GPU的并行計算能力&#xff0c;加速計算密集型任務&#xff0c;提高程序性能&#xff0c;支持大規模數據處理&#xff0c;優化資源利用&#xff0c;滿足特定應用場景的需求&#xff0c;并提升用戶體驗。在需要處理大量并行數據或進行復雜計算的場景…

Unity 2D實戰小游戲開發跳跳鳥 - 計分邏輯開發

上文對障礙物的碰撞邏輯進行了開發,接下來就是進行跳跳鳥成功穿越過障礙物進行計分的邏輯開發,同時將對應的分數以UI的形式顯示告訴玩家。 計分邏輯 在跳跳鳥通過障礙物的一瞬間就進行一次計分,計分后會同步更新分數的UI顯示來告知玩家當前獲得的分數。 首先我們創建一個用…

langchain基礎(二)

一、輸出解析器&#xff08;Output Parser&#xff09; 作用&#xff1a;&#xff08;1&#xff09;讓模型按照指定的格式輸出&#xff1b; &#xff08;2&#xff09;解析模型輸出&#xff0c;提取所需的信息 1、逗號分隔列表 CommaSeparatedListOutputParser&#xff1a;…

游戲AI,讓AI 玩游戲有什么作用?

讓 AI 玩游戲這件事遠比我們想象的要早得多。追溯到 1948 年&#xff0c;圖靈和同事錢伯恩共同設計了國際象棋程序 Turochamp。之所以設計這么個程序&#xff0c;圖靈是想說明&#xff0c;機器理論上能模擬人腦能做的任何事情&#xff0c;包括下棋這樣復雜的智力活動。 可惜的是…

鴻蒙物流項目之基礎結構

目錄&#xff1a; 1、項目結構2、三種包的區別和使用場景3、靜態資源的導入4、顏色樣式設置5、修改項目名稱和圖標6、靜態包基礎目錄7、組件的抽離8、在功能模塊包里面引用靜態資源包的組件 1、項目結構 2、三種包的區別和使用場景 3、靜態資源的導入 放在har包中&#xff0c;那…

Cursor 與多語言開發:全棧開發的利器

引言 全棧開發要求開發者跨越前端、后端、數據庫甚至數據科學等多個技術領域&#xff0c;而不同技術棧往往需要切換工具和思維方式。Cursor 作為一款 AI 驅動的智能編程助手&#xff0c;憑借其對 20 編程語言 和主流框架的深度支持&#xff0c;正在成為全棧開發的“瑞士軍刀”…

算法設計-0-1背包動態規劃(C++)

一、問題闡述 0-1 背包問題的目標是在給定背包容量 W 的情況下&#xff0c;從 n 個物品中選擇一些物品放入背包&#xff0c;使得背包中物品的總價值最大。每個物品只能選擇一次&#xff08;即要么放入背包&#xff0c;要么不放入&#xff09;。 二、代碼 #include <iostr…

51c視覺~CV~合集10

我自己的原文哦~ https://blog.51cto.com/whaosoft/13241694 一、CV創建自定義圖像濾鏡 熱圖濾鏡 這組濾鏡提供了各種不同的藝術和風格化光學圖像捕捉方法。例如&#xff0c;熱濾鏡會將圖像轉換為“熱圖”&#xff0c;而卡通濾鏡則提供生動的圖像&#xff0c;這些圖像看起來…

全棧開發:使用.NET Core WebAPI構建前后端分離的核心技巧(二)

目錄 配置系統集成 分層項目使用 篩選器的使用 中間件的使用 配置系統集成 在.net core WebAPI前后端分離開發中&#xff0c;配置系統的設計和集成是至關重要的一部分&#xff0c;尤其是在管理不同環境下的配置數據時&#xff0c;配置系統需要能夠靈活、可擴展&#xff0c…

上海路網道路 水系鐵路綠色住宅地工業用地面圖層shp格式arcgis無偏移坐標2023年

標題和描述中提到的資源是關于2023年上海市地理信息數據的集合&#xff0c;主要包含道路、水系、鐵路、綠色住宅區以及工業用地的圖層數據&#xff0c;這些數據以Shapefile&#xff08;shp&#xff09;格式存儲&#xff0c;并且是適用于ArcGIS軟件的無偏移坐標系統。這個壓縮包…

Rust HashMap :當儲物袋遇上物品清單

開場白&#xff1a;哈希映射的魔法本質 在Rust的奇幻世界里&#xff0c;HashMap就像魔法師的儲物袋&#xff1a; 鍵值對存儲 → 每個物品都有專屬咒語&#xff08;鍵&#xff09;和實體&#xff08;值&#xff09;快速查找 → 念咒瞬間召喚物品動態擴容 → 自動伸展的魔法空間…

Spring Boot統一異常攔截實踐指南

Spring Boot統一異常攔截實踐指南 一、為什么需要統一異常處理 在Web應用開發中&#xff0c;異常處理是保證系統健壯性和用戶體驗的重要環節。傳統開發模式中常見的痛點包括&#xff1a; 異常處理邏輯分散在各個Controller中錯誤響應格式不統一敏感異常信息直接暴露給客戶端…

使用 Elastic Cloud Hosted 優化長期數據保留:確保政府合規性和效率

作者&#xff1a;來自 Elastic Jennie Davidowitz 在數字時代&#xff0c;州和地方政府越來越多地承擔著管理大量數據的任務&#xff0c;同時確保遵守嚴格的監管要求。這些法規可能因司法管轄區而異&#xff0c;通常要求將數據保留較長時間 —— 有時從一年到七年不等。遵守刑事…

Oracle Primavera P6 最新版 v24.12 更新 2/2

目錄 一. 引言 二. P6 EPPM 更新內容 1. 用戶管理改進 2. 更輕松地標準化用戶設置 3. 摘要欄標簽匯總數據字段 4. 將里程碑和剩余最早開始日期拖到甘特圖上 5. 輕松訪問審計數據 6. 粘貼數據時排除安全代碼 7. 改進了狀態更新卡片視圖中的篩選功能 8. 直接從活動電子…

linux本地部署deepseek-R1模型

國產開源大模型追平甚至超越了CloseAI的o1模型&#xff0c;大國崛起時刻&#xff01;&#xff01;&#xff01; DeepSeek R1 本地部署指南 ??在人工智能技術飛速發展的今天&#xff0c;本地部署AI模型成為越來越多開發者和企業關注的焦點。本文將詳細介紹如何在本地部署DeepS…

C基礎寒假練習(2)

一、輸出3-100以內的完美數&#xff0c;(完美數&#xff1a;因子和(因子不包含自身)數本身 #include <stdio.h>// 函數聲明 int isPerfectNumber(int num);int main() {printf("3-100以內的完美數有:\n");for (int i 3; i < 100; i){if (isPerfectNumber…

有限元分析學習——Anasys Workbanch第一階段筆記梳理

第一階段筆記主要源自于嗶哩嗶哩《ANSYS-workbench 有限元分析應用基礎教程》 張曄 主要內容導圖&#xff1a; 筆記導航如下&#xff1a; Anasys Workbanch第一階段筆記(1)基本信息與結果解讀_有限元分析變形比例-CSDN博客 Anasys Workbanch第一階段筆記(2)網格單元與應力奇…

html基本結構和常見元素

html5文檔基本結構 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>文檔標題</title> </head> <body>文檔正文部分 </body> </html> html文檔可分為文檔頭和文檔體…

Cursor如何使用Google Gemini以及碰到的坑

Cursor如何使用Google Gemini以及碰到的坑 Cursor介紹下載安裝Google Gemini介紹Google Gemini 官網申請Google Gemini API網址 配置Cursor使用Google Gemini打開Corsur設置 Cursor介紹 ?Cursor是一款基于人工智能的代碼編輯器&#xff0c;旨在幫助開發者更高效地編寫代碼。?…

【云安全】云原生-K8S-簡介

K8S簡介 Kubernetes&#xff08;簡稱K8S&#xff09;是一種開源的容器編排平臺&#xff0c;用于管理容器化應用的部署、擴展和運維。它由Google于2014年開源并交給CNCF&#xff08;Cloud Native Computing Foundation&#xff09;維護。K8S通過提供自動化、靈活的功能&#xf…