從裁員到年薪百萬:程序員靠RAG技術逆襲的“核心密碼”
1.前言
作為一名從業七年的程序員,最近聽到很多程序員朋友都喜提了n+1裁員大禮包。上周與老友聚會時,大家紛紛訴說著各自最近的遭遇,聚會氣氛一度十分沉重。老Z感嘆:“公司決定將部分業務外包,結果我被列入了裁員名單。”老L則無奈道:“市場競爭激烈,項目減少,團隊預算被削減,前幾天我也被裁掉了。”聚會回家后我十分焦慮地打開了招聘軟件,發現傳統程序員的崗位出現了僧多肉少的情況,hr每天回復幾十次的都有,關鍵薪資待遇并不是很理想。我出于好奇心搜了一下AI相關崗位,發現今年AI崗位出了很多,關鍵在于投遞的人少了很多但是薪資翻了多倍...
在AI技術飛速發展的今天,我意識到程序員轉型為AI工程師似乎是一個不錯的選擇。然而,這一轉型并非易事,既需要扎實的編程基礎,又需深入理解各種AI模型和技術。其中,檢索增強生成(RAG)技術作為大模型落地的關鍵技術,通過將大型語言模型與外部知識庫相結合,顯著提升了生成式AI的準確性和時效性。掌握RAG技術,不僅能增強AI系統的響應能力,還能有效解決傳統語言模型在處理特定領域知識時的局限性。學習并掌握RAG技術,對于希望在AI領域發展的程序員而言,具有重要意義。
本文我們將從RAG相關原理入手,介紹如何基于RAGFlow本地部署DeepSpeek-R1大模型以及搭建知識庫,如果感興趣就往下約閱讀吧~
2. RAG相關概念講解(對概念不感興趣就跳過)
2.1. 什么是Embedding
Embedding(嵌入)是把信息(比如單詞、句子、文檔)轉化為計算機能夠理解的數字形式。我們把這種轉化得到的數字向量稱為“Embedding向量”。這種做法在很多AI應用中都很常見,尤其是在處理文本時。想象一下,你和朋友在討論《紅樓夢》中的人物時,可能會提到“林黛玉”和“賈寶玉”這兩個角色。在你們的談話中,這些名字不僅僅是字面上的稱呼,它們還承載著豐富的情感和故事背景。同樣地,計算機也需要一種方式來理解這些詞語背后的深層含義。Embedding(嵌入)就是一種將詞語、句子或文檔轉化為計算機可以理解的數字形式的方法。通過這種方式,計算機能夠“感知”詞語之間的關系和相似性。
舉個例子:
假設我們將“林黛玉”和“賈寶玉”這兩個角色轉化為一組數字,例如:
- ? 林黛玉:[0.2, 0.8, -0.5, ...]
- ? 賈寶玉:[0.3, 0.7, -0.4, ...]
這些數字背后的含義可能是:
- ? 第一個數字:代表角色的文學地位。
- ? 第二個數字:代表角色的性格特征。
- ? 第三個數字:代表角色的情感經歷。
由于“林黛玉”和“賈寶玉”在故事中有著深厚的關系和相似的性格特征,所以它們的數字表示在計算機的“心目”中會比較接近。這種接近性幫助計算機理解它們在語義上的相似性:
2.2 Embedding 模型精選與對比
為幫助讀者快速選擇適合 RAG 系統的嵌入模型,本文結合最新行業評測(截至2025年3月)整理出以下主流模型及其特性:
模型名稱 | 開發團隊 | 核心特點 | 適用場景 | 性能指標(MTEB/MIRACL) |
BGE-M3 | 智源研究院 | 支持100+語言,集成稠密/稀疏/多向量混合檢索,8192 tokens長文本處理能力 | 企業級多語言知識庫、復雜格式文檔檢索(表格/圖表解析) | MIRACL平均召回率89.2% |
Gemini Embedding | Google AI | 基于動態稀疏注意力機制,支持8K上下文,Matryoshka降維技術減少83%存儲需求 | 多模態檢索、金融/法律領域長文檔分析、跨語言知識庫 | MMTEB多語言Borda分數最高 |
mxbai-embed-large | Mixed Bread AI | 1024維高精度向量,短文本優化,模型體積僅為OpenAI text-embedding-3-large的60% | 中小團隊快速部署、實時語義搜索(電商/客服場景) | MTEB平均得分72.1 |
nomic-embed-text | Nomic AI | 768維平衡設計,短文本相似度計算效率領先,支持動態分塊策略 | 社交媒體內容分析、競品監控、短問答系統 | 短文本檢索F1值78.5% |
Jina Embedding | Jina AI | 基于3.8億高質量句對訓練,35M參數量推理速度極快 | 移動端輕量化應用、邊緣計算場景(如物聯網設備日志分析) | 推理速度比同類快3倍 |
GTE | 阿里巴巴達摩院 | 基于BERT框架優化,直接處理代碼無需微調,適配技術文檔檢索 | 開發者文檔檢索(如API手冊查詢)、編程問答社區 | 代碼檢索準確率92.7% |
模型選擇建議
- 企業級復雜場景:優先選擇 BGE-M3 或 Gemini Embedding,兩者在混合檢索、長文本處理和多語言支持上表現突出;
- 輕量化部署需求:mxbai-embed-large(高精度)和 nomic-embed-text(高效率)是性價比之選;
- 技術文檔與代碼場景:GTE 的代碼原生支持特性可減少30%的誤召回率;
- 移動/邊緣計算:Jina Embedding 憑借35M參數量和高效推理架構,適合資源受限環境。
注:以上數據參考自MTEB 2025官方榜單及企業實測報告,完整評測方法可訪問 HuggingFace MTEB Leaderboard。
2.3. RAG工作流程
檢索增強生成(Retrieval-Augmented Generation,簡稱RAG)是一種將信息檢索技術與生成模型結合的方法,主要用來提升大型語言模型在處理知識密集型任務時的表現。RAG的工作流程可以分為四個主要步驟,簡單來說就是:檢索、增強、生成。
- 數據索引(Indexing) :
- 數據預處理:首先,我們需要對原始數據進行清洗和規范化處理。這樣可以確保數據的質量,去掉那些無關或干擾的信息。
- 向量化處理:接下來,我們使用一些嵌入模型將這些數據轉換成向量形式。向量化的目的是把數據中的語義信息提取出來,以便后續處理。
- 建立索引:最后,將這些向量化的數據存儲到向量數據庫中,并為它們建立索引。這樣,系統就能快速檢索到相關數據。
- 檢索(Retrieval) :
- 查詢處理:當用戶提交問題時,系統會先將用戶的查詢轉化成向量表示。
- 相似度計算:然后,系統會計算查詢向量和數據庫中所有數據向量之間的相似度。通常,余弦相似度是常用的計算方法。
- 檢索相關數據:根據計算出的相似度,系統會從數據庫中提取出最相關的數據片段。
- 增強(Augmentation) :
- 構建增強提示:此時,系統將用戶的查詢與檢索到的相關數據結合,構建一個增強的提示(prompt)。這個提示將提供給生成模型,確保它能夠利用最新、最相關的信息來生成回答。
- 生成(Generation) :
- 生成響應:生成模型會根據這個增強的提示,生成最終的響應。由于它結合了最新的知識和數據,因此生成的回答會更加準確和相關。
2.4. 如何構建高效的RAG系統?
要打造一個高效的RAG系統,主要優化的點在于構建數據索引這一步,以下幾個關鍵步驟非常重要:
- 數據預處理的重要性:在RAG系統中,數據預處理至關重要。包括數據清洗和規范化處理,能有效提升檢索效果。如果數據沒有經過清理,就可能包含很多噪聲或冗余信息,這會影響檢索器的表現,從而影響生成模型的輸出質量。
- 數據分塊策略:當處理長文檔時,拆分成合適大小的塊會更有幫助。這不僅能提高檢索效率,還能提高準確性。當然,塊的大小需要根據具體情況進行調整,找到一個平衡點,既保證信息的完整性,又確保處理的高效。
- 嵌入模型的選擇:嵌入模型將文本轉換為向量,這個過程直接影響檢索效果。選擇一個與應用領域匹配的嵌入模型,并對其進行微調,可以大大提升檢索的相關性和準確性。
除去以上步驟,設計有效的提示詞,引導模型生成準確的回答;通過調整解碼器的溫度等參數,控制輸出的多樣性和質量;對生成器進行微調,使其更好地適應特定任務等手段也可以提升RAG的回答效果。
2.5. RAG框架簡介
在我之前的文章里也寫過RAG框架,為了方便大家理解和比較RAG框架,我做了一個表格匯總(下表的AnythingLLM框架對應文章為: https://blog.csdn.net/c18213590220/article/details/145965374?spm=1001.2014.3001.5502)
框架名稱 | 類別 | 核心特點 | 適用場景 |
LangChain | 傳統 RAG 框架 | 模塊化設計,支持文檔加載、文本拆分、嵌入、檢索全流程 | 靈活構建復雜 LLM 應用(如問答系統、智能體開發) |
Haystack | 傳統 RAG 框架 | 端到端解決方案,支持多語言模型與文檔存儲集成,模塊化架構 | 企業級搜索增強系統、多語言知識庫應用 |
RAGFlow | 企業級 RAG 框架 | 深度文檔理解(OCR/TSR支持),混合檢索(向量+搜索引擎+結構化查詢) | 處理復雜格式文檔的企業知識庫(表格、圖表解析) |
VARAG | 多模態 RAG 框架 | 整合圖像理解能力,基于 LangChain 構建,API 接口友好 | 圖文混合內容處理(教育、研究場景)、初創項目原型 |
R2R | 檢索優化框架 | 迭代式檢索優化,支持多步驟檢索過程與性能分析工具 | 需要高精度檢索的學術研究、復雜查詢場景 |
FlashRAG | 高效檢索框架 | 分布式處理優化,支持百億級數據檢索,內置性能分析工具 | 高并發、大規模數據場景(如實時語義搜索) |
AnythingLLM | 私有化部署框架 | MIT協議支持二次開發,內置企業級權限體系,兼容200+文檔格式 | 數據敏感型企業(法律、制造業)私有知識庫構建 |
Cherry Studio | 輕量級框架 | 零配置桌面端運行,集成30+開源模型,支持離線問答 | 小微團隊快速驗證(創意靈感庫、競品分析) |
Cognita | MLOps 集成框架 | 端到端平臺,內置監控與版本控制,支持模型實驗跟蹤 | 需要全生命周期管理的 AI 應用開發 |
Canopy | 向量檢索優化框架 | 基于 Pinecone 矢量數據庫技術,高擴展性檢索架構 | 需要高效矢量搜索的大規模多模態應用 |
RAGFlow作為本文要講的RAG框架,有以下優點:
- 多樣化的文檔處理能力:RAGFlow支持豐富的文件格式,包括Word、PPT、Excel、PDF等,并針對特定格式提供相應的解析模板,能夠處理復雜格式的文檔,如表格、圖像等。
- 深度文檔理解:內置的DeepDoc組件能夠對用戶的非結構化文檔進行布局檢測,確保文字在保持語義的前提下進行處理,提高了數據處理的準確性和可靠性。
- 混合檢索機制:RAGFlow支持向量檢索、搜索引擎檢索和結構化查詢的混合檢索方式,能夠根據不同場景選擇最優的檢索策略,提升了檢索的精度和效率。
- 高可定制性和可擴展性:RAGFlow提供了靈活的自定義能力,用戶可以根據具體需求定制評分算法、檢索策略等,適應高負載應用場景,滿足不同業務需求。
這些優點使RAGFlow在處理復雜格式文檔、提供高精度檢索和滿足企業級應用需求方面表現出色。
3. 基于RAGFlow本地部署DeepSpeek-R1大模型及知識庫搭建
3.1. Ollama安裝
Ollama安裝在之前的文章已經手把手交過,這里就不在贅述,文章指引:https://blog.csdn.net/c18213590220/article/details/145965374?spm=1001.2014.3001.5502
本文和之前有所不同的一點是需要配置一下OLLAMA_HOST:
配置 OLLAMA_HOST的ip為0.0.0.0的核心目的是突破網絡隔離限制,使運行在 Docker 容器中的 RAGFlow 能夠通過宿主機網絡訪問 Ollama 服務。Ollama 默認綁定在 127.0.0.1(僅限本機訪問),而 Docker 容器與宿主機屬于不同網絡命名空間,無法直接訪問此地址。設置為 0.0.0.0 后,Ollama 會監聽所有網絡接口(包括虛擬網卡),使容器可通過宿主機 IP 或 host.docker.internal域名訪問服務。
3.2. RAGFlow安裝
3.2.1. Docker Desktop安裝配置
安裝 WSL 2(適用于 Windows 10 版本 2004 及以上):
Windows 子系統 Linux 2(WSL 2)提供了一個完整的 Linux 內核,Docker Desktop 依賴于此。win+R打開命令窗口,輸入winver查看系統版本,確保內部版本高于19041:
以管理員身份打開 PowerShell,運行以下命令:
wsl --install
安裝完成后需要重啟一下計算機。
安裝DockerDesktop
安裝 Docker Desktop 之前,確保您已經安裝并啟用了 WSL 2。可以通過在 PowerShell 運行以下命令來檢查:
wsl --list --verbose
下載 Docker Desktop:訪問 Docker 官方網站 https://www.docker.com/products/docker-desktop 下載適用于 Windows 的 Docker Desktop 安裝包。
安裝 Docker Desktop:
- 雙擊下載的安裝文件
Docker Desktop Installer.exe
。 - 按照提示完成安裝過程。
- 安裝完成后,系統可能提示重啟計算機,建議重啟以確保所有組件正常工作。
啟動 Docker Desktop:電腦重啟后,啟動Docker Desktop, 初次啟動可能需要一些時間。
配置一下docker鏡像源地址:
以下鏡像源地址為國內地址,你不想用我的也可以自己找:
"registry-mirrors":["https://hub.rat.dev"]
3.2.2. RAGFlow安裝
RAGFlow的安裝我建議可以直接去github(https://github.com/infiniflow/RAGFlow)上看README_zh.md,教程已經很詳盡,當然你嫌麻煩也可以直接看我的,首先基于git拉取RAGFlow項目:
git clone https://github.com/infiniflow/RAGFlow.git
進入RAGFlow/docker文件夾輸入cmd打開命令提示符窗口:
如需下載不同于 v0.17.2-slim
的 Docker 鏡像,請在運行 docker compose
啟動服務之前先更新 docker/.env 文件內的 RAGFlow_IMAGE
變量。比如,你可以通過設置 RAGFlow_IMAGE=infiniflow/RAGFlow:v0.17.2
來下載 RAGFlow 鏡像的 v0.17.2
完整發行版。這里的版本是我自己的版本,你的版本需要打開.env軟件自己確認。
運行命令:docker compose -f docker-compose.yml up -d安裝RAGFlow,安裝完以后可以使用docker ps看一下容器列表,找到RAGFlow容器id,使用docker logs -f (容器id)查看容器運行情況:
在瀏覽器輸入localhost,能看到以下界面則表明RAGFlow安裝成功了:
注冊賬號后就能登錄至首頁:
點擊頭像后,在側邊導航欄選擇模型提供商,選擇Ollama:
配置chat模型,模型名稱使用ollama list命令獲取(win+R打開命令提示符窗口輸入ollama list):
基礎uri處配置為http://你的ip:11434:
配置embedding模型,基礎uri處配置為http://你的ip:11434:
點擊系統模型設置設置相應模型:
3.2.3. 知識庫搭建
新增知識庫,我這里為了示范新增了一個小肥腸咖啡廳員工管理規范的知識庫,配置知識庫:
在RAGFlow中 提供了兩種主要的文檔解析器:
- Naive解析器:該解析器在處理文檔時,不僅提取文本內容,還將表格數據轉換為HTML格式。然而,在解析復雜表格時,可能會出現錯行或格式偏差的問題。
- DeepDoc解析器:這是RAGFlow的核心組件,利用視覺處理和解析技術,對文檔進行深度理解。它支持OCR(光學字符識別)、布局識別和表格結構識別(TSR),能夠處理多種文檔格式,如PDF、DOCX、Excel和PPT,并提取文本塊、表格和圖像等信息。
總的來說,Naive解析器適用于對解析速度要求較高且文檔格式較簡單的場景,而DeepDoc解析器則更適合處理復雜布局和多種格式的文檔,提供更精確的解析結果。
接下來就是準備知識庫的數據集,數據集越規范查詢效果越好,這里是我造假的一個數據(pdf):
上傳文件:
實時查看解析進度:
解析以后點擊數據集可以查看解析塊:
配置完知識庫之后新建聊天助理測試一下效果:
開始聊天,從下圖中可以看出聊天小助理已經能夠很好地提取知識庫的內容進行回答了:
4. 資料獲取
如果你對DeepSpeek的相關知識還不熟悉,可以關注公眾號后端小肥腸,點擊底部【資源】菜單獲取DeepSpeek相關教程資料。
5. 結語
本文帶領讀者深入了解了RAG(檢索增強生成)技術相關的基本原理,基于保姆級教程一步一步講解了怎么基于RAGFlow本地部署DeepSpeek-R1大模型與知識庫的搭建。隨著AI技術的發展,RAG技術將成為程序員轉型為AI工程師的重要工具。掌握RAG技術不僅能幫助開發更高效的知識庫系統,還能提升模型的準確性和響應能力,為處理知識密集型任務提供強有力的支持。